summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJess VanDerwalker <washu@sonic.net>2012-03-10 20:33:15 -0800
committerJess VanDerwalker <washu@sonic.net>2012-03-10 20:33:15 -0800
commit66387f61fd4f5ee7ff888f001e99b245b7eb5393 (patch)
treef5d5c2295f95631372b3cee65bca30a62500652c
parent726f43b9937c5289ef15e4a96ae6773c5c2802a8 (diff)
Beginning work on changing how XtoQ gets image for damaged area.
-rw-r--r--src/libcompositewm/event_loop.c28
-rw-r--r--src/xtoq/XtoqController.m19
-rw-r--r--src/xtoq/XtoqView.h4
-rw-r--r--src/xtoq/XtoqView.m9
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];
}