static VALUE rg_get_cursor_pos(VALUE self, VALUE index) { PangoRectangle strong_pos, weak_pos; pango_layout_get_cursor_pos(_SELF(self), NUM2INT(index), &strong_pos, &weak_pos); return rb_ary_new3(2, PANGORECTANGLE2RVAL(&strong_pos), PANGORECTANGLE2RVAL(&weak_pos)); }
static VALUE rg_pixel_extents(VALUE self) { PangoRectangle ink_rect, logical_rect; pango_layout_line_get_pixel_extents(_SELF(self), &ink_rect, &logical_rect); return rb_assoc_new(PANGORECTANGLE2RVAL(&ink_rect), PANGORECTANGLE2RVAL(&logical_rect)); }
static VALUE rg_pixel_extents(VALUE self) { PangoRectangle rink = {0, 0, 0, 0}; PangoRectangle rlog = {0, 0, 0, 0}; pango_layout_get_pixel_extents(_SELF(self), &rink, &rlog); return rb_assoc_new(PANGORECTANGLE2RVAL(&rink), PANGORECTANGLE2RVAL(&rlog)); }
static VALUE rg_get_glyph_extents(VALUE self, VALUE glyph) { PangoRectangle ink_rect, logical_rect; pango_font_get_glyph_extents(_SELF(self), NUM2UINT(glyph), &ink_rect, &logical_rect); return rb_assoc_new(PANGORECTANGLE2RVAL(&ink_rect), PANGORECTANGLE2RVAL(&logical_rect)); }
static VALUE rg_index_to_pos(VALUE self, VALUE index) { PangoRectangle pos; pango_layout_index_to_pos(_SELF(self), NUM2INT(index), &pos); return PANGORECTANGLE2RVAL(&pos); }
static VALUE rg_get_pixel_extents(int argc, VALUE *argv, VALUE self) { VALUE ink_rect, logical_rect; PangoRectangle rink, rlog; rb_scan_args(argc, argv, "02", &ink_rect, &logical_rect); if (NIL_P(ink_rect)){ rink.x = 0; rink.y = 0; rink.width = 0; rink.height = 0; } else { PangoRectangle* rect = RVAL2PANGORECTANGLE(ink_rect); rink.x = rect->x; rink.y = rect->y; rink.width = rect->width; rink.height = rect->height; } if (NIL_P(logical_rect)){ rlog.x = 0; rlog.y = 0; rlog.width = 0; rlog.height = 0; } else { PangoRectangle* rect = RVAL2PANGORECTANGLE(logical_rect); rlog.x = rect->x; rlog.y = rect->y; rlog.width = rect->width; rlog.height = rect->height; } pango_layout_get_pixel_extents(_SELF(self), &rink, &rlog); return rb_assoc_new(PANGORECTANGLE2RVAL(&rink), PANGORECTANGLE2RVAL(&rlog)); }
static VALUE rg_extents(int argc, VALUE *argv, VALUE self) { VALUE font, start_index, end_index; PangoRectangle ink_rect; PangoRectangle logical_rect; rb_scan_args(argc, argv, "12", &font, &start_index, &end_index); if (NIL_P(start_index)){ pango_glyph_string_extents(_SELF(self), RVAL2PANGOFONT(font), &ink_rect, &logical_rect); } else { pango_glyph_string_extents_range(_SELF(self), NUM2INT(start_index), NUM2INT(end_index), RVAL2PANGOFONT(font), &ink_rect, &logical_rect); } return rb_assoc_new(PANGORECTANGLE2RVAL(&ink_rect), PANGORECTANGLE2RVAL(&logical_rect)); }