/**
 * Used by GtkFramePeer
 */
GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj)
{
    jclass cls;
    jfieldID data_fid;
    jobject data;

    cls = (*env)->GetObjectClass (env, obj);
    data_fid = (*env)->GetFieldID (env, cls, "pixbuf",
                                   "Lgnu/classpath/Pointer;");
    g_assert (data_fid != 0);
    data = (*env)->GetObjectField (env, obj, data_fid);

    if (data == NULL)
        return NULL;

    return (GdkPixbuf *)JCL_GetRawData (env, data);
}
Exemplo n.º 2
0
int
JCL_init_buffer(JNIEnv *env, struct JCL_buffer *buf, jobject bbuf)
{
  jobject address = (*env)->GetObjectField(env, bbuf, address_fid);
  
  buf->position = (*env)->CallIntMethod(env, bbuf, get_position_mid);
  buf->limit = (*env)->CallIntMethod(env, bbuf, get_limit_mid);
  buf->offset = 0;
  buf->count = 0;
  buf->type = UNKNOWN;
    
  if (address != NULL)
    {
      buf->ptr = (jbyte *) JCL_GetRawData(env, address);
      buf->type = DIRECT;
      (*env)->DeleteLocalRef(env, address);
    }
  else
    {
      jboolean has_array;
      has_array = (*env)->CallBooleanMethod(env, bbuf, has_array_mid);
      
      if (has_array == JNI_TRUE)
        {
          jbyteArray arr;
          buf->offset = (*env)->CallIntMethod(env, bbuf, array_offset_mid);
          arr = (*env)->CallObjectMethod(env, bbuf, array_mid);
          buf->ptr = (*env)->GetByteArrayElements(env, arr, 0);
          buf->type = ARRAY;
          (*env)->DeleteLocalRef(env, arr);
        }
      else
        {
          return -1;
        }
    }
      
  return 0;
}