summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_drawing.h
diff options
context:
space:
mode:
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: