Mercurial > audlegacy-plugins
annotate src/skins/ui_skinned_menurow.c @ 3071:ca7d5de41217
Allow much larger buffer in the config GUI.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Fri, 24 Apr 2009 22:24:01 -0500 |
parents | 6baa6eaf8290 |
children |
rev | line source |
---|---|
2581 | 1 /* |
2 * Audacious - a cross-platform multimedia player | |
3 * Copyright (c) 2007 Tomasz Moń | |
4 * | |
5 * Based on: | |
6 * BMP - Cross-platform multimedia player | |
7 * Copyright (C) 2003-2004 BMP development team. | |
8 * XMMS: | |
9 * Copyright (C) 1998-2003 XMMS development team. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; under version 3 of the License. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program. If not, see <http://www.gnu.org/licenses>. | |
22 * | |
23 * The Audacious team does not consider modular code linking to | |
24 * Audacious or using our public API to be a derived work. | |
25 */ | |
26 | |
2971
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2888
diff
changeset
|
27 #include <audlegacy/plugin.h> |
2581 | 28 #include "plugin.h" |
29 #include "ui_skinned_menurow.h" | |
30 | |
31 enum { | |
32 DOUBLED, | |
33 CHANGE, | |
34 RELEASE, | |
35 LAST_SIGNAL | |
36 }; | |
37 | |
38 static void ui_skinned_menurow_class_init (UiSkinnedMenurowClass *klass); | |
39 static void ui_skinned_menurow_init (UiSkinnedMenurow *menurow); | |
40 static void ui_skinned_menurow_destroy (GtkObject *object); | |
41 static void ui_skinned_menurow_realize (GtkWidget *widget); | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
42 static void ui_skinned_menurow_unrealize (GtkWidget *widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
43 static void ui_skinned_menurow_map (GtkWidget *widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
44 static void ui_skinned_menurow_unmap (GtkWidget *widget); |
2581 | 45 static void ui_skinned_menurow_size_request (GtkWidget *widget, GtkRequisition *requisition); |
46 static void ui_skinned_menurow_size_allocate (GtkWidget *widget, GtkAllocation *allocation); | |
47 static gboolean ui_skinned_menurow_expose (GtkWidget *widget, GdkEventExpose *event); | |
48 static MenuRowItem menurow_find_selected (UiSkinnedMenurow * mr, gint x, gint y); | |
49 static gboolean ui_skinned_menurow_button_press (GtkWidget *widget, GdkEventButton *event); | |
50 static gboolean ui_skinned_menurow_button_release (GtkWidget *widget, GdkEventButton *event); | |
51 static gboolean ui_skinned_menurow_motion_notify (GtkWidget *widget, GdkEventMotion *event); | |
52 static void ui_skinned_menurow_toggle_scaled (UiSkinnedMenurow *menurow); | |
53 | |
54 static GtkWidgetClass *parent_class = NULL; | |
55 static guint menurow_signals[LAST_SIGNAL] = { 0 }; | |
56 | |
57 GType ui_skinned_menurow_get_type() { | |
58 static GType menurow_type = 0; | |
59 if (!menurow_type) { | |
60 static const GTypeInfo menurow_info = { | |
61 sizeof (UiSkinnedMenurowClass), | |
62 NULL, | |
63 NULL, | |
64 (GClassInitFunc) ui_skinned_menurow_class_init, | |
65 NULL, | |
66 NULL, | |
67 sizeof (UiSkinnedMenurow), | |
68 0, | |
69 (GInstanceInitFunc) ui_skinned_menurow_init, | |
70 }; | |
2590 | 71 menurow_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedMenurow", &menurow_info, 0); |
2581 | 72 } |
73 | |
74 return menurow_type; | |
75 } | |
76 | |
77 static void ui_skinned_menurow_class_init(UiSkinnedMenurowClass *klass) { | |
78 GObjectClass *gobject_class; | |
79 GtkObjectClass *object_class; | |
80 GtkWidgetClass *widget_class; | |
81 | |
82 gobject_class = G_OBJECT_CLASS(klass); | |
83 object_class = (GtkObjectClass*) klass; | |
84 widget_class = (GtkWidgetClass*) klass; | |
3032
6baa6eaf8290
Don't use deprecated gtk_type_class()
Tomasz Mon <desowin@gmail.com>
parents:
3017
diff
changeset
|
85 parent_class = g_type_class_peek_parent(klass); |
2581 | 86 |
87 object_class->destroy = ui_skinned_menurow_destroy; | |
88 | |
89 widget_class->realize = ui_skinned_menurow_realize; | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
90 widget_class->unrealize = ui_skinned_menurow_unrealize; |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
91 widget_class->map = ui_skinned_menurow_map; |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
92 widget_class->unmap = ui_skinned_menurow_unmap; |
2581 | 93 widget_class->expose_event = ui_skinned_menurow_expose; |
94 widget_class->size_request = ui_skinned_menurow_size_request; | |
95 widget_class->size_allocate = ui_skinned_menurow_size_allocate; | |
96 widget_class->button_press_event = ui_skinned_menurow_button_press; | |
97 widget_class->button_release_event = ui_skinned_menurow_button_release; | |
98 widget_class->motion_notify_event = ui_skinned_menurow_motion_notify; | |
99 | |
100 klass->scaled = ui_skinned_menurow_toggle_scaled; | |
101 klass->change = NULL; | |
102 klass->release = NULL; | |
103 | |
104 menurow_signals[DOUBLED] = | |
105 g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | |
106 G_STRUCT_OFFSET (UiSkinnedMenurowClass, scaled), NULL, NULL, | |
3017
963796db51ea
Don't use deprecated gtk macros and types
Tomasz Mon <desowin@gmail.com>
parents:
2971
diff
changeset
|
107 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); |
2581 | 108 |
109 | |
110 menurow_signals[CHANGE] = | |
111 g_signal_new ("change", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | |
112 G_STRUCT_OFFSET (UiSkinnedMenurowClass, change), NULL, NULL, | |
3017
963796db51ea
Don't use deprecated gtk macros and types
Tomasz Mon <desowin@gmail.com>
parents:
2971
diff
changeset
|
113 g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); |
2581 | 114 |
115 menurow_signals[RELEASE] = | |
116 g_signal_new ("release", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | |
117 G_STRUCT_OFFSET (UiSkinnedMenurowClass, release), NULL, NULL, | |
118 g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_POINTER); | |
119 | |
120 } | |
121 | |
122 static void ui_skinned_menurow_init(UiSkinnedMenurow *menurow) { | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
123 menurow->scale_selected = config.scaled; |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
124 menurow->always_selected = config.always_on_top; |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
125 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
126 menurow->event_window = NULL; |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
127 GTK_WIDGET_SET_FLAGS(menurow, GTK_NO_WINDOW); |
2581 | 128 } |
129 | |
130 GtkWidget* ui_skinned_menurow_new(GtkWidget *fixed, gint x, gint y, gint nx, gint ny, gint sx, gint sy, SkinPixmapId si) { | |
131 UiSkinnedMenurow *menurow = g_object_new (ui_skinned_menurow_get_type (), NULL); | |
132 | |
133 menurow->x = x; | |
134 menurow->y = y; | |
135 menurow->width = 8; | |
136 menurow->height = 43; | |
137 menurow->nx = nx; | |
138 menurow->ny = ny; | |
139 menurow->sx = sx; | |
140 menurow->sy = sy; | |
141 menurow->selected = MENUROW_NONE; | |
142 | |
143 menurow->skin_index = si; | |
144 | |
145 menurow->scaled = FALSE; | |
146 | |
147 gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(menurow), menurow->x, menurow->y); | |
148 | |
149 return GTK_WIDGET(menurow); | |
150 } | |
151 | |
152 static void ui_skinned_menurow_destroy(GtkObject *object) { | |
153 UiSkinnedMenurow *menurow; | |
154 | |
155 g_return_if_fail (object != NULL); | |
156 g_return_if_fail (UI_SKINNED_IS_MENUROW (object)); | |
157 | |
158 menurow = UI_SKINNED_MENUROW (object); | |
159 | |
160 if (GTK_OBJECT_CLASS (parent_class)->destroy) | |
161 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); | |
162 } | |
163 | |
164 static void ui_skinned_menurow_realize(GtkWidget *widget) { | |
165 UiSkinnedMenurow *menurow; | |
166 GdkWindowAttr attributes; | |
167 gint attributes_mask; | |
168 | |
169 g_return_if_fail (widget != NULL); | |
170 g_return_if_fail (UI_SKINNED_IS_MENUROW(widget)); | |
171 | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
172 if (GTK_WIDGET_CLASS (parent_class)->realize) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
173 (* GTK_WIDGET_CLASS (parent_class)->realize) (widget); |
2581 | 174 menurow = UI_SKINNED_MENUROW(widget); |
175 | |
176 attributes.x = widget->allocation.x; | |
177 attributes.y = widget->allocation.y; | |
178 attributes.width = widget->allocation.width; | |
179 attributes.height = widget->allocation.height; | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
180 attributes.wclass = GDK_INPUT_ONLY; |
2581 | 181 attributes.window_type = GDK_WINDOW_CHILD; |
182 attributes.event_mask = gtk_widget_get_events(widget); | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
183 attributes.event_mask |= GDK_BUTTON_PRESS_MASK | |
2581 | 184 GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK; |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
185 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
186 attributes_mask = GDK_WA_X | GDK_WA_Y; |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
187 menurow->event_window = gdk_window_new(widget->window, &attributes, attributes_mask); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
188 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
189 gdk_window_set_user_data(menurow->event_window, widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
190 } |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
191 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
192 static void ui_skinned_menurow_unrealize(GtkWidget *widget) { |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
193 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
194 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
195 if ( menurow->event_window != NULL ) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
196 { |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
197 gdk_window_set_user_data( menurow->event_window , NULL ); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
198 gdk_window_destroy( menurow->event_window ); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
199 menurow->event_window = NULL; |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
200 } |
2581 | 201 |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
202 if (GTK_WIDGET_CLASS (parent_class)->unrealize) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
203 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
204 } |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
205 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
206 static void ui_skinned_menurow_map (GtkWidget *widget) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
207 { |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
208 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
209 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
210 if (menurow->event_window != NULL) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
211 gdk_window_show (menurow->event_window); |
2581 | 212 |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
213 if (GTK_WIDGET_CLASS (parent_class)->map) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
214 (* GTK_WIDGET_CLASS (parent_class)->map) (widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
215 } |
2581 | 216 |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
217 static void ui_skinned_menurow_unmap (GtkWidget *widget) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
218 { |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
219 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
220 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
221 if (menurow->event_window != NULL) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
222 gdk_window_hide (menurow->event_window); |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
223 |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
224 if (GTK_WIDGET_CLASS (parent_class)->unmap) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
225 (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget); |
2581 | 226 } |
227 | |
228 static void ui_skinned_menurow_size_request(GtkWidget *widget, GtkRequisition *requisition) { | |
229 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); | |
230 | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
231 requisition->width = menurow->width*(menurow->scaled ? config.scale_factor : 1); |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
232 requisition->height = menurow->height*(menurow->scaled ? config.scale_factor : 1); |
2581 | 233 } |
234 | |
235 static void ui_skinned_menurow_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { | |
236 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget); | |
237 | |
238 widget->allocation = *allocation; | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
239 widget->allocation.x *= (menurow->scaled ? config.scale_factor : 1); |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
240 widget->allocation.y *= (menurow->scaled ? config.scale_factor : 1); |
2581 | 241 if (GTK_WIDGET_REALIZED (widget)) |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
242 if (menurow->event_window) |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
243 gdk_window_move_resize(menurow->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height); |
2581 | 244 |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
245 menurow->x = widget->allocation.x/(menurow->scaled ? config.scale_factor : 1); |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
246 menurow->y = widget->allocation.y/(menurow->scaled ? config.scale_factor : 1); |
2581 | 247 } |
248 | |
249 static gboolean ui_skinned_menurow_expose(GtkWidget *widget, GdkEventExpose *event) { | |
250 g_return_val_if_fail (widget != NULL, FALSE); | |
251 g_return_val_if_fail (UI_SKINNED_IS_MENUROW (widget), FALSE); | |
252 g_return_val_if_fail (event != NULL, FALSE); | |
253 | |
254 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget); | |
255 g_return_val_if_fail (menurow->width > 0 && menurow->height > 0, FALSE); | |
256 | |
257 GdkPixbuf *obj = NULL; | |
258 obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, menurow->width, menurow->height); | |
259 | |
260 if (menurow->selected == MENUROW_NONE) { | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
261 if (config.always_show_cb || menurow->pushed) |
2581 | 262 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, |
263 menurow->nx, menurow->ny, 0, 0, 8, 43); | |
264 else | |
265 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, | |
266 menurow->nx + 8, menurow->ny, 0, 0, 8, 43); | |
267 } | |
268 else { | |
269 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, | |
270 menurow->sx + ((menurow->selected - 1) * 8), | |
271 menurow->sy, 0, 0, 8, 43); | |
272 } | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
273 if (config.always_show_cb || menurow->pushed) { |
2581 | 274 if (menurow->always_selected) |
275 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, | |
276 menurow->sx + 8, menurow->sy + 10, 0, 10, 8, 8); | |
277 if (menurow->scale_selected) | |
278 skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index, | |
279 menurow->sx + 24, menurow->sy + 26, 0, 26, 8, 8); | |
280 } | |
281 | |
2888
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
282 ui_skinned_widget_draw_with_coordinates(widget, obj, menurow->width, menurow->height, |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
283 widget->allocation.x, |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
284 widget->allocation.y, |
7c7471554d88
convert some widgets into windowless ones
Tomasz Mon <desowin@gmail.com>
parents:
2590
diff
changeset
|
285 menurow->scaled); |
2581 | 286 |
287 g_object_unref(obj); | |
288 | |
289 return FALSE; | |
290 } | |
291 | |
292 static MenuRowItem menurow_find_selected(UiSkinnedMenurow * mr, gint x, gint y) { | |
293 MenuRowItem ret = MENUROW_NONE; | |
294 | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
295 x = x/(mr->scaled ? config.scale_factor : 1); |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
296 y = y/(mr->scaled ? config.scale_factor : 1); |
2581 | 297 if (x > 0 && x < 8) { |
298 if (y >= 0 && y <= 10) | |
299 ret = MENUROW_OPTIONS; | |
300 if (y >= 10 && y <= 17) | |
301 ret = MENUROW_ALWAYS; | |
302 if (y >= 18 && y <= 25) | |
303 ret = MENUROW_FILEINFOBOX; | |
304 if (y >= 26 && y <= 33) | |
305 ret = MENUROW_SCALE; | |
306 if (y >= 34 && y <= 42) | |
307 ret = MENUROW_VISUALIZATION; | |
308 } | |
309 return ret; | |
310 } | |
311 | |
312 static gboolean ui_skinned_menurow_button_press(GtkWidget *widget, GdkEventButton *event) { | |
313 g_return_val_if_fail (widget != NULL, FALSE); | |
314 g_return_val_if_fail (UI_SKINNED_IS_MENUROW (widget), FALSE); | |
315 g_return_val_if_fail (event != NULL, FALSE); | |
316 | |
317 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget); | |
318 | |
319 if (event->type == GDK_BUTTON_PRESS) { | |
320 if (event->button == 1) { | |
321 | |
322 menurow->pushed = TRUE; | |
323 menurow->selected = menurow_find_selected(menurow, event->x, event->y); | |
324 | |
325 gtk_widget_queue_draw(widget); | |
326 g_signal_emit_by_name(widget, "change", menurow->selected); | |
327 } | |
328 } | |
329 | |
330 return TRUE; | |
331 } | |
332 | |
333 static gboolean ui_skinned_menurow_button_release(GtkWidget *widget, GdkEventButton *event) { | |
334 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); | |
335 if (menurow->pushed) { | |
336 menurow->pushed = FALSE; | |
337 | |
338 if (menurow->selected == MENUROW_ALWAYS) | |
339 menurow->always_selected = !menurow->always_selected; | |
340 | |
341 if (menurow->selected == MENUROW_SCALE) | |
342 menurow->scale_selected = !menurow->scale_selected; | |
343 | |
344 if ((int)(menurow->selected) != -1) | |
345 g_signal_emit_by_name(widget, "release", menurow->selected, event); | |
346 | |
347 menurow->selected = MENUROW_NONE; | |
348 gtk_widget_queue_draw(widget); | |
349 } | |
350 | |
351 return TRUE; | |
352 } | |
353 | |
354 static gboolean ui_skinned_menurow_motion_notify(GtkWidget *widget, GdkEventMotion *event) { | |
355 g_return_val_if_fail (widget != NULL, FALSE); | |
356 g_return_val_if_fail (UI_SKINNED_IS_MENUROW (widget), FALSE); | |
357 g_return_val_if_fail (event != NULL, FALSE); | |
358 UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget); | |
359 | |
360 if (menurow->pushed) { | |
361 menurow->selected = menurow_find_selected(menurow, event->x, event->y); | |
362 | |
363 gtk_widget_queue_draw(widget); | |
364 g_signal_emit_by_name(widget, "change", menurow->selected); | |
365 } | |
366 | |
367 return TRUE; | |
368 } | |
369 | |
370 static void ui_skinned_menurow_toggle_scaled(UiSkinnedMenurow *menurow) { | |
371 GtkWidget *widget = GTK_WIDGET (menurow); | |
372 | |
373 menurow->scaled = !menurow->scaled; | |
2582
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
374 gtk_widget_set_size_request(widget, menurow->width* (menurow->scaled ? config.scale_factor : 1), |
9b4dfc007b87
use more local configuration options
Tomasz Mon <desowin@gmail.com>
parents:
2581
diff
changeset
|
375 menurow->height * (menurow->scaled ? config.scale_factor : 1)); |
2581 | 376 |
377 gtk_widget_queue_draw(GTK_WIDGET(menurow)); | |
378 } |