OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [native/] [jni/] [gtk-peer/] [gnu_java_awt_peer_gtk_CairoGraphics2D.c] - Blame information for rev 774

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 774 jeremybenn
/* gnu_java_awt_peer_gtk_CairoGraphics2d.c
2
   Copyright (C) 2006, 2008  Free Software Foundation, Inc.
3
 
4
This file is part of GNU Classpath.
5
 
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)
9
any later version.
10
 
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.
15
 
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
19
02110-1301 USA.
20
 
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
24
combination.
25
 
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. */
37
 
38
#include "jcl.h"
39
#include "gdkfont.h"
40
#include "cairographics2d.h"
41
#include "gnu_java_awt_peer_gtk_CairoGraphics2D.h"
42
#include <gdk/gdktypes.h>
43
#include <gdk/gdkprivate.h>
44
 
45
#include <cairo-ft.h>
46
 
47
#include <stdio.h>
48
#include <stdlib.h>
49
 
50
static void update_pattern_transform (struct cairographics2d *gr);
51
 
52
/**
53
 * Allocates the cairographics2d structure.
54
 */
55
JNIEXPORT jlong JNICALL
56
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_init
57
  (JNIEnv *env __attribute__ ((unused)),
58
   jobject obj __attribute__ ((unused)),
59
   jlong cairo_t_pointer)
60
{
61
  struct cairographics2d *g = NULL;
62
  cairo_t *cr = JLONG_TO_PTR(cairo_t, cairo_t_pointer);
63
  g_assert(cr != NULL);
64
 
65
  g = (struct cairographics2d *) g_malloc (sizeof (struct cairographics2d));
66
 
67
  g_assert (g != NULL);
68
  memset (g, 0, sizeof(struct cairographics2d));
69
  g->cr = cr;
70
 
71
  return PTR_TO_JLONG(g);
72
}
73
 
74
/**
75
 * Disposes of the cairographics2d structure.
76
 */
77
JNIEXPORT void JNICALL
78
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative
79
  (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
80
  jlong pointer)
81
{
82
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
83
 
84
  if (gr == NULL)
85
    return;
86
 
87
  if (gr->cr)
88
    {
89
      gdk_threads_enter();
90
      cairo_destroy (gr->cr);
91
      gdk_threads_leave();
92
    }
93
 
94
  if (gr->pattern)
95
    cairo_pattern_destroy (gr->pattern);
96
  gr->pattern = NULL;
97
 
98
  if (gr->pattern_surface)
99
    cairo_surface_destroy (gr->pattern_surface);
100
  gr->pattern_surface = NULL;
101
 
102
  if (gr->pattern_pixels)
103
    g_free(gr->pattern_pixels);
104
  gr->pattern_pixels = NULL;
105
 
106
  g_free( gr );
107
}
108
 
109
/**
110
 * Set the gradient.
111
 */
112
JNIEXPORT void JNICALL
113
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setGradient
114
  (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
115
   jlong pointer,
116
   jdouble x1, jdouble y1,
117
   jdouble x2, jdouble y2,
118
   jint r1, jint g1, jint b1, jint a1,
119
   jint r2, jint g2, jint b2, jint a2,
120
   jboolean cyclic)
121
{
122
  struct cairographics2d *gr = NULL;
123
  cairo_pattern_t* pattern;
124
  cairo_extend_t extend;
125
 
126
  gr = JLONG_TO_PTR(struct cairographics2d, pointer);
127
  g_assert( gr != NULL );
128
 
129
  pattern = cairo_pattern_create_linear(x1, y1, x2, y2);
130
  g_assert( pattern != NULL );
131
 
132
  cairo_pattern_add_color_stop_rgba(pattern, 0.0, r1 / 255.0, g1 / 255.0,
133
                                    b1 / 255.0, a1 / 255.0);
134
 
135
  cairo_pattern_add_color_stop_rgba(pattern, 1.0, r2 / 255.0, g2 / 255.0,
136
                                    b2 / 255.0, a2 / 255.0);
137
 
138
  #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 2, 0)
139
        extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_PAD;
140
  #else
141
        extend = (cyclic == JNI_TRUE) ? CAIRO_EXTEND_REFLECT : CAIRO_EXTEND_NONE;
142
  #endif
143
 
144
  cairo_pattern_set_extend( pattern, extend );
145
 
146
  gr->pattern = pattern;
147
  cairo_set_source(gr->cr, gr->pattern);
148
}
149
 
150
JNIEXPORT void JNICALL
151
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_setPaintPixels
152
 (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
153
  jlong pointer, jintArray jarr, jint w, jint h, jint stride, jboolean repeat,
154
  jint x, jint y)
155
{
156
  struct cairographics2d *gr = NULL;
157
  jint *jpixels = NULL;
158
 
159
  gr = JLONG_TO_PTR(struct cairographics2d, pointer);
160
  g_assert (gr != NULL);
161
 
162
  if (gr->pattern)
163
    cairo_pattern_destroy (gr->pattern);
164
 
165
  if (gr->pattern_surface)
166
    cairo_surface_destroy (gr->pattern_surface);
167
 
168
  if (gr->pattern_pixels)
169
    g_free (gr->pattern_pixels);
170
 
171
  gr->pattern = NULL;
172
  gr->pattern_surface = NULL;
173
  gr->pattern_pixels = NULL;
174
 
175
  gr->pattern_pixels = (char *) g_malloc (h * stride * 4);
176
  g_assert (gr->pattern_pixels != NULL);
177
 
178
  jpixels = (*env)->GetIntArrayElements (env, jarr, NULL);
179
  g_assert (jpixels != NULL);
180
  memcpy (gr->pattern_pixels, jpixels, h * stride * 4);
181
  (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0);
182
 
183
  gr->pattern_surface = cairo_image_surface_create_for_data ((unsigned char *)gr->pattern_pixels,
184
                                                        CAIRO_FORMAT_ARGB32,
185
                                                        w, h, stride * 4);
186
  g_assert (gr->pattern_surface != NULL);
187
  gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface);
188
  g_assert (gr->pattern != NULL);
189
 
190
  cairo_set_source_surface(gr->cr, gr->pattern_surface, x, y);
191
 
192
  if (repeat)
193
        cairo_pattern_set_extend(cairo_get_source(gr->cr), CAIRO_EXTEND_REPEAT);
194
  else
195
        cairo_pattern_set_extend(cairo_get_source(gr->cr), CAIRO_EXTEND_NONE);
196
}
197
 
198
JNIEXPORT void JNICALL
199
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels
200
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
201
 jlong pointer, jintArray java_pixels,
202
 jint w, jint h, jint stride, jdoubleArray java_matrix, jdouble alpha,
203
 jint interpolation)
