/** check changes in GC and issue corresponding commands if necessary */ static void sendGC(JNIEnv *env, newJavaGDDesc *xd, R_GE_gcontext *gc, int sendAll) { jmethodID mid; if (sendAll || gc->col != lastGC.col) { mid = (*env)->GetMethodID(env, xd->talkClass, "gdcSetColor", "(I)V"); if (mid) (*env)->CallVoidMethod(env, xd->talk, mid, CONVERT_COLOR(gc->col)); else gdWarning("checkGC.gdcSetColor: can't get mid"); chkX(env); } if (sendAll || gc->fill != lastGC.fill) { mid = (*env)->GetMethodID(env, xd->talkClass, "gdcSetFill", "(I)V"); if (mid) (*env)->CallVoidMethod(env, xd->talk, mid, CONVERT_COLOR(gc->fill)); else gdWarning("checkGC.gdcSetFill: can't get mid"); chkX(env); } if (sendAll || gc->lwd != lastGC.lwd || gc->lty != lastGC.lty) { mid = (*env)->GetMethodID(env, xd->talkClass, "gdcSetLine", "(DI)V"); if (mid) (*env)->CallVoidMethod(env, xd->talk, mid, gc->lwd, gc->lty); else gdWarning("checkGC.gdcSetLine: can't get mid"); chkX(env); } if (sendAll || gc->cex!=lastGC.cex || gc->ps!=lastGC.ps || gc->lineheight!=lastGC.lineheight || gc->fontface!=lastGC.fontface || strcmp(gc->fontfamily, lastGC.fontfamily)) { jstring s = (*env)->NewStringUTF(env, gc->fontfamily); mid = (*env)->GetMethodID(env, xd->talkClass, "gdcSetFont", "(DDDILjava/lang/String;)V"); if (mid) (*env)->CallVoidMethod(env, xd->talk, mid, gc->cex, gc->ps, gc->lineheight, gc->fontface, s); else gdWarning("checkGC.gdcSetFont: can't get mid"); chkX(env); } memcpy(&lastGC, gc, sizeof(lastGC)); }
static void SwapScreen(uint16_t *dst, const uint16_t *src, uint32_t pitch) { unsigned i, j; uint32_t skip = pitch - GPU_LR_FRAMEBUFFER_NATIVE_WIDTH; for(i = 0; i < GPU_LR_FRAMEBUFFER_NATIVE_HEIGHT; i ++) { for(j = 0; j < GPU_LR_FRAMEBUFFER_NATIVE_WIDTH; j ++) { uint16_t col = *src++; *dst++ = CONVERT_COLOR(col); } dst += skip; } }