bug-gnustep
[Top][All Lists]
Advanced

[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/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]