Esempio n. 1
0
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;
}
Esempio n. 2
0
static VALUE
cr_surface_create_similar (VALUE self, VALUE content, VALUE width, VALUE height)
{
  cairo_surface_t *surface;

  surface = cairo_surface_create_similar (RVAL2CRSURFACE (self),
                                          RVAL2CRCONTENT (content),
                                          NUM2INT (width), NUM2INT (height));
  cr_surface_check_status (surface);
  return CRSURFACE2RVAL_WITH_DESTROY (surface);
}
Esempio n. 3
0
static VALUE
cr_raster_source_pattern_initialize (int argc, VALUE *argv, VALUE self)
{
  cairo_pattern_t *pattern;
  cairo_content_t content;
  int width, height;
  VALUE arg1, arg2, arg3;

  rb_scan_args (argc, argv, "21", &arg1, &arg2, &arg3);

  if (argc == 2)
    {
      content = CAIRO_CONTENT_COLOR_ALPHA;
      width = NUM2INT (arg1);
      height = NUM2INT (arg2);
    }
  else
    {
      content = RVAL2CRCONTENT (arg1);
      width = NUM2INT (arg2);
      height = NUM2INT (arg3);
    }

  pattern = cairo_pattern_create_raster_source (RVAL2POINTER (self),
                                                content, width, height);
  cr_pattern_check_status (pattern);

  DATA_PTR (self) = pattern;
  rb_iv_set (self, "@acquire", Qnil);
  rb_iv_set (self, "@release", Qnil);
  rb_iv_set (self, "@snapshot", Qnil);
  rb_iv_set (self, "@copy", Qnil);
  rb_iv_set (self, "@finish", Qnil);

  cairo_raster_source_pattern_set_acquire (pattern,
                                           cr_raster_source_acquire_callback,
                                           cr_raster_source_release_callback);
  cairo_raster_source_pattern_set_snapshot (pattern,
                                            cr_raster_source_snapshot_callback);
  cairo_raster_source_pattern_set_copy (pattern,
                                        cr_raster_source_copy_callback);
  cairo_raster_source_pattern_set_finish (pattern,
                                          cr_raster_source_finish_callback);

  return Qnil;
}