204
{
205
  jint *native_pixels = NULL;
206
  jdouble *native_matrix = NULL;
207
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
208
  g_assert (gr != NULL);
209
 
210
  native_pixels = (*env)->GetIntArrayElements (env, java_pixels, NULL);
211
  native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
212
  g_assert (native_pixels != NULL);
213
  g_assert (native_matrix != NULL);
214
  g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
215
 
216
 {
217
   cairo_matrix_t mat;
218
   cairo_pattern_t *p;
219
   cairo_surface_t *surf = cairo_image_surface_create_for_data ((unsigned char *)native_pixels,
220
                                                           CAIRO_FORMAT_ARGB32,
221
                                                           w, h, stride * 4);
222
   cairo_matrix_init_identity (&mat);
223
   cairo_matrix_init (&mat,
224
                      native_matrix[0], native_matrix[1],
225
                      native_matrix[2], native_matrix[3],
226
                      native_matrix[4], native_matrix[5]);
227
 
228
   p = cairo_pattern_create_for_surface (surf);
229
   cairo_pattern_set_matrix (p, &mat);
230
   switch ((enum java_awt_rendering_hints_filter) interpolation)
231
     {
232
     case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR:
233
       cairo_pattern_set_filter (p, CAIRO_FILTER_NEAREST);
234
       break;
235
     case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR:
236
       cairo_pattern_set_filter (p, CAIRO_FILTER_BILINEAR);
237
       break;
238
     case java_awt_rendering_hints_VALUE_INTERPOLATION_BICUBIC:
239
       cairo_pattern_set_filter (p, CAIRO_FILTER_GAUSSIAN);
240
       break;
241
     case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED:
242
       cairo_pattern_set_filter (p, CAIRO_FILTER_FAST);
243
       break;
244
     case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT:
245
       cairo_pattern_set_filter (p, CAIRO_FILTER_NEAREST);
246
       break;
247
     case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY:
248
       cairo_pattern_set_filter (p, CAIRO_FILTER_BEST);
249
       break;
250
     }
251
 
252
   cairo_set_source (gr->cr, p);
253
   if (alpha == 1.)
254
     cairo_paint (gr->cr);
255
   else
256
     cairo_paint_with_alpha(gr->cr, alpha);
257
 
258
   cairo_pattern_destroy (p);
259
   cairo_surface_destroy (surf);
260
 }
261
 
262
 (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0);
263
 (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
264
}
265
 
266
 
267
JNIEXPORT void JNICALL
268
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetMatrix
269
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
270
 jlong pointer, jdoubleArray java_matrix)
271
{
272
  jdouble *native_matrix = NULL;
273
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
274
  g_assert (gr != NULL);
275
 
276
  native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
277
  g_assert (native_matrix != NULL);
278
  g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
279
 
280
  {
281
    cairo_matrix_t mat;
282
 
283
    cairo_matrix_init_identity (&mat);
284
    cairo_matrix_init (&mat,
285
                       native_matrix[0], native_matrix[1],
286
                       native_matrix[2], native_matrix[3],
287
                       native_matrix[4], native_matrix[5]);
288
    g_assert (gr != NULL);
289
    cairo_set_matrix (gr->cr, &mat);
290
  }
291
 
292
  (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
293
  update_pattern_transform (gr);
294
}
295
 
296
JNIEXPORT void JNICALL
297
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoScale
298
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
299
 jlong pointer, jdouble x, jdouble y)
300
{
301
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
302
  g_assert (gr != NULL);
303
 
304
  cairo_scale (gr->cr, x, y);
305
}
306
 
307
JNIEXPORT void JNICALL
308
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector
309
(JNIEnv *env, jobject obj __attribute__((unused)), jlong pointer,
310
 jobject font,
311
 jfloat x, jfloat y, jint n,
312
 jintArray java_codes,
313
 jfloatArray java_positions, jlongArray java_fontset)
