class Cairo::ScaledFont

Public Class Methods

new(p1, p2, p3, p4) click to toggle source
static VALUE
cr_scaled_font_initialize (VALUE self, VALUE face, VALUE matrix,
                           VALUE ctm, VALUE options)
{
  cairo_scaled_font_t *font;

  font = cairo_scaled_font_create (RVAL2CRFONTFACE (face),
                                   RVAL2CRMATRIX (matrix),
                                   RVAL2CRMATRIX (ctm),
                                   RVAL2CRFONTOPTIONS (options));
  cr_scaled_font_check_status (font);
  DATA_PTR (self) = font;
  return Qnil;
}

Public Instance Methods

ctm() click to toggle source
static VALUE
cr_scaled_font_get_ctm (VALUE self)
{
  cairo_matrix_t ctm;
  cairo_scaled_font_get_font_matrix (_SELF (self), &ctm);
  cr_scaled_font_check_status (_SELF (self));
  return CRMATRIX2RVAL (&ctm);
}
extents() click to toggle source
static VALUE
cr_scaled_font_extents (VALUE self)
{
  cairo_font_extents_t extents;
  cairo_scaled_font_extents (_SELF (self), &extents);
  cr_scaled_font_check_status (_SELF (self));
  return CRFONTEXTENTS2RVAL (&extents);
}
font_face() click to toggle source
static VALUE
cr_scaled_font_get_font_face (VALUE self)
{
  cairo_font_face_t *face;
  face = cairo_scaled_font_get_font_face (_SELF (self));
  cr_scaled_font_check_status (_SELF (self));
  return CRFONTFACE2RVAL (face);
}
font_matrix() click to toggle source
static VALUE
cr_scaled_font_get_font_matrix (VALUE self)
{
  cairo_matrix_t font_matrix;
  cairo_scaled_font_get_font_matrix (_SELF (self), &font_matrix);
  cr_scaled_font_check_status (_SELF (self));
  return CRMATRIX2RVAL (&font_matrix);
}
font_options() click to toggle source
static VALUE
cr_scaled_font_get_font_options (VALUE self)
{
  cairo_font_options_t *options;
  VALUE rb_options;

  options = cairo_font_options_create ();
  rb_cairo_check_status (cairo_font_options_status (options));

  /* TODO: Use rb_ensure() */
  rb_options = CRFONTOPTIONS2RVAL (options);
  cairo_font_options_destroy (options);

  options = RVAL2CRFONTOPTIONS (rb_options);
  cairo_scaled_font_get_font_options (_SELF (self), options);
  cr_scaled_font_check_status (_SELF (self));
  rb_cairo_check_status (cairo_font_options_status (options));

  return rb_options;
}
glyph_extents(p1) click to toggle source
static VALUE
cr_scaled_font_glyph_extents (VALUE self, VALUE rb_glyphs)
{
  cairo_text_extents_t extents;
  cairo_glyph_t *glyphs;
  int count;

  RB_CAIRO__GLYPHS_TO_ARRAY (rb_glyphs, glyphs, count);
  cairo_scaled_font_glyph_extents (_SELF (self), glyphs, count, &extents);
  cr_scaled_font_check_status (_SELF (self));
  return CRTEXTEXTENTS2RVAL (&extents);
}
scale_matrix() click to toggle source
static VALUE
cr_scaled_font_get_scale_matrix (VALUE self)
{
  cairo_matrix_t matrix;

  cairo_scaled_font_get_scale_matrix (_SELF (self), &matrix);
  cr_scaled_font_check_status (_SELF (self));
  return CRMATRIX2RVAL (&matrix);
}
text_extents(p1) click to toggle source
static VALUE
cr_scaled_font_text_extents (VALUE self, VALUE utf8)
{
  cairo_text_extents_t extents;
  cairo_scaled_font_text_extents (_SELF (self), StringValueCStr (utf8),
                                  &extents);
  cr_scaled_font_check_status (_SELF (self));
  return CRTEXTEXTENTS2RVAL (&extents);
}
text_to_glyphs(p1, p2, p3) click to toggle source
static VALUE
cr_scaled_font_text_to_glyphs (VALUE self, VALUE rb_x, VALUE rb_y, VALUE rb_utf8)
{
  double x, y;
  const char *utf8;
  int utf8_len;
  cairo_glyph_t *glyphs = NULL;
  int num_glyphs;
  cairo_text_cluster_t *clusters = NULL;
  int num_clusters;
  cairo_text_cluster_flags_t cluster_flags;
  cairo_status_t status;
  VALUE rb_glyphs, rb_clusters;

  x = NUM2DBL (rb_x);
  y = NUM2DBL (rb_y);
  utf8 = RSTRING_PTR (rb_utf8);
  utf8_len = (int) RSTRING_LEN (rb_utf8);

  status = cairo_scaled_font_text_to_glyphs (_SELF (self),
                                             x, y, utf8, utf8_len,
                                             &glyphs, &num_glyphs,
                                             &clusters, &num_clusters,
                                             &cluster_flags);
  rb_cairo_check_status (status);

  rb_glyphs = rb_cairo__glyphs_to_ruby_object (glyphs, num_glyphs);
  cairo_glyph_free (glyphs);
  rb_clusters = rb_cairo__text_clusters_to_ruby_object (clusters, num_clusters);
  cairo_text_cluster_free (clusters);

  return rb_ary_new3 (3, rb_glyphs, rb_clusters, INT2NUM (cluster_flags));
}