synfig-studio  1.0.3
widget_ruler.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
21 /* ========================================================================= */
22 
23 /* === S T A R T =========================================================== */
24 
25 #ifndef __SYNFIG_STUDIO_WIDGET_RULER_H
26 #define __SYNFIG_STUDIO_WIDGET_RULER_H
27 
28 /* === H E A D E R S ======================================================= */
29 
30 #include <sigc++/signal.h>
31 #include <sigc++/slot.h>
32 
33 #include <gtkmm/drawingarea.h>
34 #include <pangomm/layout.h>
35 
36 #include <synfig/real.h>
37 #include <synfig/string.h>
38 
39 /* === M A C R O S ========================================================= */
40 
41 /* === T Y P E D E F S ===================================================== */
42 
43 /* === C L A S S E S & S T R U C T S ======================================= */
44 
45 namespace studio {
46 
47 class Widget_Ruler : public Gtk::DrawingArea
48 {
49 private:
50  bool is_vertical;
51  Glib::RefPtr<Pango::Layout> layout;
52  synfig::Real min;
53  synfig::Real max;
54  synfig::Real position;
55 
56  void draw_line(
57  const ::Cairo::RefPtr< ::Cairo::Context>& cr,
58  synfig::Real position,
59  synfig::Real size,
60  const Gdk::RGBA &color,
61  synfig::Real width,
62  synfig::Real height );
63 
64  void draw_text(
65  const ::Cairo::RefPtr< ::Cairo::Context>& cr,
66  synfig::Real position,
67  const synfig::String &text,
68  int size,
69  const Gdk::RGBA &color,
70  synfig::Real offset,
71  synfig::Real width,
72  synfig::Real height );
73 
74 public:
75  Widget_Ruler(bool is_vertical);
76  ~Widget_Ruler();
77 
78  synfig::Real get_screen_min() const
79  { return 0.0; }
80  synfig::Real get_screen_max() const
81  { return (synfig::Real)(is_vertical ? get_height() : get_width()); }
82 
83  synfig::Real position_to_screen(synfig::Real value) const
84  { return (value - min)/(max - min)*(get_screen_max()-get_screen_min()) + get_screen_min(); }
85  synfig::Real position_from_screen(synfig::Real value) const
86  { return (value - get_screen_min())/(get_screen_max()-get_screen_min())*(max - min) + min; }
87 
88  synfig::Real distance_to_screen(synfig::Real value) const
89  { return value/(max - min)*(get_screen_max()-get_screen_min()); }
90  synfig::Real distance_from_screen(synfig::Real value) const
91  { return value/(get_screen_max()-get_screen_min())*(max - min); }
92 
93  synfig::Real get_min() const { return min; }
94  void set_min(synfig::Real value);
95 
96  synfig::Real get_max() const { return max; }
97  void set_max(synfig::Real value);
98 
99  synfig::Real get_position() const { return position; }
100  void set_position(synfig::Real value);
101 
102  synfig::Real get_screen_position() const
103  { return position_to_screen(get_position()); }
104  void set_screen_position(synfig::Real value)
106 
107  bool on_draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr);
108 }; // END of class Widget_Ruler
109 
110 }; // END of namespace studio
111 
112 /* === E N D =============================================================== */
113 
114 #endif