314
{
315
  struct cairographics2d *gr = NULL;
316
  struct peerfont *pfont = NULL;
317
  cairo_glyph_t *glyphs = NULL;
318
  int *native_codes;
319
  float *native_positions;
320
  jint i = 0;
321
 
322
  g_assert (java_codes != NULL);
323
  g_assert (java_positions != NULL);
324
 
325
  gr = JLONG_TO_PTR(struct cairographics2d, pointer);
326
  g_assert (gr != NULL);
327
 
328
  pfont = (struct peerfont *) gtkpeer_get_font(env, font);
329
  g_assert (pfont != NULL);
330
 
331
  glyphs = g_malloc( sizeof(cairo_glyph_t) * n);
332
  g_assert (glyphs != NULL);
333
 
334
  native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
335
  native_positions = (*env)->GetFloatArrayElements (env, java_positions, NULL);
336
 
337
  /* Set up glyphs and layout */
338
  for (i = 0; i < n; ++i)
339
    {
340
      glyphs[i].index = native_codes[i];
341
      glyphs[i].x = x + native_positions[ 2*i ];
342
      glyphs[i].y = y + native_positions[ 2*i + 1];
343
    }
344
 
345
  (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0);
346
  (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
347
 
348
  /* Iterate through glyphs and draw */
349
  jlong* fonts = (*env)->GetLongArrayElements (env, java_fontset, NULL);
350
  gdk_threads_enter();
351
  for (i = 0; i < n; i++)
352
    {
353
      PangoFcFont *font = JLONG_TO_PTR(PangoFcFont, fonts[i]);
354
 
355
      /* Draw as many glyphs as possible with the current font */
356
      int length = 0;
357
      while (i < n-1 && fonts[i] == fonts[i+1])
358
        {
359
          length++;
360
          i++;
361
        }
362
 
363
      FT_Face face = pango_fc_font_lock_face( font );
364
      cairo_font_face_t *ft = cairo_ft_font_face_create_for_ft_face (face, 0);
365
      g_assert (ft != NULL);
366
 
367
      cairo_set_font_face (gr->cr, ft);
368
      cairo_show_glyphs (gr->cr, &glyphs[i-length], length+1);
369
 
370
      cairo_font_face_destroy (ft);
371
      pango_fc_font_unlock_face(font);
372
    }
373
  gdk_threads_leave();
374
 
375
  (*env)->ReleaseLongArrayElements (env, java_fontset, fonts, 0);
376
  g_free(glyphs);
377
}
378
 
379
 
380
JNIEXPORT void JNICALL
381
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont
382
(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
383
 jlong pointer, jobject font)
384
{
385
  struct cairographics2d *gr = NULL;
386
  struct peerfont *pfont = NULL;
387
  FT_Face face = NULL;
388
  cairo_font_face_t *ft = NULL;
389
 
390
  gr = JLONG_TO_PTR(struct cairographics2d, pointer);
391
  g_assert (gr != NULL);
392
 
393
  pfont = (struct peerfont *) gtkpeer_get_font(env, font);
394
  g_assert (pfont != NULL);
395
 
396
  gdk_threads_enter();
397
  face = pango_fc_font_lock_face( (PangoFcFont *)pfont->font );
398
  g_assert (face != NULL);
399
 
400
  ft = cairo_ft_font_face_create_for_ft_face (face, 0);
401
  g_assert (ft != NULL);
402
 
403
  cairo_set_font_face (gr->cr, ft);
404
  cairo_set_font_size (gr->cr,
405
                       (pango_font_description_get_size (pfont->desc) /
406
                       (double)PANGO_SCALE));
407
 
408
  cairo_font_face_destroy (ft);
409
  pango_fc_font_unlock_face((PangoFcFont *)pfont->font);
410
  gdk_threads_leave();
411
}
412
 
413
JNIEXPORT void JNICALL
414
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetOperator
415
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
416
 jlong pointer, jint op)
417
{
418
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
419
  g_assert (gr != NULL);
420
 
421
  switch ((enum java_awt_alpha_composite_rule) op)
422
    {
423
    case java_awt_alpha_composite_CLEAR:
424
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_CLEAR);
425
      break;
426
 
427
    case java_awt_alpha_composite_SRC:
428
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_SOURCE);
429
      break;
430
 
431
    case java_awt_alpha_composite_SRC_OVER:
432
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_OVER);
433
      break;
434
 
435
    case java_awt_alpha_composite_DST_OVER:
436
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OVER);
437
      break;
438
 
439
    case java_awt_alpha_composite_SRC_IN:
440
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_IN);
441
      break;
442
 
443
    case java_awt_alpha_composite_DST_IN:
444
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_IN);
445
      break;
446
 
447
    case java_awt_alpha_composite_SRC_OUT:
448
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_OUT);
449
      break;
450
 
451
    case java_awt_alpha_composite_DST_OUT:
452
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_OUT);
453
      break;
454
 
455
    case java_awt_alpha_composite_DST:
456
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST);
457
      break;
458
 
