comparison audacious/widgets/tbutton.c @ 1541:06329cbf186a trunk

[svn] this massive commit does the following: - seriously cleans up dependencies on the WA2-like gui code - moves all of the WA2 stuff into a seperate library (libwidgets.a) - makes things less icky in the player tree
author nenolod
date Wed, 09 Aug 2006 02:47:22 -0700
parents
children ec4d858524fa
comparison
equal deleted inserted replaced
1540:237bb7c97759 1541:06329cbf186a
1 /* BMP - Cross-platform multimedia player
2 * Copyright (C) 2003-2004 BMP development team.
3 *
4 * Based on XMMS:
5 * Copyright (C) 1998-2003 XMMS development team.
6 *
7 * This program 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 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program 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 this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21
22 #include "tbutton.h"
23
24 #include <glib.h>
25 #include <gdk/gdk.h>
26
27 #include "widget.h"
28
29 void
30 tbutton_draw(Widget * w)
31 {
32 TButton *button = TBUTTON(w);
33 GdkPixmap *obj;
34
35 obj = button->tb_widget.parent;
36
37 if (button->tb_pressed && button->tb_inside) {
38 if (button->tb_selected) {
39 skin_draw_pixmap(bmp_active_skin, obj,
40 button->tb_widget.gc,
41 button->tb_skin_index,
42 button->tb_psx, button->tb_psy,
43 button->tb_widget.x, button->tb_widget.y,
44 button->tb_widget.width,
45 button->tb_widget.height);
46 }
47 else {
48 skin_draw_pixmap(bmp_active_skin, obj,
49 button->tb_widget.gc,
50 button->tb_skin_index,
51 button->tb_pux, button->tb_puy,
52 button->tb_widget.x, button->tb_widget.y,
53 button->tb_widget.width,
54 button->tb_widget.height);
55 }
56 }
57 else {
58 if (button->tb_selected) {
59 skin_draw_pixmap(bmp_active_skin, obj,
60 button->tb_widget.gc,
61 button->tb_skin_index,
62 button->tb_nsx, button->tb_nsy,
63 button->tb_widget.x, button->tb_widget.y,
64 button->tb_widget.width,
65 button->tb_widget.height);
66 }
67 else {
68 skin_draw_pixmap(bmp_active_skin, obj,
69 button->tb_widget.gc,
70 button->tb_skin_index,
71 button->tb_nux, button->tb_nuy,
72 button->tb_widget.x, button->tb_widget.y,
73 button->tb_widget.width,
74 button->tb_widget.height);
75
76 }
77 }
78 }
79
80 void
81 tbutton_button_press_cb(GtkWidget * widget, GdkEventButton * event,
82 TButton * button)
83 {
84 if (event->button != 1)
85 return;
86
87 if (widget_contains(&button->tb_widget, event->x, event->y)) {
88 button->tb_pressed = 1;
89 button->tb_inside = 1;
90 widget_draw(WIDGET(button));
91 }
92 }
93
94 void
95 tbutton_button_release_cb(GtkWidget * widget, GdkEventButton * event,
96 TButton * button)
97 {
98 if (event->button != 1)
99 return;
100
101 if (button->tb_inside && button->tb_pressed) {
102 button->tb_inside = 0;
103 button->tb_selected = !button->tb_selected;
104
105 widget_draw(WIDGET(button));
106
107 if (button->tb_push_cb)
108 button->tb_push_cb(button->tb_selected);
109 }
110
111 if (button->tb_pressed)
112 button->tb_pressed = 0;
113 }
114
115 void
116 tbutton_motion_cb(GtkWidget * widget, GdkEventMotion * event,
117 TButton * button)
118 {
119 gint inside;
120
121 if (!button->tb_pressed)
122 return;
123 inside = widget_contains(&button->tb_widget, event->x, event->y);
124 if (inside != button->tb_inside) {
125 button->tb_inside = inside;
126 widget_draw(WIDGET(button));
127 }
128 }
129
130 TButton *
131 create_tbutton(GList ** wlist, GdkPixmap * parent, GdkGC * gc,
132 gint x, gint y, gint w, gint h, gint nux, gint nuy,
133 gint pux, gint puy, gint nsx, gint nsy, gint psx,
134 gint psy, void (*cb) (gboolean), SkinPixmapId si)
135 {
136 TButton *b;
137
138 b = g_new0(TButton, 1);
139 widget_init(&b->tb_widget, parent, gc, x, y, w, h, 1);
140 b->tb_widget.button_press_cb =
141 (void (*)(GtkWidget *, GdkEventButton *, gpointer))
142 tbutton_button_press_cb;
143 b->tb_widget.button_release_cb =
144 (void (*)(GtkWidget *, GdkEventButton *, gpointer))
145 tbutton_button_release_cb;
146 b->tb_widget.motion_cb =
147 (void (*)(GtkWidget *, GdkEventMotion *, gpointer))
148 tbutton_motion_cb;
149 b->tb_widget.draw = tbutton_draw;
150 b->tb_nux = nux;
151 b->tb_nuy = nuy;
152 b->tb_pux = pux;
153 b->tb_puy = puy;
154 b->tb_nsx = nsx;
155 b->tb_nsy = nsy;
156 b->tb_psx = psx;
157 b->tb_psy = psy;
158 b->tb_push_cb = cb;
159 b->tb_skin_index = si;
160
161 widget_list_add(wlist, WIDGET(b));
162 return b;
163 }
164
165 void
166 tbutton_set_toggled(TButton * tb, gboolean toggled)
167 {
168 tb->tb_selected = toggled;
169 widget_draw(WIDGET(tb));
170 }
171
172 void
173 free_tbutton(TButton * b)
174 {
175 g_free(b);
176 }