[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