Mercurial > audlegacy
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; |
