Author: fredkiefer
Date: Fri May 22 23:14:02 2015
New Revision: 38527

URL: http://svn.gna.org/viewcvs/gnustep?rev=38527&view=rev
Log:
        * Source/gsc/GSGState.m (_fillRect:withPattern:): Add support
        for patternPhase.
        Patch by Josh Freeman <[email protected]>

Modified:
    libs/back/trunk/ChangeLog
    libs/back/trunk/Source/gsc/GSGState.m

Modified: libs/back/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/back/trunk/ChangeLog?rev=38527&r1=38526&r2=38527&view=diff
==============================================================================
--- libs/back/trunk/ChangeLog   (original)
+++ libs/back/trunk/ChangeLog   Fri May 22 23:14:02 2015
@@ -1,3 +1,9 @@
+2015-05-22  Fred Kiefer <[email protected]>
+
+       * Source/gsc/GSGState.m (_fillRect:withPattern:): Add support for
+       patternPhase.
+       Patch by Josh Freeman <[email protected]>
+
 2015-05-18 Riccardo Mottola <[email protected]>
 
        * GNUmakefile.postamble

Modified: libs/back/trunk/Source/gsc/GSGState.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/back/trunk/Source/gsc/GSGState.m?rev=38527&r1=38526&r2=38527&view=diff
==============================================================================
--- libs/back/trunk/Source/gsc/GSGState.m       (original)
+++ libs/back/trunk/Source/gsc/GSGState.m       Fri May 22 23:14:02 2015
@@ -1276,31 +1276,38 @@
 - (void) _fillRect: (NSRect)rect withPattern: (NSImage*)color_pattern
 {
   NSSize size;
-  CGFloat x;
-  CGFloat y;
   NSAffineTransform *ictm;
+  NSPoint patternPhase, startPoint, endPoint, point;
 
   // The coordinates we get here are already in device space,
   // but compositeToPoint needs user space coordinates
   ictm = [ctm copyWithZone: [self zone]];
   [ictm invert];
 
-  size = [pattern size];
-  y = floor(NSMinY(rect) / size.height) * size.height;
-
-    while (y < NSMaxY(rect))
-    {
-      x = floor(NSMinX(rect) / size.width) * size.width;
-      while (x < NSMaxX(rect))
+  size = [color_pattern size];
+  patternPhase = [drawcontext patternPhase];
+
+  if (!NSEqualPoints(patternPhase, NSZeroPoint))
+    {
+      // patternPhase % pattern size
+      patternPhase.x -= floor(patternPhase.x / size.width) * size.width;
+      patternPhase.y -= floor(patternPhase.y / size.height) * size.height;
+    }
+
+  startPoint = NSMakePoint(floor((NSMinX(rect) - patternPhase.x) / size.width) 
* size.width 
+                           + patternPhase.x,
+                           floor((NSMinY(rect) - patternPhase.y) / 
size.height) * size.height
+                           + patternPhase.y);
+
+  endPoint = NSMakePoint(NSMaxX(rect), NSMaxY(rect));
+
+  for (point.y = startPoint.y; point.y < endPoint.y; point.y += size.height)
+    {
+      for (point.x = startPoint.x; point.x < endPoint.x; point.x += size.width)
         {
-          NSPoint p = NSMakePoint(x, y);
-          
-          p = [ictm transformPoint: p];
-         [color_pattern compositeToPoint: p
-                         operation: NSCompositeSourceOver];
-         x += size.width;
+         [color_pattern compositeToPoint: [ictm transformPoint: point]
+                                operation: NSCompositeSourceOver];
         }
-      y += size.height;
     }
   RELEASE(ictm);
 }


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to