summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/gtkui/callbacks.h20
-rw-r--r--plugins/gtkui/ddblistview.c25
-rw-r--r--plugins/gtkui/deadbeef.glade297
-rw-r--r--plugins/gtkui/drawing.h12
-rw-r--r--plugins/gtkui/gdkdrawing.c44
-rw-r--r--plugins/gtkui/gtkui.c60
-rw-r--r--plugins/gtkui/gtkui.h2
-rw-r--r--plugins/gtkui/interface.c136
-rw-r--r--plugins/gtkui/prefwin.c124
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 (&gtkui_dark_color, &style->dark[GTK_STATE_NORMAL], sizeof (GdkColor));
memcpy (&gtkui_mid_color, &style->mid[GTK_STATE_NORMAL], sizeof (GdkColor));
memcpy (&gtkui_light_color, &style->light[GTK_STATE_NORMAL], sizeof (GdkColor));
+ memcpy (&gtkui_even_row_color, &style->light[GTK_STATE_NORMAL], sizeof (GdkColor));
+ memcpy (&gtkui_odd_row_color, &style->mid[GTK_STATE_NORMAL], sizeof (GdkColor));
+ memcpy (&gtkui_text_color, &style->fg[GTK_STATE_NORMAL], sizeof (GdkColor));
+ memcpy (&gtkui_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", &gtkui_light_color.red, &gtkui_light_color.green, &gtkui_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", &gtkui_even_row_color.red, &gtkui_even_row_color.green, &gtkui_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", &gtkui_odd_row_color.red, &gtkui_odd_row_color.green, &gtkui_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", &gtkui_text_color.red, &gtkui_text_color.green, &gtkui_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", &gtkui_selected_text_color.red, &gtkui_selected_text_color.green, &gtkui_selected_text_color.blue);
}
}
@@ -218,3 +242,23 @@ GdkColor *
gtkui_get_light_color (void) {
return &gtkui_light_color;
}
+
+GdkColor *
+gtkui_get_even_row_color (void) {
+ return &gtkui_even_row_color;
+}
+
+GdkColor *
+gtkui_get_odd_row_color (void) {
+ return &gtkui_odd_row_color;
+}
+
+GdkColor *
+gtkui_get_text_color (void) {
+ return &gtkui_text_color;
+}
+
+GdkColor *
+gtkui_get_selected_text_color (void) {
+ return &gtkui_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);
+}