summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_drawing.h
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-07-26 22:46:17 +0100
committerComment <tim@gray.(none)>2013-07-26 22:46:17 +0100
commitf4170d6bfb763ad0af4002277a37dcd1692534d5 (patch)
treedb32d9753de780063e3afeb64764e13e5c4f5087 /rotord/src/nodes_drawing.h
parent3d7eea02aa7a155b84c8c74ecbfd55a1941a9297 (diff)
tidy files
Diffstat (limited to 'rotord/src/nodes_drawing.h')
-rw-r--r--rotord/src/nodes_drawing.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h
new file mode 100644
index 0000000..11df2d6
--- /dev/null
+++ b/rotord/src/nodes_drawing.h
@@ -0,0 +1,43 @@
+#ifndef ROTOR_NODES_DRAWING
+#define ROTOR_NODES_DRAWING
+
+#include "rotor.h"
+#include <cairo.h>
+
+namespace Rotor {
+ class Draw: public Image_node {
+ public:
+ Draw(){image=nullptr;};
+ Draw(map<string,string> &settings) {
+ base_settings(settings);
+ };
+ ~Draw(){ if (image) delete image;};
+ Draw* clone(map<string,string> &_settings) { return new Draw(_settings);};
+ Image *output(const Frame_spec &frame){
+ if (image_inputs.size()) {
+ if (image_inputs[0]->connection){
+ //copy incoming image **writable
+ if (image) delete image;
+ image=(((Image_node*)image_inputs[0]->connection)->get_output(frame))->clone();
+ }
+ else image->setup(frame.w,frame.h);
+ }
+ else image->setup(frame.w,frame.h); //do this twice or use a goto
+ //draw onto new or input image
+ 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);
+ return image;
+ }
+ private:
+ Image *image; //is an image generator
+ };
+}
+
+#endif \ No newline at end of file