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

      options = cairo_font_options_create();
      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 CRFONTOPTIONS2RVAL (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 = 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));
    }