コード例 #1
0
ファイル: devSVG.cpp プロジェクト: bprs/RSvgDevice
static void svg_text(double x, double y, const char *str, double rot,
                     double hadj, const pGEcontext gc, pDevDesc dd) {
    SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific;


    fputs("<text", svgd->file);
    if (rot == 0) {
        write_attr_dbl(svgd->file, "x", x);
        write_attr_dbl(svgd->file, "y", y);
    } else {
        fprintf(svgd->file, " transform='translate(%.2f,%.2f) rotate(%0.0f)'", x, y,
                -1.0 * rot);
    }

    write_attr_dbl(svgd->file, "font-size", gc->cex * gc->ps);
    if (is_bold(gc->fontface))
        write_attr_str(svgd->file, "font-weight", "bold");
    if (is_italic(gc->fontface))
        write_attr_str(svgd->file, "font-style", "italic");
    if (gc->col != -16777216) // black
        write_attr_col(svgd->file, "fill", gc->col);

    std::string font = fontname(gc->fontfamily);
    write_attr_str(svgd->file, "font-family", font.c_str());

    fputs(">", svgd->file);

    write_escaped(svgd->file, str);

    fputs("</text>\n", svgd->file);
}
コード例 #2
0
ファイル: devSVG.cpp プロジェクト: bprs/RSvgDevice
static double svg_strwidth(const char *str, const pGEcontext gc, pDevDesc dd) {
    SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific;

    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));

    return fm.width;
}
コード例 #3
0
ファイル: xlsx.cpp プロジェクト: davidgohel/rvg
void write_text_body_xlsx(pDevDesc dd, R_GE_gcontext *gc, const char* text, double hadj, double fontsize, double fontheight) {
  XLSX_dev *xlsx_obj = (XLSX_dev *) dd->deviceSpecific;
  ppr a_ppr_(hadj, fontsize);
  std::string fontname_ = fontname(gc->fontfamily, gc->fontface, xlsx_obj->system_aliases, xlsx_obj->user_aliases);

  rpr rpr_(fontsize, is_italic(gc->fontface), is_bold(gc->fontface), gc->col, fontname_);

  fputs("<xdr:txBody>", xlsx_obj->file );
  fprintf(xlsx_obj->file, "%s", body_pr::a_tag().c_str() );
  fputs("<a:p>", xlsx_obj->file );
  fprintf(xlsx_obj->file, "%s", a_ppr_.a_tag().c_str() );
  fputs("<a:r>", xlsx_obj->file );
  fprintf(xlsx_obj->file, "%s", rpr_.a_tag().c_str() );
  write_t_xlsx(dd, text);
  fputs("</a:r>", xlsx_obj->file );
  fputs("</a:p>", xlsx_obj->file );
  fputs("</xdr:txBody>", xlsx_obj->file );
}
コード例 #4
0
ファイル: corners.c プロジェクト: PauloMigAlmeida/cuneiform
void discrim_un( cell *GC, s_glue *GL, int16_t cod_let )
{
int16_t wi;

 memset ( l_tab_shift, 0, sizeof (l_tab_shift) );
 memset ( r_tab_shift, 0, sizeof (r_tab_shift) );

 pen_u = 0; pen_n = 0; un_code = (uchar)cod_let;

 comp_row_col( GL );          // compute coordinates of the composed box
 // check italic incline of the component
 wi = letincl(GC);

 if ( ((GC->font|GC->font_new) & c_fp_it) && (GL->ncell == 1) )  return;

 make_straight_abris( GL, l_tab_shift, r_tab_shift );

 if (GL->ncell > 1)
  {
    if ( is_italic() )
     { compare_corners_mass();   goto ApplyPenalty;}
    else return;
  }
 if ( cod_let & Let_n )
  {
   pen_n = n_around_ur_corner(GL); // study right upper corner against arounding
   pen_n += left_right_dist();
  }
 if ( cod_let & Let_u )
   pen_u = u_around_bl_corner(GL); // study left bottom corner against arounding

ApplyPenalty:
 if ( pen_u )
  {
   cell_bonus_let(GC, 'u', (int16_t)(-(pen_u)) );
   sort_vers( GC );
  }
 if ( pen_n )
  {
   cell_bonus_let(GC, 'n', (int16_t)(-(pen_n)) );
   sort_vers( GC );
  }
}
コード例 #5
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;
}
コード例 #6
0
ファイル: docx.cpp プロジェクト: davidgohel/rvg
void write_text_body_docx(pDevDesc dd, R_GE_gcontext *gc, const char* text, double hadj, double fontsize, double fontheight) {
  DOCX_dev *docx_obj = (DOCX_dev *) dd->deviceSpecific;
  ppr a_ppr_(hadj, fontsize);
  std::string fontname_ = fontname(gc->fontfamily, gc->fontface, docx_obj->system_aliases, docx_obj->user_aliases);
  rpr rpr_(fontsize, is_italic(gc->fontface), is_bold(gc->fontface), gc->col, fontname_);

  fputs("<wps:txbx>", docx_obj->file );
  fputs("<w:txbxContent>", docx_obj->file );

  fputs("<w:p>", docx_obj->file );
  fprintf(docx_obj->file, "%s", a_ppr_.w_tag().c_str() );
  fputs("<w:r>", docx_obj->file );
  fprintf(docx_obj->file, "%s", rpr_.w_tag().c_str() );
  write_t_docx(dd, text);
  fputs("</w:r>", docx_obj->file );
  fputs("</w:p>", docx_obj->file );
  fputs("</w:txbxContent>", docx_obj->file );
  fputs("</wps:txbx>", docx_obj->file );


}
コード例 #7
0
ファイル: xlsx.cpp プロジェクト: davidgohel/rvg
static double xlsx_strheight(const char *str, const pGEcontext gc, pDevDesc dd) {
  XLSX_dev *xlsx_obj = (XLSX_dev*) dd->deviceSpecific;

  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));

  return fm.height;
}
コード例 #8
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;
}
コード例 #9
0
ファイル: Font.cpp プロジェクト: awinslow/Awesome-Game
  void Font_FT::init(const String &filepath) {
    TTF_Font *font = TTF_OpenFont(filepath.c_str(), int(get_text_height() * m_vratio + 0.5f));
    if(!font)
      throw Font_Init_Failure();

    /*** Set Style ***/

    if(is_bold() && is_italic())
      TTF_SetFontStyle(font, TTF_STYLE_BOLD | TTF_STYLE_ITALIC);
    else if(is_bold())
      TTF_SetFontStyle(font, TTF_STYLE_BOLD);
    else if(is_italic())
      TTF_SetFontStyle(font, TTF_STYLE_ITALIC);

    /*** Determine Width & Height ***/

    float font_width = 0;
    float font_height = 0;
    SDL_Color color2 = {0xFF, 0xFF, 0xFF, 0xFF};
    SDL_Surface *source[256] = {0};
    for(unsigned char c = 1; c; ++c) {
      Core::assert_no_error();
      //char t[2] = {c, '\0'};
      //source[c] = TTF_RenderText_Blended(font, t, color2);
      source[c] = TTF_RenderGlyph_Blended(font, c, color2);
      Core::print_error();
      font_width = std::max(font_width, float(source[c] ? source[c]->w : 0));
      font_height = std::max(font_height, float(source[c] ? source[c]->h : 0));
    }

    /*** Initialize Intermediate SDL Surface ***/

    const int 
      next_w = int(pow(2.0f, ceil(log(float(16 * font_width))/log(2.0f)))), 
      next_h = int(pow(2.0f, ceil(log(float(16 * font_height))/log(2.0f))));
  
    SDL_Surface *font_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, next_w, next_h, 32, source[END_OF_TIME]->format->Rmask, source[END_OF_TIME]->format->Gmask, source[END_OF_TIME]->format->Bmask, source[END_OF_TIME]->format->Amask);
    if(!font_surface) {
      for(unsigned char c = 1; c; ++c)
        SDL_FreeSurface(source[c]);
      TTF_CloseFont(font);

      if(next_h > 1024) {
        m_vratio /= 2.0f;
        init(filepath);
        return;
      }
      else
        throw Font_Init_Failure();
    }

    SDL_LockSurface(font_surface);
    SDL_FillRect(font_surface, 0, SDL_MapRGBA(font_surface->format, 0, 0, 0, SDL_ALPHA_TRANSPARENT));
    SDL_UnlockSurface(font_surface);

    /*** Initialize Glyphs ***/

    SDL_Rect dstrect = {0, 0, Uint16(font_width), Uint16(font_height)};
    m_glyph[0] = 0;
    for(unsigned char c = 1; c; ++c) {
      dstrect.x = Sint16((c % 16) * font_width);
      dstrect.y = Sint16((c / 16) * font_height);
      m_glyph[c] = new Glyph(font, c, source[c], font_surface, dstrect, next_w, next_h, m_vratio);
    }

    /*** Correct Transparency ***/

    const Uint32 transparent_white = font_surface->format->Rmask | font_surface->format->Gmask | font_surface->format->Bmask;
    for(int i = 0; i < font_surface->h; ++i)
      for(Uint32 * src = reinterpret_cast<Uint32 *>(font_surface->pixels) + i * font_surface->pitch / 4,
                 * src_end = src + font_surface->w;
          src != src_end;
          ++src)
        if(*src & font_surface->format->Rmask)
          *src = transparent_white | ((*src & font_surface->format->Rmask) >> font_surface->format->Rshift << font_surface->format->Ashift);

    /*** Initialize Final Texture ***/
    
    m_texture = get_Video().create_Texture(font_surface, false);

    TTF_CloseFont(font);
  }
コード例 #10
0
ファイル: docx.cpp プロジェクト: davidgohel/rvg
static double docx_strwidth(const char *str, const pGEcontext gc, pDevDesc dd) {
  DOCX_dev *docx_obj = (DOCX_dev*) dd->deviceSpecific;

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

  return fm.width;
}