class Cairo::QuartzSurface
Quartz surface
Public Class Methods
new(*args)
click to toggle source
static VALUE
cr_quartz_surface_initialize (int argc, VALUE *argv, VALUE self)
{
id objc_object = nil;
CGContextRef context;
unsigned int width, height;
cairo_surface_t *surface = NULL;
cairo_format_t format = CAIRO_FORMAT_ARGB32;
VALUE arg1, arg2, arg3, rb_width, rb_height;
# ifdef HAVE_RUBY_COCOA
static VALUE rb_cOSXCGContextRef = Qnil;
# endif
rb_scan_args (argc, argv, "21", &arg1, &arg2, &arg3);
if (argc == 2)
{
rb_width = arg1;
rb_height = arg2;
}
else
{
switch (TYPE (arg1))
{
case T_NIL:
break;
case T_STRING:
case T_SYMBOL:
case T_FIXNUM:
format = RVAL2CRFORMAT (arg1);
break;
default:
# ifdef HAVE_RUBY_COCOA
if (NIL_P (rb_cOSXCGContextRef))
rb_cOSXCGContextRef =
rb_const_get (rb_const_get (rb_cObject, rb_intern ("OSX")),
rb_intern ("CGContextRef"));
# endif
# ifdef HAVE_RUBY_COCOA
if (RTEST (rb_obj_is_kind_of (arg1, rb_cOSXCGContextRef)))
{
rbobj_to_nsobj (arg1, &objc_object);
}
else
# endif
{
if (!NIL_P (rb_cairo__cFFIPointer) &&
RTEST (rb_obj_is_kind_of (arg1, rb_cairo__cFFIPointer)))
{
VALUE rb_objc_pointer;
rb_objc_pointer = rb_funcall (arg1,
rb_intern ("address"),
0);
objc_object = NUM2ULONG (rb_objc_pointer);
}
else
{
rb_raise (rb_eArgError,
"invalid argument (expect "
"(width, height), "
"(format, width, height), "
"(cg_context, width, height) or "
"(ffi_pointer, width, height)): %s",
rb_cairo__inspect (rb_ary_new3 (3, arg1, arg2, arg3)));
}
}
break;
}
rb_width = arg2;
rb_height = arg3;
}
width = NUM2UINT (rb_width);
height = NUM2UINT (rb_height);
if (objc_object == nil)
{
surface = cairo_quartz_surface_create (format, width, height);
}
else
{
context = (CGContextRef)objc_object;
surface =
cairo_quartz_surface_create_for_cg_context (context, width, height);
}
cr_surface_check_status (surface);
DATA_PTR (self) = surface;
if (rb_block_given_p ())
yield_and_finish (self);
return Qnil;
}
Public Instance Methods
cg_context()
click to toggle source
static VALUE
cr_quartz_surface_get_cg_context (VALUE self)
{
# ifdef HAVE_RUBY_COCOA
CGContextRef context;
id objc_object;
context = cairo_quartz_surface_get_cg_context (_SELF);
objc_object = (id)context;
return ocid_to_rbobj (Qnil, objc_object);
# else
rb_raise (rb_eNotImpError,
"%s#cg_context requires RubyCocoa",
rb_obj_classname(self));
return Qnil;
# endif
}