⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gnu_java_awt_peer_gtk_gtkimage.c

📁 gcc的组建
💻 C
📖 第 1 页 / 共 2 页
字号:
  if (offScreen (env, source) == JNI_TRUE)      gdk_pixbuf_unref (pixbuf);  createRawData (env, destination, (void *)dst);  gdk_threads_leave ();}/** * Draws the pixbuf at x, y, scaled to width and height and  * optionally composited with a given background color. */JNIEXPORT void JNICALLJava_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaled   (JNIEnv *env, jobject obj, jobject gc_obj,   jint bg_red, jint bg_green, jint bg_blue,    jint x, jint y, jint width, jint height, jboolean composite){  GdkPixbuf* dst;  struct graphics *g;  guint32 bgColor;  gdk_threads_enter ();    if (width <= 0 || height <= 0)    {      gdk_threads_leave ();      return;    }  bgColor = ((bg_red & 0xFF) << 16) |    ((bg_green & 0xFF) << 8) | (bg_blue & 0xFF);      g = (struct graphics *) NSA_GET_G_PTR (env, gc_obj);    if (!g || !GDK_IS_DRAWABLE (g->drawable))    {      gdk_threads_leave ();      return;    }  if (offScreen (env, obj) == JNI_FALSE)    {      GdkPixbuf* pixbuf = (GdkPixbuf *)getData (env, obj);      /* Scale and composite the image */      if (composite == JNI_TRUE)	dst = gdk_pixbuf_composite_color_simple (pixbuf,						 width,						 height,						 GDK_INTERP_BILINEAR,						 255,						 width,						 bgColor,						 bgColor);      else	dst = gdk_pixbuf_scale_simple(pixbuf,				      width, height,				      GDK_INTERP_BILINEAR);      gdk_draw_pixbuf (g->drawable,		       g->gc,		       dst,		       0, 0,		       x + g->x_offset, y + g->y_offset, 		       width, height,		       GDK_RGB_DITHER_NORMAL, 0, 0);      gdk_pixbuf_unref (dst);    } else {      /* Get a pixmap */      GdkPixmap* pixmap = (GdkPixmap *)getData (env, obj);      gdk_draw_drawable (g->drawable,			 g->gc,			 pixmap,			 0, 0, /* src x,y */			 x + g->x_offset, y + g->y_offset, 			 width, height);    }      gdk_threads_leave ();}/** * Draws the pixbuf at x, y, scaled to width and height and  * optionally composited and/or flipped with a given background color. */JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped (JNIEnv *env, jobject obj, jobject gc_obj, jint bg_red, jint bg_green, jint bg_blue, #if GTK_MINOR_VERSION > 4 jboolean flipx, jboolean flipy,#else jboolean flipx __attribute__((unused)), jboolean flipy __attribute__((unused)),#endif jint srcx, jint srcy, jint srcwidth, jint srcheight,  jint dstx, jint dsty, jint dstwidth, jint dstheight,  jboolean composite){  GdkPixbuf *pixbuf;  GdkPixbuf *tmp, *dst;  struct graphics *g;  guint32 bgColor;  gdk_threads_enter ();    if (srcwidth <= 0 || srcheight <= 0      || dstwidth <= 0 || dstheight <= 0)    {      gdk_threads_leave ();      return;    }  bgColor = ((bg_red & 0xFF) << 16) |    ((bg_green & 0xFF) << 8) | (bg_blue & 0xFF);      g = (struct graphics *) NSA_GET_G_PTR (env, gc_obj);    if (!g || !GDK_IS_DRAWABLE (g->drawable))    {      gdk_threads_leave ();      return;    }  if (offScreen (env, obj) == JNI_FALSE)    {      pixbuf = (GdkPixbuf *)getData (env, obj);      /* Get the source area */      tmp = gdk_pixbuf_new (GDK_COLORSPACE_RGB, 			    TRUE,			    8,			    srcwidth,			    srcheight);      gdk_pixbuf_copy_area (pixbuf, 			    srcx, srcy,			    srcwidth, srcheight,			    tmp, 			    0, 0); /* dst x , dst y */    } else {      /* Get a pixbuf from the pixmap */      GdkDrawable *pixmap = (GdkDrawable *)getData(env, obj);      tmp = gdk_pixbuf_get_from_drawable (NULL,					  pixmap,					  gdk_drawable_get_colormap( pixmap ),					  srcx, srcy,					  0, 0, /* dst x , dst y */					  srcwidth, srcheight);    }  /* FIXME: This #if should be discarded once I feel comfortable about     GTK 2.6 dependence */#if GTK_MINOR_VERSION > 4  /* Flip it if necessary. */  if (flipx == JNI_TRUE)    {      GdkPixbuf *tmp2 = gdk_pixbuf_flip (tmp, TRUE);      gdk_pixbuf_unref (tmp);      tmp = tmp2;    }  if (flipy == JNI_TRUE)    {      GdkPixbuf *tmp2 = gdk_pixbuf_flip (tmp, FALSE);      gdk_pixbuf_unref (tmp);      tmp = tmp2;    }#endif    /* Scale and composite the image */  if (composite == JNI_TRUE)    dst = gdk_pixbuf_composite_color_simple (tmp,					     dstwidth,					     dstheight,					     GDK_INTERP_BILINEAR,					     255,					     dstwidth,					     bgColor,					     bgColor);  else    dst = gdk_pixbuf_scale_simple(tmp,				  dstwidth, dstheight,				  GDK_INTERP_BILINEAR);  gdk_pixbuf_unref (tmp);      gdk_draw_pixbuf (g->drawable,		   g->gc,		   dst,		   0, 0,		   dstx + g->x_offset, dsty + g->y_offset, 		   dstwidth, dstheight,		   GDK_RGB_DITHER_NORMAL, 0, 0);    gdk_pixbuf_unref (dst);  gdk_threads_leave ();}/** * Used by GtkFramePeer */GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj){  int width, height;  GdkPixbuf *pixbuf;  GdkPixmap* pixmap;  jclass cls;  jfieldID field;  if (offScreen (env, obj) == JNI_FALSE)    return (GdkPixbuf *)getData (env, obj);  cls = (*env)->GetObjectClass (env, obj);  field = (*env)->GetFieldID (env, cls, "width", "I");  g_assert (field != 0);  width = (*env)->GetIntField (env, obj, field);     field = (*env)->GetFieldID (env, cls, "height", "I");  g_assert (field != 0);  height = (*env)->GetIntField (env, obj, field);  /* Get a pixmap */  pixmap = (GdkPixmap *)getData (env, obj);  pixbuf = gdk_pixbuf_get_from_drawable (NULL,					 pixmap,					 gdk_drawable_get_colormap( pixmap ),					 0, 0, /* src x , src y */					 0, 0, /* dst x , dst y */					 width, height);  return pixbuf;}/** * Used by GdkGraphics */GdkPixmap *cp_gtk_image_get_pixmap (JNIEnv *env, jobject obj){  if (offScreen (env, obj) == JNI_FALSE)    return NULL;  return (GdkPixmap *)getData (env, obj);}jboolean cp_gtk_image_is_offscreen (JNIEnv *env, jobject obj){  return offScreen(env, obj);}/** * Maps java.awt.Image scaling hints to the native GDK ones. */static GdkInterpType mapHints(jint hints){  switch ( hints )     {      /* For FAST, we use the nearest-neighbor. Fastest and lowest quality. */    case SCALE_FAST:    case SCALE_REPLICATE:      return GDK_INTERP_NEAREST;      /* Hyperbolic for smooth. Slowest too. */    case SCALE_SMOOTH:      return GDK_INTERP_HYPER;            /* the inbetweenish method */    case SCALE_AREA_AVERAGING:      return GDK_INTERP_TILES;      /* default to bilinear */    }  return GDK_INTERP_BILINEAR;}/* Sets the width and height fields of a GtkImage object. */static void setWidthHeight (JNIEnv * env, jobject obj, int width, int height){  jclass cls;  jfieldID field;    cls = (*env)->GetObjectClass (env, obj);  g_assert (cls != 0);  field = (*env)->GetFieldID (env, cls, "width", "I");  g_assert (field != 0);  (*env)->SetIntField (env, obj, field, (jint)width);     field = (*env)->GetFieldID (env, cls, "height", "I");  g_assert (field != 0);  (*env)->SetIntField (env, obj, field, (jint)height);}/* Returns the value of the offScreen field. */static jboolean offScreen (JNIEnv *env, jobject obj){  jclass cls;  jfieldID field;  cls = (*env)->GetObjectClass (env, obj);  field = (*env)->GetFieldID (env, cls, "offScreen", "Z");  g_assert (field != 0);  return (*env)->GetBooleanField (env, obj, field);}/* Store and get the pixbuf pointer */static voidcreateRawData (JNIEnv * env, jobject obj, void *ptr){  jclass cls;  jobject data;  jfieldID data_fid;  cls = (*env)->GetObjectClass (env, obj);  data_fid = (*env)->GetFieldID (env, cls, "pixmap", 				 "Lgnu/classpath/Pointer;");  g_assert (data_fid != 0);  data = JCL_NewRawDataObject (env, ptr);  (*env)->SetObjectField (env, obj, data_fid, data);}static void *getData (JNIEnv * env, jobject obj){  jclass cls;  jfieldID data_fid;  jobject data;  cls = (*env)->GetObjectClass (env, obj);  data_fid = (*env)->GetFieldID (env, cls, "pixmap", 				 "Lgnu/classpath/Pointer;");  g_assert (data_fid != 0);  data = (*env)->GetObjectField (env, obj, data_fid);  return JCL_GetRawData (env, data);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -