comparison src/audacious/ui_skinned_button.c @ 2843:91ef09fe7936 trunk

UiSkinnedButton can now work as TButton
author Tomasz Mon <desowin@gmail.com>
date Sun, 17 Jun 2007 15:53:59 +0200
parents c2622a939e9e
children 22da7cd0eca0
comparison
equal deleted inserted replaced
2842:c2622a939e9e 2843:91ef09fe7936
158 158
159 static void ui_skinned_button_init (UiSkinnedButton *button) { 159 static void ui_skinned_button_init (UiSkinnedButton *button) {
160 UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button); 160 UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
161 priv->image = gtk_image_new(); 161 priv->image = gtk_image_new();
162 button->redraw = TRUE; 162 button->redraw = TRUE;
163 button->inside = FALSE;
164 button->type = TYPE_NOT_SET;
163 165
164 g_object_set (priv->image, "visible", TRUE, NULL); 166 g_object_set (priv->image, "visible", TRUE, NULL);
165 gtk_container_add(GTK_CONTAINER(GTK_WIDGET(button)), priv->image); 167 gtk_container_add(GTK_CONTAINER(GTK_WIDGET(button)), priv->image);
166 168
167 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_FOCUS); 169 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_FOCUS);
251 sbutton->y = y; 253 sbutton->y = y;
252 sbutton->nx = nx; 254 sbutton->nx = nx;
253 sbutton->ny = ny; 255 sbutton->ny = ny;
254 sbutton->px = px; 256 sbutton->px = px;
255 sbutton->py = py; 257 sbutton->py = py;
258 sbutton->type = TYPE_PUSH;
259 priv->skin_index1 = si;
260 priv->skin_index2 = si;
261 priv->fixed = fixed;
262 priv->double_size = FALSE;
263
264 gtk_widget_set_size_request(button, priv->w, priv->h);
265 gtk_fixed_put(GTK_FIXED(priv->fixed),GTK_WIDGET(button), sbutton->x, sbutton->y);
266 }
267
268 void ui_skinned_toggle_button_setup(GtkWidget *button, GtkWidget *fixed, GdkPixmap *parent, GdkGC *gc, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si) {
269
270 UiSkinnedButton *sbutton = UI_SKINNED_BUTTON(button);
271 UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(sbutton);
272 priv->gc = gc;
273 priv->w = w;
274 priv->h = h;
275 sbutton->x = x;
276 sbutton->y = y;
277 sbutton->nx = nx;
278 sbutton->ny = ny;
279 sbutton->px = px;
280 sbutton->py = py;
281 sbutton->pnx = pnx;
282 sbutton->pny = pny;
283 sbutton->ppx = ppx;
284 sbutton->ppy = ppy;
285 sbutton->type = TYPE_TOGGLE;
256 priv->skin_index1 = si; 286 priv->skin_index1 = si;
257 priv->skin_index2 = si; 287 priv->skin_index2 = si;
258 priv->fixed = fixed; 288 priv->fixed = fixed;
259 priv->double_size = FALSE; 289 priv->double_size = FALSE;
260 290
338 g_signal_emit(button, button_signals[RELEASED], 0); 368 g_signal_emit(button, button_signals[RELEASED], 0);
339 } 369 }
340 370
341 static void ui_skinned_button_clicked(UiSkinnedButton *button) { 371 static void ui_skinned_button_clicked(UiSkinnedButton *button) {
342 g_return_if_fail(UI_IS_SKINNED_BUTTON(button)); 372 g_return_if_fail(UI_IS_SKINNED_BUTTON(button));
373 button->inside = !button->inside;
343 g_signal_emit(button, button_signals[CLICKED], 0); 374 g_signal_emit(button, button_signals[CLICKED], 0);
344 } 375 }
345 376
346 static gboolean ui_skinned_button_enter_notify(GtkWidget *widget, GdkEventCrossing *event) { 377 static gboolean ui_skinned_button_enter_notify(GtkWidget *widget, GdkEventCrossing *event) {
347 UiSkinnedButton *button; 378 UiSkinnedButton *button;
381 412
382 static void ui_skinned_button_paint(UiSkinnedButton *button) { 413 static void ui_skinned_button_paint(UiSkinnedButton *button) {
383 GtkWidget *widget = GTK_WIDGET (button); 414 GtkWidget *widget = GTK_WIDGET (button);
384 UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button); 415 UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
385 416
417 if (button->type == TYPE_SMALL || button->type == TYPE_NOT_SET)
418 return;
419
386 if (button->redraw == TRUE) { 420 if (button->redraw == TRUE) {
387 button->redraw = FALSE; 421 button->redraw = FALSE;
422
388 GdkPixmap *obj; 423 GdkPixmap *obj;
389 obj = gdk_pixmap_new(NULL, priv->w, priv->h, gdk_rgb_get_visual()->depth); 424 obj = gdk_pixmap_new(NULL, priv->w, priv->h, gdk_rgb_get_visual()->depth);
390 skin_draw_pixmap(bmp_active_skin, obj, priv->gc, priv->skin_index2, 425 switch (button->type) {
391 button->pressed ? button->px : button->nx, 426 case TYPE_PUSH:
392 button->pressed ? button->py : button->ny, 427 skin_draw_pixmap(bmp_active_skin, obj, priv->gc, priv->skin_index2,
393 0, 0, priv->w, priv->h); 428 button->pressed ? button->px : button->nx,
429 button->pressed ? button->py : button->ny,
430 0, 0, priv->w, priv->h);
431 break;
432 case TYPE_TOGGLE:
433 if (button->inside)
434 skin_draw_pixmap(bmp_active_skin, obj, priv->gc, priv->skin_index2,
435 button->pressed ? button->ppx : button->pnx,
436 button->pressed ? button->ppy : button->pny,
437 0, 0, priv->w, priv->h);
438 else
439 skin_draw_pixmap(bmp_active_skin, obj, priv->gc, priv->skin_index2,
440 button->pressed ? button->px : button->nx,
441 button->pressed ? button->py : button->ny,
442 0, 0, priv->w, priv->h);
443 break;
444 default:
445 break;
446 }
447
394 if(priv->double_size) { 448 if(priv->double_size) {
395 GdkImage *img, *img2x; 449 GdkImage *img, *img2x;
396 img = gdk_drawable_get_image(obj, 0, 0, priv->w, priv->h); 450 img = gdk_drawable_get_image(obj, 0, 0, priv->w, priv->h);
397 img2x = create_dblsize_image(img); 451 img2x = create_dblsize_image(img);
398 gtk_image_set(GTK_IMAGE(priv->image), img2x, NULL); 452 gtk_image_set(GTK_IMAGE(priv->image), img2x, NULL);
399 g_object_unref(img2x); 453 g_object_unref(img2x);
400 g_object_unref(img); 454 g_object_unref(img);
401 } else 455 } else
402 gtk_image_set_from_pixmap(GTK_IMAGE(priv->image), obj, NULL); 456 gtk_image_set_from_pixmap(GTK_IMAGE(priv->image), obj, NULL);
403 g_object_unref(obj); 457
404 gtk_widget_queue_resize(widget); 458 g_object_unref(obj);
459 gtk_widget_queue_resize(widget);
405 } 460 }
406 } 461 }
407 462
408 static void ui_skinned_button_redraw(UiSkinnedButton *button) { 463 static void ui_skinned_button_redraw(UiSkinnedButton *button) {
409 button->redraw = TRUE; 464 button->redraw = TRUE;