diff options
-rw-r--r-- | plugins/gtkui/callbacks.h | 20 | ||||
-rw-r--r-- | plugins/gtkui/ddblistview.c | 25 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 297 | ||||
-rw-r--r-- | plugins/gtkui/drawing.h | 12 | ||||
-rw-r--r-- | plugins/gtkui/gdkdrawing.c | 44 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 60 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.h | 2 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 136 | ||||
-rw-r--r-- | plugins/gtkui/prefwin.c | 124 |
9 files changed, 612 insertions, 108 deletions
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index 4a2ff4d8..83139073 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -745,3 +745,23 @@ on_override_gtk_colors_toggled (GtkToggleButton *togglebutton, void on_mainwin_realize (GtkWidget *widget, gpointer user_data); + +void +on_color_even_row_color_set (GtkColorButton *colorbutton, + gpointer user_data); + +void +on_color_odd_row_color_set (GtkColorButton *colorbutton, + gpointer user_data); + +void +on_color_text_color_set (GtkColorButton *colorbutton, + gpointer user_data); + +void +on_color_selected_text_color_set (GtkColorButton *colorbutton, + gpointer user_data); + +void +on_disable_playlist_theming_toggled (GtkToggleButton *togglebutton, + gpointer user_data); diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index 303e46d7..3583bd10 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -35,6 +35,7 @@ #include <sys/time.h> #include "ddblistview.h" #include "drawing.h" +#include "gtkui.h" #pragma GCC optimize("O0") @@ -1107,15 +1108,27 @@ void ddb_listview_list_render_row_background (DdbListview *ps, DdbListviewIter it, int even, int cursor, int x, int y, int w, int h) { // draw background GtkWidget *treeview = theme_treeview; - if (treeview->style->depth == -1) { - return; // drawing was called too early + int theming = !gtkui_listview_theming_disabled (); + + if (theming) { + if (treeview->style->depth == -1) { + return; // drawing was called too early + } + GTK_OBJECT_FLAGS (treeview) |= GTK_HAS_FOCUS; } - GTK_OBJECT_FLAGS (treeview) |= GTK_HAS_FOCUS; if (it && ps->binding->is_selected(it)) { - // draw background for selection -- workaround for New Wave theme (translucency) - gtk_paint_flat_box (treeview->style, ps->backbuf, GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, treeview, even ? "cell_even_ruled" : "cell_odd_ruled", x, y, w, h); + if (theming) { + // draw background for selection -- workaround for New Wave theme (translucency) + gtk_paint_flat_box (treeview->style, ps->backbuf, GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, treeview, even ? "cell_even_ruled" : "cell_odd_ruled", x, y, w, h); + } + } + if (theming) { + gtk_paint_flat_box (treeview->style, ps->backbuf, (it && ps->binding->is_selected(it)) ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, treeview, even ? "cell_even_ruled" : "cell_odd_ruled", x, y, w, h); } - gtk_paint_flat_box (treeview->style, ps->backbuf, (it && ps->binding->is_selected(it)) ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL, treeview, even ? "cell_even_ruled" : "cell_odd_ruled", x, y, w, h); +// else { +// GdkColor *clr_ +// gtk_draw_rectangle (ps->backbuf, gc); +// } if (cursor) { // not all gtk engines/themes render focus rectangle in treeviews // but we want it anyway diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 9ea9eba1..88a260da 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -2530,9 +2530,9 @@ Album</property> <property name="visible">True</property> <property name="n_rows">2</property> <property name="n_columns">5</property> - <property name="homogeneous">False</property> - <property name="row_spacing">8</property> - <property name="column_spacing">0</property> + <property name="homogeneous">True</property> + <property name="row_spacing">0</property> + <property name="column_spacing">8</property> <child> <widget class="GtkColorButton" id="color_light"> @@ -2739,7 +2739,7 @@ Album</property> <child> <widget class="GtkLabel" id="label47"> <property name="visible">True</property> - <property name="label" translatable="yes">Background</property> + <property name="label" translatable="yes">Inactive background</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -2772,7 +2772,7 @@ Album</property> <widget class="GtkCheckButton" id="override_theme_colors"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Override GTK+ theme colors in custom widgets</property> + <property name="label" translatable="yes">Override GTK+ theme colors in volume control and seek bar widgets</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> @@ -2792,6 +2792,293 @@ Album</property> <property name="fill">True</property> </packing> </child> + + <child> + <widget class="GtkFrame" id="frame4"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="label_yalign">0.5</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + + <child> + <widget class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">1</property> + <property name="yscale">1</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">12</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkTable" id="listview_colors_table"> + <property name="border_width">12</property> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">5</property> + <property name="homogeneous">True</property> + <property name="row_spacing">0</property> + <property name="column_spacing">8</property> + + <child> + <widget class="GtkLabel" id="label58"> + <property name="visible">True</property> + <property name="label" translatable="yes">Even row</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label59"> + <property name="visible">True</property> + <property name="label" translatable="yes">Odd row</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label60"> + <property name="visible">True</property> + <property name="label" translatable="yes">Text</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label61"> + <property name="visible">True</property> + <property name="label" translatable="yes">Selected text</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label62"> + <property name="visible">True</property> + <property name="label" translatable="yes">Cursor</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkColorButton" id="color_even_row"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="use_alpha">False</property> + <property name="focus_on_click">True</property> + <signal name="color_set" handler="on_color_even_row_color_set" last_modification_time="Wed, 10 Mar 2010 21:17:16 GMT"/> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkColorButton" id="color_odd_row"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="use_alpha">False</property> + <property name="focus_on_click">True</property> + <signal name="color_set" handler="on_color_odd_row_color_set" last_modification_time="Wed, 10 Mar 2010 21:17:20 GMT"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkColorButton" id="color_text"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="use_alpha">False</property> + <property name="focus_on_click">True</property> + <signal name="color_set" handler="on_color_text_color_set" last_modification_time="Wed, 10 Mar 2010 21:17:23 GMT"/> + </widget> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkColorButton" id="color_selected_text"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="use_alpha">False</property> + <property name="focus_on_click">True</property> + <signal name="color_set" handler="on_color_selected_text_color_set" last_modification_time="Wed, 10 Mar 2010 21:17:26 GMT"/> + </widget> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkColorButton" id="color_cursor"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="use_alpha">False</property> + <property name="focus_on_click">True</property> + </widget> + <packing> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">expand</property> + <property name="y_options"></property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkCheckButton" id="disable_playlist_theming"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Disable playlist theming (speeds up rendering)</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_disable_playlist_theming_toggled" last_modification_time="Wed, 10 Mar 2010 21:17:33 GMT"/> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="tab_expand">False</property> diff --git a/plugins/gtkui/drawing.h b/plugins/gtkui/drawing.h index 54352ae1..deed2b2d 100644 --- a/plugins/gtkui/drawing.h +++ b/plugins/gtkui/drawing.h @@ -83,6 +83,18 @@ gtkui_get_mid_color (void); GdkColor * gtkui_get_light_color (void); +GdkColor * +gtkui_get_even_row_color (void); + +GdkColor * +gtkui_get_odd_row_color (void); + +GdkColor * +gtkui_get_text_color (void); + +GdkColor * +gtkui_get_selected_text_color (void); + void gtkui_init_theme_colors (void); diff --git a/plugins/gtkui/gdkdrawing.c b/plugins/gtkui/gdkdrawing.c index 3a992627..207575ea 100644 --- a/plugins/gtkui/gdkdrawing.c +++ b/plugins/gtkui/gdkdrawing.c @@ -154,6 +154,10 @@ static GdkColor gtkui_selection_color; static GdkColor gtkui_dark_color; static GdkColor gtkui_mid_color; static GdkColor gtkui_light_color; +static GdkColor gtkui_even_row_color; +static GdkColor gtkui_odd_row_color; +static GdkColor gtkui_text_color; +static GdkColor gtkui_selected_text_color; void gtkui_init_theme_colors (void) { @@ -170,6 +174,10 @@ gtkui_init_theme_colors (void) { memcpy (>kui_dark_color, &style->dark[GTK_STATE_NORMAL], sizeof (GdkColor)); memcpy (>kui_mid_color, &style->mid[GTK_STATE_NORMAL], sizeof (GdkColor)); memcpy (>kui_light_color, &style->light[GTK_STATE_NORMAL], sizeof (GdkColor)); + memcpy (>kui_even_row_color, &style->light[GTK_STATE_NORMAL], sizeof (GdkColor)); + memcpy (>kui_odd_row_color, &style->mid[GTK_STATE_NORMAL], sizeof (GdkColor)); + memcpy (>kui_text_color, &style->fg[GTK_STATE_NORMAL], sizeof (GdkColor)); + memcpy (>kui_selected_text_color, &style->fg[GTK_STATE_SELECTED], sizeof (GdkColor)); } else { snprintf (color_text, sizeof (color_text), "%d %d %d", style->base[GTK_STATE_SELECTED].red, style->base[GTK_STATE_SELECTED].green, style->base[GTK_STATE_SELECTED].blue); @@ -191,6 +199,22 @@ gtkui_init_theme_colors (void) { snprintf (color_text, sizeof (color_text), "%d %d %d", style->light[GTK_STATE_NORMAL].red, style->light[GTK_STATE_NORMAL].green, style->light[GTK_STATE_NORMAL].blue); clr = deadbeef->conf_get_str ("gtkui.color.light", color_text); sscanf (clr, "%d %d %d", >kui_light_color.red, >kui_light_color.green, >kui_light_color.blue); + + snprintf (color_text, sizeof (color_text), "%d %d %d", style->light[GTK_STATE_NORMAL].red, style->light[GTK_STATE_NORMAL].green, style->light[GTK_STATE_NORMAL].blue); + clr = deadbeef->conf_get_str ("gtkui.color.even_row", color_text); + sscanf (clr, "%d %d %d", >kui_even_row_color.red, >kui_even_row_color.green, >kui_even_row_color.blue); + + snprintf (color_text, sizeof (color_text), "%d %d %d", style->mid[GTK_STATE_NORMAL].red, style->mid[GTK_STATE_NORMAL].green, style->mid[GTK_STATE_NORMAL].blue); + clr = deadbeef->conf_get_str ("gtkui.color.odd_row", color_text); + sscanf (clr, "%d %d %d", >kui_odd_row_color.red, >kui_odd_row_color.green, >kui_odd_row_color.blue); + + snprintf (color_text, sizeof (color_text), "%d %d %d", style->fg[GTK_STATE_NORMAL].red, style->fg[GTK_STATE_NORMAL].green, style->fg[GTK_STATE_NORMAL].blue); + clr = deadbeef->conf_get_str ("gtkui.color.text", color_text); + sscanf (clr, "%d %d %d", >kui_text_color.red, >kui_text_color.green, >kui_text_color.blue); + + snprintf (color_text, sizeof (color_text), "%d %d %d", style->fg[GTK_STATE_SELECTED].red, style->fg[GTK_STATE_SELECTED].green, style->fg[GTK_STATE_SELECTED].blue); + clr = deadbeef->conf_get_str ("gtkui.color.selected_text", color_text); + sscanf (clr, "%d %d %d", >kui_selected_text_color.red, >kui_selected_text_color.green, >kui_selected_text_color.blue); } } @@ -218,3 +242,23 @@ GdkColor * gtkui_get_light_color (void) { return >kui_light_color; } + +GdkColor * +gtkui_get_even_row_color (void) { + return >kui_even_row_color; +} + +GdkColor * +gtkui_get_odd_row_color (void) { + return >kui_odd_row_color; +} + +GdkColor * +gtkui_get_text_color (void) { + return >kui_text_color; +} + +GdkColor * +gtkui_get_selected_text_color (void) { + return >kui_selected_text_color; +} diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index 7b003ee0..dda269fa 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -60,62 +60,15 @@ GtkWidget *searchwin; GtkStatusIcon *trayicon; GtkWidget *traymenu; -// orange on dark color scheme -float colo_dark_orange[COLO_COUNT][3] = { - { 0x7f/255.f, 0x7f/255.f, 0x7f/255.f }, // cursor - { 0x1d/255.f, 0x1f/255.f, 0x1b/255.f }, // odd - { 0x21/255.f, 0x23/255.f, 0x1f/255.f }, // even - { 0xaf/255.f, 0xa7/255.f, 0x9e/255.f }, // sel odd - { 0xa7/255.f, 0x9f/255.f, 0x96/255.f }, // sel even - { 0xf4/255.f, 0x7e/255.f, 0x46/255.f }, // text - { 0, 0, 0 }, // sel text - { 0x1d/255.f, 0x1f/255.f, 0x1b/255.f }, // seekbar back - { 0xf4/255.f, 0x7e/255.f, 0x46/255.f }, // seekbar front - { 0x1d/255.f, 0x1f/255.f, 0x1b/255.f }, // volumebar back - { 0xf4/255.f, 0x7e/255.f, 0x46/255.f }, // volumebar front - { 0xf4/255.f, 0x7e/255.f, 0x46/255.f }, // dragdrop marker -}; - -float colo_white_blue[COLO_COUNT][3] = { - { 0x7f/255.f, 0x7f/255.f, 0x7f/255.f }, // cursor - { 1, 1, 1 }, // odd - { 0xea/255.f, 0xeb/255.f, 0xec/255.f }, // even - { 0x24/255.f, 0x89/255.f, 0xb8/255.f }, // sel odd - { 0x20/255.f, 0x85/255.f, 0xb4/255.f }, // sel even - { 0, 0, 0 }, // text - { 1, 1, 1 }, // sel text - { 0x1d/255.f, 0x1f/255.f, 0x1b/255.f }, // seekbar back - { 0x24/255.f, 0x89/255.f, 0xb8/255.f }, // seekbar front - { 0x1d/255.f, 0x1f/255.f, 0x1b/255.f }, // volumebar back - { 0x24/255.f, 0x89/255.f, 0xb8/255.f }, // volumebar front - { 0x09/255.f, 0x22/255.f, 0x3a/255.f }, // dragdrop marker -}; - -// current color scheme -float colo_current[COLO_COUNT][3]; - -void -theme_set_cairo_source_rgb (cairo_t *cr, int col) { - cairo_set_source_rgb (cr, colo_current[col][0], colo_current[col][1], colo_current[col][2]); -} - -void -theme_set_fg_color (int col) { - draw_set_fg_color (colo_current[col]); -} - -void -theme_set_bg_color (int col) { - draw_set_bg_color (colo_current[col]); -} +// playlist theming +GtkWidget *theme_treeview; +int disable_listview_theming = 0; // that must be called before gtk_init -GtkWidget *theme_treeview; void gtkpl_init (void) { //memcpy (colo_current, colo_system_gtk, sizeof (colo_current)); //memcpy (colo_current, colo_dark_orange, sizeof (colo_current)); - memcpy (colo_current, colo_white_blue, sizeof (colo_current)); theme_treeview = gtk_tree_view_new (); GTK_WIDGET_UNSET_FLAGS (theme_treeview, GTK_CAN_FOCUS); gtk_widget_show (theme_treeview); @@ -540,9 +493,16 @@ gtkui_on_configchanged (DB_event_t *ev, uintptr_t data) { // theme colors gtkui_init_theme_colors (); + + disable_listview_theming = deadbeef->conf_get_int ("gtkui.disable_playlist_theming", 0); return 0; } +int +gtkui_listview_theming_disabled (void) { + return disable_listview_theming; +} + static gboolean outputchanged_cb (gpointer nothing) { preferences_fill_soundcards (); diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h index 8dd5907a..6195e6ec 100644 --- a/plugins/gtkui/gtkui.h +++ b/plugins/gtkui/gtkui.h @@ -86,5 +86,7 @@ playlist_refresh (void); void search_refresh (void); +int +gtkui_listview_theming_disabled (void); #endif diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index e76bf963..dfadf2b8 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -1463,6 +1463,20 @@ create_prefwin (void) GtkWidget *color_back; GtkWidget *label47; GtkWidget *override_theme_colors; + GtkWidget *frame4; + GtkWidget *alignment2; + GtkWidget *listview_colors_table; + GtkWidget *label58; + GtkWidget *label59; + GtkWidget *label60; + GtkWidget *label61; + GtkWidget *label62; + GtkWidget *color_even_row; + GtkWidget *color_odd_row; + GtkWidget *color_text; + GtkWidget *color_selected_text; + GtkWidget *color_cursor; + GtkWidget *disable_playlist_theming; GtkWidget *label2; GtkWidget *vbox11; GtkWidget *pref_network_enableproxy; @@ -1619,11 +1633,11 @@ create_prefwin (void) gtk_container_add (GTK_CONTAINER (frame3), alignment1); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment1), 0, 0, 12, 0); - colors_table = gtk_table_new (2, 5, FALSE); + colors_table = gtk_table_new (2, 5, TRUE); gtk_widget_show (colors_table); gtk_container_add (GTK_CONTAINER (alignment1), colors_table); gtk_container_set_border_width (GTK_CONTAINER (colors_table), 12); - gtk_table_set_row_spacings (GTK_TABLE (colors_table), 8); + gtk_table_set_col_spacings (GTK_TABLE (colors_table), 8); color_light = gtk_color_button_new (); gtk_widget_show (color_light); @@ -1683,17 +1697,102 @@ create_prefwin (void) (GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); - label47 = gtk_label_new ("Background"); + label47 = gtk_label_new ("Inactive background"); gtk_widget_show (label47); gtk_table_attach (GTK_TABLE (colors_table), label47, 4, 5, 0, 1, (GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label47), 0, 0.5); - override_theme_colors = gtk_check_button_new_with_mnemonic ("Override GTK+ theme colors in custom widgets"); + override_theme_colors = gtk_check_button_new_with_mnemonic ("Override GTK+ theme colors in volume control and seek bar widgets"); gtk_widget_show (override_theme_colors); gtk_frame_set_label_widget (GTK_FRAME (frame3), override_theme_colors); + frame4 = gtk_frame_new (NULL); + gtk_widget_show (frame4); + gtk_box_pack_start (GTK_BOX (vbox9), frame4, FALSE, TRUE, 0); + gtk_frame_set_shadow_type (GTK_FRAME (frame4), GTK_SHADOW_IN); + + alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1); + gtk_widget_show (alignment2); + gtk_container_add (GTK_CONTAINER (frame4), alignment2); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment2), 0, 0, 12, 0); + + listview_colors_table = gtk_table_new (2, 5, TRUE); + gtk_widget_show (listview_colors_table); + gtk_container_add (GTK_CONTAINER (alignment2), listview_colors_table); + gtk_container_set_border_width (GTK_CONTAINER (listview_colors_table), 12); + gtk_table_set_col_spacings (GTK_TABLE (listview_colors_table), 8); + + label58 = gtk_label_new ("Even row"); + gtk_widget_show (label58); + gtk_table_attach (GTK_TABLE (listview_colors_table), label58, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label58), 0, 0.5); + + label59 = gtk_label_new ("Odd row"); + gtk_widget_show (label59); + gtk_table_attach (GTK_TABLE (listview_colors_table), label59, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label59), 0, 0.5); + + label60 = gtk_label_new ("Text"); + gtk_widget_show (label60); + gtk_table_attach (GTK_TABLE (listview_colors_table), label60, 2, 3, 0, 1, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5); + + label61 = gtk_label_new ("Selected text"); + gtk_widget_show (label61); + gtk_table_attach (GTK_TABLE (listview_colors_table), label61, 3, 4, 0, 1, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label61), 0, 0.5); + + label62 = gtk_label_new ("Cursor"); + gtk_widget_show (label62); + gtk_table_attach (GTK_TABLE (listview_colors_table), label62, 4, 5, 0, 1, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment (GTK_MISC (label62), 0, 0.5); + + color_even_row = gtk_color_button_new (); + gtk_widget_show (color_even_row); + gtk_table_attach (GTK_TABLE (listview_colors_table), color_even_row, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + + color_odd_row = gtk_color_button_new (); + gtk_widget_show (color_odd_row); + gtk_table_attach (GTK_TABLE (listview_colors_table), color_odd_row, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + + color_text = gtk_color_button_new (); + gtk_widget_show (color_text); + gtk_table_attach (GTK_TABLE (listview_colors_table), color_text, 2, 3, 1, 2, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + + color_selected_text = gtk_color_button_new (); + gtk_widget_show (color_selected_text); + gtk_table_attach (GTK_TABLE (listview_colors_table), color_selected_text, 3, 4, 1, 2, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + + color_cursor = gtk_color_button_new (); + gtk_widget_show (color_cursor); + gtk_table_attach (GTK_TABLE (listview_colors_table), color_cursor, 4, 5, 1, 2, + (GtkAttachOptions) (GTK_EXPAND), + (GtkAttachOptions) (0), 0, 0); + + disable_playlist_theming = gtk_check_button_new_with_mnemonic ("Disable playlist theming (speeds up rendering)"); + gtk_widget_show (disable_playlist_theming); + gtk_frame_set_label_widget (GTK_FRAME (frame4), disable_playlist_theming); + label2 = gtk_label_new ("GUI"); gtk_widget_show (label2); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label2); @@ -1895,6 +1994,21 @@ create_prefwin (void) g_signal_connect ((gpointer) override_theme_colors, "toggled", G_CALLBACK (on_override_gtk_colors_toggled), NULL); + g_signal_connect ((gpointer) color_even_row, "color_set", + G_CALLBACK (on_color_even_row_color_set), + NULL); + g_signal_connect ((gpointer) color_odd_row, "color_set", + G_CALLBACK (on_color_odd_row_color_set), + NULL); + g_signal_connect ((gpointer) color_text, "color_set", + G_CALLBACK (on_color_text_color_set), + NULL); + g_signal_connect ((gpointer) color_selected_text, "color_set", + G_CALLBACK (on_color_selected_text_color_set), + NULL); + g_signal_connect ((gpointer) disable_playlist_theming, "toggled", + G_CALLBACK (on_disable_playlist_theming_toggled), + NULL); g_signal_connect ((gpointer) pref_network_enableproxy, "clicked", G_CALLBACK (on_pref_network_enableproxy_clicked), NULL); @@ -1952,6 +2066,20 @@ create_prefwin (void) GLADE_HOOKUP_OBJECT (prefwin, color_back, "color_back"); GLADE_HOOKUP_OBJECT (prefwin, label47, "label47"); GLADE_HOOKUP_OBJECT (prefwin, override_theme_colors, "override_theme_colors"); + GLADE_HOOKUP_OBJECT (prefwin, frame4, "frame4"); + GLADE_HOOKUP_OBJECT (prefwin, alignment2, "alignment2"); + GLADE_HOOKUP_OBJECT (prefwin, listview_colors_table, "listview_colors_table"); + GLADE_HOOKUP_OBJECT (prefwin, label58, "label58"); + GLADE_HOOKUP_OBJECT (prefwin, label59, "label59"); + GLADE_HOOKUP_OBJECT (prefwin, label60, "label60"); + GLADE_HOOKUP_OBJECT (prefwin, label61, "label61"); + GLADE_HOOKUP_OBJECT (prefwin, label62, "label62"); + GLADE_HOOKUP_OBJECT (prefwin, color_even_row, "color_even_row"); + GLADE_HOOKUP_OBJECT (prefwin, color_odd_row, "color_odd_row"); + GLADE_HOOKUP_OBJECT (prefwin, color_text, "color_text"); + GLADE_HOOKUP_OBJECT (prefwin, color_selected_text, "color_selected_text"); + GLADE_HOOKUP_OBJECT (prefwin, color_cursor, "color_cursor"); + GLADE_HOOKUP_OBJECT (prefwin, disable_playlist_theming, "disable_playlist_theming"); GLADE_HOOKUP_OBJECT (prefwin, label2, "label2"); GLADE_HOOKUP_OBJECT (prefwin, vbox11, "vbox11"); GLADE_HOOKUP_OBJECT (prefwin, pref_network_enableproxy, "pref_network_enableproxy"); diff --git a/plugins/gtkui/prefwin.c b/plugins/gtkui/prefwin.c index c1515fa8..d679c62b 100644 --- a/plugins/gtkui/prefwin.c +++ b/plugins/gtkui/prefwin.c @@ -23,6 +23,7 @@ #include "support.h" #include "interface.h" #include "callbacks.h" +#include "drawing.h" static GtkWidget *prefwin; @@ -149,49 +150,25 @@ on_preferences_activate (GtkMenuItem *menuitem, int override = deadbeef->conf_get_int ("gtkui.override_theme_colors", 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (prefwin, "override_theme_colors")), override); gtk_widget_set_sensitive (lookup_widget (prefwin, "colors_table"), override); - char color_selection[100]; - char color_dark[100]; - char color_mid[100]; - char color_light[100]; - char color_back[100]; - - extern GtkWidget *mainwin; - GtkStyle *style = mainwin->style; - - const char *clr; - GtkWidget *clr_widget; - GdkColor gdk_clr; - memset (&gdk_clr, 0, sizeof (gdk_clr)); - - snprintf (color_selection, sizeof (color_selection), "%d %d %d", style->base[GTK_STATE_SELECTED].red, style->base[GTK_STATE_SELECTED].green, style->base[GTK_STATE_SELECTED].blue); - clr = deadbeef->conf_get_str ("gtkui.color.selection", color_selection); - sscanf (clr, "%d %d %d", &gdk_clr.red, &gdk_clr.green, &gdk_clr.blue); - clr_widget = lookup_widget (prefwin, "color_selection"); - gtk_color_button_set_color (GTK_COLOR_BUTTON (clr_widget), &gdk_clr); - - snprintf (color_dark, sizeof (color_dark), "%d %d %d", style->dark[GTK_STATE_NORMAL].red, style->dark[GTK_STATE_NORMAL].green, style->dark[GTK_STATE_NORMAL].blue); - clr = deadbeef->conf_get_str ("gtkui.color.dark", color_dark); - sscanf (clr, "%d %d %d", &gdk_clr.red, &gdk_clr.green, &gdk_clr.blue); - clr_widget = lookup_widget (prefwin, "color_dark"); - gtk_color_button_set_color (GTK_COLOR_BUTTON (clr_widget), &gdk_clr); - - snprintf (color_mid, sizeof (color_mid), "%d %d %d", style->mid[GTK_STATE_NORMAL].red, style->mid[GTK_STATE_NORMAL].green, style->mid[GTK_STATE_NORMAL].blue); - clr = deadbeef->conf_get_str ("gtkui.color.mid", color_mid); - sscanf (clr, "%d %d %d", &gdk_clr.red, &gdk_clr.green, &gdk_clr.blue); - clr_widget = lookup_widget (prefwin, "color_mid"); - gtk_color_button_set_color (GTK_COLOR_BUTTON (clr_widget), &gdk_clr); - - snprintf (color_light, sizeof (color_light), "%d %d %d", style->light[GTK_STATE_NORMAL].red, style->light[GTK_STATE_NORMAL].green, style->light[GTK_STATE_NORMAL].blue); - clr = deadbeef->conf_get_str ("gtkui.color.light", color_light); - sscanf (clr, "%d %d %d", &gdk_clr.red, &gdk_clr.green, &gdk_clr.blue); - clr_widget = lookup_widget (prefwin, "color_light"); - gtk_color_button_set_color (GTK_COLOR_BUTTON (clr_widget), &gdk_clr); - - snprintf (color_back, sizeof (color_back), "%d %d %d", style->fg[GTK_STATE_NORMAL].red, style->fg[GTK_STATE_NORMAL].green, style->fg[GTK_STATE_NORMAL].blue); - clr = deadbeef->conf_get_str ("gtkui.color.back", color_back); - sscanf (clr, "%d %d %d", &gdk_clr.red, &gdk_clr.green, &gdk_clr.blue); - clr_widget = lookup_widget (prefwin, "color_back"); - gtk_color_button_set_color (GTK_COLOR_BUTTON (clr_widget), &gdk_clr); + + // colors + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_selection")), gtkui_get_selection_color ()); + + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_dark")), gtkui_get_dark_color ()); + + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_mid")), gtkui_get_mid_color ()); + + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_light")), gtkui_get_light_color ()); + + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_back")), gtkui_get_back_color ()); + + override = deadbeef->conf_get_int ("gtkui.disable_playlist_theming", 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (prefwin, "disable_playlist_theming")), override); + gtk_widget_set_sensitive (lookup_widget (prefwin, "listview_colors_table"), override); + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_even_row")), gtkui_get_even_row_color ()); + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_odd_row")), gtkui_get_odd_row_color ()); + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_text")), gtkui_get_text_color ()); + gtk_color_button_set_color (GTK_COLOR_BUTTON (lookup_widget (prefwin, "color_selected_text")), gtkui_get_selected_text_color ()); // network gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (w, "pref_network_enableproxy")), deadbeef->conf_get_int ("network.proxy", 0)); @@ -486,6 +463,58 @@ on_color_back_color_set (GtkColorButton *colorbutton, deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); } + +void +on_color_even_row_color_set (GtkColorButton *colorbutton, + gpointer user_data) +{ + GdkColor clr; + gtk_color_button_get_color (colorbutton, &clr); + char str[100]; + snprintf (str, sizeof (str), "%d %d %d", clr.red, clr.green, clr.blue); + deadbeef->conf_set_str ("gtkui.color.even_row", str); + deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); +} + + +void +on_color_odd_row_color_set (GtkColorButton *colorbutton, + gpointer user_data) +{ + GdkColor clr; + gtk_color_button_get_color (colorbutton, &clr); + char str[100]; + snprintf (str, sizeof (str), "%d %d %d", clr.red, clr.green, clr.blue); + deadbeef->conf_set_str ("gtkui.color.odd_row", str); + deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); +} + + +void +on_color_text_color_set (GtkColorButton *colorbutton, + gpointer user_data) +{ + GdkColor clr; + gtk_color_button_get_color (colorbutton, &clr); + char str[100]; + snprintf (str, sizeof (str), "%d %d %d", clr.red, clr.green, clr.blue); + deadbeef->conf_set_str ("gtkui.color.text", str); + deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); +} + + +void +on_color_selected_text_color_set (GtkColorButton *colorbutton, + gpointer user_data) +{ + GdkColor clr; + gtk_color_button_get_color (colorbutton, &clr); + char str[100]; + snprintf (str, sizeof (str), "%d %d %d", clr.red, clr.green, clr.blue); + deadbeef->conf_set_str ("gtkui.color.selected_text", str); + deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); +} + void on_override_gtk_colors_toggled (GtkToggleButton *togglebutton, gpointer user_data) @@ -496,3 +525,12 @@ on_override_gtk_colors_toggled (GtkToggleButton *togglebutton, deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); } +void +on_disable_playlist_theming_toggled (GtkToggleButton *togglebutton, + gpointer user_data) +{ + int active = gtk_toggle_button_get_active (togglebutton); + deadbeef->conf_set_int ("gtkui.disable_playlist_theming", active); + gtk_widget_set_sensitive (lookup_widget (prefwin, "listview_colors_table"), active); + deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0); +} |