From 234ac0932b356a44e4400eec733cd7e8db6490cd Mon Sep 17 00:00:00 2001 From: Fred Kiefer Date: Sat, 18 Feb 2012 21:10:07 +0000 Subject: [PATCH] Replace NSCompositeHighlight with GSCompositeHighlight and map NSCompositeHighlight onto NSCompositeSourceOver. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@34773 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 11 +++++++++++ Source/art/composite.m | 9 +++++++-- Source/cairo/CairoGState.m | 20 +++++++++++++++----- Source/winlib/WIN32GState.m | 5 ++++- Source/xdps/NSDPSContextOps.m | 3 ++- Source/xlib/XGGState.m | 6 ++++-- 6 files changed, 43 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index ccdc39d..b6c1685 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2012-02-18 Fred Kiefer + + * Source/winlib/WIN32GState.m + * Source/art/composite.m + * Source/xlib/XGGState.m + * Source/xdps/NSDPSContextOps.m: Replace NSCompositeHighlight with + GSCompositeHighlight and map NSCompositeHighlight onto + NSCompositeSourceOver. + * Source/cairo/CairoGState.m (-compositerect:op:): Implement + GSCompositeHighlight with the difference operator. + 2012-02-09 Richard Frith-Macdonald * Tools/gbps.m: Add lots of debug information (have objects describe diff --git a/Source/art/composite.m b/Source/art/composite.m index e3448b2..b85d663 100644 --- a/Source/art/composite.m +++ b/Source/art/composite.m @@ -67,6 +67,7 @@ if necessary. Returns new operation, or -1 it it's a noop. */ case NSCompositeDestinationOver: case NSCompositeDestinationOut: case NSCompositeXOR: + case NSCompositeHighlight: case NSCompositePlusLighter: return -1; /* noop */ } @@ -79,6 +80,7 @@ if necessary. Returns new operation, or -1 it it's a noop. */ case NSCompositeSourceOver: case NSCompositeSourceIn: case NSCompositeSourceAtop: + case NSCompositeHighlight: return NSCompositeCopy; case NSCompositeSourceOut: @@ -104,6 +106,7 @@ if necessary. Returns new operation, or -1 it it's a noop. */ switch (op) { case NSCompositeSourceOver: + case NSCompositeHighlight: return NSCompositeCopy; case NSCompositeSourceIn: @@ -145,6 +148,7 @@ if necessary. Returns new operation, or -1 it it's a noop. */ case NSCompositeSourceOver: case NSCompositeSourceAtop: + case NSCompositeHighlight: blit_func = DI.composite_sover_ao; break; @@ -178,6 +182,7 @@ if necessary. Returns new operation, or -1 it it's a noop. */ switch (op) { case NSCompositeSourceOver: + case NSCompositeHighlight: blit_func = DI.composite_sover_aa; break; case NSCompositeSourceIn: @@ -475,7 +480,7 @@ static BOOL _rect_advance(rect_trace_t *t, int *x0, int *x1) /* these ignore the source window, so we send them off to compositerect: op: */ - if (op == NSCompositeClear || op == NSCompositeHighlight) + if (op == NSCompositeClear || op == GSCompositeHighlight) { [self compositerect: NSMakeRect(aPoint.x, aPoint.y, aRect.size.width, aRect.size.height) @@ -1406,7 +1411,7 @@ static BOOL _rect_advance(rect_trace_t *t, int *x0, int *x1) memset(dst_alpha, 0, n); ) } - else if (op == NSCompositeHighlight) + else if (op == GSCompositeHighlight) { DO_STUFF( { diff --git a/Source/cairo/CairoGState.m b/Source/cairo/CairoGState.m index 28b473f..bdb807f 100644 --- a/Source/cairo/CairoGState.m +++ b/Source/cairo/CairoGState.m @@ -1188,12 +1188,22 @@ _set_op(cairo_t *ct, NSCompositingOperation op) device_color_t c; cairo_save(_ct); - _set_op(_ct, op); - c = fillColor; - gsColorToRGB(&c); - // The underlying concept does not allow to determine if alpha is set or not. - cairo_set_source_rgba(_ct, c.field[0], c.field[1], c.field[2], c.field[AINDEX]); + if (GSCompositeHighlight == op) + { + cairo_set_operator(_ct, CAIRO_OPERATOR_DIFFERENCE); + cairo_set_source_rgb(_ct, 1, 1, 1); + } + else + { + _set_op(_ct, op); + + c = fillColor; + gsColorToRGB(&c); + // The underlying concept does not allow to determine if alpha is set or not. + cairo_set_source_rgba(_ct, c.field[0], c.field[1], c.field[2], c.field[AINDEX]); + } + // This is almost a rectclip::::, but the path stays unchanged. path = [NSBezierPath bezierPathWithRect: aRect]; [path transformUsingAffineTransform: ctm]; diff --git a/Source/winlib/WIN32GState.m b/Source/winlib/WIN32GState.m index 9921326..55f8696 100644 --- a/Source/winlib/WIN32GState.m +++ b/Source/winlib/WIN32GState.m @@ -363,6 +363,7 @@ BOOL alpha_blend_source_over(HDC destDC, switch (op) { case NSCompositeSourceOver: + case NSCompositeHighlight: { success = alpha_blend_source_over(hDC, sourceDC, @@ -420,7 +421,7 @@ BOOL alpha_blend_source_over(HDC destDC, { case NSCompositeClear: break; - case NSCompositeHighlight: + case GSCompositeHighlight: { HDC hDC; RECT rect = GSViewRectToWin(self, aRect); @@ -438,6 +439,7 @@ BOOL alpha_blend_source_over(HDC destDC, case NSCompositeCopy: // FIXME case NSCompositeSourceOver: + case NSCompositeHighlight: case NSCompositeSourceIn: case NSCompositeSourceOut: case NSCompositeSourceAtop: @@ -525,6 +527,7 @@ BOOL alpha_blend_source_over(HDC destDC, switch (op) { case NSCompositeSourceOver: + case NSCompositeHighlight: { success = alpha_blend_source_over(hDC, sourceDC, diff --git a/Source/xdps/NSDPSContextOps.m b/Source/xdps/NSDPSContextOps.m index 7e27604..5cc06a7 100644 --- a/Source/xdps/NSDPSContextOps.m +++ b/Source/xdps/NSDPSContextOps.m @@ -1144,6 +1144,7 @@ gcv.function = GXcopy; break; case NSCompositeSourceOver: + case NSCompositeHighlight: gcv.function = GXcopy; break; case NSCompositeSourceIn: @@ -1173,7 +1174,7 @@ case NSCompositePlusDarker: gcv.function = GXcopy; break; - case NSCompositeHighlight: + case GSCompositeHighlight: gcv.function = GXxor; break; case NSCompositePlusLighter: diff --git a/Source/xlib/XGGState.m b/Source/xlib/XGGState.m index d547fba..9b7fac6 100644 --- a/Source/xlib/XGGState.m +++ b/Source/xlib/XGGState.m @@ -674,6 +674,7 @@ static Region emptyRegion; comp_gcv.function = GXcopy; break; case NSCompositeSourceOver: + case NSCompositeHighlight: CHECK_ALPHA; if (source_alpha == NO) do_copy = YES; @@ -737,7 +738,7 @@ static Region emptyRegion; do_copy = NO; comp_gcv.function = GXcopy; break; - case NSCompositeHighlight: + case GSCompositeHighlight: do_copy = NO; comp_gcv.function = GXxor; break; @@ -798,6 +799,7 @@ static Region emptyRegion; gcv.function = GXcopy; break; case NSCompositeSourceOver: + case NSCompositeHighlight: gcv.function = GXcopy; break; case NSCompositeSourceIn: @@ -827,7 +829,7 @@ static Region emptyRegion; case NSCompositePlusDarker: gcv.function = GXcopy; break; - case NSCompositeHighlight: + case GSCompositeHighlight: gcv.function = GXxor; break; case NSCompositePlusLighter: