Edges are clickable now.
[av.git] / gtk / src / drawable.hpp
blob718095c087aa9719b8329c2b05bed08c7e54d962
1 #ifndef __DRAWABLE_HPP__
2 #define __DRAWABLE_HPP__
4 #include <glibmm.h>
5 #include <sigc++/signal.h>
6 #include <cairomm/context.h>
8 template <typename T>
9 class Drawable
11 public:
12 typedef sigc::signal<void, T> changed_signal_t;
14 Drawable(void) { }
15 virtual ~Drawable(void) { }
16 virtual changed_signal_t get_changed_signal(void) const;
17 virtual void draw(Cairo::RefPtr<Cairo::Context> cr) = 0;
18 virtual bool select(Cairo::RefPtr<Cairo::Context> cr, gdouble x, gdouble y) = 0;
19 virtual void deselect(void) = 0;
20 protected:
21 virtual void _set_changed(void);
22 private:
23 changed_signal_t _changed_signal;
26 template <typename T>
27 inline typename Drawable<T>::changed_signal_t Drawable<T>::get_changed_signal(void) const
29 return _changed_signal;
32 template <typename T>
33 inline void Drawable<T>::_set_changed(void)
35 _changed_signal.emit((T)this);
38 #endif