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)