[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #27782] drawInRect:fromRect:operation:fraction: doesn't work correc
From: |
Quentin Mathé |
Subject: |
[bug #27782] drawInRect:fromRect:operation:fraction: doesn't work correctly in a flipped view |
Date: |
Fri, 23 Oct 2009 21:17:14 +0000 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11 |
Follow-up Comment #2, bug #27782 (project gnustep):
Hi Fred,
>From what I recall my patch had some rough edges. e.g. I overlooked the fact
you need to call _rebuildCoordinates each time -isFlipped returns a different
value.
When I tried to figure out a fix for the drawInRect bug, I found that
drawInRect behaves correctly if you comment out all the flipping related code
in the cairo backend. However it breaks compositeToPoint. I have attached the
patch so you can take a look.
I rewrote compositeToPoint to alter the CTM directly. To do so, I disabled
the first part of the code where the cache is created and only modified the
'else' branch where drawRepresentation:inRect: is invoked but it doesn't work
(the image location is shifted upwards outside of the view). Here is what I
tried to do:
NSAffineTransform *transform = [GSCurrentContext() GSCurrentCTM];
NSAffineTransformStruct oldTs = [transform transformStruct];
NSAffineTransformStruct newTs = [transform transformStruct];
/* Put identity matrix 2x2 in the CTM to suppress scaling and rotation
but keep translation as is */
newTs.m11 = 1;
newTs.m12 = 0;
newTs.m21 = 0;
newTs.m22 = 1;
[transform setTransformStruct: newTs];
[GSCurrentContext() GSSetCTM: transform];
rect = NSMakeRect(aPoint.x, aPoint.y, _size.width, _size.height);
[self drawRepresentation: rep inRect: rect];
[transform setTransformStruct: oldTs];
[GSCurrentContext() GSSetCTM: transform];
The Cocoa documentation leads me to think that compositeToPoint and similar
methods should probably do something like that.
It seems there is also some copied/pasted code in NSImage.m that could be
eliminated. e.g. drawAtPoint should just call drawInRect. Ditto for
compositeToPoint methods.
(file #18936)
_______________________________________________________
Additional Item Attachment:
File name: disable-flipped-cairo.patch Size:0 KB
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?27782>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/