/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by graydon, Wed Sep 17 20:05:53 2003 UTC revision 1.2 by graydon, Thu Nov 20 22:27:37 2003 UTC
# Line 36  Line 36 
36     exception statement from your version. */     exception statement from your version. */
37    
38  #include "gtkpeer.h"  #include "gtkpeer.h"
39    #include "gdkfont.h"
40  #include "gnu_java_awt_peer_gtk_GdkGraphics2D.h"  #include "gnu_java_awt_peer_gtk_GdkGraphics2D.h"
41  #include <gdk/gdktypes.h>  #include <gdk/gdktypes.h>
42  #include <gdk/gdkprivate.h>  #include <gdk/gdkprivate.h>
# Line 45  Line 46 
46  #include <gdk-pixbuf/gdk-pixdata.h>  #include <gdk-pixbuf/gdk-pixdata.h>
47    
48  #include <cairo.h>  #include <cairo.h>
49    #include <cairo-xlib.h>
50    
51  #include <stdio.h>  #include <stdio.h>
52  #include <stdlib.h>  #include <stdlib.h>
53    
# Line 198  init_graphics2d_as_renderable (struct gr Line 201  init_graphics2d_as_renderable (struct gr
201    vis = gdk_x11_visual_get_xvisual (gdk_drawable_get_visual (gr->drawable));    vis = gdk_x11_visual_get_xvisual (gdk_drawable_get_visual (gr->drawable));
202    g_assert (vis != NULL);    g_assert (vis != NULL);
203        
204    gr->surface = cairo_surface_create_for_drawable (dpy, draw, vis,    gr->surface = cairo_xlib_surface_create (dpy, draw, vis,
205                                                     CAIRO_FORMAT_ARGB32,                                             CAIRO_FORMAT_ARGB32,
206                                                     DefaultColormap (dpy, DefaultScreen (dpy)));                                             DefaultColormap (dpy, DefaultScreen (dpy)));
207    g_assert (gr->surface != NULL);    g_assert (gr->surface != NULL);
208    g_assert (gr->cr != NULL);    g_assert (gr->cr != NULL);
209    cairo_set_target_surface (gr->cr, gr->surface);    cairo_set_target_surface (gr->cr, gr->surface);
# Line 299  JNIEXPORT void JNICALL Java_gnu_java_awt Line 302  JNIEXPORT void JNICALL Java_gnu_java_awt
302    g_old = (struct graphics2d *) NSA_GET_G2D_PTR (env, old);    g_old = (struct graphics2d *) NSA_GET_G2D_PTR (env, old);
303    g_assert (g_old != NULL);    g_assert (g_old != NULL);
304    
305      if (g_old->debug) printf ("copying state from existing graphics2d\n");
306    
307    g->drawable = g_old->drawable;    g->drawable = g_old->drawable;
308    g->debug = g_old->debug;    g->debug = g_old->debug;
309    
# Line 313  JNIEXPORT void JNICALL Java_gnu_java_awt Line 318  JNIEXPORT void JNICALL Java_gnu_java_awt
318    else    else
319      init_graphics2d_as_pixbuf (g);      init_graphics2d_as_pixbuf (g);
320    
321    cairo_surface_set_filter (g->surface, CAIRO_FILTER_BILINEAR);    cairo_surface_set_filter (g->surface, CAIRO_FILTER_FAST);
322    
323    gdk_threads_leave ();    gdk_threads_leave ();
324    
# Line 378  JNIEXPORT void JNICALL Java_gnu_java_awt Line 383  JNIEXPORT void JNICALL Java_gnu_java_awt
383    gc = gdk_gc_new (dst->drawable);    gc = gdk_gc_new (dst->drawable);
384    g_assert (gc != NULL);    g_assert (gc != NULL);
385    
386    gdk_draw_drawable(dst->drawable, gc, src->drawable,    gdk_draw_drawable(dst->drawable, gc, src->drawable,
387                      0, 0, x, y, width, height);                      0, 0, x, y, width, height);
388    
389    g_object_unref (gc);    g_object_unref (gc);
390    
# Line 474  JNIEXPORT void JNICALL Java_gnu_java_awt Line 479  JNIEXPORT void JNICALL Java_gnu_java_awt
479      g_object_unref (gr->drawbuf);      g_object_unref (gr->drawbuf);
480    
481    g_object_unref (gr->drawable);    g_object_unref (gr->drawable);
   free (gr);  
