3 * Psychlops Standard Library (Universal)
5 * Last Modified 2005/10/18 by Kenchi HOSOKAWA
6 * (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
9 #ifndef HEADER_PSYCHLOPS_GRAPHIC_MODULE
10 #define HEADER_PSYCHLOPS_GRAPHIC_MODULE
12 #include "psychlops_g_fundamental.h"
30 class Ellipse; typedef Ellipse Oval;
38 static const Drawable *dummy;
39 static Drawable *prime;
40 static Group billboard;
41 static const bool prime_is_a_canvas();
44 virtual ~Drawable() = 0;
45 virtual int getWidth() const = 0;
46 virtual int getHeight() const = 0;
47 virtual const Point getCenter() const = 0; // means this Drawable's local center.
49 virtual Drawable& clear(const Color &col) = 0;
50 virtual Drawable& pix(const double x, const double y, const Color &col) = 0;
53 virtual Drawable& line(const Line &drawee, const Color &col) = 0;
54 virtual Drawable& line(const Line &drawee, const Stroke &strk) = 0;
55 virtual Drawable& rect(const Rectangle &drawee, const Color &col) = 0;
56 virtual Drawable& rect(const Rectangle &drawee, const Stroke &strk) = 0;
57 //virtual Drawable& rect(const Rectangle[] drawee, const Color &col) = 0;
58 //virtual Drawable& rect(const Rectangle[] drawee, const Stroke &strk) = 0;
59 virtual Drawable& ellipse(const Ellipse &drawee) = 0;
\r
60 virtual Drawable& ellipse(const Ellipse &drawee, const Color &col) = 0;
61 virtual Drawable& ellipse(const Ellipse &drawee, const Stroke &strk) = 0;
62 virtual Drawable& polygon(const Polygon &drawee) = 0;
63 virtual Drawable& polygon(const Polygon &drawee, const Color &col) = 0;
64 virtual Drawable& polygon(const Polygon &drawee, const Stroke &strk) = 0;
65 virtual Drawable& polyline(const PolyLine &drawee) = 0;
66 virtual Drawable& polyline(const PolyLine &drawee, const Color &col) = 0;
67 virtual Drawable& polyline(const PolyLine &drawee, const Stroke &strk) = 0;
68 virtual Drawable& figures(const Group &drawee) = 0;
70 virtual Drawable& image(const Image &img) = 0;
71 virtual Drawable& image(Image &img, const Rectangle &target_area, const Rectangle &source_rect) = 0;
72 virtual Drawable& image(const Image &img, const double x, const double y) = 0;
73 virtual Drawable& image(const Image &img, const double alpha) = 0;
74 //virtual Drawable& cacheImage(Image &img, bool on_off) = 0;
75 virtual Drawable& letters(Letters &let, const Color &col) = 0;
76 //virtual Drawable& letters(const Letters &let, const double x, const double y, const Color &col) = 0;
77 //virtual LettersCache cacheLetters(Letters &let) = 0;
80 class DrawableWithCache : public Drawable {
82 static DrawableWithCache *prime;
83 virtual void cacheImage(Image &img) = 0;
84 virtual void uncacheImage(Image &img) = 0;
85 virtual void cacheLetters(Letters &let) = 0;
86 virtual void uncacheLetters(Letters &let) = 0;
89 class Drawable3D : public DrawableWithCache {
91 static Drawable3D *prime;
92 virtual void camera() = 0;
93 virtual void light() = 0;
99 virtual ~Figure() = 0;
100 virtual const Point getDatum() const = 0;
101 virtual Figure& setDatum(const Point &p) = 0;
102 virtual Figure& centering(const Point &p) = 0;
103 virtual Figure& draw(Drawable &drawable = *Drawable::prime) = 0;
104 // virtual const Figure& draw(const double x, const double y, const double z = 0) const;
107 inline Figure& centering(const Figure& fig) { return centering(fig.getDatum()); }
108 inline Figure& centering(const Group& fig) { return centering(0,0); }
109 inline Figure& centering(const Drawable &target = *Drawable::prime) { return centering(target.getCenter()); }
110 inline Figure& centering(const double x, const double y, const double z = 0) { return centering(Point(x,y,z)); }
111 inline Figure& shift(const Point p) { Point n=getDatum(); n=n+p; return setDatum(n); }
112 inline Figure& shift(const double x, const double y, const double z = 0) { Point p(x,y,z);return shift(p); }
113 Figure& join(Group &fg);
116 class FigureDatum : virtual public Figure {
128 operator double() const;
129 operator Length() const;
130 double operator =(double val);
131 Length operator =(Length &val);
137 void operator =(Point &p);
144 using Figure::centering;
147 virtual const Point getDatum() const;
148 virtual FigureDatum& setDatum(const Point& p);
149 virtual FigureDatum& centering(const Point& p);
151 FigureDatum& centering(const Figure& fig);
152 FigureDatum& centering(const Drawable& target = *Drawable::prime);
153 FigureDatum& centering(const double x, const double y, const double z = 0);
154 FigureDatum& shift(const double x, const double y, const double z = 0);
159 class Group : virtual public FigureDatum {
162 enum ClippngType { NONE, RECT, STENCIL, ALPHA };
164 ClippngType clip_type;
165 double scissor_top, scissor_left, scissor_width, scissor_height;
168 using FigureDatum::datum;
170 std::vector<Figure *> contents;
175 Group& append(Figure &fig);
176 Group& append(Figure *fig);
177 Group& replace(int index, Figure *fig);
178 Group& remove(int index);
179 // inline Figure& operator [](int index) { return *(contents.at(index); }
181 virtual Group& draw(Drawable &drawable = *Drawable::prime);
183 virtual Group& clip(bool sw);
184 virtual Group& clip(const Rectangle &rect);
185 virtual Group& clip(Image *img);
191 } /* <- namespace Psycholops */