diff options
| author | Comment <tim@gray.(none)> | 2013-07-30 16:05:44 +0100 |
|---|---|---|
| committer | Comment <tim@gray.(none)> | 2013-07-30 16:05:44 +0100 |
| commit | 01f53fe4485b3c96c0f553e1cade69f77081b078 (patch) | |
| tree | 5717695bbc7460ff7e41649c050c50ff6f786341 /rotord/src/nodes_drawing.h | |
| parent | 7fd8fbbf69631a868b8274a25023023cde141a4c (diff) | |
| parent | c2237c2116ca551c0755821beadae3fac54547e7 (diff) | |
Merge branch 'master' of eclectronics.org@eclectronics.org:rotor
Diffstat (limited to 'rotord/src/nodes_drawing.h')
| -rw-r--r-- | rotord/src/nodes_drawing.h | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h index 11df2d6..05135d6 100644 --- a/rotord/src/nodes_drawing.h +++ b/rotord/src/nodes_drawing.h @@ -9,7 +9,11 @@ namespace Rotor { public: Draw(){image=nullptr;}; Draw(map<string,string> &settings) { + image=nullptr; base_settings(settings); + if(CAIRO_HAS_IMAGE_SURFACE==1) { + cerr<<"cairo has image surface"<<endl; + } }; ~Draw(){ if (image) delete image;}; Draw* clone(map<string,string> &_settings) { return new Draw(_settings);}; @@ -20,19 +24,40 @@ namespace Rotor { if (image) delete image; image=(((Image_node*)image_inputs[0]->connection)->get_output(frame))->clone(); } - else image->setup(frame.w,frame.h); + else { + if (!image) image =new Image(); + image->setup(frame.w,frame.h); + } } - else image->setup(frame.w,frame.h); //do this twice or use a goto + else { + if (!image) image =new Image(); + image->setup(frame.w,frame.h); //do this twice or use a goto + } //draw onto new or input image + image->convert32(); //pad frame out to 32 bits for cairo + //turns out cairo doesn't draw at all if the stride definition is wrong + //crashes like this though cairo_surface_t * cs = cairo_image_surface_create_for_data (image->RGBdata, CAIRO_FORMAT_RGB24, image->w, image->h, - image->getStride()); - cairo_t *c=cairo_create(cs); - cairo_rectangle(c, image->w/2, image->h/2, image->w, image->h); - cairo_set_source_rgb(c, 1.0, 0.0, 0.0); - cairo_fill(c); + image->w*4); + cairo_t * cr = cairo_create (cs); + cairo_rectangle(cr, 0,0, image->w/2, image->h/2); + cairo_set_source_rgb(cr, 0,1.0,0); //cairo colour is 0.0->1.0 + cairo_fill(cr); + + cairo_text_extents_t te; + cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); + cairo_select_font_face (cr, "Georgia", + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); + cairo_set_font_size (cr, 20); + cairo_text_extents (cr, "hello world!", &te); + cairo_move_to (cr, 20,20); + cairo_show_text (cr, "hello world!"); + cairo_fill(cr); + + image->convert24(); //convert frame back to 24 bits return image; } private: |
