Mercurial > audlegacy
diff audacious/equalizer.c @ 1938:1d9c1026d9f8 trunk
[svn] - DoubleSize support.
This has bugs, the most notable one being that DoubleSize only works
right if you restart the player.
The second bug is rather obvious too. No osmosis skinengine. No
TinyPlayer. Classic-esque skinengine only. This is because the
doublesize algorithm hates you and wants you to go die in a fire.
author | nenolod |
---|---|
date | Sun, 05 Nov 2006 04:43:16 -0800 |
parents | a6e6d3500c13 |
children | e929aec8c8ea |
line wrap: on
line diff
--- a/audacious/equalizer.c Sun Nov 05 02:38:25 2006 -0800 +++ b/audacious/equalizer.c Sun Nov 05 04:43:16 2006 -0800 @@ -93,7 +93,7 @@ static GtkWidget *equalizerwin_delete_window = NULL; static GtkWidget *equalizerwin_delete_auto_window = NULL; -static GdkPixmap *equalizerwin_bg; +static GdkPixmap *equalizerwin_bg, *equalizerwin_bg_x2; static GdkGC *equalizerwin_gc; static GList *equalizerwin_wlist = NULL; @@ -180,15 +180,41 @@ static void equalizerwin_set_shape_mask(void) { - GdkBitmap *mask; - if (cfg.show_wm_decorations) return; - mask = skin_get_mask(bmp_active_skin, SKIN_MASK_EQ + cfg.equalizer_shaded); - gtk_widget_shape_combine_mask(equalizerwin, mask, 0, 0); + if (cfg.doublesize == FALSE) + gtk_widget_shape_combine_mask(equalizerwin, + skin_get_mask(bmp_active_skin, + SKIN_MASK_EQ), 0, 0); + else + gtk_widget_shape_combine_mask(equalizerwin, NULL, 0, 0); } +void +equalizerwin_set_doublesize(gboolean ds) +{ + gint height; + + if (cfg.equalizer_shaded) + height = 14; + else + height = 116; + + equalizerwin_set_shape_mask(); + + if (ds) { + dock_window_resize(equalizerwin, 275, height, 550, height * 2); + gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg_x2, + 0); + } + else { + dock_window_resize(equalizerwin, 275, height, 275, height); + gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0); + } + + draw_equalizer_window(TRUE); +} void equalizerwin_set_shade_menu_cb(gboolean shaded) @@ -198,7 +224,8 @@ equalizerwin_set_shape_mask(); if (shaded) { - dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), 14); + dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), + 14 * (EQUALIZER_DOUBLESIZE + 1)); pbutton_set_button_data(equalizerwin_shade, -1, 3, -1, 47); pbutton_set_skin_index1(equalizerwin_shade, SKIN_EQ_EX); pbutton_set_button_data(equalizerwin_close, 11, 38, 11, 47); @@ -207,7 +234,8 @@ widget_show(WIDGET(equalizerwin_balance)); } else { - dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), 116); + dock_shade(dock_window_list, GTK_WINDOW(equalizerwin), + 116 * (EQUALIZER_DOUBLESIZE + 1)); pbutton_set_button_data(equalizerwin_shade, -1, 137, -1, 38); pbutton_set_skin_index1(equalizerwin_shade, SKIN_EQMAIN); pbutton_set_button_data(equalizerwin_close, 0, 116, 0, 125); @@ -286,6 +314,9 @@ void draw_equalizer_window(gboolean force) { + GdkImage *img, *img2; + GList *wl; + Widget *w; gboolean redraw; widget_list_lock(equalizerwin_wlist); @@ -320,7 +351,36 @@ widget_list_draw(equalizerwin_wlist, &redraw, force); if (force || redraw) { - widget_list_clear_redraw(equalizerwin_wlist); + if (cfg.doublesize && cfg.eq_doublesize_linked) { + if (force) { + img = gdk_drawable_get_image(equalizerwin_bg, 0, 0, 275, 116); + img2 = create_dblsize_image(img); + gdk_draw_image(equalizerwin_bg_x2, equalizerwin_gc, + img2, 0, 0, 0, 0, 550, 232); + gdk_image_destroy(img2); + gdk_image_destroy(img); + } + else { + for (wl = equalizerwin_wlist; wl; wl = g_list_next(wl)) { + w = WIDGET(wl->data); + if (w->redraw && w->visible) { + img = gdk_drawable_get_image(equalizerwin_bg, + w->x, w->y, + w->width, w->height); + img2 = create_dblsize_image(img); + gdk_draw_image(equalizerwin_bg_x2, + equalizerwin_gc, img2, 0, 0, + w->x << 1, w->y << 1, w->width << 1, + w->height << 1); + gdk_image_destroy(img2); + gdk_image_destroy(img); + w->redraw = FALSE; + } + } + } + } + else + widget_list_clear_redraw(equalizerwin_wlist); gdk_window_clear(equalizerwin->window); gdk_flush(); } @@ -360,9 +420,13 @@ mx = event->x; my = event->y; + if (cfg.doublesize && cfg.eq_doublesize_linked) { + event->x /= 2; + event->y /= 2; + } if (event->button == 1 && event->type == GDK_BUTTON_PRESS && - ((cfg.equalizer_shaded || event->y < 14) && + ((cfg.easy_move || cfg.equalizer_shaded || event->y < 14) && !inside_sensitive_widgets(event->x, event->y))) { if (0 && hint_move_resize_available()) { hint_move_resize(equalizerwin, event->x_root, @@ -407,6 +471,11 @@ static void equalizerwin_scroll(GtkWidget * widget, GdkEventScroll * event, gpointer data) { + if (cfg.doublesize && cfg.eq_doublesize_linked) { + event->x /= 2; + event->y /= 2; + } + handle_scroll_cb(equalizerwin_wlist, widget, event); draw_equalizer_window(FALSE); } @@ -441,6 +510,10 @@ gdk_pointer_ungrab(GDK_CURRENT_TIME); gdk_flush(); + if (cfg.doublesize && cfg.eq_doublesize_linked) { + event->x /= 2; + event->y /= 2; + } if (dock_is_moving(GTK_WINDOW(equalizerwin))) { dock_move_release(GTK_WINDOW(equalizerwin)); } @@ -517,7 +590,11 @@ static void equalizerwin_set_back_pixmap(void) { - gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0); + if (cfg.doublesize && cfg.eq_doublesize_linked) + gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg_x2, + 0); + else + gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0); gdk_window_clear(equalizerwin->window); } @@ -743,6 +820,11 @@ width = 275; height = cfg.equalizer_shaded ? 14 : 116; + if (cfg.doublesize && cfg.eq_doublesize_linked) { + width *= 2; + height *= 2; + } + gtk_window_set_default_size(GTK_WINDOW(equalizerwin), width, height); gtk_window_set_resizable(GTK_WINDOW(equalizerwin), FALSE); @@ -817,11 +899,16 @@ equalizerwin_gc = gdk_gc_new(equalizerwin->window); equalizerwin_bg = gdk_pixmap_new(equalizerwin->window, 275, 116, -1); + equalizerwin_bg_x2 = gdk_pixmap_new(equalizerwin->window, 550, 232, -1); equalizerwin_create_widgets(); equalizerwin_set_back_pixmap(); - gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0); + if (cfg.doublesize && cfg.eq_doublesize_linked) + gdk_window_set_back_pixmap(equalizerwin->window, + equalizerwin_bg_x2, 0); + else + gdk_window_set_back_pixmap(equalizerwin->window, equalizerwin_bg, 0); } @@ -845,8 +932,12 @@ gtk_window_get_position(GTK_WINDOW(equalizerwin), &x, &y); gtk_window_move(GTK_WINDOW(equalizerwin), x, y); - gtk_widget_set_size_request(equalizerwin, 275, - (cfg.equalizer_shaded ? 14 : 116)); + if (cfg.doublesize && cfg.eq_doublesize_linked) + gtk_widget_set_size_request(equalizerwin, 550, + (cfg.equalizer_shaded ? 28 : 232)); + else + gtk_widget_set_size_request(equalizerwin, 275, + (cfg.equalizer_shaded ? 14 : 116)); gdk_flush(); draw_equalizer_window(TRUE); cfg.equalizer_visible = TRUE;