diff options
| author | Comment <tim@gray.(none)> | 2013-07-26 22:46:17 +0100 |
|---|---|---|
| committer | Comment <tim@gray.(none)> | 2013-07-26 22:46:17 +0100 |
| commit | f4170d6bfb763ad0af4002277a37dcd1692534d5 (patch) | |
| tree | db32d9753de780063e3afeb64764e13e5c4f5087 /rotord/src/nodes_drawing.h | |
| parent | 3d7eea02aa7a155b84c8c74ecbfd55a1941a9297 (diff) | |
tidy files
Diffstat (limited to 'rotord/src/nodes_drawing.h')
| -rw-r--r-- | rotord/src/nodes_drawing.h | 43 |
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 |
