1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
|