summaryrefslogtreecommitdiff
path: root/src/cairo-quartz-surface.c
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2011-01-07 18:00:37 +0100
committerAndrea Canciani <ranma42@gmail.com>2011-01-19 12:00:58 +0100
commit45da39dda729be4c61c92d30e9373282941000fa (patch)
tree0f3beefa1646ad875404c0237c5b9d050fca521f /src/cairo-quartz-surface.c
parentca9068839bf28f914a5066d7846f4d4b95fee4a2 (diff)
quartz: Avoid using private APIs
CGContextSetCTM() is not part of the public API and can easily be replaced by CGContextConcatCTM()-ing an appropriate matrix.
Diffstat (limited to 'src/cairo-quartz-surface.c')
-rw-r--r--src/cairo-quartz-surface.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/cairo-quartz-surface.c b/src/cairo-quartz-surface.c
index 99095b10..c7a84ab4 100644
--- a/src/cairo-quartz-surface.c
+++ b/src/cairo-quartz-surface.c
@@ -99,7 +99,6 @@ enum PrivateCGCompositeMode {
typedef enum PrivateCGCompositeMode PrivateCGCompositeMode;
CG_EXTERN void CGContextSetCompositeOperation (CGContextRef, PrivateCGCompositeMode);
#endif
-CG_EXTERN void CGContextSetCTM (CGContextRef, CGAffineTransform);
/* Some of these are present in earlier versions of the OS than where
* they are public; other are not public at all
@@ -1863,7 +1862,7 @@ _cairo_quartz_surface_stroke_cg (cairo_quartz_surface_t *surface,
{
cairo_quartz_drawing_state_t state;
cairo_int_status_t rv = CAIRO_STATUS_SUCCESS;
- CGAffineTransform origCTM, strokeTransform;
+ CGAffineTransform strokeTransform, invStrokeTransform;
ND ((stderr, "%p _cairo_quartz_surface_stroke op %d source->type %d\n", surface, op, source->type));
@@ -1883,8 +1882,6 @@ _cairo_quartz_surface_stroke_cg (cairo_quartz_surface_t *surface,
CGContextSetLineJoin (state.cgMaskContext, _cairo_quartz_cairo_line_join_to_quartz (style->line_join));
CGContextSetMiterLimit (state.cgMaskContext, style->miter_limit);
- origCTM = CGContextGetCTM (state.cgMaskContext);
-
if (style->dash && style->num_dashes) {
cairo_quartz_float_t sdash[CAIRO_STACK_ARRAY_LENGTH (cairo_quartz_float_t)];
cairo_quartz_float_t *fdash = sdash;
@@ -1921,7 +1918,9 @@ _cairo_quartz_surface_stroke_cg (cairo_quartz_surface_t *surface,
CGContextReplacePathWithStrokedPath (state.cgMaskContext);
CGContextClip (state.cgMaskContext);
- CGContextSetCTM (state.cgMaskContext, origCTM);
+ _cairo_quartz_cairo_matrix_to_quartz (ctm_inverse, &invStrokeTransform);
+ CGContextConcatCTM (state.cgMaskContext, invStrokeTransform);
+
_cairo_quartz_draw_source (&state, op);
}
@@ -1979,7 +1978,7 @@ _cairo_quartz_surface_show_glyphs_cg (cairo_quartz_surface_t *surface,
cairo_clip_t *clip,
int *remaining_glyphs)
{
- CGAffineTransform textTransform, ctm, invTextTransform;
+ CGAffineTransform textTransform, invTextTransform;
CGGlyph glyphs_static[CAIRO_STACK_ARRAY_LENGTH (CGSize)];
CGSize cg_advances_static[CAIRO_STACK_ARRAY_LENGTH (CGSize)];
CGGlyph *cg_glyphs = &glyphs_static[0];
@@ -2054,11 +2053,17 @@ _cairo_quartz_surface_show_glyphs_cg (cairo_quartz_surface_t *surface,
textTransform = CGAffineTransformMake (scaled_font->scale.xx,
scaled_font->scale.yx,
- -scaled_font->scale.xy,
- -scaled_font->scale.yy,
- 0, 0);
- _cairo_quartz_cairo_matrix_to_quartz (&scaled_font->scale_inverse, &invTextTransform);
+ scaled_font->scale.xy,
+ scaled_font->scale.yy,
+ 0.0, 0.0);
+ invTextTransform = CGAffineTransformMake (scaled_font->scale_inverse.xx,
+ scaled_font->scale_inverse.yx,
+ scaled_font->scale_inverse.xy,
+ scaled_font->scale_inverse.yy,
+ 0.0, 0.0);
+
+ CGContextSetTextPosition (state.cgMaskContext, 0.0, 0.0);
CGContextSetTextMatrix (state.cgMaskContext, CGAffineTransformIdentity);
/* Convert our glyph positions to glyph advances. We need n-1 advances,
@@ -2078,16 +2083,18 @@ _cairo_quartz_surface_show_glyphs_cg (cairo_quartz_surface_t *surface,
}
/* Translate to the first glyph's position before drawing */
- ctm = CGContextGetCTM (state.cgMaskContext);
CGContextTranslateCTM (state.cgMaskContext, glyphs[0].x, glyphs[0].y);
CGContextConcatCTM (state.cgMaskContext, textTransform);
+ CGContextScaleCTM (state.cgMaskContext, 1.0, -1.0);
CGContextShowGlyphsWithAdvances (state.cgMaskContext,
cg_glyphs,
cg_advances,
num_glyphs);
- CGContextSetCTM (state.cgMaskContext, ctm);
+ CGContextScaleCTM (state.cgMaskContext, 1.0, -1.0);
+ CGContextConcatCTM (state.cgMaskContext, invTextTransform);
+ CGContextTranslateCTM (state.cgMaskContext, -glyphs[0].x, -glyphs[0].y);
if (state.action != DO_DIRECT)
_cairo_quartz_draw_source (&state, op);
@@ -2153,7 +2160,7 @@ _cairo_quartz_surface_mask_with_surface (cairo_quartz_surface_t *surface,
CGImageRef img;
cairo_surface_t *pat_surf = mask->surface;
cairo_status_t status = CAIRO_STATUS_SUCCESS;
- CGAffineTransform ctm, mask_matrix;
+ CGAffineTransform mask_matrix;
cairo_quartz_drawing_state_t state;
if (IS_EMPTY (surface))
@@ -2170,21 +2177,20 @@ _cairo_quartz_surface_mask_with_surface (cairo_quartz_surface_t *surface,
if (unlikely (img == NULL))
goto BAIL;
- rect = CGRectMake (0.0f, 0.0f, CGImageGetWidth (img) , CGImageGetHeight (img));
+ rect = CGRectMake (0.0, 0.0, CGImageGetWidth (img), CGImageGetHeight (img));
+ _cairo_quartz_cairo_matrix_to_quartz (&mask->base.matrix, &mask_matrix);
/* ClipToMask is essentially drawing an image, so we need to flip the CTM
* to get the image to appear oriented the right way */
- ctm = CGContextGetCTM (state.cgMaskContext);
+ CGContextConcatCTM (state.cgMaskContext, CGAffineTransformInvert (mask_matrix));
+ CGContextTranslateCTM (state.cgMaskContext, 0.0, rect.size.height);
+ CGContextScaleCTM (state.cgMaskContext, 1.0, -1.0);
- _cairo_quartz_cairo_matrix_to_quartz (&mask->base.matrix, &mask_matrix);
- mask_matrix = CGAffineTransformInvert (mask_matrix);
- mask_matrix = CGAffineTransformTranslate (mask_matrix, 0.0, CGImageGetHeight (img));
- mask_matrix = CGAffineTransformScale (mask_matrix, 1.0, -1.0);
-
- CGContextConcatCTM (state.cgMaskContext, mask_matrix);
CGContextClipToMask (state.cgMaskContext, rect, img);
- CGContextSetCTM (state.cgMaskContext, ctm);
+ CGContextScaleCTM (state.cgMaskContext, 1.0, -1.0);
+ CGContextTranslateCTM (state.cgMaskContext, 0.0, -rect.size.height);
+ CGContextConcatCTM (state.cgMaskContext, mask_matrix);
_cairo_quartz_draw_source (&state, op);