diff src/audacious/ui_skinned_button.c @ 2998:c200d6764e91 trunk

fix expose events, thanks to giacomo
author Tomasz Mon <desowin@gmail.com>
date Sat, 07 Jul 2007 17:50:31 +0200
parents a2eb970ca669
children 3db40ad79fd9
line wrap: on
line diff
--- a/src/audacious/ui_skinned_button.c	Sat Jul 07 12:17:13 2007 +0200
+++ b/src/audacious/ui_skinned_button.c	Sat Jul 07 17:50:31 2007 +0200
@@ -164,7 +164,6 @@
 static void ui_skinned_button_init (UiSkinnedButton *button) {
     UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
     mutex = g_mutex_new();
-    button->redraw = TRUE;
     button->inside = FALSE;
     button->type = TYPE_NOT_SET;
     priv->move_x = 0;
@@ -253,57 +252,51 @@
     if (button->type == TYPE_SMALL || button->type == TYPE_NOT_SET)
         return FALSE;
 
-    if (button->redraw == TRUE) {
-        button->redraw = FALSE;
-
-        GdkPixmap *obj;
-        obj = gdk_pixmap_new(NULL, priv->w, priv->h, gdk_rgb_get_visual()->depth);
-        switch (button->type) {
-            case TYPE_PUSH:
+    GdkPixmap *obj;
+    obj = gdk_pixmap_new(NULL, priv->w, priv->h, gdk_rgb_get_visual()->depth);
+    switch (button->type) {
+        case TYPE_PUSH:
+            skin_draw_pixmap(bmp_active_skin, obj, priv->gc,
+                             button->pressed ? priv->skin_index2 : priv->skin_index1,
+                             button->pressed ? button->px : button->nx,
+                             button->pressed ? button->py : button->ny,
+                             0, 0, priv->w, priv->h);
+            break;
+        case TYPE_TOGGLE:
+            if (button->inside)
+                skin_draw_pixmap(bmp_active_skin, obj, priv->gc,
+                                 button->pressed ? priv->skin_index2 : priv->skin_index1,
+                                 button->pressed ? button->ppx : button->pnx,
+                                 button->pressed ? button->ppy : button->pny,
+                                 0, 0, priv->w, priv->h);
+            else
                 skin_draw_pixmap(bmp_active_skin, obj, priv->gc,
                                  button->pressed ? priv->skin_index2 : priv->skin_index1,
                                  button->pressed ? button->px : button->nx,
                                  button->pressed ? button->py : button->ny,
                                  0, 0, priv->w, priv->h);
-                break;
-            case TYPE_TOGGLE:
-                if (button->inside)
-                    skin_draw_pixmap(bmp_active_skin, obj, priv->gc,
-                                     button->pressed ? priv->skin_index2 : priv->skin_index1,
-                                     button->pressed ? button->ppx : button->pnx,
-                                     button->pressed ? button->ppy : button->pny,
-                                     0, 0, priv->w, priv->h);
-                else
-                    skin_draw_pixmap(bmp_active_skin, obj, priv->gc,
-                                     button->pressed ? priv->skin_index2 : priv->skin_index1,
-                                     button->pressed ? button->px : button->nx,
-                                     button->pressed ? button->py : button->ny,
-                                     0, 0, priv->w, priv->h);
-                break;
-            default:
-                break;
-        }
+            break;
+        default:
+            break;
+    }
+
+    if (priv->img)
+        g_object_unref(priv->img);
+    priv->img = gdk_pixmap_new(NULL, priv->w*(1+priv->double_size),
+                               priv->h*(1+priv->double_size),
+                               gdk_rgb_get_visual()->depth);
 
-        if (priv->img)
-                g_object_unref(priv->img);
-        priv->img = gdk_pixmap_new(NULL, priv->w*(1+priv->double_size),
-                                         priv->h*(1+priv->double_size),
-                                         gdk_rgb_get_visual()->depth);
+    if (priv->double_size) {
+        GdkImage *img, *img2x;
+        img = gdk_drawable_get_image(obj, 0, 0, priv->w, priv->h);
+        img2x = create_dblsize_image(img);
+        gdk_draw_image (priv->img, priv->gc, img2x, 0, 0, 0, 0, priv->w*2, priv->h*2);
+        g_object_unref(img2x);
+        g_object_unref(img);
+    } else
+        gdk_draw_drawable (priv->img, priv->gc, obj, 0, 0, 0, 0, priv->w, priv->h);
 
-        if (priv->double_size) {
-            GdkImage *img, *img2x;
-            img = gdk_drawable_get_image(obj, 0, 0, priv->w, priv->h);
-            img2x = create_dblsize_image(img);
-            gdk_draw_image (priv->img, priv->gc, img2x, 0, 0, 0, 0, priv->w*2, priv->h*2);
-            g_object_unref(img2x);
-            g_object_unref(img);
-        } else
-            gdk_draw_drawable (priv->img, priv->gc, obj, 0, 0, 0, 0, priv->w, priv->h);
-
-        g_object_unref(obj);
-        gtk_widget_queue_resize(widget);
-
-    }
+    g_object_unref(obj);
 
     gdk_draw_drawable (widget->window, priv->gc, priv->img, 0, 0, 0, 0,
                        priv->w*(1+priv->double_size), priv->h*(1+priv->double_size));
@@ -398,7 +391,6 @@
 static void ui_skinned_button_set_pressed (UiSkinnedButton *button, gboolean pressed) {
     if (pressed != button->pressed) {
         button->pressed = pressed;
-        button->redraw = TRUE;
         gtk_widget_queue_draw(GTK_WIDGET(button));
     }
 }
@@ -420,7 +412,6 @@
     UiSkinnedButton *button;
     if (event->button == 1) {
             button = UI_SKINNED_BUTTON(widget);
-            button->redraw = TRUE;
             ui_skinned_button_released(button);
     } else if (event->button == 3) {
             g_signal_emit(widget, button_signals[RIGHT_CLICKED], 0);
@@ -473,7 +464,6 @@
     gtk_widget_set_size_request(widget, priv->w*(1+priv->double_size), priv->h*(1+priv->double_size));
     gtk_widget_set_uposition(widget, button->x*(1+priv->double_size), button->y*(1+priv->double_size));
 
-    button->redraw = TRUE;
     gtk_widget_queue_draw(widget);
 }
 
@@ -482,7 +472,7 @@
     UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
     if (priv->move_x || priv->move_y)
         gtk_fixed_move(GTK_FIXED(priv->fixed), GTK_WIDGET(button), button->x+priv->move_x, button->y+priv->move_y);
-    button->redraw = TRUE;
+
     gtk_widget_queue_draw(GTK_WIDGET(button));
     g_mutex_unlock(mutex);
 }