item.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GCCV_ITEM_H
00026 #define GCCV_ITEM_H
00027
00028 #include <gcu/macros.h>
00029 #include <cairo.h>
00030
00052 #define GCCV_ITEM_PROP(type,member) \
00053 public: \
00054 void Set##member (type val) { \
00055 m_##member = val; \
00056 Invalidate (); \
00057 } \
00058 type Get##member (void) const {return m_##member;} \
00059 type &GetRef##member (void) {return m_##member;} \
00060 private: \
00061 type m_##member;
00062
00063 #define GCCV_ITEM_POS_PROP(type,member) \
00064 public: \
00065 void Set##member (type val) { \
00066 Invalidate (); \
00067 m_##member = val; \
00068 UpdateBounds (); \
00069 Invalidate (); \
00070 } \
00071 type Get##member (void) const {return m_##member;} \
00072 type &GetRef##member (void) {return m_##member;} \
00073 private: \
00074 type m_##member;
00075
00076 namespace gccv {
00077
00078 class Canvas;
00079 class Group;
00080 class ItemClient;
00081
00082 class Item
00083 {
00084 public:
00085 Item (Canvas *canvas);
00086 Item (Group *parent, ItemClient *client = NULL);
00087 virtual ~Item();
00088
00089 void GetBounds (double &x0, double &y0, double &x1, double &y1) const;
00090 void Invalidate () const;
00091 void SetVisible (bool visible);
00092
00093
00094 virtual double Distance (double x, double y, Item **item) const;
00095 virtual void Draw (cairo_t *cr, bool is_vector) const;
00096 virtual bool Draw (cairo_t *cr, double x0, double y0, double x1, double y1, bool is_vector) const;
00097 virtual void Move (double x, double y);
00098
00099 protected:
00100 void BoundsChanged ();
00101 virtual void UpdateBounds ();
00102 Canvas const *GetCanvas () const {return m_Canvas;}
00103
00104 protected:
00105 double m_x0, m_y0, m_x1, m_y1;
00106
00107 private:
00108 Canvas *m_Canvas;
00109 bool m_CachedBounds;
00110 bool m_NeedsRedraw;
00111
00112 GCU_POINTER_PROP (ItemClient, Client)
00113 GCU_POINTER_PROP (Group, Parent)
00114 GCU_RO_PROP (bool, Visible)
00115 GCCV_ITEM_PROP (cairo_operator_t, Operator);
00116 };
00117
00118 }
00119
00120 #endif // GCCV_ITEM_H