[Xfce4-commits] [apps/xfdashboard] 01/04: Make colors to draw each element in clock view with configurable.

noreply at xfce.org noreply at xfce.org
Sun Feb 14 16:13:26 CET 2016


This is an automated email from the git hooks/post-receive script.

nomad pushed a commit to branch master
in repository apps/xfdashboard.

commit af556647a381455f2a2e9ee06a5f1830a0933e03
Author: Stephan Haller <nomad at froevel.de>
Date:   Sun Feb 14 14:16:17 2016 +0100

    Make colors to draw each element in clock view with configurable.
---
 plugins/clock-view/Makefile.am  |   9 +-
 plugins/clock-view/clock-view.c | 368 +++++++++++++++++++++++++++++++++++++---
 plugins/clock-view/clock-view.h |  13 +-
 plugins/clock-view/plugin.c     |   6 +-
 4 files changed, 365 insertions(+), 31 deletions(-)

diff --git a/plugins/clock-view/Makefile.am b/plugins/clock-view/Makefile.am
index 35793d2..142a132 100644
--- a/plugins/clock-view/Makefile.am
+++ b/plugins/clock-view/Makefile.am
@@ -6,7 +6,8 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/xfdashboard \
 	-DG_LOG_DOMAIN=\"xfdashboard-plugin-clock_view\" \
 	-DLIBEXECDIR=\"$(libexecdir)\" \
-	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+	-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
+	-DPLUGIN_ID=\"de.froevel.xfdashboard.clock\"
 
 plugin_LTLIBRARIES = \
 	clock-view.la
@@ -20,7 +21,8 @@ clock_view_la_CFLAGS = \
 	$(PLATFORM_CFLAGS) \
 	$(LIBXFCE4UTIL_CFLAGS) \
 	$(GTK_CFLAGS) \
-	$(CLUTTER_CFLAGS)
+	$(CLUTTER_CFLAGS) \
+	$(LIBXFCONF_CFLAGS)
 
 clock_view_la_LDFLAGS = \
 	-avoid-version \
@@ -31,7 +33,8 @@ clock_view_la_LDFLAGS = \
 clock_view_la_LIBADD = \
 	$(LIBXFCE4UTIL_LIBS) \
 	$(GTK_LIBS) \
-	$(CLUTTER_LIBS)
+	$(CLUTTER_LIBS) \
+	$(LIBXFCONF_LIBS)
 
 CLEANFILES = \
 	$(plugin_DATA)
diff --git a/plugins/clock-view/clock-view.c b/plugins/clock-view/clock-view.c
index ae50681..d554d7e 100644
--- a/plugins/clock-view/clock-view.c
+++ b/plugins/clock-view/clock-view.c
@@ -25,14 +25,17 @@
 #include "config.h"
 #endif
 
+#include "clock-view.h"
+
 #include <glib/gi18n-lib.h>
 #include <gtk/gtk.h>
 #include <math.h>
 
-#include "clock-view.h"
 #include "utils.h"
 #include "view.h"
 #include "fill-box-layout.h"
+#include "application.h"
+
 
 /* Define this class in GObject system */
 G_DEFINE_DYNAMIC_TYPE(XfdashboardClockView,
@@ -48,14 +51,48 @@ XFDASHBOARD_DEFINE_PLUGIN_TYPE(xfdashboard_clock_view);
 
 struct _XfdashboardClockViewPrivate
 {
+	/* Properties related */
+	ClutterColor			*hourColor;
+	ClutterColor			*minuteColor;
+	ClutterColor			*secondColor;
+	ClutterColor			*backgroundColor;
+
 	/* Instance related */
 	ClutterActor			*clockActor;
 	ClutterContent			*clockCanvas;
 	guint					timeoutID;
+
+	XfconfChannel			*xfconfChannel;
+	guint					xfconfHourColorBindingID;
+	guint					xfconfMinuteColorBindingID;
+	guint					xfconfSecondColorBindingID;
+	guint					xfconfBackgroundColorBindingID;
 };
 
+/* Properties */
+enum
+{
+	PROP_0,
+
+	PROP_HOUR_COLOR,
+	PROP_MINUTE_COLOR,
+	PROP_SECOND_COLOR,
+	PROP_BACKGROUOND_COLOR,
+
+	PROP_LAST
+};
+
+static GParamSpec* XfdashboardClockViewProperties[PROP_LAST]={ 0, };
+
+
 /* IMPLEMENTATION: Private variables and methods */
 
+#define COLOR_HOUR_XFCONF_PROP			"/plugins/"PLUGIN_ID"/hour-color"
+#define COLOR_MINUTE_XFCONF_PROP		"/plugins/"PLUGIN_ID"/minute-color"
+#define COLOR_SECOND_XFCONF_PROP		"/plugins/"PLUGIN_ID"/second-color"
+#define COLOR_BACKGROUND_XFCONF_PROP	"/plugins/"PLUGIN_ID"/background-color"
+
+
 /* Rectangle canvas should be redrawn */
 static gboolean _xfdashboard_clock_view_on_draw_canvas(XfdashboardClockView *self,
 														cairo_t *inContext,
@@ -63,13 +100,15 @@ static gboolean _xfdashboard_clock_view_on_draw_canvas(XfdashboardClockView *sel
 														int inHeight,
 														gpointer inUserData)
 {
-	GDateTime		*now;
-	gfloat			hours, minutes, seconds;
-	ClutterColor	*color;
+	XfdashboardClockViewPrivate		*priv;
+	GDateTime						*now;
+	gfloat							hours, minutes, seconds;
 
 	g_return_val_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self), TRUE);
 	g_return_val_if_fail(CLUTTER_IS_CANVAS(inUserData), TRUE);
 
+	priv=self->priv;
+
 	/* Get the current time and compute the angles */
 	now=g_date_time_new_now_local();
 	seconds=g_date_time_get_second(now)*G_PI/30;
@@ -107,43 +146,28 @@ static gboolean _xfdashboard_clock_view_on_draw_canvas(XfdashboardClockView *sel
 	cairo_set_line_width(inContext, 0.1f);
 
 	/* The blue circle that holds the seconds indicator */
-	clutter_cairo_set_source_color(inContext, CLUTTER_COLOR_Blue);
+	clutter_cairo_set_source_color(inContext, priv->backgroundColor);
 	cairo_arc(inContext, 0.0f, 0.0f, 0.4f, 0.0f, G_PI*2.0f);
 	cairo_stroke(inContext);
 
 	/* The seconds indicator */
-	color=clutter_color_copy(CLUTTER_COLOR_White);
-	color->alpha=128;
-
-	clutter_cairo_set_source_color(inContext, color);
+	clutter_cairo_set_source_color(inContext, priv->secondColor);
 	cairo_move_to(inContext, 0.0f, 0.0f);
 	cairo_arc(inContext, sinf(seconds)*0.4f, -cosf(seconds)*0.4f, 0.05f, 0.0f, G_PI*2);
 	cairo_fill(inContext);
 
-	clutter_color_free(color);
-
 	/* The minutes indicator */
-	color=clutter_color_copy(CLUTTER_COLOR_LightChameleon);
-	color->alpha=196;
-
-	clutter_cairo_set_source_color(inContext, color);
+	clutter_cairo_set_source_color(inContext, priv->minuteColor);
 	cairo_move_to(inContext, 0.0f, 0.0f);
 	cairo_line_to(inContext, sinf(minutes)*0.4f, -cosf(minutes)*0.4f);
 	cairo_stroke(inContext);
 
-	clutter_color_free(color);
-
 	/* The hours indicator */
-	color=clutter_color_copy(CLUTTER_COLOR_LightChameleon);
-	color->alpha=196;
-
-	clutter_cairo_set_source_color(inContext, color);
+	clutter_cairo_set_source_color(inContext, priv->hourColor);
 	cairo_move_to(inContext, 0.0f, 0.0f);
 	cairo_line_to(inContext, sinf(hours)*0.2f, -cosf(hours)*0.2f);
 	cairo_stroke(inContext);
 
-	clutter_color_free(color);
-
 	/* Done drawing */
 	return(CLUTTER_EVENT_STOP);
 }
@@ -231,6 +255,35 @@ static void _xfdashboard_clock_view_dispose(GObject *inObject)
 	XfdashboardClockViewPrivate		*priv=self->priv;
 
 	/* Release allocated resources */
+	if(priv->xfconfHourColorBindingID)
+	{
+		xfconf_g_property_unbind(priv->xfconfHourColorBindingID);
+		priv->xfconfHourColorBindingID=0;
+	}
+
+	if(priv->xfconfMinuteColorBindingID)
+	{
+		xfconf_g_property_unbind(priv->xfconfMinuteColorBindingID);
+		priv->xfconfMinuteColorBindingID=0;
+	}
+
+	if(priv->xfconfSecondColorBindingID)
+	{
+		xfconf_g_property_unbind(priv->xfconfSecondColorBindingID);
+		priv->xfconfSecondColorBindingID=0;
+	}
+
+	if(priv->xfconfBackgroundColorBindingID)
+	{
+		xfconf_g_property_unbind(priv->xfconfBackgroundColorBindingID);
+		priv->xfconfBackgroundColorBindingID=0;
+	}
+
+	if(priv->xfconfChannel)
+	{
+		priv->xfconfChannel=NULL;
+	}
+
 	if(priv->timeoutID)
 	{
 		g_source_remove(priv->timeoutID);
@@ -249,10 +302,92 @@ static void _xfdashboard_clock_view_dispose(GObject *inObject)
 		priv->clockCanvas=NULL;
 	}
 
+	if(priv->hourColor)
+	{
+		clutter_color_free(priv->hourColor);
+		priv->hourColor=NULL;
+	}
+
+	if(priv->minuteColor)
+	{
+		clutter_color_free(priv->minuteColor);
+		priv->minuteColor=NULL;
+	}
+
+	if(priv->secondColor)
+	{
+		clutter_color_free(priv->secondColor);
+		priv->secondColor=NULL;
+	}
+
 	/* Call parent's class dispose method */
 	G_OBJECT_CLASS(xfdashboard_clock_view_parent_class)->dispose(inObject);
 }
 
+/* Set/get properties */
+static void _xfdashboard_clock_view_set_property(GObject *inObject,
+													guint inPropID,
+													const GValue *inValue,
+													GParamSpec *inSpec)
+{
+	XfdashboardClockView			*self=XFDASHBOARD_CLOCK_VIEW(inObject);
+
+	switch(inPropID)
+	{
+		case PROP_HOUR_COLOR:
+			xfdashboard_clock_view_set_hour_color(self, clutter_value_get_color(inValue));
+			break;
+
+		case PROP_MINUTE_COLOR:
+			xfdashboard_clock_view_set_minute_color(self, clutter_value_get_color(inValue));
+			break;
+
+		case PROP_SECOND_COLOR:
+			xfdashboard_clock_view_set_second_color(self, clutter_value_get_color(inValue));
+			break;
+
+		case PROP_BACKGROUOND_COLOR:
+			xfdashboard_clock_view_set_background_color(self, clutter_value_get_color(inValue));
+			break;
+
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
+			break;
+	}
+}
+
+static void _xfdashboard_clock_view_get_property(GObject *inObject,
+													guint inPropID,
+													GValue *outValue,
+													GParamSpec *inSpec)
+{
+	XfdashboardClockView			*self=XFDASHBOARD_CLOCK_VIEW(inObject);
+	XfdashboardClockViewPrivate		*priv=self->priv;
+
+	switch(inPropID)
+	{
+		case PROP_HOUR_COLOR:
+			clutter_value_set_color(outValue, priv->hourColor);
+			break;
+
+		case PROP_MINUTE_COLOR:
+			clutter_value_set_color(outValue, priv->minuteColor);
+			break;
+
+		case PROP_SECOND_COLOR:
+			clutter_value_set_color(outValue, priv->secondColor);
+			break;
+
+		case PROP_BACKGROUOND_COLOR:
+			clutter_value_set_color(outValue, priv->backgroundColor);
+			break;
+
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
+			break;
+	}
+}
+
 /* Class initialization
  * Override functions in parent classes and define properties
  * and signals
@@ -265,6 +400,8 @@ void xfdashboard_clock_view_class_init(XfdashboardClockViewClass *klass)
 
 	/* Override functions */
 	gobjectClass->dispose=_xfdashboard_clock_view_dispose;
+	gobjectClass->set_property=_xfdashboard_clock_view_set_property;
+	gobjectClass->get_property=_xfdashboard_clock_view_get_property;
 
 	actorClass->allocate=_xfdashboard_clock_view_allocate;
 
@@ -273,6 +410,37 @@ void xfdashboard_clock_view_class_init(XfdashboardClockViewClass *klass)
 
 	/* Set up private structure */
 	g_type_class_add_private(klass, sizeof(XfdashboardClockViewPrivate));
