[gnome-color-manager] trivial: add gcm_sample_window_set_percentage() so we can add some sort of progress to the sample wi



commit 986e5a2e1bdfe1fef438bb0506844a1fa6c7a7f3
Author: Richard Hughes <richard hughsie com>
Date:   Sun Aug 1 21:47:17 2010 +0100

    trivial: add gcm_sample_window_set_percentage() so we can add some sort of progress to the sample window

 libcolor-glib/gcm-sample-window.c |   61 +++++++++++++++++++++++++++++++++++-
 libcolor-glib/gcm-sample-window.h |    4 ++
 libcolor-glib/gcm-self-test.c     |    1 +
 3 files changed, 64 insertions(+), 2 deletions(-)
---
diff --git a/libcolor-glib/gcm-sample-window.c b/libcolor-glib/gcm-sample-window.c
index 0557c7a..0a9fcc5 100644
--- a/libcolor-glib/gcm-sample-window.c
+++ b/libcolor-glib/gcm-sample-window.c
@@ -37,6 +37,7 @@
 static void     gcm_sample_window_finalize	(GObject     *object);
 
 #define GCM_SAMPLE_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GCM_TYPE_SAMPLE_WINDOW, GcmSampleWindowPrivate))
+#define GCM_SAMPLE_WINDOW_PULSE_DELAY		80	/* ms */
 
 /**
  * GcmSampleWindowPrivate:
@@ -46,11 +47,58 @@ static void     gcm_sample_window_finalize	(GObject     *object);
 struct _GcmSampleWindowPrivate
 {
 	GtkWidget			*image;
+	GtkWidget			*progress_bar;
+	guint				 pulse_id;
 };
 
 G_DEFINE_TYPE (GcmSampleWindow, gcm_sample_window, GTK_TYPE_WINDOW)
 
 /**
+ * gcm_sample_window_pulse_cb:
+ **/
+static gboolean
+gcm_sample_window_pulse_cb (GcmSampleWindow *sample_window)
+{
+	gtk_progress_bar_pulse (GTK_PROGRESS_BAR (sample_window->priv->progress_bar));
+	return TRUE;
+}
+
+/**
+ * gcm_sample_window_set_percentage:
+ * @sample_window: a valid #GcmSampleWindow instance
+ * @percentage: the percentage value to show, or
+ * %GCM_SAMPLE_WINDOW_PERCENTAGE_PULSE for pulsing.
+ *
+ * Sets the percentage value on the window.
+ *
+ * Since: 0.0.1
+ **/
+void
+gcm_sample_window_set_percentage (GcmSampleWindow *sample_window, guint percentage)
+{
+	GcmSampleWindowPrivate *priv = sample_window->priv;
+
+	/* make pulse */
+	if (percentage == GCM_SAMPLE_WINDOW_PERCENTAGE_PULSE) {
+		if (priv->pulse_id == 0) {
+			priv->pulse_id = g_timeout_add (GCM_SAMPLE_WINDOW_PULSE_DELAY,
+							(GSourceFunc) gcm_sample_window_pulse_cb,
+							sample_window);
+		}
+		return;
+	}
+
+	/* no more pulsing */
+	if (priv->pulse_id != 0) {
+		g_source_remove (priv->pulse_id);
+		priv->pulse_id = 0;
+	}
+
+	/* set static value */
+	gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sample_window->priv->progress_bar), percentage / 100.0f);
+}
+
+/**
  * gcm_sample_window_set_color:
  * @sample_window: a valid #GcmSampleWindow instance
  * @red: the red color value
@@ -110,11 +158,18 @@ static void
 gcm_sample_window_init (GcmSampleWindow *sample_window)
 {
 	GtkWindow *window = GTK_WINDOW (sample_window);
+	GtkWidget *vbox;
 	sample_window->priv = GCM_SAMPLE_WINDOW_GET_PRIVATE (sample_window);
 	sample_window->priv->image = gtk_image_new ();
+	sample_window->priv->progress_bar = gtk_progress_bar_new ();
+
+	/* pack in two widgets into the window */
+	vbox = gtk_vbox_new (FALSE, 0);
+	gtk_container_add (GTK_CONTAINER (sample_window), vbox);
+	gtk_box_pack_start (GTK_BOX (vbox), sample_window->priv->image, TRUE, TRUE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), sample_window->priv->progress_bar, TRUE, TRUE, 0);
 	gtk_widget_set_size_request (sample_window->priv->image, 200, 200);
-	gtk_container_add (GTK_CONTAINER (sample_window), sample_window->priv->image);
-	gtk_widget_show (sample_window->priv->image);
+	gtk_widget_show_all (vbox);
 
 	/* show on all virtual desktops */
 	gtk_window_stick (window);
@@ -132,6 +187,8 @@ gcm_sample_window_finalize (GObject *object)
 	GcmSampleWindowPrivate *priv = sample_window->priv;
 
 	g_object_unref (priv->image);
+	if (priv->pulse_id != 0)
+		g_source_remove (priv->pulse_id);
 
 	G_OBJECT_CLASS (gcm_sample_window_parent_class)->finalize (object);
 }
diff --git a/libcolor-glib/gcm-sample-window.h b/libcolor-glib/gcm-sample-window.h
index 73f8f87..0b81906 100644
--- a/libcolor-glib/gcm-sample-window.h
+++ b/libcolor-glib/gcm-sample-window.h
@@ -50,12 +50,16 @@ struct _GcmSampleWindowClass
 	GtkWindowClass			 parent_class;
 };
 
+#define	GCM_SAMPLE_WINDOW_PERCENTAGE_PULSE		101
+
 GType		 gcm_sample_window_get_type		(void);
 GtkWindow	*gcm_sample_window_new			(void);
 void		 gcm_sample_window_set_color		(GcmSampleWindow	*sample_window,
 							 guint8			 red,
 							 guint8			 green,
 							 guint8			 blue);
+void		 gcm_sample_window_set_percentage	(GcmSampleWindow	*sample_window,
+							 guint			 percentage);
 
 G_END_DECLS
 
diff --git a/libcolor-glib/gcm-self-test.c b/libcolor-glib/gcm-self-test.c
index f24e0d0..96cbee9 100644
--- a/libcolor-glib/gcm-self-test.c
+++ b/libcolor-glib/gcm-self-test.c
@@ -705,6 +705,7 @@ gcm_test_sample_window_func (void)
 	window = gcm_sample_window_new ();
 	g_assert (window != NULL);
 	gcm_sample_window_set_color (GCM_SAMPLE_WINDOW (window), 0xff, 0xff, 0x00);
+	gcm_sample_window_set_percentage (GCM_SAMPLE_WINDOW (window), GCM_SAMPLE_WINDOW_PERCENTAGE_PULSE);
 	gtk_window_present (window);
 	loop = g_main_loop_new (NULL, FALSE);
 	g_timeout_add_seconds (2, (GSourceFunc) gcm_test_sample_window_loop_cb, loop);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]