459
    case java_awt_alpha_composite_SRC_ATOP:
460
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_ATOP);
461
      break;
462
 
463
    case java_awt_alpha_composite_DST_ATOP:
464
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_DEST_ATOP);
465
      break;
466
 
467
    case java_awt_alpha_composite_XOR:
468
      cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR);
469
      break;
470
    }
471
}
472
 
473
JNIEXPORT void JNICALL
474
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetRGBAColor
475
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
476
 jlong pointer, jdouble r, jdouble g, jdouble b, jdouble a)
477
{
478
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
479
  g_assert (gr != NULL);
480
 
481
  cairo_set_source_rgba (gr->cr, r, g, b, a);
482
}
483
 
484
JNIEXPORT void JNICALL
485
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFillRule
486
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
487
 jlong pointer, jint rule)
488
{
489
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
490
  g_assert (gr != NULL);
491
 
492
  switch ((enum java_awt_geom_path_iterator_winding_rule) rule)
493
    {
494
    case java_awt_geom_path_iterator_WIND_NON_ZERO:
495
      cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_WINDING);
496
      break;
497
    case java_awt_geom_path_iterator_WIND_EVEN_ODD:
498
      cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD);
499
      break;
500
    }
501
}
502
 
503
/**
504
 * Set the line style, except for dashes.
505
 */
506
JNIEXPORT void JNICALL
507
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetLine
508
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
509
 jlong pointer, jdouble width, jint cap, jint join, jdouble miterLimit)
510
{
511
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
512
  g_assert (gr != NULL);
513
 
514
  /* set width */
515
  cairo_set_line_width (gr->cr, width);
516
 
517
  /* set cap */
518
  switch ((enum java_awt_basic_stroke_cap_rule) cap)
519
    {
520
    case java_awt_basic_stroke_CAP_BUTT:
521
      cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_BUTT);
522
      break;
523
 
524
    case java_awt_basic_stroke_CAP_ROUND:
525
      cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_ROUND);
526
      break;
527
 
528
    case java_awt_basic_stroke_CAP_SQUARE:
529
      cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
530
      break;
531
    }
532
 
533
  /* set join */
534
  switch ((enum java_awt_basic_stroke_join_rule) join)
535
    {
536
    case java_awt_basic_stroke_JOIN_MITER:
537
      cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_MITER);
538
      break;
539
 
540
    case java_awt_basic_stroke_JOIN_ROUND:
541
      cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_ROUND);
542
      break;
543
 
544
    case java_awt_basic_stroke_JOIN_BEVEL:
545
      cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
546
      break;
547
    }
548
 
549
  /* set miter */
550
  cairo_set_miter_limit (gr->cr, miterLimit);
551
}
552
 
553
/**
554
 * Set the line dashes
555
 */
556
JNIEXPORT void JNICALL
557
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash
558
(JNIEnv *env, jobject obj __attribute__((unused)),
559
 jlong pointer, jdoubleArray dashes, jint ndash, jdouble offset)
560
{
561
  jdouble *dasharr = NULL;
562
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
563
  g_assert (gr != NULL);
564
 
565
  dasharr = (*env)->GetDoubleArrayElements (env, dashes, NULL);
566
  g_assert (dasharr != NULL);
567
 
568
  cairo_set_dash (gr->cr, dasharr, ndash, offset);
569
 
570
  (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
571
}
572
 
573
JNIEXPORT void JNICALL
574
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSave
575
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
576
 jlong pointer)
577
{
578
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
579
  g_assert (gr != NULL);
580
 
581
  cairo_save (gr->cr);
582
}
583
 
584
JNIEXPORT void JNICALL
585
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRestore
586
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
587
 jlong pointer)
588
{
589
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
590
  g_assert (gr != NULL);
591
 
592
  cairo_restore (gr->cr);
593
}
594
 
595
JNIEXPORT void JNICALL
596
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoNewPath
597
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
598
 jlong pointer)
