コード例 #1
0
ファイル: devSVG.cpp プロジェクト: bprs/RSvgDevice
static void svg_metric_info(int c, const pGEcontext gc, double* ascent,
                            double* descent, double* width, pDevDesc dd) {
    SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific;

    // Convert to string - negative implies unicode code point
    char str[16];
    if (c < 0) {
        Rf_ucstoutf8(str, (unsigned int) -c);
    } else {
        str[0] = (char) c;
        str[1] = '\0';
    }

    gdtools::context_set_font(svgd->cc, fontname(gc->fontfamily),
                              gc->cex * gc->ps, is_bold(gc->fontface), is_italic(gc->fontface));
    FontMetric fm = gdtools::context_extents(svgd->cc, std::string(str));

    *ascent = fm.ascent;
    *descent = fm.descent;
    *width = fm.width;
}
コード例 #2
0
ファイル: xlsx.cpp プロジェクト: davidgohel/rvg
static void xlsx_metric_info(int c, const pGEcontext gc, double* ascent,
                            double* descent, double* width, pDevDesc dd) {
  XLSX_dev *xlsx_obj = (XLSX_dev*) dd->deviceSpecific;

  // Convert to string - negative implies unicode code point
  char str[16];
  if (c < 0) {
    Rf_ucstoutf8(str, (unsigned int) -c);
  } else {
    str[0] = (char) c;
    str[1] = '\0';
  }

  std::string file = fontfile(gc->fontfamily, gc->fontface, xlsx_obj->user_aliases);
  std::string name = fontname(gc->fontfamily, gc->fontface, xlsx_obj->system_aliases, xlsx_obj->user_aliases);
  gdtools::context_set_font(xlsx_obj->cc, name, gc->cex * gc->ps, is_bold(gc->fontface), is_italic(gc->fontface), file);
  FontMetric fm = gdtools::context_extents(xlsx_obj->cc, std::string(str));

  *ascent = fm.ascent;
  *descent = fm.descent;
  *width = fm.width;
}