static void PPTX_NewPage(const pGEcontext gc, pDevDesc dev) { DOCDesc *pd = (DOCDesc *) dev->deviceSpecific; if (pd->pageNumber > 0) { closeFile(pd->dmlFilePointer); } int which = pd->pageNumber % pd->maxplot; pd->pageNumber++; //update_start_id(dev); dev->right = pd->width[which]; dev->bottom = pd->height[which]; pd->offx = pd->x[which]; pd->offy = pd->y[which]; pd->extx = pd->width[which]; pd->exty = pd->height[which]; char *str={0}; str = get_dml_filename(pd->filename, pd->pageNumber); pd->dmlFilePointer = (FILE *) fopen(str, "w"); if (pd->dmlFilePointer == NULL) { Rf_error("error while opening %s\n", str); } updateFontInfo(dev, gc); free(str); }
static void RAPHAEL_NewPage(const pGEcontext gc, pDevDesc dev) { DOCDesc *pd = (DOCDesc *) dev->deviceSpecific; if (pd->pageNumber > 0) { eval( lang2(install("triggerPostCommand"), pd->env ), R_GlobalEnv); closeFile(pd->dmlFilePointer); } int which = pd->pageNumber % pd->maxplot; pd->pageNumber++; pd->canvas_id++; dev->right = pd->width[which]; dev->bottom = pd->height[which]; dev->left = 0; dev->top = 0; dev->clipLeft = 0; dev->clipRight = dev->right; dev->clipBottom = dev->bottom; dev->clipTop = 0; pd->clippedx0 = dev->clipLeft; pd->clippedy0 = dev->clipTop; pd->clippedx1 = dev->clipRight; pd->clippedy1 = dev->clipBottom; pd->offx = pd->x[which]; pd->offy = pd->y[which]; pd->extx = pd->width[which]; pd->exty = pd->height[which]; char *filename={0}; filename = get_raphael_filename(pd->filename, pd->pageNumber); pd->dmlFilePointer = (FILE *) fopen(filename, "w"); char *canvasname={0}; canvasname = get_raphael_canvasname(pd->canvas_id); if (pd->dmlFilePointer == NULL) { Rf_error("error while opening %s\n", filename); } updateFontInfo(dev, gc); pd->objectname = get_raphael_jsobject_name(pd->filename, pd->canvas_id); fprintf(pd->dmlFilePointer, "var %s = new Raphael(document.getElementById('%s'), %.0f, %.0f);\n" , pd->objectname, canvasname, dev->right, dev->bottom); SEXP cmdSexp = PROTECT(allocVector(STRSXP, 3)); SET_STRING_ELT(cmdSexp, 0, mkChar(filename)); SET_STRING_ELT(cmdSexp, 1, mkChar(pd->objectname)); SET_STRING_ELT(cmdSexp, 2, mkChar(canvasname)); eval( lang3(install("registerRaphaelGraph") , cmdSexp, pd->env ), R_GlobalEnv); UNPROTECT(1); free(filename); free(canvasname); }
void DOC_MetricInfo(int c, const pGEcontext gc, double* ascent, double* descent, double* width, pDevDesc dev) { DOCDesc *pd = (DOCDesc *) dev->deviceSpecific; updateFontInfo(dev, gc); int fontface = getFontface(gc->fontface); //if( c < 0 ) c = -c;//"fig-leaf" utf8 issue *ascent = pd->fi->ascent[fontface]*gc->lineheight; *descent = pd->fi->descent[fontface]*gc->lineheight; *width = pd->fi->widths[(fontface * 256) + c]; }
double DOC_StrWidth(const char *str, const pGEcontext gc, pDevDesc dev) { double sum; DOCDesc *pd = (DOCDesc *) dev->deviceSpecific; updateFontInfo(dev, gc); int fontface = getFontface(gc->fontface); const unsigned char *c = (const unsigned char*) str; int unicode_dec; sum = 0.0; while (*c) { unicode_dec = *c; if( unicode_dec > 255 ) unicode_dec = 77; if( unicode_dec < 0 ) unicode_dec = 77; sum += pd->fi->widths[(fontface * 256) + unicode_dec]; c++; } return sum; }