src/macosx/native/sun/awt/QuartzRenderer.m

Print this page

        

@@ -48,13 +48,10 @@
 #define BATCHED_POINTS_SIZE 1024
 
 // same value as defined in Sun's own code
 #define XOR_ALPHA_CUTOFF 128
 
-// private Quartz routines needed here
-CG_EXTERN void CGContextSetCTM(CGContextRef ref, CGAffineTransform tx);
-
 
 static CGFloat gRoundRectCtrlpts[10][12] =
 {
     {0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
     {0.0f, 0.0f, 1.0f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},

@@ -535,11 +532,12 @@
     }
 
     makeSureImageIsCreated(isdo);
 
     CGAffineTransform ctm = CGContextGetCTM(cgRef);
-    CGContextConcatCTM(cgRef, CGAffineTransformMake(a, b, c, d, tx, ty));
+    CGAffineTransform newTm = CGAffineTransformMake(a, b, c, d, tx, ty);
+    CGContextConcatCTM(cgRef, newTm);
     jint alphaInfo = isdo->contextInfo.alphaInfo & kCGBitmapAlphaInfoMask;
 
     if ((sx == 0) && (sy == 0) && (sw == w) && (sh == h)) // no subimages allowed here
     {
         CGContextDrawImage(cgRef, CGRectMake(0, 0, dw, dh), isdo->imgRef);

@@ -549,11 +547,12 @@
         CGImageRef subImg = CGImageCreateWithImageInRect(isdo->imgRef, CGRectMake(sx, sy, sw, sh));
         CGContextDrawImage(cgRef, CGRectMake(0.0f, 0.0f, dw, dh), subImg);
         CGImageRelease(subImg);
     }
 
-    CGContextSetCTM(cgRef, ctm);
+    CGAffineTransform inverse = CGAffineTransformInvert(newTm);
+    CGContextConcatCTM(cgRef, inverse);
     UnlockImage(env, isdo);
 }
 
 QUARTZ_RENDERER_INLINE void doImage(JNIEnv *env, QuartzSDOps *qsdo, jobject imageSurfaceData,
                                 jboolean fliph, jboolean flipv, jint w, jint h, jint sx, jint sy, jint sw, jint sh, jint dx, jint dy, jint dw, jint dh)