Advertisement
genete

Cairo straight operator function

Oct 1st, 2012
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1.  
  2. #include <cairo.h>
  3.  
  4. int main (int argc, char *argv[])
  5. {
  6.    
  7.     float alpha=0.65;
  8.     float alpha_circle=0.8;
  9.    
  10.     cairo_surface_t *surface;
  11.     cairo_t* cr;
  12.     surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 480, 270);
  13.     cr=cairo_create(surface);
  14.    
  15.     // Draw Circle
  16.     cairo_save(cr);
  17.     cairo_set_source_rgba(cr, 1.0, 0.5, 0.5, 1.0);
  18.     cairo_move_to(cr, 140.0+70.0, 117.0);
  19.     cairo_arc(cr, 140.0, 117.0, 70.0, 0.0, 2*3.14159);
  20.     cairo_clip(cr);
  21.     cairo_paint_with_alpha(cr, alpha_circle);
  22.     cairo_restore(cr);
  23.    
  24.     //Prepare rectangle
  25.     cairo_save(cr);
  26.     cairo_set_source_rgba(cr, 0.26, 1.0, 1.0, 1.0);
  27.     cairo_rectangle(cr, 164.0, 114.0, 186.0, 103.0);
  28.     cairo_clip(cr);
  29.    
  30.     // Draw the surface over itself with 1.0-alpha
  31.     cairo_surface_t* dest=cairo_surface_reference(cairo_get_target(cr));
  32.     cairo_surface_flush(dest);
  33.     cairo_t *destcr=cairo_create(dest);
  34.     cairo_set_source_surface(destcr, dest, 0, 0);
  35.     cairo_set_operator(destcr, CAIRO_OPERATOR_SOURCE);
  36.     cairo_paint_with_alpha(cr, 1.0-alpha);
  37.     cairo_surface_mark_dirty(dest);
  38.     cairo_surface_destroy(dest);
  39.     cairo_destroy(destcr);
  40.    
  41.     // Effectively draw the retangle
  42.     cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
  43.     cairo_paint_with_alpha(cr, alpha);
  44.  
  45.     cairo_restore(cr);
  46.     cairo_destroy(cr);
  47.    
  48.     cairo_surface_write_to_png(surface, "straight-cairo-full.png");
  49.     cairo_surface_destroy(surface);
  50.    
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement