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