1 /* gnu_java_awt_peer_gtk_CairoGraphics2d.c
2 Copyright (C) 2006 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
40 #include "cairographics2d.h"
41 #include "gnu_java_awt_peer_gtk_CairoGraphics2D.h"
42 #include <gdk/gdktypes.h>
43 #include <gdk/gdkprivate.h>
47 #include <cairo-xlib.h>
52 static void install_font_peer(cairo_t *cr, struct peerfont *pfont);
53 static void update_pattern_transform (struct cairographics2d *gr);
56 * Allocates the cairographics2d structure.
58 JNIEXPORT jlong JNICALL
59 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_init
60 (JNIEnv *env __attribute__ ((unused)),
61 jobject obj __attribute__ ((unused)),
62 jlong cairo_t_pointer)
64 struct cairographics2d *g = NULL;
65 cairo_t *cr = JLONG_TO_PTR(cairo_t, cairo_t_pointer);
68 g = (struct cairographics2d *) g_malloc (sizeof (struct cairographics2d));
71 memset (g, 0, sizeof(struct cairographics2d));
74 return PTR_TO_JLONG(g);
78 * Disposes of the cairographics2d structure.
80 JNIEXPORT void JNICALL
81 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative
82 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
85 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
91 cairo_destroy (gr->cr);
94 cairo_pattern_destroy (gr->pattern);
97 if (gr->pattern_surface)
98 cairo_surface_destroy (gr->pattern_surface);
99 gr->pattern_surface = NULL;
101 if (gr->pattern_pixels)
102 g_free(gr->pattern_pixels);
103 gr->pattern_pixels = NULL;
111 JNIEXPORT void JNICALL
112 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setGradient
113 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
115 jdouble x1, jdouble y1,
116 jdouble x2, jdouble y2,
117 jint r1, jint g1, jint b1, jint a1,
118 jint r2, jint g2, jint b2, jint a2,
121 struct cairographics2d *gr = NULL;
122 cairo_pattern_t* pattern;
123 cairo_extend_t extend;
125 gr = JLONG_TO_PTR(struct cairographics2d, pointer);
126 g_assert( gr != NULL );
128 pattern = cairo_pattern_create_linear(x1, y1, x2, y2);
129 g_assert( pattern != NULL );
131 cairo_pattern_add_color_stop_rgba(pattern, 0.0, r1 / 255.0, g1 / 255.0,
132 b1 / 255.0, a1 / 255.0);
134 cairo_pattern_add_color_stop_rgba(pattern, 1.0, r2 / 255.0, g2 / 255.0,
135 b2 / 255.0, a2 / 255.0);
137 extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_NONE;
139 cairo_pattern_set_extend( pattern, extend );
141 gr->pattern = pattern;
142 cairo_set_source(gr->cr, gr->pattern);
145 JNIEXPORT void JNICALL
146 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setTexturePixels
147 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
148 jlong pointer, jintArray jarr, jint w, jint h, jint stride)
150 struct cairographics2d *gr = NULL;
151 jint *jpixels = NULL;
153 gr = JLONG_TO_PTR(struct cairographics2d, pointer);
154 g_assert (gr != NULL);
157 cairo_pattern_destroy (gr->pattern);
159 if (gr->pattern_surface)
160 cairo_surface_destroy (gr->pattern_surface);
162 if (gr->pattern_pixels)
163 g_free (gr->pattern_pixels);
166 gr->pattern_surface = NULL;
167 gr->pattern_pixels = NULL;
169 gr->pattern_pixels = (char *) g_malloc (h * stride * 4);
170 g_assert (gr->pattern_pixels != NULL);
172 jpixels = (*env)->GetIntArrayElements (env, jarr, NULL);
173 g_assert (jpixels != NULL);
174 memcpy (gr->pattern_pixels, jpixels, h * stride * 4);
175 (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0);
177 gr->pattern_surface = cairo_image_surface_create_for_data ((unsigned char *)gr->pattern_pixels,
180 g_assert (gr->pattern_surface != NULL);
181 gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface);
182 g_assert (gr->pattern != NULL);
183 cairo_pattern_set_extend (gr->pattern, CAIRO_EXTEND_REPEAT);
184 cairo_set_source (gr->cr, gr->pattern);
187 JNIEXPORT void JNICALL
188 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels
189 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
190 jlong pointer, jintArray java_pixels,
191 jint w, jint h, jint stride, jdoubleArray java_matrix, jdouble alpha)
193 jint *native_pixels = NULL;
194 jdouble *native_matrix = NULL;
195 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
196 g_assert (gr != NULL);
198 native_pixels = (*env)->GetIntArrayElements (env, java_pixels, NULL);
199 native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
200 g_assert (native_pixels != NULL);
201 g_assert (native_matrix != NULL);
202 g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
207 cairo_surface_t *surf = cairo_image_surface_create_for_data ((unsigned char *)native_pixels,
210 cairo_matrix_init_identity (&mat);
211 cairo_matrix_init (&mat,
212 native_matrix[0], native_matrix[1],
213 native_matrix[2], native_matrix[3],
214 native_matrix[4], native_matrix[5]);
216 p = cairo_pattern_create_for_surface (surf);
217 cairo_pattern_set_matrix (p, &mat);
219 cairo_pattern_set_filter (p, cairo_pattern_get_filter (gr->pattern));
220 cairo_set_source (gr->cr, p);
222 cairo_paint (gr->cr);
224 cairo_paint_with_alpha(gr->cr, alpha);
226 cairo_pattern_destroy (p);
227 cairo_surface_destroy (surf);
230 (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0);
231 (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
235 JNIEXPORT void JNICALL
236 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetMatrix
237 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
238 jlong pointer, jdoubleArray java_matrix)
240 jdouble *native_matrix = NULL;
241 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
242 g_assert (obj != NULL);
243 g_assert (gr != NULL);
245 native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
246 g_assert (native_matrix != NULL);
247 g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
252 cairo_matrix_init_identity (&mat);
253 cairo_matrix_init (&mat,
254 native_matrix[0], native_matrix[1],
255 native_matrix[2], native_matrix[3],
256 native_matrix[4], native_matrix[5]);
257 g_assert (gr != NULL);
258 cairo_set_matrix (gr->cr, &mat);
261 (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
262 update_pattern_transform (gr);
265 JNIEXPORT void JNICALL
266 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector
267 (JNIEnv *env, jobject obj, jlong pointer,
269 jfloat x, jfloat y, jint n,
270 jintArray java_codes,
271 jfloatArray java_positions)
274 struct cairographics2d *gr = NULL;
275 struct peerfont *pfont = NULL;
276 cairo_glyph_t *glyphs = NULL;
278 float *native_positions;
281 g_assert (obj != NULL);
282 g_assert (java_codes != NULL);
283 g_assert (java_positions != NULL);
285 gr = JLONG_TO_PTR(struct cairographics2d, pointer);
286 g_assert (gr != NULL);
288 pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
289 g_assert (pfont != NULL);
291 install_font_peer(gr->cr, pfont);
293 glyphs = g_malloc( sizeof(cairo_glyph_t) * n);
294 g_assert (glyphs != NULL);
296 native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
297 native_positions = (*env)->GetFloatArrayElements (env, java_positions, NULL);
299 for (i = 0; i < n; ++i)
301 glyphs[i].index = native_codes[i];
302 glyphs[i].x = x + native_positions[ 2*i ];
303 glyphs[i].y = y + native_positions[ 2*i + 1];
306 (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0);
307 (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
309 cairo_show_glyphs (gr->cr, glyphs, n);
315 JNIEXPORT void JNICALL
316 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetOperator
317 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
318 jlong pointer, jint op)
320 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
321 g_assert (gr != NULL);
323 switch ((enum java_awt_alpha_composite_rule) op)
325 case java_awt_alpha_composite_CLEAR:
326 cairo_set_operator (gr->cr, CAIRO_OPERATOR_CLEAR);
329 case java_awt_alpha_composite_SRC:
330 cairo_set_operator (gr->cr, CAIRO_OPERATOR_SOURCE);
333 case java_awt_alpha_composite_SRC_OVER:
334 cairo_set_operator (gr->cr, CAIRO_OPERATOR_OVER);
337 case java_awt_alpha_composite_DST_OVER:
338 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OVER);
341 case java_awt_alpha_composite_SRC_IN:
342 cairo_set_operator (gr->cr, CAIRO_OPERATOR_IN);
345 case java_awt_alpha_composite_DST_IN:
346 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_IN);
349 case java_awt_alpha_composite_SRC_OUT:
350 cairo_set_operator (gr->cr, CAIRO_OPERATOR_OUT);
353 case java_awt_alpha_composite_DST_OUT:
354 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OUT);
357 case java_awt_alpha_composite_DST:
358 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST);
361 case java_awt_alpha_composite_SRC_ATOP:
362 cairo_set_operator (gr->cr, CAIRO_OPERATOR_ATOP);
365 case java_awt_alpha_composite_DST_ATOP:
366 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_ATOP);
369 case java_awt_alpha_composite_XOR:
370 cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR);
375 JNIEXPORT void JNICALL
376 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetRGBAColor
377 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
378 jlong pointer, jdouble r, jdouble g, jdouble b, jdouble a)
380 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
381 g_assert (gr != NULL);
383 cairo_set_source_rgba (gr->cr, r, g, b, a);
386 JNIEXPORT void JNICALL
387 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFillRule
388 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
389 jlong pointer, jint rule)
391 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
392 g_assert (gr != NULL);
394 switch ((enum java_awt_geom_path_iterator_winding_rule) rule)
396 case java_awt_geom_path_iterator_WIND_NON_ZERO:
397 cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_WINDING);
399 case java_awt_geom_path_iterator_WIND_EVEN_ODD:
400 cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD);
406 * Set the line style, except for dashes.
408 JNIEXPORT void JNICALL
409 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetLine
410 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
411 jlong pointer, jdouble width, int cap, int join, double miterLimit)
413 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
414 g_assert (gr != NULL);
417 cairo_set_line_width (gr->cr, width);
420 switch ((enum java_awt_basic_stroke_cap_rule) cap)
422 case java_awt_basic_stroke_CAP_BUTT:
423 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_BUTT);
426 case java_awt_basic_stroke_CAP_ROUND:
427 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_ROUND);
430 case java_awt_basic_stroke_CAP_SQUARE:
431 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
436 switch ((enum java_awt_basic_stroke_join_rule) join)
438 case java_awt_basic_stroke_JOIN_MITER:
439 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_MITER);
442 case java_awt_basic_stroke_JOIN_ROUND:
443 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_ROUND);
446 case java_awt_basic_stroke_JOIN_BEVEL:
447 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
452 cairo_set_miter_limit (gr->cr, miterLimit);
456 * Set the line dashes
458 JNIEXPORT void JNICALL
459 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash
460 (JNIEnv *env, jobject obj __attribute__((unused)),
461 jlong pointer, jdoubleArray dashes, jint ndash, jdouble offset)
463 jdouble *dasharr = NULL;
464 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
465 g_assert (gr != NULL);
467 dasharr = (*env)->GetDoubleArrayElements (env, dashes, NULL);
468 g_assert (dasharr != NULL);
470 cairo_set_dash (gr->cr, dasharr, ndash, offset);
472 (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
475 JNIEXPORT void JNICALL
476 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoNewPath
477 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
480 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
481 g_assert (gr != NULL);
483 cairo_new_path (gr->cr);
486 JNIEXPORT void JNICALL
487 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoMoveTo
488 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
489 jlong pointer, jdouble x, jdouble y)
491 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
492 g_assert (gr != NULL);
494 cairo_move_to (gr->cr, x, y);
497 JNIEXPORT void JNICALL
498 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoLineTo
499 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
500 jlong pointer, jdouble x, jdouble y)
502 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
503 g_assert (gr != NULL);
505 cairo_line_to (gr->cr, x, y);
508 JNIEXPORT void JNICALL
509 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo
510 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
511 jlong pointer, jdouble x1, jdouble y1,
512 jdouble x2, jdouble y2, jdouble x3, jdouble y3)
514 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
515 g_assert (gr != NULL);
516 cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3);
519 JNIEXPORT void JNICALL
520 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo
521 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
522 jlong pointer, jdouble dx, jdouble dy)
524 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
525 g_assert (gr != NULL);
527 cairo_rel_move_to (gr->cr, dx, dy);
530 JNIEXPORT void JNICALL
531 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo
532 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
533 jlong pointer, jdouble dx, jdouble dy)
535 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
536 g_assert (gr != NULL);
538 cairo_rel_line_to (gr->cr, dx, dy);
541 JNIEXPORT void JNICALL
542 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo
543 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
544 jlong pointer, jdouble dx1, jdouble dy1,
545 jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3)
547 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
548 g_assert (gr != NULL);
550 cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3);
553 JNIEXPORT void JNICALL
554 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle
555 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
556 jlong pointer, jdouble x, jdouble y, jdouble width, jdouble height)
558 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
560 cairo_rectangle (gr->cr, x, y, width, height);
563 JNIEXPORT void JNICALL
564 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClosePath
565 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
568 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
569 g_assert (gr != NULL);
571 cairo_close_path (gr->cr);
574 JNIEXPORT void JNICALL
575 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke
576 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
579 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
580 g_assert (gr != NULL);
582 cairo_stroke (gr->cr);
585 JNIEXPORT void JNICALL
586 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill
587 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
588 jlong pointer, jdouble alpha)
590 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
591 g_assert (gr != NULL);
599 cairo_paint_with_alpha(gr->cr, alpha);
600 cairo_restore(gr->cr);
604 JNIEXPORT void JNICALL
605 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip
606 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
609 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
610 g_assert( gr != NULL );
612 cairo_clip( gr->cr );
615 JNIEXPORT void JNICALL
616 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip
617 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
620 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
621 g_assert (gr != NULL);
623 cairo_reset_clip( gr->cr );
626 JNIEXPORT void JNICALL
627 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip
628 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
631 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
632 g_assert (gr != NULL);
634 cairo_clip_preserve( gr->cr );
637 JNIEXPORT void JNICALL
638 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter
639 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
640 jlong pointer, jint filter)
642 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
643 g_assert (gr != NULL);
645 if (gr->pattern == NULL)
648 switch ((enum java_awt_rendering_hints_filter) filter)
650 case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR:
651 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST);
653 case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR:
654 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BILINEAR);
656 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED:
657 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_FAST);
659 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT:
660 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST);
662 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY:
663 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST);
669 /************************** FONT STUFF ****************************/
671 install_font_peer(cairo_t *cr,
672 struct peerfont *pfont)
674 cairo_font_face_t *ft;
677 g_assert(cr != NULL);
678 g_assert(pfont != NULL);
680 if (pfont->graphics_resource == NULL)
682 face = pango_ft2_font_get_face (pfont->font);
683 g_assert (face != NULL);
685 ft = cairo_ft_font_face_create_for_ft_face (face, 0);
686 g_assert (ft != NULL);
688 cairo_set_font_face (cr, ft);
689 cairo_font_face_destroy (ft);
690 cairo_set_font_size (cr,
691 (pango_font_description_get_size (pfont->desc) /
692 (double)PANGO_SCALE));
693 ft = cairo_get_font_face (cr);
694 pfont->graphics_resource = ft;
698 ft = (cairo_font_face_t *) pfont->graphics_resource;
699 cairo_set_font_face (cr, ft);
700 cairo_set_font_size (cr,
701 (pango_font_description_get_size (pfont->desc) /
702 (double)PANGO_SCALE));
707 update_pattern_transform (struct cairographics2d *gr)
711 g_assert (gr != NULL);
712 if (gr->pattern == NULL)
715 cairo_get_matrix (gr->cr, &mat);
716 cairo_pattern_set_matrix (gr->pattern, &mat);