BEAST - Free Software Audio Synthesizer and Tracker  0.9.2
gxkscrollcanvas.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __GXK_SCROLL_CANVAS_H__
3 #define __GXK_SCROLL_CANVAS_H__
4 
5 #include <gxk/gxkutils.hh>
6 
7 G_BEGIN_DECLS
8 
9 /* --- type macros --- */
10 #define GXK_TYPE_SCROLL_CANVAS (gxk_scroll_canvas_get_type ())
11 #define GXK_SCROLL_CANVAS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GXK_TYPE_SCROLL_CANVAS, GxkScrollCanvas))
12 #define GXK_SCROLL_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXK_TYPE_SCROLL_CANVAS, GxkScrollCanvasClass))
13 #define GXK_IS_SCROLL_CANVAS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GXK_TYPE_SCROLL_CANVAS))
14 #define GXK_IS_SCROLL_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXK_TYPE_SCROLL_CANVAS))
15 #define GXK_SCROLL_CANVAS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GXK_TYPE_SCROLL_CANVAS, GxkScrollCanvasClass))
16 
17 
18 /* --- typedefs, enums & structures --- */
19 typedef enum /*< skip >*/
20 {
21  GXK_DRAG_AREA_RESIZE = 1 << 0,
22  GXK_DRAG_AREA_ENRICH = 1 << 1,
23  GXK_DRAG_AREA_REDUCE = 1 << 2,
24  GXK_DRAG_AREA_XOR = 1 << 3,
25  GXK_DRAG_RATIO_FIXED = 1 << 8,
26  GXK_DRAG_OFFSET_CENTERED = 1 << 9,
27 } GxkDragMode;
28 GxkDragMode gxk_drag_modifier_start (GdkModifierType key_mods);
29 GxkDragMode gxk_drag_modifier_next (GdkModifierType key_mods,
30  GxkDragMode last_drag_mods);
31 typedef enum /*< skip >*/
32 {
33  /* drag emission state */
34  GXK_DRAG_START, /* initial drag event */
35  GXK_DRAG_MOTION, /* drag motion, pointer moved */
36  GXK_DRAG_DONE, /* final drag motion */
37  GXK_DRAG_ABORT, /* drag abortion requested */
38  /* drag-action requests */
39  GXK_DRAG_UNHANDLED = GXK_DRAG_START, /* continue with button-press or similar */
40  GXK_DRAG_CONTINUE = GXK_DRAG_MOTION, /* request drag-motion emissions */
41  GXK_DRAG_HANDLED = GXK_DRAG_DONE, /* no further emissions */
42  GXK_DRAG_ERROR = GXK_DRAG_ABORT /* request abortion */
43 } GxkDragStatus;
44 typedef struct _GxkScrollCanvas GxkScrollCanvas;
45 typedef struct {
46 #define GXK_SCROLL_CANVAS_DRAG_FIELDS \
47  GtkWidget *widget; \
48  GdkWindow *drawable; \
49  /* modifier & config determined mode */ \
50  GxkDragMode mode : 16; \
51  /* mouse button */ \
52  guint button : 16; \
53  /* emission type: start/motion/done/abort */ \
54  GxkDragStatus type : 16; \
55  guint window_drag : 1; \
56  guint canvas_drag : 1; \
57  guint top_panel_drag : 1; \
58  guint left_panel_drag : 1; \
59  guint right_panel_drag : 1; \
60  guint bottom_panel_drag : 1; \
61  guint ___dummy1 : 2; \
62  /* whether start_x/start_y are in window */ \
63  guint start_confined : 1; \
64  /* whether current_x/current_y are in window */ \
65  guint current_confined : 1; \
66  gint start_x, start_y; \
67  gint current_x, current_y; \
68  /* user data: unhandled/continue/handled/error */ \
69  GxkDragStatus state : 16; \
70  guint ___dummy2 : 16;
71  /* the fields are expanded here via a macro, to allow
72  * "derived" structures with exactly the same field
73  * layout without field prefixes.
74  */
75  GXK_SCROLL_CANVAS_DRAG_FIELDS;
77 typedef struct {
78  guint index;
79  guint mtype;
80  GdkRectangle extends;
81  GdkWindow **windowp;
82  GdkDrawable *pixmap; /* backing store */
83  GdkRectangle coords; /* user coordinates */
84  gpointer user_data;
86 typedef struct {
87  gint top_panel_height;
88  gint left_panel_width;
89  gint right_panel_width;
90  gint bottom_panel_height;
91  gint canvas_width, max_canvas_width;
92  gint canvas_height, max_canvas_height;
95 {
96  GtkContainer parent_instance;
97  GxkScrollCanvasLayout layout;
98  GdkWindow *canvas, *top_panel, *left_panel, *right_panel, *bottom_panel;
99  GdkPixmap *canvas_pixmap;
100  GdkGC **color_gc; /* array of size class->n_colors */
101  guint n_pango_layouts;
102  PangoLayout **pango_layouts;
103  guint n_markers;
104  GxkScrollMarker *markers;
105  /* scroll offset */
106  gint x_offset, y_offset;
107  GtkAdjustment *hadjustment, *vadjustment;
108  guint scroll_timer;
109 };
110 typedef struct
111 {
112  GtkContainerClass parent_class;
113  /* widget config */
114  GdkEventMask canvas_events, top_panel_events, left_panel_events, right_panel_events, bottom_panel_events;
115  guint double_buffer_window : 1, double_buffer_canvas : 1;
116  guint double_buffer_top_panel : 1, double_buffer_left_panel : 1;
117  guint double_buffer_right_panel : 1, double_buffer_bottom_panel : 1;
118  guint auto_clear : 1; /* automatically clear non-double-buffered areas */
119  guint grab_focus : 1; /* automatically grab focus on button-press */
120  guint hscrollable : 1;
121  guint vscrollable : 1;
122  /* skin config */
123  guint n_colors; /* must be const across skin changes */
124  const GdkColor *colors;
125  gchar *image_file_name;
126  GdkColor image_tint;
127  gdouble image_saturation;
128  GSList *realized_widgets;
129  /* virtual methods */
130  void (*get_layout) (GxkScrollCanvas *self,
131  GxkScrollCanvasLayout *layout);
132  void (*set_scroll_adjustments) (GxkScrollCanvas *self,
133  GtkAdjustment *hadjustment,
134  GtkAdjustment *vadjustment);
135  void (*update_adjustments) (GxkScrollCanvas *self,
136  gboolean hadj,
137  gboolean vadj);
138  void (*adjustment_changed) (GxkScrollCanvas *self,
139  GtkAdjustment *adj);
140  void (*reallocate_contents) (GxkScrollCanvas *self,
141  gint xdiff,
142  gint ydiff);
143  void (*draw_window) (GxkScrollCanvas *self,
144  GdkWindow *drawable,
145  GdkRectangle *area);
146  void (*draw_canvas) (GxkScrollCanvas *self,
147  GdkWindow *drawable,
148  GdkRectangle *area);
149  void (*draw_top_panel) (GxkScrollCanvas *self,
150  GdkWindow *drawable,
151  GdkRectangle *area);
152  void (*draw_left_panel) (GxkScrollCanvas *self,
153  GdkWindow *drawable,
154  GdkRectangle *area);
155  void (*draw_right_panel) (GxkScrollCanvas *self,
156  GdkWindow *drawable,
157  GdkRectangle *area);
158  void (*draw_bottom_panel) (GxkScrollCanvas *self,
159  GdkWindow *drawable,
160  GdkRectangle *area);
161  void (*draw_marker) (GxkScrollCanvas *self,
162  GdkWindow *drawable,
163  GdkRectangle *area,
164  GxkScrollMarker *marker);
165  void (*handle_drag) (GxkScrollCanvas *self,
166  GxkScrollCanvasDrag *drag,
167  GdkEvent *event);
169 
170 
171 /* --- prototypes --- */
172 GType gxk_scroll_canvas_get_type (void);
173 void gxk_scroll_canvas_get_layout (GxkScrollCanvas *self,
174  GxkScrollCanvasLayout *layout);
175 void gxk_scroll_canvas_get_canvas_size (GxkScrollCanvas *self,
176  gint *width,
177  gint *height);
178 void gxk_scroll_canvas_set_hadjustment (GxkScrollCanvas *self,
179  GtkAdjustment *adjustment);
180 void gxk_scroll_canvas_set_vadjustment (GxkScrollCanvas *self,
181  GtkAdjustment *adjustment);
182 void gxk_scroll_canvas_update_adjustments (GxkScrollCanvas *self,
183  gboolean hadj,
184  gboolean vadj);
185 void gxk_scroll_canvas_scroll_to (GxkScrollCanvas *self,
186  gint scroll_area_x,
187  gint scroll_area_y);
188 void gxk_scroll_canvas_make_visible (GxkScrollCanvas *self,
189  gint scroll_area_x,
190  gint scroll_area_y,
191  gint scroll_area_width,
192  gint scroll_area_height);
193 void gxk_scroll_canvas_reset_pango_layouts (GxkScrollCanvas *self);
194 void gxk_scroll_canvas_reallocate (GxkScrollCanvas *self);
195 gboolean gxk_scroll_canvas_dragging (GxkScrollCanvas *self);
196 void gxk_scroll_canvas_drag_abort (GxkScrollCanvas *self);
197 void gxk_scroll_canvas_set_window_cursor (GxkScrollCanvas *self,
198  GdkCursorType cursor);
199 void gxk_scroll_canvas_set_canvas_cursor (GxkScrollCanvas *self,
200  GdkCursorType cursor);
201 void gxk_scroll_canvas_set_top_panel_cursor (GxkScrollCanvas *self,
202  GdkCursorType cursor);
203 void gxk_scroll_canvas_set_left_panel_cursor (GxkScrollCanvas *self,
204  GdkCursorType cursor);
205 void gxk_scroll_canvas_set_right_panel_cursor (GxkScrollCanvas *self,
206  GdkCursorType cursor);
207 void gxk_scroll_canvas_set_bottom_panel_cursor (GxkScrollCanvas *self,
208  GdkCursorType cursor);
209 PangoLayout* gxk_scroll_canvas_get_pango_layout (GxkScrollCanvas *self,
210  guint nth);
211 PangoLayout* gxk_scroll_canvas_peek_pango_layout (GxkScrollCanvas *self,
212  guint nth);
213 GxkScrollMarker* gxk_scroll_canvas_lookup_marker (GxkScrollCanvas *self,
214  guint index,
215  guint *count);
216 GxkScrollMarker* gxk_scroll_canvas_add_marker (GxkScrollCanvas *self,
217  guint index);
218 void gxk_scroll_canvas_remove_marker (GxkScrollCanvas *self,
219  GxkScrollMarker *marker);
220 void gxk_scroll_canvas_setup_marker (GxkScrollCanvas *self,
221  GxkScrollMarker *marker,
222  GdkWindow **windowp,
223  guint x,
224  guint y,
225  guint width,
226  guint height);
227 void gxk_scroll_canvas_move_marker (GxkScrollCanvas *self,
228  GxkScrollMarker *marker,
229  guint x,
230  guint y);
231 void gxk_scroll_canvas_class_skin_changed (GxkScrollCanvasClass*);
232 
233 G_END_DECLS
234 
235 #endif /* __GXK_SCROLL_CANVAS_H__ */
Definition: gxkscrollcanvas.hh:86
Definition: gxkscrollcanvas.hh:77
Definition: gxkscrollcanvas.hh:94
Definition: gxkscrollcanvas.hh:110
Definition: gxkscrollcanvas.hh:45