Esempio n. 1
0
static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
    const char *png_filename = "png.png";
    cairo_pattern_t *png, *red;
    cairo_content_t content;
    int png_width, png_height;
    int i, j;

    png_dimensions (png_filename, &content, &png_width, &png_height);

    png = cairo_pattern_create_raster_source ((void*)png_filename,
					      content, png_width, png_height);
    cairo_raster_source_pattern_set_acquire (png, png_acquire, release);

    red = cairo_pattern_create_raster_source (NULL,
					      CAIRO_CONTENT_COLOR, WIDTH, HEIGHT);
    cairo_raster_source_pattern_set_acquire (red, red_acquire, release);

    cairo_set_source_rgb (cr, 0, 0, 1);
    cairo_paint (cr);

    cairo_translate (cr, 0, (HEIGHT-png_height)/2);
    for (i = 0; i < 4; i++) {
	for (j = 0; j < 4; j++) {
	    cairo_pattern_t *source;
	    if ((i ^ j) & 1)
		source = red;
	    else
		source = png;
	    cairo_set_source (cr, source);
	    cairo_rectangle (cr, i * WIDTH/4, j * png_height/4, WIDTH/4, png_height/4);
	    cairo_fill (cr);
	}
    }

    cairo_pattern_destroy (red);
    cairo_pattern_destroy (png);

    return CAIRO_TEST_SUCCESS;
}
Esempio n. 2
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;
}