+
+	/* Define properties */
+	XfdashboardClockViewProperties[PROP_HOUR_COLOR]=
+		clutter_param_spec_color("hour-color",
+									_("Hour color"),
+									_("Color to draw the hour hand with"),
+									CLUTTER_COLOR_LightChameleon,
+									G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	XfdashboardClockViewProperties[PROP_MINUTE_COLOR]=
+		clutter_param_spec_color("minute-color",
+									_("Minute color"),
+									_("Color to draw the minute hand with"),
+									CLUTTER_COLOR_LightChameleon,
+									G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	XfdashboardClockViewProperties[PROP_SECOND_COLOR]=
+		clutter_param_spec_color("second-color",
+									_("Sedond color"),
+									_("Color to draw the second hand with"),
+									CLUTTER_COLOR_White,
+									G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	XfdashboardClockViewProperties[PROP_BACKGROUOND_COLOR]=
+		clutter_param_spec_color("background-color",
+									_("Background color"),
+									_("Color to draw the circle with that holds the second hand"),
+									CLUTTER_COLOR_Blue,
+									G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardClockViewProperties);
 }
 
 /* Class finalization */
@@ -290,6 +458,11 @@ void xfdashboard_clock_view_init(XfdashboardClockView *self)
 	self->priv=priv=XFDASHBOARD_CLOCK_VIEW_GET_PRIVATE(self);
 
 	/* Set up default values */
+	priv->hourColor=clutter_color_copy(CLUTTER_COLOR_LightChameleon);
+	priv->minuteColor=clutter_color_copy(CLUTTER_COLOR_LightChameleon);
+	priv->secondColor=clutter_color_copy(CLUTTER_COLOR_White);
+	priv->backgroundColor=clutter_color_copy(CLUTTER_COLOR_Blue);
+	priv->xfconfChannel=xfdashboard_application_get_xfconf_channel(NULL);
 	priv->timeoutID=0;
 
 	/* Set up this actor */
@@ -308,4 +481,153 @@ void xfdashboard_clock_view_init(XfdashboardClockView *self)
 	/* Set up view */
 	xfdashboard_view_set_name(XFDASHBOARD_VIEW(self), _("Clock"));
 	xfdashboard_view_set_icon(XFDASHBOARD_VIEW(self), "appointment-soon");
+
+	/* Bind to xfconf to react on changes */
+	priv->xfconfHourColorBindingID=
+		xfconf_g_property_bind(priv->xfconfChannel,
+								COLOR_HOUR_XFCONF_PROP,
+								G_TYPE_STRING,
+								self,
+								"hour-color");
+
+	priv->xfconfMinuteColorBindingID=
+		xfconf_g_property_bind(priv->xfconfChannel,
+								COLOR_MINUTE_XFCONF_PROP,
+								G_TYPE_STRING,
+								self,
+								"minute-color");
+
+	priv->xfconfSecondColorBindingID=
+		xfconf_g_property_bind(priv->xfconfChannel,
+								COLOR_SECOND_XFCONF_PROP,
+								G_TYPE_STRING,
+								self,
+								"second-color");
+
+	priv->xfconfBackgroundColorBindingID=
+		xfconf_g_property_bind(priv->xfconfChannel,
+								COLOR_BACKGROUND_XFCONF_PROP,
+								G_TYPE_STRING,
+								self,
+								"background-color");
+}
+
+/* Get/set color to draw hour hand with */
+const ClutterColor* xfdashboard_clock_view_get_hour_color(XfdashboardClockView *self)
+{
+	g_return_val_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self), NULL);
+
+	return(self->priv->hourColor);
+}
+
+void xfdashboard_clock_view_set_hour_color(XfdashboardClockView *self, const ClutterColor *inColor)
+{
+	XfdashboardClockViewPrivate		*priv;
+
+	g_return_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self));
+	g_return_if_fail(inColor);
+
+	priv=self->priv;
+
+	/* Set value if changed */
+	if(priv->hourColor==NULL ||
+		!clutter_color_equal(inColor, priv->hourColor))
+	{
+		/* Set value */
+		if(priv->hourColor) clutter_color_free(priv->hourColor);
+		priv->hourColor=clutter_color_copy(inColor);
+
+		/* Notify about property change */
+		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardClockViewProperties[PROP_HOUR_COLOR]);
+	}
+}
+
+/* Get/set color to draw minute hand with */
+const ClutterColor* xfdashboard_clock_view_get_minute_color(XfdashboardClockView *self)
+{
+	g_return_val_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self), NULL);
+
+	return(self->priv->minuteColor);
+}
+
+void xfdashboard_clock_view_set_minute_color(XfdashboardClockView *self, const ClutterColor *inColor)
+{
+	XfdashboardClockViewPrivate		*priv;
+
+	g_return_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self));
+	g_return_if_fail(inColor);
+
+	priv=self->priv;
+
+	/* Set value if changed */
+	if(priv->minuteColor==NULL ||
+		!clutter_color_equal(inColor, priv->minuteColor))
+	{
+		/* Set value */
+		if(priv->minuteColor) clutter_color_free(priv->minuteColor);
+		priv->minuteColor=clutter_color_copy(inColor);
+
+		/* Notify about property change */
+		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardClockViewProperties[PROP_MINUTE_COLOR]);
+	}
+}
+
+/* Get/set color to draw second hand with */
+const ClutterColor* xfdashboard_clock_view_get_second_color(XfdashboardClockView *self)
+{
+	g_return_val_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self), NULL);
+
+	return(self->priv->secondColor);
+}
+
+void xfdashboard_clock_view_set_second_color(XfdashboardClockView *self, const ClutterColor *inColor)
+{
+	XfdashboardClockViewPrivate		*priv;
+
+	g_return_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self));
+	g_return_if_fail(inColor);
+
+	priv=self->priv;
+
+	/* Set value if changed */
+	if(priv->secondColor==NULL ||
+		!clutter_color_equal(inColor, priv->secondColor))
+	{
+		/* Set value */
+		if(priv->secondColor) clutter_color_free(priv->secondColor);
+		priv->secondColor=clutter_color_copy(inColor);
+
+		/* Notify about property change */
+		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardClockViewProperties[PROP_SECOND_COLOR]);
+	}
+}
+
+/* Get/set color to draw background with that holds second hand */
+const ClutterColor* xfdashboard_clock_view_get_background_color(XfdashboardClockView *self)
+{
+	g_return_val_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self), NULL);
+
+	return(self->priv->secondColor);
+}
+
+void xfdashboard_clock_view_set_background_color(XfdashboardClockView *self, const ClutterColor *inColor)
+{
+	XfdashboardClockViewPrivate		*priv;
+
+	g_return_if_fail(XFDASHBOARD_IS_CLOCK_VIEW(self));
+	g_return_if_fail(inColor);
+
+	priv=self->priv;
+
+	/* Set value if changed */
+	if(priv->backgroundColor==NULL ||
+		!clutter_color_equal(inColor, priv->backgroundColor))
+	{
+		/* Set value */
+		if(priv->backgroundColor) clutter_color_free(priv->backgroundColor);
+		priv->backgroundColor=clutter_color_copy(inColor);
+
+		/* Notify about property change */
+		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardClockViewProperties[PROP_BACKGROUOND_COLOR]);
+	}
 }
