diff options
author | Jess VanDerwalker <washu@sonic.net> | 2012-03-10 20:33:15 -0800 |
---|---|---|
committer | Jess VanDerwalker <washu@sonic.net> | 2012-03-10 20:33:15 -0800 |
commit | 66387f61fd4f5ee7ff888f001e99b245b7eb5393 (patch) | |
tree | f5d5c2295f95631372b3cee65bca30a62500652c | |
parent | 726f43b9937c5289ef15e4a96ae6773c5c2802a8 (diff) |
Beginning work on changing how XtoQ gets image for damaged area.
-rw-r--r-- | src/libcompositewm/event_loop.c | 28 | ||||
-rw-r--r-- | src/xtoq/XtoqController.m | 19 | ||||
-rw-r--r-- | src/xtoq/XtoqView.h | 4 | ||||
-rw-r--r-- | src/xtoq/XtoqView.m | 9 |
4 files changed, 36 insertions, 24 deletions
diff --git a/src/libcompositewm/event_loop.c b/src/libcompositewm/event_loop.c index 632aa55..ee20637 100644 --- a/src/libcompositewm/event_loop.c +++ b/src/libcompositewm/event_loop.c @@ -134,14 +134,26 @@ void *run_event_loop (void *thread_arg_struct) rect.y = dmgevnt->area.y; rect.width = dmgevnt->area.width; rect.height = dmgevnt->area.height; - - // printf("dmgevent->area: x=%d y=%d w=%d h=%d dmgevent->geometry x=%d y=%d w=%d h=%d", dmgevnt->area.x, dmgevnt->area.y, dmgevnt->area.width, dmgevnt->area.height, dmgevnt->geometry.x,dmgevnt->geometry.y, dmgevnt->geometry.width, dmgevnt->geometry.height); - - return_evt->context->damaged_x = dmgevnt->area.x; - return_evt->context->damaged_y = dmgevnt->area.y; - return_evt->context->damaged_width = dmgevnt->area.width; - return_evt->context->damaged_height = dmgevnt->area.height; - + + /* Increase the damaged area if new damage is outside the + * area already marked - this should be set back to 0 by 0 + * when area is actually redrawn. This is likely to be + * done in another thread that handles window redraws */ + xtoq_get_event_thread_lock(); + if (return_evt->context->damaged_x > dmgevnt->area.x) { + return_evt->context->damaged_x = dmgevnt->area.x; + } + if (return_evt->context->damaged_y > dmgevnt->area.y) { + return_evt->context->damaged_y = dmgevnt->area.y; + } + if (return_evt->context->damaged_width < dmgevnt->area.width) { + return_evt->context->damaged_width = dmgevnt->area.width; + } + if (return_evt->context->damaged_height = dmgevnt->area.height) { + return_evt->context->damaged_height = dmgevnt->area.height; + } + xtoq_release_event_thread_lock(); + xcb_xfixes_create_region(root_context->conn, region, 1, diff --git a/src/xtoq/XtoqController.m b/src/xtoq/XtoqController.m index d9edbe3..79e30d8 100644 --- a/src/xtoq/XtoqController.m +++ b/src/xtoq/XtoqController.m @@ -470,16 +470,21 @@ - (void) updateImage:(xtoq_context_t *) windowContext { float y_transformed; - //FIXME : rename test_xtoq_get_image to remove "test" - libImageT = test_xtoq_get_image(windowContext); - //NSLog(@"update image new values in - %i, %i, %i, %i", windowContext->damaged_x, windowContext->damaged_y, windowContext->damaged_width, windowContext->damaged_height); + NSRect newDamageRect; + +// libImageT = test_xtoq_get_image(windowContext); y_transformed =( windowContext->height - windowContext->damaged_y - windowContext->damaged_height)/1.0; - imageNew = [[XtoqImageRep alloc] initWithData:libImageT - x:((windowContext->damaged_x)) - y:y_transformed]; +// imageNew = [[XtoqImageRep alloc] initWithData:libImageT +// x:((windowContext->damaged_x)) +// y:y_transformed]; + + newDamageRect = NSMakeRect(windowContext->damaged_x, + y_transformed, + windowContext->damaged_width, + windowContext->damaged_height); XtoqView *localView = (XtoqView *)[(XtoqWindow *)windowContext->local_data contentView]; - [ localView setPartialImage:imageNew]; + [ localView setPartialImage:newDamageRect]; } - (void) windowDidMove:(NSNotification*)notification { diff --git a/src/xtoq/XtoqView.h b/src/xtoq/XtoqView.h index 61ab384..fbb7370 100644 --- a/src/xtoq/XtoqView.h +++ b/src/xtoq/XtoqView.h @@ -72,9 +72,9 @@ SOFTWARE. /** * Set the partial image contents in the view - * @param an XtoqImageRep + * @param newDamageRect The area of the image that needs to be redrawn */ -- (void)setPartialImage:(XtoqImageRep *)newImage; +- (void)setPartialImage:(NSRect)newDamageRect; //- (void)getRectsBeingDrawn:(const NSRect **)rects count:(NSInteger *)count; diff --git a/src/xtoq/XtoqView.m b/src/xtoq/XtoqView.m index 6397fa3..997c96a 100644 --- a/src/xtoq/XtoqView.m +++ b/src/xtoq/XtoqView.m @@ -133,13 +133,8 @@ mouseDown:(NSEvent *)mouseEvent { xtoq_release_event_thread_lock(); } -- (void)setPartialImage:(XtoqImageRep *)newImage{ - xtoq_get_event_thread_lock(); { - image[bufferIndex++] = newImage; - } xtoq_release_event_thread_lock(); - - NSRect imageRec = NSMakeRect([newImage imageX], [newImage imageY], [newImage getWidth] , [newImage getHeight]); - [self setNeedsDisplayInRect:imageRec]; +- (void)setPartialImage:(NSRect)newDamageRect { + [self setNeedsDisplayInRect:newDamageRect]; //[[self window] flushWindow]; } |