class Cairo::RasterSourcePattern

Public Class Methods

new(*args) click to toggle source
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;
}

Public Instance Methods

acquire() click to toggle source
static VALUE
cr_raster_source_pattern_acquire (VALUE self)
{
  if (!rb_block_given_p ())
    {
      VALUE inspected;

      inspected = rb_funcall (self, id_inspect, 0);
      rb_raise (rb_eArgError, "acquire block is missing: %s",
                RVAL2CSTR (inspected));
    }

  rb_iv_set (self, "@acquire", rb_block_proc ());

  return self;
}
copy() click to toggle source
static VALUE
cr_raster_source_pattern_copy (VALUE self)
{
  if (!rb_block_given_p ())
    {
      VALUE inspected;

      inspected = rb_funcall (self, id_inspect, 0);
      rb_raise (rb_eArgError, "copy block is missing: %s",
                RVAL2CSTR (inspected));
    }

  rb_iv_set (self, "@copy", rb_block_proc ());

  return self;
}
finish() click to toggle source
static VALUE
cr_raster_source_pattern_finish (VALUE self)
{
  if (!rb_block_given_p ())
    {
      VALUE inspected;

      inspected = rb_funcall (self, id_inspect, 0);
      rb_raise (rb_eArgError, "finish block is missing: %s",
                RVAL2CSTR (inspected));
    }

  rb_iv_set (self, "@finish", rb_block_proc ());

  return self;
}
release() click to toggle source
static VALUE
cr_raster_source_pattern_release (VALUE self)
{
  if (!rb_block_given_p ())
    {
      VALUE inspected;

      inspected = rb_funcall (self, id_inspect, 0);
      rb_raise (rb_eArgError, "release block is missing: %s",
                RVAL2CSTR (inspected));
    }

  rb_iv_set (self, "@release", rb_block_proc ());

  return self;
}
snapshot() click to toggle source
static VALUE
cr_raster_source_pattern_snapshot (VALUE self)
{
  if (!rb_block_given_p ())
    {
      VALUE inspected;

      inspected = rb_funcall (self, id_inspect, 0);
      rb_raise (rb_eArgError, "snapshot block is missing: %s",
                RVAL2CSTR (inspected));
    }

  rb_iv_set (self, "@snapshot", rb_block_proc ());

  return self;
}