static void set_data(GdkAtom target, GtkSelectionData *selection_data, jobject data) { gchar *name = gdk_atom_name(target); jstring typeString; jobject result; if (gtk_targets_include_text(&target, 1)) { typeString = mainEnv->NewStringUTF("text/plain"); result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL); if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) { set_text_data(selection_data, (jstring)result); } } else if (gtk_targets_include_image(&target, 1, TRUE)) { typeString = mainEnv->NewStringUTF("application/x-java-rawimage"); result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL); if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) { set_image_data(selection_data, result); } } else if (target == MIME_TEXT_URI_LIST_TARGET) { set_uri_data(selection_data, data); } else { typeString = mainEnv->NewStringUTF(name); result = mainEnv->CallObjectMethod(data, jMapGet, typeString, NULL); if (!EXCEPTION_OCCURED(mainEnv) && result != NULL) { if (mainEnv->IsInstanceOf(result, jStringCls)) { set_jstring_data(selection_data, target, (jstring)result); } else if (mainEnv->IsInstanceOf(result, jByteBufferCls)) { set_bytebuffer_data(selection_data, target, result); } } } g_free(name); }
/** * Initialize an context for the current display. */ static int engine_init_display(struct engine* engine) { int w, h, f, s, b; ps_color_format fmt; ps_initialize(); w = ANativeWindow_getWidth(engine->app->window); h = ANativeWindow_getHeight(engine->app->window); f = ANativeWindow_getFormat(engine->app->window); if (f == WINDOW_FORMAT_RGBA_8888 || f == WINDOW_FORMAT_RGBX_8888) { b = 4; fmt = COLOR_FORMAT_ARGB; } else { b = 2; fmt = COLOR_FORMAT_RGB565; } ANativeWindow_Buffer buffer; ANativeWindow_lock(engine->app->window, &buffer, 0); s = buffer.stride * b; // create canvas with fake buffer bits ! engine->canvas = ps_canvas_create_with_data((uint8_t*)buffer.bits, fmt, w, h, s); engine->context = ps_context_create(engine->canvas, 0); init_context(engine->context, engine->canvas, (unsigned char*)buffer.bits); set_image_data(selt2565.bits, COLOR_FORMAT_RGB565, selt2565.width, selt2565.height, selt2565.pitch); set_pattern_data(pat565.bits, COLOR_FORMAT_RGB565, pat565.width, pat565.height, pat565.pitch); // ps_scale(engine->context, 4, 4); // zoom engine->width = w; engine->height = h; engine->bpp = b; engine->fmt = fmt; ANativeWindow_unlockAndPost(engine->app->window); return 0; }