482    
483    if (gr->pattern)    if (gr->pattern)
484      cairo_surface_destroy (gr->pattern);      cairo_surface_destroy (gr->pattern);
# Line 483  JNIEXPORT void JNICALL Java_gnu_java_awt Line 487  JNIEXPORT void JNICALL Java_gnu_java_awt
487      free (gr->pattern_pixels);      free (gr->pattern_pixels);
488    
489    if (gr->debug) printf ("disposed of graphics2d\n");    if (gr->debug) printf ("disposed of graphics2d\n");
490      free (gr);
491    
492    gdk_threads_leave ();    gdk_threads_leave ();
493  }  }
# Line 646  JNIEXPORT void JNICALL Java_gnu_java_awt Line 651  JNIEXPORT void JNICALL Java_gnu_java_awt
651  }  }
652    
653  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels
654    (JNIEnv *env, jobject obj, jintArray jarr, jint w, jint h, jint stride)    (JNIEnv *env, jobject obj, jintArray java_pixels,
655       jint w, jint h, jint stride, jdoubleArray java_matrix)
656  {  {
657    struct graphics2d *gr = NULL;    struct graphics2d *gr = NULL;
658    jint *jpixels = NULL;    jint *native_pixels = NULL;
659      jdouble *native_matrix = NULL;
660    
661    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
662    g_assert (gr != NULL);    g_assert (gr != NULL);
663    
664    if (gr->debug) printf ("drawPixels (%d pixels, %dx%d, stride: %d)\n",    if (gr->debug) printf ("drawPixels (%d pixels, %dx%d, stride: %d)\n",
665                           (*env)->GetArrayLength (env, jarr), w, h, stride);                           (*env)->GetArrayLength (env, java_pixels), w, h, stride);
666    
667    jpixels = (*env)->GetIntArrayElements (env, jarr, NULL);    native_pixels = (*env)->GetIntArrayElements (env, java_pixels, NULL);
668    g_assert (jpixels != NULL);    native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
669      g_assert (native_pixels != NULL);
670      g_assert (native_matrix != NULL);
671      g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
672    
673    begin_drawing_operation (gr);    begin_drawing_operation (gr);
674      
675   {   {
676     cairo_surface_t *surf = cairo_surface_create_for_image ((char *)jpixels,     cairo_matrix_t *mat = NULL;
677       cairo_surface_t *surf = cairo_surface_create_for_image ((char *)native_pixels,
678                                                             CAIRO_FORMAT_ARGB32,                                                             CAIRO_FORMAT_ARGB32,
679                                                             w, h, stride * 4);                                                               w, h, stride * 4);  
680     cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR);     mat = cairo_matrix_create ();
681       cairo_matrix_set_affine (mat,
682                                native_matrix[0], native_matrix[1],
683                                native_matrix[2], native_matrix[3],
684                                native_matrix[4], native_matrix[5]);
685       cairo_surface_set_matrix (surf, mat);
686       if (native_matrix[0] != 1.
687           || native_matrix[1] != 0.
688           || native_matrix[2] != 0.
689           || native_matrix[3] != 1.)
690         {
691           cairo_surface_set_filter (surf, CAIRO_FILTER_BILINEAR);
692           cairo_surface_set_filter (gr->surface, CAIRO_FILTER_BILINEAR);
693         }
694       else
695         {
696           cairo_surface_set_filter (surf, CAIRO_FILTER_FAST);
697           cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST);
698         }
699     cairo_show_surface (gr->cr, surf, w, h);     cairo_show_surface (gr->cr, surf, w, h);
700       cairo_surface_set_filter (gr->surface, CAIRO_FILTER_FAST);
701       cairo_matrix_destroy (mat);
702     cairo_surface_destroy (surf);     cairo_surface_destroy (surf);
703   }   }
704      
705     end_drawing_operation (gr);
706    
707    end_drawing_operation (gr);    (*env)->ReleaseIntArrayElements (env, java_pixels, native_pixels, 0);
708      (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
   (*env)->ReleaseIntArrayElements (env, jarr, jpixels, 0);  
709    
710  }  }
711    
# Line 701  JNIEXPORT void JNICALL Java_gnu_java_awt Line 733  JNIEXPORT void JNICALL Java_gnu_java_awt
733  }  }
734    
735  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix
736     (JNIEnv *env, jobject obj,     (JNIEnv *env, jobject obj, jdoubleArray java_matrix)
     jdouble m00, jdouble m10,  
     jdouble m01, jdouble m11,  
     jdouble m02, jdouble m12)  
737  {  {
738    struct graphics2d *gr = NULL;    struct graphics2d *gr = NULL;
739      jdouble *native_matrix = NULL;
740    
741    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);    gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
742    g_assert (gr != NULL);    g_assert (gr != NULL);
743    if (gr->debug) printf ("cairo_set_matrix\n");  
744      native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);  
745      g_assert (native_matrix != NULL);
746      g_assert ((*env)->GetArrayLength (env, java_matrix) == 6);
747    
748      if (gr->debug) printf ("cairo_set_matrix [ %f, %f, %f, %f, %f, %f ]\n",
749                             native_matrix[0], native_matrix[1],
750                             native_matrix[2], native_matrix[3],
751                             native_matrix[4], native_matrix[5]);
752    
753    {    {
754      cairo_matrix_t * mat = cairo_matrix_create ();      cairo_matrix_t * mat = cairo_matrix_create ();
755      cairo_matrix_set_affine (mat,      cairo_matrix_set_affine (mat,
756                               m00, m10,                               native_matrix[0], native_matrix[1],
757                               m01, m11,                               native_matrix[2], native_matrix[3],
758                               m02, m12);                               native_matrix[4], native_matrix[5]);
759      cairo_set_matrix (gr->cr, mat);      cairo_set_matrix (gr->cr, mat);
760      cairo_matrix_destroy (mat);      cairo_matrix_destroy (mat);
761    }    }
762    
763      (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
764    update_pattern_transform (gr);    update_pattern_transform (gr);
765  }  }
766    
767    JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont
768       (JNIEnv *env, jobject obj, jobject font)
769    {
770      struct graphics2d *gr = NULL;
771      struct peerfont *pfont = NULL;
772      cairo_font_t *ft = NULL;
773      FT_Face face = NULL;
774    
775      gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
776      g_assert (gr != NULL);
777    
778      pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
779      g_assert (pfont != NULL);
780    
781      gdk_threads_enter ();
782    
783      face = pango_ft2_font_get_face (pfont->font);
784      g_assert (face != NULL);
785    
786      ft = cairo_ft_font_create_for_ft_face (face);
787      g_assert (ft != NULL);
788    
789      if (gr->debug) printf ("cairo_set_font '%s'\n", face->family_name);
790      
791      cairo_set_font (gr->cr, ft);
792    
793      cairo_scale_font (gr->cr,
794                        pango_font_description_get_size (pfont->desc) /
795                        (double)PANGO_SCALE);
796    
797      cairo_font_destroy (ft);
798    
799      gdk_threads_leave ();
800    }
801    
802    JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoShowGlyphs
803       (JNIEnv *env, jobject obj, jintArray java_codes, jfloatArray java_posns)
804    {
805      struct graphics2d *gr = NULL;
806      cairo_glyph_t *glyphs = NULL;
807      jfloat *native_posns = NULL;
808      jint *native_codes = NULL;
809      jint i;
810      jint ncodes, nposns;
811    
812      gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
813      g_assert (gr != NULL);
814    
815      native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);  
816      native_posns = (*env)->GetFloatArrayElements (env, java_posns, NULL);  
817      g_assert (native_codes != NULL);
818      g_assert (native_posns != NULL);
819    
820      ncodes = (*env)->GetArrayLength (env, java_codes);
821      nposns = (*env)->GetArrayLength (env, java_posns);
822      g_assert (2 * ncodes == nposns);
823    
824      if (gr->debug) printf ("cairo_show_glyphs (%d glyphs)\n", ncodes);
825    
826      glyphs = malloc (sizeof(cairo_glyph_t) * ncodes);
827      g_assert (glyphs);
828    
829      for (i = 0; i < ncodes; ++i)
830        {
831          glyphs[i].index = native_codes[i];
832          glyphs[i].x = (double) native_posns[2*i];
833          glyphs[i].y = (double) native_posns[2*i + 1];
834          if (gr->debug) printf ("cairo_show_glyphs (glyph %d (code %d) : %f,%f)\n",
835                                 i, glyphs[i].index, glyphs[i].x, glyphs[i].y);
836        }
837    
838      (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
839      (*env)->ReleaseFloatArrayElements (env, java_posns, native_posns, 0);
840    
841      begin_drawing_operation (gr);
842      cairo_show_glyphs (gr->cr, glyphs, ncodes);
843      end_drawing_operation (gr);
844    
845      free(glyphs);
846    }
847    
848  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator
849     (JNIEnv *env, jobject obj, jint op)     (JNIEnv *env, jobject obj, jint op)
850  {  {
# Line 910  JNIEXPORT void JNICALL Java_gnu_java_awt Line 1032  JNIEXPORT void JNICALL Java_gnu_java_awt
1032    cairo_set_miter_limit (gr->cr, miter);    cairo_set_miter_limit (gr->cr, miter);
1033  }  }
1034    
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoTranslate  
    (JNIEnv *env, jobject obj, jdouble dx, jdouble dy)  
 {  
   struct graphics2d *gr = NULL;  
   gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);  
   g_assert (gr != NULL);  
   if (gr->debug) printf ("cairo_translate (%f, %f)\n", dx, dy);  
   cairo_translate (gr->cr, dx, dy);  
   update_pattern_transform (gr);  
 }  
   
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoScale  
    (JNIEnv *env, jobject obj, jdouble sx, jdouble sy)  
 {  
   struct graphics2d *gr = NULL;  
   gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);  
   g_assert (gr != NULL);  
   if (gr->debug) printf ("cairo_scale (%f, %f)\n", sx, sy);  
   cairo_scale (gr->cr, sx, sy);  
   update_pattern_transform (gr);  
 }  
   
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRotate  
    (JNIEnv *env, jobject obj, jdouble angle)  
 {  
   struct graphics2d *gr = NULL;  
   gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);  
   g_assert (gr != NULL);  
   if (gr->debug) printf ("cairo_rotate %f\n", angle);  
   cairo_rotate (gr->cr, angle);  
   update_pattern_transform (gr);  
 }  
1035    
1036  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath
1037     (JNIEnv *env, jobject obj)     (JNIEnv *env, jobject obj)

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26