#include #include #include void drawGradient (cairo_t *cr, double scaleFactor){ cairo_pattern_t *gradient; cairo_scale(cr, 1.0 / scaleFactor, 1.0 / scaleFactor); //scaling the gradient throug start and end gradient = cairo_pattern_create_linear (100.0 * scaleFactor, 100.0 * scaleFactor, 300.0 * scaleFactor, 300 * scaleFactor); cairo_pattern_add_color_stop_rgb(gradient, 0.0, 1.0, 0.0, 0.0); cairo_pattern_add_color_stop_rgb(gradient, 1.0, 0.0, 1.0, 1.0); cairo_set_source (cr, gradient); cairo_rectangle (cr, 0.0 * scaleFactor, 0.0 * scaleFactor, 400.0 * scaleFactor, 400.0 * scaleFactor); cairo_fill_preserve (cr); cairo_pattern_destroy(gradient); cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); cairo_set_line_width (cr, 2.0 * scaleFactor); cairo_stroke (cr); } int main (int argc, char *argv[]) { cairo_surface_t *surface; cairo_t *cr; int i; char fileString[128]; double scaleFactor; //test drawing gradients with different scales for (i = 0; i <= 11; i++) { scaleFactor = pow(2.0,(double) i); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 400, 400); cr = cairo_create (surface); drawGradient (cr, scaleFactor); cairo_destroy (cr); sprintf(fileString, "gradient_%d_%d.png", i, (int)scaleFactor); cairo_surface_write_to_png (surface, fileString); cairo_surface_destroy (surface); } return 0; }