00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __TOOLS_LASERGUI_VISDISPLAY_H_
00024 #define __TOOLS_LASERGUI_VISDISPLAY_H_
00025
00026 #include <cairomm/context.h>
00027 #include <string>
00028 #include <map>
00029
00030 #include <interfaces/VisualDisplay2DInterface.h>
00031
00032 class VisualDisplay2D
00033 {
00034 public:
00035 VisualDisplay2D();
00036 ~VisualDisplay2D();
00037
00038 void set_interface(fawkes::VisualDisplay2DInterface *interface);
00039
00040 void process_messages();
00041 void draw(Cairo::RefPtr<Cairo::Context> cr);
00042
00043 class Shape {
00044 public:
00045 Shape(unsigned int id, unsigned int owner,
00046 fawkes::VisualDisplay2DInterface::LineStyle line_style = fawkes::VisualDisplay2DInterface::LS_SOLID,
00047 unsigned char r = 0, unsigned char g = 0,
00048 unsigned char b = 0, unsigned char a = 0);
00049 virtual ~Shape();
00050 virtual void draw(Cairo::RefPtr<Cairo::Context> &cr) = 0;
00051 inline void apply_style(Cairo::RefPtr<Cairo::Context> &cr)
00052 { cr->set_source_rgba(_color_r, _color_g, _color_b, _color_a); }
00053
00054 inline unsigned int id() { return _id; }
00055 inline unsigned int owner() { return _owner; }
00056 inline void color(float &r, float &g, float &b, float &a)
00057 { r = _color_r; g = _color_g; b = _color_b; a = _color_a; }
00058 protected:
00059
00060 fawkes::VisualDisplay2DInterface::LineStyle _line_style;
00061 float _color_r;
00062 float _color_g;
00063 float _color_b;
00064 float _color_a;
00065
00066 unsigned int _id;
00067 unsigned int _owner;
00068 };
00069
00070 class Line : public Shape {
00071 public:
00072 Line(float x1, float y1, float x2, float y2,
00073 unsigned int id, unsigned int owner,
00074 fawkes::VisualDisplay2DInterface::LineStyle line_style = fawkes::VisualDisplay2DInterface::LS_SOLID,
00075 unsigned char r = 0, unsigned char g = 0,
00076 unsigned char b = 0, unsigned char a = 0);
00077 void draw(Cairo::RefPtr<Cairo::Context> &cr);
00078 private:
00079 float __x1;
00080 float __y1;
00081 float __x2;
00082 float __y2;
00083 };
00084
00085 class Rectangle : public Shape {
00086 public:
00087 Rectangle(float x, float y, float width, float height,
00088 unsigned int id, unsigned int owner,
00089 fawkes::VisualDisplay2DInterface::LineStyle line_style = fawkes::VisualDisplay2DInterface::LS_SOLID,
00090 unsigned char r = 0, unsigned char g = 0,
00091 unsigned char b = 0, unsigned char a = 0);
00092 void draw(Cairo::RefPtr<Cairo::Context> &cr);
00093 private:
00094 float __x;
00095 float __y;
00096 float __width;
00097 float __height;
00098 };
00099
00100 class Circle : public Shape {
00101 public:
00102 Circle(float x, float y, float radius,
00103 unsigned int id, unsigned int owner,
00104 fawkes::VisualDisplay2DInterface::LineStyle line_style = fawkes::VisualDisplay2DInterface::LS_SOLID,
00105 unsigned char r = 0, unsigned char g = 0,
00106 unsigned char b = 0, unsigned char a = 0);
00107 void draw(Cairo::RefPtr<Cairo::Context> &cr);
00108 private:
00109 float __x;
00110 float __y;
00111 float __radius;
00112 };
00113
00114 class Text : public Shape {
00115 public:
00116 Text(float x, float y, std::string text,
00117 fawkes::VisualDisplay2DInterface::Anchor anchor,
00118 float size,
00119 unsigned int id, unsigned int owner,
00120 unsigned char r = 0, unsigned char g = 0,
00121 unsigned char b = 0, unsigned char a = 0);
00122 void draw(Cairo::RefPtr<Cairo::Context> &cr);
00123 private:
00124 float __x;
00125 float __y;
00126 std::string __text;
00127 float __size;
00128 fawkes::VisualDisplay2DInterface::Anchor __anchor;
00129 };
00130
00131 private:
00132 std::map<unsigned int, Shape *> __shapes;
00133 std::map<unsigned int, Shape *>::iterator __sit;
00134 fawkes::VisualDisplay2DInterface *__interface;
00135 };
00136
00137
00138 #endif