summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-18 16:56:16 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-18 16:56:16 +0200
commit60fc6f6512f98af10228d055e88e61b7204a427c (patch)
tree2066939dfb4dd3a6530acb2f684202c17eb60b5c /plugins
parentad3af05b3b56f78f5446727e568c874b54ec4d40 (diff)
some tweaks to custom widget colors handling
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/ddbequalizer.c43
-rw-r--r--plugins/gtkui/ddbequalizer.h5
-rw-r--r--plugins/gtkui/ddbequalizer.vala36
-rw-r--r--plugins/gtkui/ddbseekbar.c12
-rw-r--r--plugins/gtkui/ddbseekbar.h5
-rw-r--r--plugins/gtkui/ddbseekbar.vala5
-rw-r--r--plugins/gtkui/ddbvolumebar.c10
7 files changed, 93 insertions, 23 deletions
diff --git a/plugins/gtkui/ddbequalizer.c b/plugins/gtkui/ddbequalizer.c
index 30451403..bb4aa2e5 100644
--- a/plugins/gtkui/ddbequalizer.c
+++ b/plugins/gtkui/ddbequalizer.c
@@ -43,17 +43,17 @@ typedef struct _DdbEqualizer DdbEqualizer;
typedef struct _DdbEqualizerClass DdbEqualizerClass;
typedef struct _DdbEqualizerPrivate DdbEqualizerPrivate;
#define _gdk_cursor_unref0(var) ((var == NULL) ? NULL : (var = (gdk_cursor_unref (var), NULL)))
-#define _g_free0(var) (var = (g_free (var), NULL))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
#define _pango_font_description_free0(var) ((var == NULL) ? NULL : (var = (pango_font_description_free (var), NULL)))
struct _DdbEqualizer {
- GtkDrawingArea parent_instance;
+ GtkWidget parent_instance;
DdbEqualizerPrivate * priv;
};
struct _DdbEqualizerClass {
- GtkDrawingAreaClass parent_class;
+ GtkWidgetClass parent_class;
};
struct _DdbEqualizerPrivate {
@@ -79,6 +79,7 @@ enum {
};
#define DDB_EQUALIZER_bands 18
#define DDB_EQUALIZER_spot_size 3
+static void ddb_equalizer_real_realize (GtkWidget* base);
static inline double ddb_equalizer_scale (DdbEqualizer* self, double val);
static gboolean ddb_equalizer_real_expose_event (GtkWidget* base, GdkEventExpose* event);
static gboolean ddb_equalizer_in_curve_area (DdbEqualizer* self, double x, double y);
@@ -91,7 +92,7 @@ void ddb_equalizer_set_band (DdbEqualizer* self, gint band, double v);
double ddb_equalizer_get_band (DdbEqualizer* self, gint band);
void ddb_equalizer_set_preamp (DdbEqualizer* self, double v);
double ddb_equalizer_get_preamp (DdbEqualizer* self);
-void ddb_equalizer_color_changed (DdbEqualizer* self);
+static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event);
DdbEqualizer* ddb_equalizer_new (void);
DdbEqualizer* ddb_equalizer_construct (GType object_type);
static GObject * ddb_equalizer_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
@@ -100,6 +101,21 @@ static void ddb_equalizer_finalize (GObject* obj);
const char* freqs[18] = {"55 Hz", "77 Hz", "110 Hz", "156 Hz", "220 Hz", "311 Hz", "440 Hz", "622 Hz", "880 Hz", "1.2 kHz", "1.8 kHz", "2.5 kHz", "3.5 kHz", "5 kHz", "7 kHz", "10 kHz", "14 kHz", "20 kHz"};
+static void ddb_equalizer_real_realize (GtkWidget* base) {
+ DdbEqualizer * self;
+ GdkWindowAttr _tmp0_ = {0};
+ GdkWindowAttr attrs;
+ GdkWindow* _tmp1_;
+ self = (DdbEqualizer*) base;
+ attrs = (memset (&_tmp0_, 0, sizeof (GdkWindowAttr)), _tmp0_.window_type = GDK_WINDOW_CHILD, _tmp0_.wclass = GDK_INPUT_OUTPUT, _tmp0_.event_mask = gtk_widget_get_events ((GtkWidget*) self) | GDK_EXPOSURE_MASK, _tmp0_);
+ ((GtkWidget*) self)->window = (_tmp1_ = gdk_window_new (gtk_widget_get_parent_window ((GtkWidget*) self), &attrs, 0), _g_object_unref0 (((GtkWidget*) self)->window), _tmp1_);
+ gdk_window_move_resize (((GtkWidget*) self)->window, ((GtkWidget*) self)->allocation.x, ((GtkWidget*) self)->allocation.y, ((GtkWidget*) self)->allocation.width, ((GtkWidget*) self)->allocation.height);
+ gdk_window_set_user_data (((GtkWidget*) self)->window, self);
+ gtk_widget_set_style ((GtkWidget*) self, gtk_style_attach (gtk_widget_get_style ((GtkWidget*) self), ((GtkWidget*) self)->window));
+ GTK_WIDGET_SET_FLAGS ((GtkWidget*) self, GTK_REALIZED);
+}
+
+
static gpointer _g_object_ref0 (gpointer self) {
return self ? g_object_ref (self) : NULL;
}
@@ -154,6 +170,8 @@ static gboolean ddb_equalizer_real_expose_event (GtkWidget* base, GdkEventExpose
height = ((GtkWidget*) self)->allocation.height;
d = _g_object_ref0 ((GdkDrawable*) gtk_widget_get_window ((GtkWidget*) self));
gc = _g_object_ref0 (GDK_DRAWABLE_GET_CLASS (d)->create_gc (d, (_tmp3_ = (memset (&_tmp2_, 0, sizeof (GdkGCValues)), _tmp2_), &_tmp3_), 0));
+ gdk_gc_set_rgb_fg_color (gc, &c2);
+ gdk_draw_rectangle (d, gc, TRUE, 0, 0, width, height);
gdk_gc_set_rgb_fg_color (gc, &fore_dark_color);
step = ((double) (width - self->priv->margin_left)) / ((double) (DDB_EQUALIZER_bands + 1));
{
@@ -548,12 +566,13 @@ double ddb_equalizer_get_preamp (DdbEqualizer* self) {
}
-void ddb_equalizer_color_changed (DdbEqualizer* self) {
- GdkColor _tmp1_;
- GdkColor _tmp0_ = {0};
- g_return_if_fail (self != NULL);
+static gboolean ddb_equalizer_real_configure_event (GtkWidget* base, GdkEventConfigure* event) {
+ DdbEqualizer * self;
+ gboolean result = FALSE;
+ self = (DdbEqualizer*) base;
gtkui_init_theme_colors ();
- gtk_widget_modify_bg ((GtkWidget*) self, GTK_STATE_NORMAL, (_tmp1_ = (gtkui_get_bar_background_color (&_tmp0_), _tmp0_), &_tmp1_));
+ result = FALSE;
+ return result;
}
@@ -580,7 +599,7 @@ static GObject * ddb_equalizer_constructor (GType type, guint n_construct_proper
gtk_widget_add_events ((GtkWidget*) self, (gint) (((GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK) | GDK_LEAVE_NOTIFY_MASK) | GDK_POINTER_MOTION_MASK));
self->priv->margin_bottom = (gint) (((pango_units_to_double (pango_font_description_get_size (gtk_widget_get_style ((GtkWidget*) self)->font_desc)) * gdk_screen_get_resolution (gdk_screen_get_default ())) / 72) + 4);
self->priv->margin_left = self->priv->margin_bottom * 4;
- ddb_equalizer_color_changed (self);
+ gtk_widget_set_app_paintable ((GtkWidget*) self, TRUE);
}
return obj;
}
@@ -589,11 +608,13 @@ static GObject * ddb_equalizer_constructor (GType type, guint n_construct_proper
static void ddb_equalizer_class_init (DdbEqualizerClass * klass) {
ddb_equalizer_parent_class = g_type_class_peek_parent (klass);
g_type_class_add_private (klass, sizeof (DdbEqualizerPrivate));
+ GTK_WIDGET_CLASS (klass)->realize = ddb_equalizer_real_realize;
GTK_WIDGET_CLASS (klass)->expose_event = ddb_equalizer_real_expose_event;
GTK_WIDGET_CLASS (klass)->button_press_event = ddb_equalizer_real_button_press_event;
GTK_WIDGET_CLASS (klass)->button_release_event = ddb_equalizer_real_button_release_event;
GTK_WIDGET_CLASS (klass)->leave_notify_event = ddb_equalizer_real_leave_notify_event;
GTK_WIDGET_CLASS (klass)->motion_notify_event = ddb_equalizer_real_motion_notify_event;
+ GTK_WIDGET_CLASS (klass)->configure_event = ddb_equalizer_real_configure_event;
G_OBJECT_CLASS (klass)->constructor = ddb_equalizer_constructor;
G_OBJECT_CLASS (klass)->finalize = ddb_equalizer_finalize;
g_signal_new ("on_changed", DDB_TYPE_EQUALIZER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
@@ -628,7 +649,7 @@ GType ddb_equalizer_get_type (void) {
if (g_once_init_enter (&ddb_equalizer_type_id__volatile)) {
static const GTypeInfo g_define_type_info = { sizeof (DdbEqualizerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) ddb_equalizer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DdbEqualizer), 0, (GInstanceInitFunc) ddb_equalizer_instance_init, NULL };
GType ddb_equalizer_type_id;
- ddb_equalizer_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "DdbEqualizer", &g_define_type_info, 0);
+ ddb_equalizer_type_id = g_type_register_static (GTK_TYPE_WIDGET, "DdbEqualizer", &g_define_type_info, 0);
g_once_init_leave (&ddb_equalizer_type_id__volatile, ddb_equalizer_type_id);
}
return ddb_equalizer_type_id__volatile;
diff --git a/plugins/gtkui/ddbequalizer.h b/plugins/gtkui/ddbequalizer.h
index dcc4acdc..0f51f6a8 100644
--- a/plugins/gtkui/ddbequalizer.h
+++ b/plugins/gtkui/ddbequalizer.h
@@ -35,12 +35,12 @@ typedef struct _DdbSeekbarClass DdbSeekbarClass;
typedef struct _DdbSeekbarPrivate DdbSeekbarPrivate;
struct _DdbEqualizer {
- GtkDrawingArea parent_instance;
+ GtkWidget parent_instance;
DdbEqualizerPrivate * priv;
};
struct _DdbEqualizerClass {
- GtkDrawingAreaClass parent_class;
+ GtkWidgetClass parent_class;
};
struct _DdbSeekbar {
@@ -58,7 +58,6 @@ void ddb_equalizer_set_band (DdbEqualizer* self, gint band, double v);
double ddb_equalizer_get_band (DdbEqualizer* self, gint band);
void ddb_equalizer_set_preamp (DdbEqualizer* self, double v);
double ddb_equalizer_get_preamp (DdbEqualizer* self);
-void ddb_equalizer_color_changed (DdbEqualizer* self);
DdbEqualizer* ddb_equalizer_new (void);
DdbEqualizer* ddb_equalizer_construct (GType object_type);
GType ddb_seekbar_get_type (void);
diff --git a/plugins/gtkui/ddbequalizer.vala b/plugins/gtkui/ddbequalizer.vala
index 317dcca0..e121716f 100644
--- a/plugins/gtkui/ddbequalizer.vala
+++ b/plugins/gtkui/ddbequalizer.vala
@@ -24,7 +24,7 @@ const string[] freqs = {
};
namespace Ddb {
- public class Equalizer : Gtk.DrawingArea
+ public class Equalizer : Gtk.Widget
{
public signal void on_changed ();
@@ -54,8 +54,25 @@ namespace Ddb {
margin_bottom = (int)(Pango.units_to_double (get_style ().font_desc.get_size ()) * Gdk.Screen.get_default ().get_resolution () / 72 + 4);
margin_left = margin_bottom * 4;
+ set_app_paintable (true);
- color_changed ();
+ //color_changed ();
+ }
+
+ public override void realize () {
+ var attrs = Gdk.WindowAttr () {
+ window_type = Gdk.WindowType.CHILD,
+ wclass = Gdk.WindowClass.INPUT_OUTPUT,
+ event_mask = get_events () | Gdk.EventMask.EXPOSURE_MASK
+ };
+ this.window = new Gdk.Window (get_parent_window (), attrs, 0);
+ this.window.move_resize (this.allocation.x, this.allocation.y,
+ this.allocation.width, this.allocation.height);
+
+ this.window.set_user_data (this);
+ this.style = this.style.attach (this.window);
+// this.style.set_background (this.window, Gtk.StateType.NORMAL);
+ set_flags (Gtk.WidgetFlags.REALIZED);
}
public override bool
@@ -76,6 +93,10 @@ namespace Ddb {
Gdk.Drawable d = get_window();
var gc = d.create_gc (Gdk.GCValues(), 0);
+ gc.set_rgb_fg_color (c2);
+
+ d.draw_rectangle (gc, true, 0, 0, width, height);
+
gc.set_rgb_fg_color (fore_dark_color);
//drawing grid:
double step = (double)(width - margin_left) / (double)(bands+1);
@@ -346,10 +367,15 @@ namespace Ddb {
return ((1 - preamp) * 40.0) - 20.0;
}
- public void
- color_changed () {
+ //public void
+ //color_changed () {
+ // //Gtkui.init_theme_colors ();
+ // //modify_bg (Gtk.StateType.NORMAL, Gtkui.get_bar_background_color ());
+ //}
+
+ public override bool configure_event (Gdk.EventConfigure event) {
Gtkui.init_theme_colors ();
- modify_bg (Gtk.StateType.NORMAL, Gtkui.get_bar_background_color ());
+ return false;
}
}
}
diff --git a/plugins/gtkui/ddbseekbar.c b/plugins/gtkui/ddbseekbar.c
index e53ba83f..1d173c3f 100644
--- a/plugins/gtkui/ddbseekbar.c
+++ b/plugins/gtkui/ddbseekbar.c
@@ -61,6 +61,7 @@ static gboolean ddb_seekbar_real_expose_event (GtkWidget* base, GdkEventExpose*
static gboolean ddb_seekbar_real_button_press_event (GtkWidget* base, GdkEventButton* event);
static gboolean ddb_seekbar_real_button_release_event (GtkWidget* base, GdkEventButton* event);
static gboolean ddb_seekbar_real_motion_notify_event (GtkWidget* base, GdkEventMotion* event);
+static gboolean ddb_seekbar_real_configure_event (GtkWidget* base, GdkEventConfigure* event);
DdbSeekbar* ddb_seekbar_new (void);
DdbSeekbar* ddb_seekbar_construct (GType object_type);
static GObject * ddb_seekbar_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
@@ -125,6 +126,16 @@ static gboolean ddb_seekbar_real_motion_notify_event (GtkWidget* base, GdkEventM
}
+static gboolean ddb_seekbar_real_configure_event (GtkWidget* base, GdkEventConfigure* event) {
+ DdbSeekbar * self;
+ gboolean result = FALSE;
+ self = (DdbSeekbar*) base;
+ gtkui_init_theme_colors ();
+ result = FALSE;
+ return result;
+}
+
+
DdbSeekbar* ddb_seekbar_construct (GType object_type) {
DdbSeekbar * self;
self = g_object_newv (object_type, 0, NULL);
@@ -159,6 +170,7 @@ static void ddb_seekbar_class_init (DdbSeekbarClass * klass) {
GTK_WIDGET_CLASS (klass)->button_press_event = ddb_seekbar_real_button_press_event;
GTK_WIDGET_CLASS (klass)->button_release_event = ddb_seekbar_real_button_release_event;
GTK_WIDGET_CLASS (klass)->motion_notify_event = ddb_seekbar_real_motion_notify_event;
+ GTK_WIDGET_CLASS (klass)->configure_event = ddb_seekbar_real_configure_event;
G_OBJECT_CLASS (klass)->constructor = ddb_seekbar_constructor;
}
diff --git a/plugins/gtkui/ddbseekbar.h b/plugins/gtkui/ddbseekbar.h
index 7308a721..023aac93 100644
--- a/plugins/gtkui/ddbseekbar.h
+++ b/plugins/gtkui/ddbseekbar.h
@@ -35,12 +35,12 @@ typedef struct _DdbSeekbarClass DdbSeekbarClass;
typedef struct _DdbSeekbarPrivate DdbSeekbarPrivate;
struct _DdbEqualizer {
- GtkDrawingArea parent_instance;
+ GtkWidget parent_instance;
DdbEqualizerPrivate * priv;
};
struct _DdbEqualizerClass {
- GtkDrawingAreaClass parent_class;
+ GtkWidgetClass parent_class;
};
struct _DdbSeekbar {
@@ -58,7 +58,6 @@ void ddb_equalizer_set_band (DdbEqualizer* self, gint band, double v);
double ddb_equalizer_get_band (DdbEqualizer* self, gint band);
void ddb_equalizer_set_preamp (DdbEqualizer* self, double v);
double ddb_equalizer_get_preamp (DdbEqualizer* self);
-void ddb_equalizer_color_changed (DdbEqualizer* self);
DdbEqualizer* ddb_equalizer_new (void);
DdbEqualizer* ddb_equalizer_construct (GType object_type);
GType ddb_seekbar_get_type (void);
diff --git a/plugins/gtkui/ddbseekbar.vala b/plugins/gtkui/ddbseekbar.vala
index f6c70efd..c9256666 100644
--- a/plugins/gtkui/ddbseekbar.vala
+++ b/plugins/gtkui/ddbseekbar.vala
@@ -53,6 +53,11 @@ namespace Ddb {
public override bool motion_notify_event (Gdk.EventMotion event) {
return on_seekbar_motion_notify_event (this, event);
}
+
+ public override bool configure_event (Gdk.EventConfigure event) {
+ Gtkui.init_theme_colors ();
+ return false;
+ }
}
}
diff --git a/plugins/gtkui/ddbvolumebar.c b/plugins/gtkui/ddbvolumebar.c
index 3495f69a..d39d9e9b 100644
--- a/plugins/gtkui/ddbvolumebar.c
+++ b/plugins/gtkui/ddbvolumebar.c
@@ -129,6 +129,9 @@ gboolean
on_volumebar_scroll_event (GtkWidget *widget,
GdkEventScroll *event);
+gboolean
+on_volumebar_configure_event (GtkWidget *widget, GdkEventConfigure *event);
+
static void
ddb_volumebar_class_init(DdbVolumeBarClass *class)
{
@@ -140,6 +143,7 @@ ddb_volumebar_class_init(DdbVolumeBarClass *class)
widget_class->button_release_event = on_volumebar_button_release_event;
widget_class->motion_notify_event = on_volumebar_motion_notify_event;
widget_class->scroll_event = on_volumebar_scroll_event;
+ widget_class->configure_event = on_volumebar_configure_event;
}
GtkWidget * ddb_volumebar_new() {
@@ -291,4 +295,8 @@ on_volumebar_scroll_event (GtkWidget *widget,
return FALSE;
}
-
+gboolean
+on_volumebar_configure_event (GtkWidget *widget, GdkEventConfigure *event) {
+ gtkui_init_theme_colors ();
+ return FALSE;
+}