summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_drawing.h
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-07-30 16:05:44 +0100
committerComment <tim@gray.(none)>2013-07-30 16:05:44 +0100
commit01f53fe4485b3c96c0f553e1cade69f77081b078 (patch)
tree5717695bbc7460ff7e41649c050c50ff6f786341 /rotord/src/nodes_drawing.h
parent7fd8fbbf69631a868b8274a25023023cde141a4c (diff)
parentc2237c2116ca551c0755821beadae3fac54547e7 (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.h39
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: