OSDN Git Service

Session load and save.
[fukui-no-namari/dialektos.git] / src / text_view_pointer_trackable.hxx
1 /*
2  * Copyright (C) 2009 by Aiwota Programmer
3  * aiwotaprog@tetteke.tk
4  *
5  * This file is part of Dialektos.
6  *
7  * Dialektos is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * Dialektos is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Dialektos.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef TEXT_VIEW_POINTER_TRACKABLE_HXX
22 #define TEXT_VIEW_POINTER_TRACKABLE_HXX
23
24 #include "text_view_layoutable.hxx"
25
26
27 namespace dialektos {
28
29 namespace text_element {
30   class Plain;
31   class Anchor;
32 }
33
34 namespace text_view {
35
36
37 class PointerTrackable: public Layoutable {
38 public:
39   PointerTrackable();
40   virtual ~PointerTrackable();
41 protected:
42   virtual bool on_button_press_event(GdkEventButton*);
43   virtual bool on_button_release_event(GdkEventButton*);
44   virtual bool on_motion_notify_event(GdkEventMotion*);
45
46   virtual void on_anchor_click_event(const text_element::Anchor&);
47   virtual void on_anchor_hovered_event(const text_element::Anchor&);
48
49 private:
50   bool on_left_button_press_event(GdkEventButton*);
51   bool on_right_button_press_event(GdkEventButton*);
52
53   /*!
54    *
55    *  param x position on the widget
56    *  param y position on the widget
57    */
58   void set_hovered(gdouble x, gdouble y);
59   void set_cursor(gdouble x, gdouble y);
60
61 protected:
62   const text_element::Plain* pressed_element_;
63   int pressed_index_;
64   const text_element::Plain* hovered_element_;
65   int hovered_index_;
66   const text_element::Anchor* pressed_anchor_;
67 };
68
69
70 } // namespace text_view
71
72
73 } // namespace dialektos
74
75 #endif