class Cairo::Context
Public Class Methods
create(*args)
click to toggle source
static VALUE cr_s_create (int argc, VALUE *argv, VALUE klass) { VALUE rb_cr; rb_cr = rb_funcallv (klass, cr_id_new, argc, argv); if (rb_block_given_p ()) { return rb_ensure (rb_yield, rb_cr, cr_destroy_with_destroy_check, rb_cr); } else { return rb_cr; } }
new(p1)
click to toggle source
static VALUE cr_initialize (VALUE self, VALUE target) { cairo_t *cr; VALUE result = Qnil; cr = cairo_create (RVAL2CRSURFACE (target)); cr_check_status (cr); rb_ivar_set (self, cr_id_surface, target); rb_ivar_set (self, cr_id_source, Qnil); if (rb_ivar_defined (target, rb_cairo__io_id_output)) cr_set_user_data (cr, &cr_object_holder_key, cr_object_holder_new (self), cr_object_holder_free); DATA_PTR (self) = cr; if (rb_block_given_p ()) result = rb_ensure (rb_yield, self, cr_destroy_with_destroy_check, self); return result; }
wrap(p1)
click to toggle source
static VALUE cr_s_wrap (VALUE self, VALUE pointer) { VALUE result; VALUE rb_cr; cairo_t *cr; if (NIL_P (rb_cairo__cFFIPointer)) { rb_raise (rb_eNotImpError, "%s: FFI::Pointer is required", rb_id2name (rb_frame_this_func ())); } if (!RTEST (rb_obj_is_kind_of (pointer, rb_cairo__cFFIPointer))) { rb_raise (rb_eArgError, "must be FFI::Pointer: %s", rb_cairo__inspect (pointer)); } { VALUE rb_cr_address; rb_cr_address = rb_funcall (pointer, rb_intern ("address"), 0); cr = NUM2PTR (rb_cr_address); cr_check_status (cr); } rb_cr = rb_obj_alloc (self); cairo_reference (cr); DATA_PTR (rb_cr) = cr; rb_ivar_set (rb_cr, cr_id_surface, Qnil); if (rb_block_given_p ()) { result = rb_ensure (rb_yield, rb_cr, cr_destroy_with_destroy_check, rb_cr); } else { result = rb_cr; } return result; }
Public Instance Methods
antialias()
click to toggle source
static VALUE cr_get_antialias(VALUE self) { return INT2NUM (cairo_get_antialias (_SELF)); }
append_path(p1)
click to toggle source
static VALUE cr_copy_append_path (VALUE self, VALUE path) { cairo_append_path (_SELF, RVAL2CRPATH (path)); cr_check_status (_SELF); return self; }
arc(p1, p2, p3, p4, p5)
click to toggle source
static VALUE cr_arc (VALUE self, VALUE xc, VALUE yc, VALUE radius, VALUE angle1, VALUE angle2) { cairo_arc (_SELF, NUM2DBL (xc), NUM2DBL (yc), NUM2DBL (radius), NUM2DBL (angle1), NUM2DBL (angle2)); cr_check_status (_SELF); return self; }
arc_negative(p1, p2, p3, p4, p5)
click to toggle source
static VALUE cr_arc_negative (VALUE self, VALUE xc, VALUE yc, VALUE radius, VALUE angle1, VALUE angle2) { cairo_arc_negative (_SELF, NUM2DBL (xc), NUM2DBL (yc), NUM2DBL (radius), NUM2DBL (angle1), NUM2DBL (angle2)); cr_check_status (_SELF); return self; }
begin_tag(*args)
click to toggle source
static VALUE cr_begin_tag (int argc, VALUE *argv, VALUE self) { VALUE rb_name; VALUE rb_attributes; const char *name; const char *attributes = NULL; rb_scan_args (argc, argv, "11", &rb_name, &rb_attributes); name = RVAL2CSTR (rb_name); if (!NIL_P (rb_attributes)) attributes = RVAL2CSTR (rb_attributes); cairo_tag_begin (_SELF, name, attributes); cr_check_status (_SELF); return Qnil; }
clip(p1 = v1)
click to toggle source
static VALUE cr_clip (int argc, VALUE *argv, VALUE self) { VALUE preserve; rb_scan_args(argc, argv, "01", &preserve); if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } if (RVAL2CBOOL (preserve)) cairo_clip_preserve(_SELF); else cairo_clip (_SELF); cr_check_status (_SELF); return self; }
clip_extents()
click to toggle source
static VALUE cr_clip_extents (VALUE self) { double x1, y1, x2, y2; cairo_clip_extents (_SELF, &x1, &y1, &x2, &y2); cr_check_status (_SELF); return rb_ary_new3 (4, rb_float_new (x1), rb_float_new (y1), rb_float_new (x2), rb_float_new (y2)); }
clip_preserve(&block)
click to toggle source
# File lib/cairo/context.rb, line 25 def clip_preserve(&block) clip(true, &block) end
clip_rectangle_list()
click to toggle source
static VALUE cr_clip_rectangle_list (VALUE self) { VALUE rb_rectangles; cairo_rectangle_list_t *rectangles; int i; rectangles = cairo_copy_clip_rectangle_list (_SELF); rb_cairo_check_status (rectangles->status); rb_rectangles = rb_ary_new2 (rectangles->num_rectangles); for (i = 0; i < rectangles->num_rectangles; i++) { VALUE argv[4]; cairo_rectangle_t rectangle = rectangles->rectangles[i]; argv[0] = rb_float_new (rectangle.x); argv[1] = rb_float_new (rectangle.y); argv[2] = rb_float_new (rectangle.width); argv[3] = rb_float_new (rectangle.height); rb_ary_push (rb_rectangles, rb_class_new_instance (4, argv, rb_cCairo_Rectangle)); } cairo_rectangle_list_destroy (rectangles); return rb_rectangles; }
close_path()
click to toggle source
static VALUE cr_close_path (VALUE self) { cairo_close_path (_SELF); cr_check_status (_SELF); return self; }
copy_page()
click to toggle source
static VALUE cr_copy_page (VALUE self) { cairo_copy_page (_SELF); cr_check_status (_SELF); return self; }
copy_path()
click to toggle source
Paths
static VALUE cr_copy_path (VALUE self) { cairo_path_t *path; path = cairo_copy_path (_SELF); rb_cairo_check_status (path->status); return CRPATH2RVAL (path); }
copy_path_flat()
click to toggle source
static VALUE cr_copy_path_flat (VALUE self) { cairo_path_t *path; path = cairo_copy_path_flat (_SELF); rb_cairo_check_status (path->status); return CRPATH2RVAL (path); }
current_point()
click to toggle source
static VALUE cr_get_current_point (VALUE self) { double point[2]; cairo_get_current_point (_SELF, point, point + 1); return rb_cairo__float_array (point, 2); }
curve_to(*args)
click to toggle source
static VALUE cr_curve_to_generic (int argc, VALUE *argv, VALUE self) { VALUE x1, y1, x2, y2, x3, y3; rb_scan_args (argc, argv, "42", &x1, &y1, &x2, &y2, &x3, &y3); if (!(argc == 4 || argc == 6)) { VALUE inspected_arg = rb_inspect (rb_ary_new4 (argc, argv)); rb_raise (rb_eArgError, "invalid argument: %s (expect " "(x1, y1, x2, y2) (quadratic) or " "(x1, y1, x2, y2, x3, y3) (cubic))", StringValuePtr (inspected_arg)); } if (argc == 4) return cr_quadratic_curve_to (self, x1, y1, x2, y2); else return cr_curve_to (self, x1, y1, x2, y2, x3, y3); }
dash()
click to toggle source
static VALUE cr_get_dash (VALUE self) { int count; double *dashes, offset; count = cairo_get_dash_count (_SELF); dashes = ALLOCA_N (double, count); cairo_get_dash (_SELF, dashes, &offset); return rb_ary_new3 (2, rb_cairo__float_array (dashes, count), rb_float_new (offset)); }
dash_count()
click to toggle source
static VALUE cr_get_dash_count (VALUE self) { return INT2NUM (cairo_get_dash_count (_SELF)); }
destroy()
click to toggle source
static VALUE cr_destroy (VALUE self) { cairo_t *cr; cr = _SELF; cr_set_user_data (cr, &cr_object_holder_key, NULL, NULL); cairo_destroy (cr); DATA_PTR (self) = NULL; return Qnil; }
destroyed?()
click to toggle source
static VALUE cr_destroyed (VALUE self) { return CBOOL2RVAL (DATA_PTR (self) == NULL); }
device_to_user(p1, p2)
click to toggle source
static VALUE cr_device_to_user (VALUE self, VALUE x, VALUE y) { double pair[2]; pair[0] = NUM2DBL (x); pair[1] = NUM2DBL (y); cairo_device_to_user (_SELF, pair, pair + 1); cr_check_status (_SELF); return rb_cairo__float_array (pair, 2); }
device_to_user_distance(p1, p2)
click to toggle source
static VALUE cr_device_to_user_distance (VALUE self, VALUE dx, VALUE dy) { double pair[2]; pair[0] = NUM2DBL (dx); pair[1] = NUM2DBL (dy); cairo_device_to_user_distance (_SELF, pair, pair + 1); cr_check_status (_SELF); return rb_cairo__float_array (pair, 2); }
end_tag(p1)
click to toggle source
static VALUE cr_end_tag (VALUE self, VALUE rb_name) { const char *name; name = RVAL2CSTR (rb_name); cairo_tag_end (_SELF, name); cr_check_status (_SELF); return Qnil; }
fill(*args)
click to toggle source
static VALUE cr_fill (int argc, VALUE *argv, VALUE self) { VALUE preserve; rb_scan_args (argc, argv, "01", &preserve); if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } if (RVAL2CBOOL (preserve)) cairo_fill_preserve (_SELF); else cairo_fill (_SELF); cr_check_status (_SELF); return self; }
fill_extents()
click to toggle source
static VALUE cr_fill_extents (VALUE self) { double extents[4]; if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } cairo_fill_extents (_SELF, extents, extents + 1, extents + 2, extents + 3); return rb_cairo__float_array (extents, 4); }
fill_preserve(&block)
click to toggle source
# File lib/cairo/context.rb, line 21 def fill_preserve(&block) fill(true, &block) end
fill_rule()
click to toggle source
static VALUE cr_get_fill_rule (VALUE self) { return INT2FIX (cairo_get_fill_rule (_SELF)); }
font_extents()
click to toggle source
static VALUE cr_font_extents (VALUE self) { cairo_font_extents_t extents; cairo_font_extents (_SELF, &extents); cr_check_status (_SELF); return CRFONTEXTENTS2RVAL (&extents); }
font_face()
click to toggle source
static VALUE cr_get_font_face (VALUE self) { cairo_font_face_t *face; face = cairo_get_font_face (_SELF); rb_cairo_check_status (cairo_font_face_status (face)); return CRFONTFACE2RVAL (face); }
font_matrix()
click to toggle source
static VALUE cr_get_font_matrix (VALUE self) { cairo_matrix_t matrix; cairo_get_font_matrix (_SELF, &matrix); cr_check_status (_SELF); return CRMATRIX2RVAL (&matrix); }
font_options()
click to toggle source
static VALUE cr_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_get_font_options (_SELF, options); cr_check_status (_SELF); rb_cairo_check_status (cairo_font_options_status (options)); return rb_options; }
glyph_extents(p1)
click to toggle source
static VALUE cr_glyph_extents (VALUE self, VALUE rb_glyphs) { cairo_text_extents_t extents; cairo_glyph_t *glyphs; int length; RB_CAIRO__GLYPHS_TO_ARRAY (rb_glyphs, glyphs, length); cairo_glyph_extents (_SELF, glyphs, length, &extents); cr_check_status (_SELF); return CRTEXTEXTENTS2RVAL (&extents); }
glyph_path(p1)
click to toggle source
static VALUE cr_glyph_path (VALUE self, VALUE rb_glyphs) { int count; cairo_glyph_t *glyphs; RB_CAIRO__GLYPHS_TO_ARRAY (rb_glyphs, glyphs, count); cairo_glyph_path (_SELF, glyphs, count); cr_check_status (_SELF); return self; }
group_target()
click to toggle source
static VALUE cr_get_group_target (VALUE self) { cairo_surface_t *surface; surface = cairo_get_group_target (_SELF); if (!surface) return Qnil; rb_cairo_check_status (cairo_surface_status (surface)); return CRSURFACE2RVAL (surface); }
have_current_point?()
click to toggle source
static VALUE cr_has_current_point(VALUE self) { return RTEST (cairo_has_current_point (_SELF)); }
Also aliased as: has_current_point?
identity_matrix()
click to toggle source
static VALUE cr_identity_matrix (VALUE self) { cairo_identity_matrix (_SELF); cr_check_status (_SELF); return self; }
in_clip?(p1, p2)
click to toggle source
static VALUE cr_in_clip (VALUE self, VALUE x, VALUE y) { if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } return CBOOL2RVAL (cairo_in_clip (_SELF, NUM2DBL (x), NUM2DBL (y))); }
in_fill?(p1, p2)
click to toggle source
static VALUE cr_in_fill (VALUE self, VALUE x, VALUE y) { if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } return CBOOL2RVAL (cairo_in_fill (_SELF, NUM2DBL (x), NUM2DBL (y))); }
in_stroke?(p1, p2)
click to toggle source
Insideness testing
static VALUE cr_in_stroke (VALUE self, VALUE x, VALUE y) { if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } return CBOOL2RVAL (cairo_in_stroke (_SELF, NUM2DBL (x), NUM2DBL (y))); }
line_cap()
click to toggle source
static VALUE cr_get_line_cap (VALUE self) { return INT2FIX (cairo_get_line_cap (_SELF)); }
line_join()
click to toggle source
static VALUE cr_get_line_join (VALUE self) { return INT2FIX (cairo_get_line_join (_SELF)); }
line_to(p1, p2)
click to toggle source
static VALUE cr_line_to (VALUE self, VALUE x, VALUE y) { cairo_line_to (_SELF, NUM2DBL (x), NUM2DBL (y)); cr_check_status (_SELF); return self; }
line_width()
click to toggle source
static VALUE cr_get_line_width (VALUE self) { return rb_float_new (cairo_get_line_width (_SELF)); }
mask(*args)
click to toggle source
static VALUE cr_mask_generic (int argc, VALUE *argv, VALUE self) { VALUE arg1, arg2, arg3; int n; n = rb_scan_args (argc, argv, "12", &arg1, &arg2, &arg3); if (n == 1) { return cr_mask (self, arg1); } else if (n == 3) { return cr_mask_surface (self, arg1, arg2, arg3); } else { rb_raise (rb_eArgError, "invalid argument (expect (pattern) or (surface, x, y))"); } }
matrix()
click to toggle source
static VALUE cr_get_matrix (VALUE self) { cairo_matrix_t matrix; cairo_get_matrix (_SELF, &matrix); cr_check_status (_SELF); return CRMATRIX2RVAL (&matrix); }
miter_limit()
click to toggle source
static VALUE cr_get_miter_limit (VALUE self) { return rb_float_new (cairo_get_miter_limit (_SELF)); }
move_to(p1, p2)
click to toggle source
static VALUE cr_move_to (VALUE self, VALUE x, VALUE y) { cairo_move_to (_SELF, NUM2DBL (x), NUM2DBL (y)); cr_check_status (_SELF); return self; }
new_path()
click to toggle source
Path
creation functions
static VALUE cr_new_path (VALUE self) { cairo_new_path (_SELF); cr_check_status (_SELF); return self; }
new_sub_path()
click to toggle source
static VALUE cr_new_sub_path (VALUE self) { cairo_new_sub_path (_SELF); cr_check_status (_SELF); return self; }
operator()
click to toggle source
Query functions
static VALUE cr_get_operator (VALUE self) { return INT2FIX (cairo_get_operator (_SELF)); }
paint(*args)
click to toggle source
static VALUE cr_paint_generic (int argc, VALUE *argv, VALUE self) { VALUE alpha; int n; n = rb_scan_args (argc, argv, "01", &alpha); if (n == 0 || (n == 1 && NIL_P (alpha))) { return cr_paint (self); } if (n == 1) { return cr_paint_with_alpha (self, alpha); } else { rb_raise (rb_eArgError, "invalid argument (expect () or (alpha))"); } }
path_extents()
click to toggle source
static VALUE cr_path_extents (VALUE self) { double x1, y1, x2, y2; cairo_path_extents (_SELF, &x1, &y1, &x2, &y2); cr_check_status (_SELF); return rb_ary_new3 (4, rb_float_new(x1), rb_float_new(y1), rb_float_new(x2), rb_float_new(y2)); }
pop_group(*args)
click to toggle source
static VALUE cr_pop_group_generic (int argc, VALUE *argv, VALUE self) { VALUE to_source; rb_scan_args (argc, argv, "01", &to_source); if (RVAL2CBOOL (to_source)) return cr_pop_group_to_source (self); else return cr_pop_group (self); }
pop_group_to_source()
click to toggle source
static VALUE cr_pop_group_to_source (VALUE self) { cairo_pop_group_to_source (_SELF); cr_check_status (_SELF); return Qnil; }
push_group(*args)
click to toggle source
static VALUE cr_push_group (int argc, VALUE *argv, VALUE self) { VALUE result = Qnil; VALUE content, pop_to_source; rb_scan_args (argc, argv, "02", &content, &pop_to_source); if (NIL_P(content)) cairo_push_group (_SELF); else cairo_push_group_with_content (_SELF, RVAL2CRCONTENT(content)); cr_check_status (_SELF); if (rb_block_given_p ()) { int state = 0; if (NIL_P (pop_to_source)) pop_to_source = Qtrue; result = rb_protect (rb_yield, self, &state); if (cairo_status(_SELF) == CAIRO_STATUS_SUCCESS) { if (RVAL2CBOOL (pop_to_source)) cr_pop_group_to_source (self); else result = cr_pop_group (self); } if (state) rb_jump_tag (state); } return result; }
raw_address()
click to toggle source
static VALUE cr_raw_address (VALUE self) { return PTR2NUM (_SELF); }
rectangle(p1, p2, p3, p4)
click to toggle source
static VALUE cr_rectangle (VALUE self, VALUE x, VALUE y, VALUE width, VALUE height) { cairo_rectangle (_SELF, NUM2DBL (x), NUM2DBL (y), NUM2DBL (width), NUM2DBL (height)); cr_check_status (_SELF); return self; }
reference_count()
click to toggle source
static VALUE cr_get_reference_count (VALUE self) { cairo_t *cr; unsigned int reference_count; cr = _SELF; reference_count = cairo_get_reference_count (cr); return UINT2NUM (reference_count); }
rel_curve_to(*args)
click to toggle source
static VALUE cr_rel_curve_to_generic (int argc, VALUE *argv, VALUE self) { VALUE dx1, dy1, dx2, dy2, dx3, dy3; rb_scan_args (argc, argv, "42", &dx1, &dy1, &dx2, &dy2, &dx3, &dy3); if (!(argc == 4 || argc == 6)) { VALUE inspected_arg = rb_inspect (rb_ary_new4 (argc, argv)); rb_raise (rb_eArgError, "invalid argument: %s (expect " "(dx1, dy1, dx2, dy2) (quadratic) or " "(dx1, dy1, dx2, dy2, dx3, dy3) (cubic))", StringValuePtr (inspected_arg)); } if (argc == 4) return cr_rel_quadratic_curve_to (self, dx1, dy1, dx2, dy2); else return cr_rel_curve_to (self, dx1, dy1, dx2, dy2, dx3, dy3); }
rel_line_to(p1, p2)
click to toggle source
static VALUE cr_rel_line_to (VALUE self, VALUE x, VALUE y) { cairo_rel_line_to (_SELF, NUM2DBL (x), NUM2DBL (y)); cr_check_status (_SELF); return self; }
rel_move_to(p1, p2)
click to toggle source
static VALUE cr_rel_move_to (VALUE self, VALUE x, VALUE y) { cairo_rel_move_to (_SELF, NUM2DBL (x), NUM2DBL (y)); cr_check_status (_SELF); return self; }
reset_clip()
click to toggle source
Clipping
static VALUE cr_reset_clip (VALUE self) { cairo_reset_clip (_SELF); cr_check_status (_SELF); return self; }
restore()
click to toggle source
static VALUE cr_restore (VALUE self) { cairo_restore (_SELF); cr_check_status (_SELF); return Qnil; }
rotate(p1)
click to toggle source
static VALUE cr_rotate (VALUE self, VALUE radians) { cairo_rotate (_SELF, NUM2DBL (radians)); cr_check_status (_SELF); return self; }
save()
click to toggle source
static VALUE cr_save (VALUE self) { VALUE result = Qnil; cairo_save (_SELF); cr_check_status (_SELF); if (rb_block_given_p ()) { result = rb_ensure (rb_yield, self, cr_restore, self); } return result; }
scale(p1, p2)
click to toggle source
static VALUE cr_scale (VALUE self, VALUE sx, VALUE sy) { cairo_scale (_SELF, NUM2DBL (sx), NUM2DBL (sy)); cr_check_status (_SELF); return self; }
scaled_font()
click to toggle source
static VALUE cr_get_scaled_font (VALUE self) { return CRSCALEDFONT2RVAL (cairo_get_scaled_font (_SELF)); }
select_font_face(p1 = v1, p2 = v2, p3 = v3)
click to toggle source
Font/Text functions
static VALUE cr_select_font_face (int argc, VALUE *argv, VALUE self) { VALUE rb_family, rb_slant, rb_weight; const char *family; cairo_font_slant_t slant; cairo_font_weight_t weight; rb_scan_args(argc, argv, "03", &rb_family, &rb_slant, &rb_weight); if (NIL_P (rb_family)) { family = ""; } else if (rb_cairo__is_kind_of (rb_family, rb_cString)) { family = RSTRING_PTR (rb_family); } else if (rb_cairo__is_kind_of (rb_family, rb_cSymbol)) { family = rb_id2name (SYM2ID (rb_family)); } else { rb_raise (rb_eArgError, "family name should be nil, String or Symbol: %s", rb_cairo__inspect (rb_family)); } if (NIL_P (rb_slant)) slant = CAIRO_FONT_SLANT_NORMAL; else slant = RVAL2CRFONTSLANT (rb_slant); if (NIL_P (rb_weight)) weight = CAIRO_FONT_WEIGHT_NORMAL; else weight = RVAL2CRFONTWEIGHT (rb_weight); cairo_select_font_face (_SELF, family, slant, weight); cr_check_status (_SELF); return self; }
set_antialias(p1)
click to toggle source
static VALUE cr_set_antialias(VALUE self, VALUE antialias) { cairo_set_antialias(_SELF, RVAL2CRANTIALIAS (antialias)); cr_check_status(_SELF); return self; }
set_dash(p1, p2 = v2)
click to toggle source
static VALUE cr_set_dash (int argc, VALUE *argv, VALUE self) { VALUE dash_array, rb_offset; double offset; cairo_bool_t is_num; rb_scan_args(argc, argv, "11", &dash_array, &rb_offset); is_num = rb_cairo__is_kind_of (dash_array, rb_cNumeric); if (!(NIL_P (dash_array) || is_num)) { Check_Type (dash_array, T_ARRAY); } if (NIL_P (rb_offset)) offset = 0.0; else offset = NUM2DBL (rb_offset); if (is_num) { double values[1]; values[0] = NUM2DBL (dash_array); cairo_set_dash (_SELF, values, 1, offset); } else if (NIL_P (dash_array) || RARRAY_LEN (dash_array) == 0) { cairo_set_dash (_SELF, NULL, 0, offset); } else { int i, length; double *values; length = (int) RARRAY_LEN (dash_array); values = ALLOCA_N (double, length); if (!values) { rb_cairo_check_status (CAIRO_STATUS_NO_MEMORY); } for (i = 0; i < length; i++) { values[i] = NUM2DBL (RARRAY_PTR (dash_array)[i]); } cairo_set_dash (_SELF, values, length, offset); } cr_check_status (_SELF); return self; }
set_fill_rule(p1)
click to toggle source
static VALUE cr_set_fill_rule (VALUE self, VALUE rule) { cairo_set_fill_rule (_SELF, RVAL2CRFILLRULE (rule)); cr_check_status (_SELF); return self; }
set_font_face(p1)
click to toggle source
static VALUE cr_set_font_face (VALUE self, VALUE face) { cairo_set_font_face (_SELF, NIL_P (face) ? NULL : RVAL2CRFONTFACE (face)); cr_check_status (_SELF); return self; }
set_font_matrix(p1)
click to toggle source
static VALUE cr_set_font_matrix (VALUE self, VALUE matrix) { cairo_set_font_matrix (_SELF, RVAL2CRMATRIX (matrix)); cr_check_status (_SELF); return self; }
set_font_options(p1)
click to toggle source
static VALUE cr_set_font_options (VALUE self, VALUE options) { cairo_set_font_options (_SELF, RVAL2CRFONTOPTIONS (options)); cr_check_status (_SELF); return self; }
set_font_size(p1)
click to toggle source
static VALUE cr_set_font_size (VALUE self, VALUE scale) { cairo_set_font_size (_SELF, NUM2DBL (scale)); cr_check_status (_SELF); return self; }
set_line_cap(p1)
click to toggle source
static VALUE cr_set_line_cap (VALUE self, VALUE cap) { cairo_set_line_cap (_SELF, RVAL2CRLINECAP (cap)); cr_check_status (_SELF); return self; }
set_line_join(p1)
click to toggle source
static VALUE cr_set_line_join (VALUE self, VALUE join) { cairo_set_line_join (_SELF, RVAL2CRLINEJOIN (join)); cr_check_status (_SELF); return self; }
set_line_width(p1)
click to toggle source
static VALUE cr_set_line_width (VALUE self, VALUE width) { cairo_set_line_width (_SELF, NUM2DBL (width)); return self; }
set_matrix(p1)
click to toggle source
static VALUE cr_set_matrix (VALUE self, VALUE matrix) { cairo_set_matrix (_SELF, RVAL2CRMATRIX (matrix)); cr_check_status (_SELF); return self; }
set_miter_limit(p1)
click to toggle source
static VALUE cr_set_miter_limit (VALUE self, VALUE limit) { cairo_set_miter_limit (_SELF, NUM2DBL (limit)); cr_check_status (_SELF); return self; }
set_operator(p1)
click to toggle source
Modify state
static VALUE cr_set_operator (VALUE self, VALUE operator) { cairo_set_operator (_SELF, RVAL2CROPERATOR (operator)); cr_check_status (_SELF); return self; }
set_scaled_font(p1)
click to toggle source
static VALUE cr_set_scaled_font (VALUE self, VALUE scaled_font) { cairo_set_scaled_font (_SELF, RVAL2CRSCALEDFONT (scaled_font)); cr_check_status (_SELF); return self; }
set_source(*args)
click to toggle source
static VALUE cr_set_source_generic (int argc, VALUE *argv, VALUE self) { VALUE arg1, arg2, arg3, arg4; int n; n = rb_scan_args (argc, argv, "13", &arg1, &arg2, &arg3, &arg4); if (n == 1 && rb_cairo__is_kind_of (arg1, rb_cArray)) { return cr_set_source_rgba (argc, argv, self); } else if (n == 1 && rb_cairo__is_kind_of (arg1, rb_cCairo_Surface)) { return cr_set_source_surface (self, arg1, rb_float_new (0), rb_float_new (0)); } else if (n == 1) { return cr_set_source (self, arg1); } else if (n == 3 && rb_cairo__is_kind_of (arg1, rb_cCairo_Surface)) { return cr_set_source_surface (self, arg1, arg2, arg3); } else if (n == 3 || n == 4) { return cr_set_source_rgba (argc, argv, self); } else { rb_raise (rb_eArgError, "invalid argument (expect " "(red, green, blue), (red, green, blue, alpha), " "([red, green, blue]), ([red, green, blue, alpha]), " "(surface), (pattern) or (surface, x, y))"); } }
set_source_rgb(*args)
click to toggle source
static VALUE cr_set_source_rgb (int argc, VALUE *argv, VALUE self) { VALUE red, green, blue; int n; n = rb_scan_args (argc, argv, "12", &red, &green, &blue); if (n == 1 && rb_cairo__is_kind_of (red, rb_cArray)) { VALUE ary = red; n = (int) RARRAY_LEN (ary); red = rb_ary_entry (ary, 0); green = rb_ary_entry (ary, 1); blue = rb_ary_entry (ary, 2); } if (n == 3) { cairo_set_source_rgb (_SELF, NUM2DBL (red), NUM2DBL (green), NUM2DBL (blue)); } else { VALUE inspected_arg = rb_inspect (rb_ary_new4 (argc, argv)); rb_raise (rb_eArgError, "invalid RGB: %s (expect " "(red, green, blue) or ([red, green, blue]))", StringValuePtr (inspected_arg)); } cr_check_status (_SELF); rb_ivar_set (self, cr_id_source, Qnil); return self; }
set_source_rgba(*args)
click to toggle source
static VALUE cr_set_source_rgba (int argc, VALUE *argv, VALUE self) { VALUE red, green, blue, alpha; int n; n = rb_scan_args (argc, argv, "13", &red, &green, &blue, &alpha); if (n == 1 && rb_cairo__is_kind_of (red, rb_cArray)) { VALUE ary = red; n = (int) RARRAY_LEN (ary); red = rb_ary_entry (ary, 0); green = rb_ary_entry (ary, 1); blue = rb_ary_entry (ary, 2); alpha = rb_ary_entry (ary, 3); } if (n == 3) { cairo_set_source_rgb (_SELF, NUM2DBL (red), NUM2DBL (green), NUM2DBL (blue)); } else if (n == 4) { cairo_set_source_rgba (_SELF, NUM2DBL (red), NUM2DBL (green), NUM2DBL (blue), NUM2DBL (alpha)); } else { VALUE inspected_arg = rb_inspect (rb_ary_new4 (argc, argv)); rb_raise (rb_eArgError, "invalid RGB%s: %s (expect " "(red, green, blue), (red, green, blue, alpha), " "([red, green, blue]) or ([red, green, blue, alpha]))", n == 4 ? "A" : "", StringValuePtr (inspected_arg)); } cr_check_status (_SELF); rb_ivar_set (self, cr_id_source, Qnil); return self; }
set_tolerance(p1)
click to toggle source
static VALUE cr_set_tolerance (VALUE self, VALUE tolerance) { cairo_set_tolerance (_SELF, NUM2DBL (tolerance)); cr_check_status (_SELF); return self; }
show_glyphs(p1)
click to toggle source
static VALUE cr_show_glyphs (VALUE self, VALUE rb_glyphs) { int count; cairo_glyph_t *glyphs; RB_CAIRO__GLYPHS_TO_ARRAY (rb_glyphs, glyphs, count); cairo_show_glyphs (_SELF, glyphs, count); cr_check_status (_SELF); return self; }
show_page()
click to toggle source
static VALUE cr_show_page (VALUE self) { cairo_show_page (_SELF); cr_check_status (_SELF); return self; }
show_text(p1)
click to toggle source
static VALUE cr_show_text (VALUE self, VALUE utf8) { cairo_show_text (_SELF, RVAL2CSTR (utf8)); cr_check_status (_SELF); return self; }
show_text_glyphs(p1, p2, p3, p4)
click to toggle source
static VALUE cr_show_text_glyphs (VALUE self, VALUE rb_utf8, VALUE rb_glyphs, VALUE rb_clusters, VALUE rb_cluster_flags) { cairo_t *cr; const char *utf8; int utf8_len; cairo_glyph_t *glyphs = NULL; int num_glyphs = 0; cairo_text_cluster_t *clusters = NULL; int num_clusters = 0; cairo_text_cluster_flags_t cluster_flags; cr = _SELF; utf8 = RSTRING_PTR (rb_utf8); utf8_len = (int) RSTRING_LEN (rb_utf8); rb_cairo__glyphs_from_ruby_object (rb_glyphs, &glyphs, &num_glyphs); rb_cairo__text_clusters_from_ruby_object (rb_clusters, &clusters, &num_clusters); cluster_flags = RVAL2CRTEXTCLUSTERFLAGS (rb_cluster_flags); cairo_show_text_glyphs (cr, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags); if (glyphs) cairo_glyph_free (glyphs); if (clusters) cairo_text_cluster_free (clusters); return self; }
source()
click to toggle source
static VALUE cr_get_source (VALUE self) { VALUE rb_source = Qnil; cairo_pattern_t *source; source = cairo_get_source (_SELF); if (source) { rb_cairo_check_status (cairo_pattern_status (source)); rb_source = rb_ivar_get (self, cr_id_source); if (NIL_P (rb_source) || RVAL2CRPATTERN (rb_source) != source) { rb_source = CRPATTERN2RVAL (source); rb_ivar_set (self, cr_id_source, rb_source); } } else { rb_source = Qnil; rb_ivar_set (self, cr_id_source, rb_source); } return rb_source; }
stroke(*args)
click to toggle source
static VALUE cr_stroke (int argc, VALUE *argv, VALUE self) { VALUE preserve; rb_scan_args (argc, argv, "01", &preserve); if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } if (RVAL2CBOOL (preserve)) cairo_stroke_preserve (_SELF); else cairo_stroke (_SELF); cr_check_status (_SELF); return self; }
stroke_extents()
click to toggle source
Rectangular extents
static VALUE cr_stroke_extents (VALUE self) { double extents[4]; if (rb_block_given_p ()) { cr_new_path (self); rb_yield (self); } cairo_stroke_extents (_SELF, extents, extents + 1, extents + 2, extents + 3); return rb_cairo__float_array (extents, 4); }
stroke_preserve(&block)
click to toggle source
# File lib/cairo/context.rb, line 17 def stroke_preserve(&block) stroke(true, &block) end
tag(*args)
click to toggle source
static VALUE cr_tag (int argc, VALUE *argv, VALUE self) { VALUE rb_name; VALUE rb_attributes; const char *name; const char *attributes = NULL; rb_scan_args (argc, argv, "11", &rb_name, &rb_attributes); name = RVAL2CSTR (rb_name); if (!NIL_P (rb_attributes)) attributes = RVAL2CSTR (rb_attributes); cairo_tag_begin (_SELF, name, attributes); cr_check_status (_SELF); if (rb_block_given_p ()) { rb_cairo_context_tag_ensure_data_t data; data.self = self; data.name = name; return rb_ensure (rb_yield, self, cr_tag_ensure, (VALUE)&data); } else { return Qnil; } }
target()
click to toggle source
static VALUE cr_get_target (VALUE self) { cairo_surface_t *surface; VALUE rb_surface = Qnil; surface = cairo_get_target (_SELF); rb_cairo_check_status (cairo_surface_status (surface)); if (RTEST (rb_ivar_defined (self, cr_id_surface))) rb_surface = rb_ivar_get (self, cr_id_surface); if (NIL_P (rb_surface) || RVAL2CRSURFACE (rb_surface) != surface) { rb_surface = CRSURFACE2RVAL (surface); rb_ivar_set (self, cr_id_surface, rb_surface); } return rb_surface; }
text_extents(p1)
click to toggle source
static VALUE cr_text_extents (VALUE self, VALUE utf8) { cairo_text_extents_t extents; cairo_text_extents (_SELF, StringValuePtr (utf8), &extents); cr_check_status (_SELF); return CRTEXTEXTENTS2RVAL (&extents); }
text_path(p1)
click to toggle source
static VALUE cr_text_path (VALUE self, VALUE utf8) { cairo_text_path (_SELF, StringValuePtr (utf8)); cr_check_status (_SELF); return self; }
to_ptr()
click to toggle source
static VALUE cr_to_ptr (VALUE self) { if (NIL_P (rb_cairo__cFFIPointer)) return Qnil; return rb_funcall (rb_cairo__cFFIPointer, rb_intern ("new"), 1, PTR2NUM (_SELF)); }
tolerance()
click to toggle source
static VALUE cr_get_tolerance (VALUE self) { return rb_float_new (cairo_get_tolerance (_SELF)); }
transform(p1)
click to toggle source
static VALUE cr_transform (VALUE self, VALUE matrix) { cairo_transform (_SELF, RVAL2CRMATRIX (matrix)); cr_check_status (_SELF); return self; }
translate(p1, p2)
click to toggle source
static VALUE cr_translate (VALUE self, VALUE tx, VALUE ty) { cairo_translate (_SELF, NUM2DBL (tx), NUM2DBL (ty)); cr_check_status (_SELF); return self; }
user_to_device(p1, p2)
click to toggle source
static VALUE cr_user_to_device (VALUE self, VALUE x, VALUE y) { double pair[2]; pair[0] = NUM2DBL (x); pair[1] = NUM2DBL (y); cairo_user_to_device (_SELF, pair, pair + 1); cr_check_status (_SELF); return rb_cairo__float_array (pair, 2); }
user_to_device_distance(p1, p2)
click to toggle source
static VALUE cr_user_to_device_distance (VALUE self, VALUE dx, VALUE dy) { double pair[2]; pair[0] = NUM2DBL (dx); pair[1] = NUM2DBL (dy); cairo_user_to_device_distance (_SELF, pair, pair + 1); cr_check_status (_SELF); return rb_cairo__float_array (pair, 2); }