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 (gr != NULL);
244 native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
245 g_assert (native_matrix != NULL);
246 g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
251 cairo_matrix_init_identity (&mat);
252 cairo_matrix_init (&mat,
253 native_matrix[0], native_matrix[1],
254 native_matrix[2], native_matrix[3],
255 native_matrix[4], native_matrix[5]);
256 g_assert (gr != NULL);
257 cairo_set_matrix (gr->cr, &mat);
260 (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
261 update_pattern_transform (gr);
264 JNIEXPORT void JNICALL
265 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoScale
266 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
267 jlong pointer, jdouble x, jdouble y)
269 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
270 g_assert (gr != NULL);
272 cairo_scale (gr->cr, x, y);
275 JNIEXPORT void JNICALL
276 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector
277 (JNIEnv *env, jobject obj __attribute__((unused)), jlong pointer,
279 jfloat x, jfloat y, jint n,
280 jintArray java_codes,
281 jfloatArray java_positions)
284 struct cairographics2d *gr = NULL;
285 struct peerfont *pfont = NULL;
286 cairo_glyph_t *glyphs = NULL;
288 float *native_positions;
291 g_assert (java_codes != NULL);
292 g_assert (java_positions != NULL);
294 gr = JLONG_TO_PTR(struct cairographics2d, pointer);
295 g_assert (gr != NULL);
297 pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
298 g_assert (pfont != NULL);
300 install_font_peer(gr->cr, pfont);
302 glyphs = g_malloc( sizeof(cairo_glyph_t) * n);
303 g_assert (glyphs != NULL);
305 native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
306 native_positions = (*env)->GetFloatArrayElements (env, java_positions, NULL);
308 for (i = 0; i < n; ++i)
310 glyphs[i].index = native_codes[i];
311 glyphs[i].x = x + native_positions[ 2*i ];
312 glyphs[i].y = y + native_positions[ 2*i + 1];
315 (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0);
316 (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
318 pango_fc_font_lock_face( (PangoFcFont *)pfont->font );
319 cairo_show_glyphs (gr->cr, glyphs, n);
320 pango_fc_font_unlock_face( (PangoFcFont *)pfont->font );
326 JNIEXPORT void JNICALL
327 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetOperator
328 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
329 jlong pointer, jint op)
331 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
332 g_assert (gr != NULL);
334 switch ((enum java_awt_alpha_composite_rule) op)
336 case java_awt_alpha_composite_CLEAR:
337 cairo_set_operator (gr->cr, CAIRO_OPERATOR_CLEAR);
340 case java_awt_alpha_composite_SRC:
341 cairo_set_operator (gr->cr, CAIRO_OPERATOR_SOURCE);
344 case java_awt_alpha_composite_SRC_OVER:
345 cairo_set_operator (gr->cr, CAIRO_OPERATOR_OVER);
348 case java_awt_alpha_composite_DST_OVER:
349 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OVER);
352 case java_awt_alpha_composite_SRC_IN:
353 cairo_set_operator (gr->cr, CAIRO_OPERATOR_IN);
356 case java_awt_alpha_composite_DST_IN:
357 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_IN);
360 case java_awt_alpha_composite_SRC_OUT:
361 cairo_set_operator (gr->cr, CAIRO_OPERATOR_OUT);
364 case java_awt_alpha_composite_DST_OUT:
365 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OUT);
368 case java_awt_alpha_composite_DST:
369 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST);
372 case java_awt_alpha_composite_SRC_ATOP:
373 cairo_set_operator (gr->cr, CAIRO_OPERATOR_ATOP);
376 case java_awt_alpha_composite_DST_ATOP:
377 cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_ATOP);
380 case java_awt_alpha_composite_XOR:
381 cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR);
386 JNIEXPORT void JNICALL
387 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetRGBAColor
388 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
389 jlong pointer, jdouble r, jdouble g, jdouble b, jdouble a)
391 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
392 g_assert (gr != NULL);
394 cairo_set_source_rgba (gr->cr, r, g, b, a);
397 JNIEXPORT void JNICALL
398 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFillRule
399 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
400 jlong pointer, jint rule)
402 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
403 g_assert (gr != NULL);
405 switch ((enum java_awt_geom_path_iterator_winding_rule) rule)
407 case java_awt_geom_path_iterator_WIND_NON_ZERO:
408 cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_WINDING);
410 case java_awt_geom_path_iterator_WIND_EVEN_ODD:
411 cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD);
417 * Set the line style, except for dashes.
419 JNIEXPORT void JNICALL
420 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetLine
421 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
422 jlong pointer, jdouble width, int cap, int join, double miterLimit)
424 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
425 g_assert (gr != NULL);
428 cairo_set_line_width (gr->cr, width);
431 switch ((enum java_awt_basic_stroke_cap_rule) cap)
433 case java_awt_basic_stroke_CAP_BUTT:
434 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_BUTT);
437 case java_awt_basic_stroke_CAP_ROUND:
438 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_ROUND);
441 case java_awt_basic_stroke_CAP_SQUARE:
442 cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
447 switch ((enum java_awt_basic_stroke_join_rule) join)
449 case java_awt_basic_stroke_JOIN_MITER:
450 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_MITER);
453 case java_awt_basic_stroke_JOIN_ROUND:
454 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_ROUND);
457 case java_awt_basic_stroke_JOIN_BEVEL:
458 cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
463 cairo_set_miter_limit (gr->cr, miterLimit);
467 * Set the line dashes
469 JNIEXPORT void JNICALL
470 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash
471 (JNIEnv *env, jobject obj __attribute__((unused)),
472 jlong pointer, jdoubleArray dashes, jint ndash, jdouble offset)
474 jdouble *dasharr = NULL;
475 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
476 g_assert (gr != NULL);
478 dasharr = (*env)->GetDoubleArrayElements (env, dashes, NULL);
479 g_assert (dasharr != NULL);
481 cairo_set_dash (gr->cr, dasharr, ndash, offset);
483 (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
486 JNIEXPORT void JNICALL
487 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSave
488 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
491 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
492 g_assert (gr != NULL);
497 JNIEXPORT void JNICALL
498 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRestore
499 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
502 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
503 g_assert (gr != NULL);
505 cairo_restore (gr->cr);
508 JNIEXPORT void JNICALL
509 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoNewPath
510 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
513 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
514 g_assert (gr != NULL);
516 cairo_new_path (gr->cr);
519 JNIEXPORT void JNICALL
520 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoMoveTo
521 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
522 jlong pointer, jdouble x, jdouble y)
524 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
525 g_assert (gr != NULL);
527 cairo_move_to (gr->cr, x, y);
530 JNIEXPORT void JNICALL
531 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoLineTo
532 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
533 jlong pointer, jdouble x, jdouble y)
535 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
536 g_assert (gr != NULL);
538 cairo_line_to (gr->cr, x, y);
541 JNIEXPORT void JNICALL
542 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo
543 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
544 jlong pointer, jdouble x1, jdouble y1,
545 jdouble x2, jdouble y2, jdouble x3, jdouble y3)
547 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
548 g_assert (gr != NULL);
549 cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3);
552 JNIEXPORT void JNICALL
553 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo
554 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
555 jlong pointer, jdouble dx, jdouble dy)
557 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
558 g_assert (gr != NULL);
560 cairo_rel_move_to (gr->cr, dx, dy);
563 JNIEXPORT void JNICALL
564 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo
565 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
566 jlong pointer, jdouble dx, jdouble dy)
568 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
569 g_assert (gr != NULL);
571 cairo_rel_line_to (gr->cr, dx, dy);
574 JNIEXPORT void JNICALL
575 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo
576 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
577 jlong pointer, jdouble dx1, jdouble dy1,
578 jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3)
580 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
581 g_assert (gr != NULL);
583 cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3);
586 JNIEXPORT void JNICALL
587 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle
588 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
589 jlong pointer, jdouble x, jdouble y, jdouble width, jdouble height)
591 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
593 cairo_rectangle (gr->cr, x, y, width, height);
596 JNIEXPORT void JNICALL
597 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoArc
598 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
599 jlong pointer, jdouble x, jdouble y, jdouble radius, jdouble angle1,
602 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
604 cairo_arc (gr->cr, x, y, radius, angle1, angle2);
607 JNIEXPORT void JNICALL
608 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClosePath
609 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
612 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
613 g_assert (gr != NULL);
615 cairo_close_path (gr->cr);
618 JNIEXPORT void JNICALL
619 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke
620 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
623 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
624 g_assert (gr != NULL);
626 cairo_stroke (gr->cr);
629 JNIEXPORT void JNICALL
630 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill
631 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
632 jlong pointer, jdouble alpha)
634 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
635 g_assert (gr != NULL);
643 cairo_paint_with_alpha(gr->cr, alpha);
644 cairo_restore(gr->cr);
648 JNIEXPORT void JNICALL
649 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip
650 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
653 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
654 g_assert( gr != NULL );
656 cairo_clip( gr->cr );
659 JNIEXPORT void JNICALL
660 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip
661 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
664 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
665 g_assert (gr != NULL);
667 cairo_reset_clip( gr->cr );
670 JNIEXPORT void JNICALL
671 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip
672 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
675 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
676 g_assert (gr != NULL);
678 cairo_clip_preserve( gr->cr );
681 JNIEXPORT void JNICALL
682 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter
683 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
684 jlong pointer, jint filter)
686 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
687 g_assert (gr != NULL);
689 if (gr->pattern == NULL)
692 switch ((enum java_awt_rendering_hints_filter) filter)
694 case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR:
695 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST);
697 case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR:
698 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BILINEAR);
700 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED:
701 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_FAST);
703 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT:
704 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST);
706 case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY:
707 cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST);
712 JNIEXPORT void JNICALL
713 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine
714 (JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
715 jlong pointer, jdouble x1, jdouble y1, jdouble x2, jdouble y2)
717 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
718 g_assert (gr != NULL);
720 cairo_new_path(gr->cr);
721 cairo_move_to(gr->cr, x1, y1);
722 cairo_line_to(gr->cr, x2, y2);
723 cairo_stroke(gr->cr);
726 JNIEXPORT void JNICALL
727 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect
728 (JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
729 jlong pointer, jdouble x, jdouble y, jdouble w, jdouble h)
731 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
732 g_assert (gr != NULL);
734 cairo_new_path(gr->cr);
735 cairo_rectangle(gr->cr, x, y, w, h);
736 cairo_stroke(gr->cr);
739 JNIEXPORT void JNICALL
740 Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect
741 (JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
742 jlong pointer, jdouble x, jdouble y, jdouble w, jdouble h)
744 struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
745 g_assert (gr != NULL);
747 cairo_new_path(gr->cr);
748 cairo_rectangle(gr->cr, x, y, w, h);
753 /************************** FONT STUFF ****************************/
755 install_font_peer(cairo_t *cr,
756 struct peerfont *pfont)
758 cairo_font_face_t *ft;
761 g_assert(cr != NULL);
762 g_assert(pfont != NULL);
764 if (pfont->graphics_resource == NULL)
766 face = pango_fc_font_lock_face( (PangoFcFont *)pfont->font );
767 g_assert (face != NULL);
769 ft = cairo_ft_font_face_create_for_ft_face (face, 0);
770 g_assert (ft != NULL);
772 cairo_set_font_face (cr, ft);
773 /* cairo_font_face_destroy (ft);*/
774 cairo_set_font_size (cr,
775 (pango_font_description_get_size (pfont->desc) /
776 (double)PANGO_SCALE));
777 ft = cairo_get_font_face (cr);
778 pango_fc_font_unlock_face( (PangoFcFont *)pfont->font );
779 pfont->graphics_resource = ft;
783 ft = (cairo_font_face_t *) pfont->graphics_resource;
784 cairo_set_font_face (cr, ft);
785 cairo_set_font_size (cr,
786 (pango_font_description_get_size (pfont->desc) /
787 (double)PANGO_SCALE));
792 update_pattern_transform (struct cairographics2d *gr)
796 g_assert (gr != NULL);
797 if (gr->pattern == NULL)
800 cairo_get_matrix (gr->cr, &mat);
801 cairo_pattern_set_matrix (gr->pattern, &mat);