599
{
600
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
601
  g_assert (gr != NULL);
602
 
603
  cairo_new_path (gr->cr);
604
}
605
 
606
JNIEXPORT void JNICALL
607
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoMoveTo
608
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
609
 jlong pointer, jdouble x, jdouble y)
610
{
611
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
612
  g_assert (gr != NULL);
613
 
614
  cairo_move_to (gr->cr, x, y);
615
}
616
 
617
JNIEXPORT void JNICALL
618
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoLineTo
619
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
620
 jlong pointer, jdouble x, jdouble y)
621
{
622
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
623
  g_assert (gr != NULL);
624
 
625
  cairo_line_to (gr->cr, x, y);
626
}
627
 
628
JNIEXPORT void JNICALL
629
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo
630
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
631
 jlong pointer, jdouble x1, jdouble y1,
632
 jdouble x2, jdouble y2, jdouble x3, jdouble y3)
633
{
634
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
635
  g_assert (gr != NULL);
636
  cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3);
637
}
638
 
639
JNIEXPORT void JNICALL
640
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle
641
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
642
 jlong pointer, jdouble x, jdouble y, jdouble width, jdouble height)
643
{
644
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
645
 
646
  cairo_rectangle (gr->cr, x, y, width, height);
647
}
648
 
649
JNIEXPORT void JNICALL
650
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoArc
651
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
652
 jlong pointer, jdouble x, jdouble y, jdouble radius, jdouble angle1,
653
 jdouble angle2)
654
{
655
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
656
 
657
  cairo_arc (gr->cr, x, y, radius, angle1, angle2);
658
}
659
 
660
JNIEXPORT void JNICALL
661
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClosePath
662
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
663
 jlong pointer)
664
{
665
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
666
  g_assert (gr != NULL);
667
 
668
  cairo_close_path (gr->cr);
669
}
670
 
671
JNIEXPORT void JNICALL
672
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke
673
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
674
 jlong pointer)
675
{
676
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
677
  g_assert (gr != NULL);
678
 
679
  cairo_stroke (gr->cr);
680
}
681
 
682
JNIEXPORT void JNICALL
683
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill
684
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
685
 jlong pointer, jdouble alpha)
686
{
687
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
688
  g_assert (gr != NULL);
689
 
690
  if (alpha == 1.0)
691
    cairo_fill (gr->cr);
692
  else
693
    {
694
      cairo_save(gr->cr);
695
      cairo_clip(gr->cr);
696
      cairo_paint_with_alpha(gr->cr, alpha);
697
      cairo_restore(gr->cr);
698
    }
699
}
700
 
701
JNIEXPORT void JNICALL
702
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip
703
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
704
 jlong pointer)
705
{
706
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
707
  g_assert( gr != NULL );
708
 
709
  cairo_clip( gr->cr );
710
}
711
 
712
JNIEXPORT void JNICALL
713
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip
714
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
715
 jlong pointer)
716
{
717
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
718
  g_assert (gr != NULL);
719
 
720
  cairo_reset_clip( gr->cr );
721
}
722
 
723
JNIEXPORT void JNICALL
724
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetAntialias
725
(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
726
 jlong pointer, jboolean aa)
727
{
728
  struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer);
729
  g_assert (gr != NULL);
730
 
731
  if (aa)
732
    cairo_set_antialias(gr->cr, CAIRO_ANTIALIAS_GRAY);
733
  else
734
    cairo_set_antialias(gr->cr, CAIRO_ANTIALIAS_NONE);
735
}
736
 
737
static void
738
update_pattern_transform (struct cairographics2d *gr)
739
{
740
  cairo_matrix_t mat;
741
 
742
  g_assert (gr != NULL);
743
  if (gr->pattern == NULL)
744
    return;
745
 
746
  cairo_get_matrix (gr->cr, &mat);
747
  cairo_pattern_set_matrix (gr->pattern, &mat);
748
}
749
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.