diff --git a/plugins/clock-view/clock-view.h b/plugins/clock-view/clock-view.h
index f5d91d4..0102309 100644
--- a/plugins/clock-view/clock-view.h
+++ b/plugins/clock-view/clock-view.h
@@ -58,7 +58,18 @@ struct _XfdashboardClockViewClass
 
 /* Public API */
 GType xfdashboard_clock_view_get_type(void) G_GNUC_CONST;
-void xfdashboard_clock_view_type_register(GTypeModule *inModule);
+
+const ClutterColor* xfdashboard_clock_view_get_hour_color(XfdashboardClockView *self);
+void xfdashboard_clock_view_set_hour_color(XfdashboardClockView *self, const ClutterColor *inColor);
+
+const ClutterColor* xfdashboard_clock_view_get_minute_color(XfdashboardClockView *self);
+void xfdashboard_clock_view_set_minute_color(XfdashboardClockView *self, const ClutterColor *inColor);
+
+const ClutterColor* xfdashboard_clock_view_get_second_color(XfdashboardClockView *self);
+void xfdashboard_clock_view_set_second_color(XfdashboardClockView *self, const ClutterColor *inColor);
+
+const ClutterColor* xfdashboard_clock_view_get_background_color(XfdashboardClockView *self);
+void xfdashboard_clock_view_set_background_color(XfdashboardClockView *self, const ClutterColor *inColor);
 
 XFDASHBOARD_DECLARE_PLUGIN_TYPE(xfdashboard_clock_view);
 
diff --git a/plugins/clock-view/plugin.c b/plugins/clock-view/plugin.c
index 2419ec5..4dd9455 100644
--- a/plugins/clock-view/plugin.c
+++ b/plugins/clock-view/plugin.c
@@ -25,17 +25,15 @@
 #include <config.h>
 #endif
 
-#include "plugin.h"
+#include "clock-view.h"
 
 #include <libxfce4util/libxfce4util.h>
 
+#include "plugin.h"
 #include "view-manager.h"
-#include "clock-view.h"
 
 
 /* IMPLEMENTATION: XfdashboardPlugin */
-#define PLUGIN_ID	"de.froevel.xfdashboard.clock"
-
 
 /* Forward declarations */
 G_MODULE_EXPORT void plugin_init(XfdashboardPlugin *self);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list