[cairo] Bump: ImageSurface from a Pattern
Donn
donn.ingle at gmail.com
Thu Dec 11 23:45:10 PST 2014
Hello list. It's heading for the weekend, so I'm gonna risk a bump
before the quiet..
In the C below, my intent is:
1. Draw a 100px rectangle.
2. Set it as a clip - so that the size will be 100px.
3. pop_group into 'pat' var.
4. Get the surface of that pattern.
5. Get the width of that surface (i.e. 100px)
The code is giving me 400px - the size of the initial cr surface.
I am making many patterns and keeping them in my objects. I am drawing
from the pattern rather than re-drawing by cairo draw commands - for speed.
I'd like to know if those patterns are the size I want them to be, not
to mention keeping track of how much memory they are taking.
If I draw a 10px by 10px circle, then the pattern *should* be 10px by
10px - not the size of the main window, for example.
I hope someone can assist.
C code pasted:
---------
//gcc thiscode.c -o test -lm `pkg-config --cflags --libs cairo`
#include <cairo.h>
#include <stdio.h>
static cairo_t *get_surface(int width, int height)
{
cairo_surface_t *surface = cairo_image_surface_create
(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create (surface);
cairo_surface_destroy (surface);
return cr;
}
int main(void) {
cairo_t *cr = get_surface (400, 400);
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
cairo_pattern_t *pat;
cairo_push_group(cr);
cairo_rectangle (cr, 0,0,100,100);
cairo_clip_preserve (cr);//try to limit the size to 100 px
cairo_set_source_rgb (cr,1,1,1);
cairo_stroke (cr); //Draw it.
pat = cairo_pop_group(cr); //record it.
cairo_set_source(cr,pat); //Just..
cairo_paint(cr); //show it anyway.
cairo_surface_t *surface;
cairo_pattern_get_surface (pat, &surface); //Get the surface of the
pattern
//..and fail to get 100px as the width.
printf ("width: %d\n", cairo_image_surface_get_width (surface));
//Make a png for kicks.
cairo_surface_write_to_png (cairo_get_target (cr), "pat.png");
cairo_pattern_destroy(pat);
cairo_destroy(cr);
return 0;
}
---------
Thanks,
\d
More information about the cairo
mailing list