Rboolean newJavaGD_Open(NewDevDesc *dd, newJavaGDDesc *xd, const char *dsp, double w, double h) { if (initJavaGD(xd)) return FALSE; xd->fill = 0xffffffff; /* transparent, was R_RGB(255, 255, 255); */ xd->col = R_RGB(0, 0, 0); xd->canvas = R_RGB(255, 255, 255); xd->windowWidth = w; xd->windowHeight = h; xd->holdlevel = 0; { JNIEnv *env = getJNIEnv(); jmethodID mid; if(!env || !xd || !xd->talk) { gdWarning("gdOpen: env, xd or talk is null"); return FALSE; } /* we're not using dsp atm! */ mid = (*env)->GetMethodID(env, xd->talkClass, "gdOpen", "(DD)V"); if (mid) (*env)->CallVoidMethod(env, xd->talk, mid, w, h); else { gdWarning("gdOpen: can't get mid"); chkX(env); return FALSE; } chkX(env); } return TRUE; }
static Rboolean newJavaGDDeviceDriver(NewDevDesc *dd, char *display, double width, double height, int sizeUnit, double xpi, double ypi, int canvas, double pointsize, double gamma) { newJavaGDDesc *xd; #ifdef JGD_DEBUG printf("TD: newJavaGDDeviceDriver(\"%s\", %f, %f, %f)\n", disp_name, width, height, pointsize); #endif // allocate new device description if (!(xd = (newJavaGDDesc*) calloc(1, sizeof(newJavaGDDesc)))) { return FALSE; } // from here on, if we need to bail out with "error", then we must also free(xd). if (!createJavaGD(xd)) { free(xd); return FALSE; } initJavaGD(xd, &width, &height, &sizeUnit, &xpi, &ypi); xd->fill = 0xffffffff; /* transparent */ xd->col = R_RGB(0, 0, 0); xd->canvas = canvas; /* Font will load at first use. */ if (pointsize < 6 || pointsize > 24) pointsize = 12; xd->fontface = -1; xd->fontsize = -1; xd->basefontface = 1; xd->basefontsize = pointsize; setNewJavaGDDeviceData((NewDevDesc*)(dd), xd, width, height, gamma); return TRUE; }