[gitg] Color working ref orange



commit 31a578bbc43f425586012959ef73923a7768eaa8
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Sun Jan 10 00:58:21 2010 +0100

    Color working ref orange

 gitg/gitg-label-renderer.c |   20 ++++++++++++++++++--
 gitg/gitg-ref.c            |   16 ++++++++++++++++
 gitg/gitg-ref.h            |    4 ++++
 gitg/gitg-repository.c     |    8 ++++++++
 4 files changed, 46 insertions(+), 2 deletions(-)
---
diff --git a/gitg/gitg-label-renderer.c b/gitg/gitg-label-renderer.c
index 1b20495..2cb8a84 100644
--- a/gitg/gitg-label-renderer.c
+++ b/gitg/gitg-label-renderer.c
@@ -122,6 +122,22 @@ get_type_color (GitgRefType type, gdouble *r, gdouble *g, gdouble *b)
 }
 
 static void
+get_ref_color (GitgRef *ref, gdouble *r, gdouble *g, gdouble *b)
+{
+	if (gitg_ref_get_working (ref))
+	{
+		/* Orange */
+		*r = 1;
+		*g = 0.7;
+		*b = 0;
+	}
+	else
+	{
+		get_type_color (gitg_ref_get_ref_type (ref), r, g, b);
+	}
+}
+
+static void
 set_source_for_ref_type(cairo_t *context, GitgRef *ref, gboolean use_state)
 {
 	if (use_state)
@@ -136,7 +152,7 @@ set_source_for_ref_type(cairo_t *context, GitgRef *ref, gboolean use_state)
 		else if (state == GITG_REF_STATE_PRELIGHT)
 		{
 			gdouble r, g, b;
-			get_type_color (gitg_ref_get_ref_type (ref), &r, &g, &b);
+			get_ref_color (ref, &r, &g, &b);
 
 			cairo_set_source_rgba(context, r, g, b, 0.3);
 			return;
@@ -144,7 +160,7 @@ set_source_for_ref_type(cairo_t *context, GitgRef *ref, gboolean use_state)
 	}
 
 	gdouble r, g, b;
-	get_type_color (gitg_ref_get_ref_type (ref), &r, &g, &b);
+	get_ref_color (ref, &r, &g, &b);
 
 	cairo_set_source_rgb (context, r, g, b);
 }
diff --git a/gitg/gitg-ref.c b/gitg/gitg-ref.c
index 169183c..22ed171 100644
--- a/gitg/gitg-ref.c
+++ b/gitg/gitg-ref.c
@@ -40,6 +40,8 @@ struct _GitgRef
 
 	gchar *prefix;
 	GitgRefState state;
+
+	gboolean working;
 };
 
 GType 
@@ -125,6 +127,7 @@ gitg_ref_copy(GitgRef *ref)
 	ret->name = g_strdup(ref->name);
 	ret->shortname = g_strdup(ref->shortname);
 	ret->prefix = g_strdup(ref->prefix);
+	ret->working = ref->working;
 
 	int i;
 	for (i = 0; i < HASH_BINARY_SIZE; ++i)
@@ -228,3 +231,16 @@ gitg_ref_get_local_name (GitgRef *ref)
 		return g_strdup (shortname);
 	}
 }
+
+void
+gitg_ref_set_working (GitgRef  *ref,
+                      gboolean  working)
+{
+	ref->working = working;
+}
+
+gboolean
+gitg_ref_get_working (GitgRef *ref)
+{
+	return ref->working;
+}
diff --git a/gitg/gitg-ref.h b/gitg/gitg-ref.h
index a9f19be..3744d5d 100644
--- a/gitg/gitg-ref.h
+++ b/gitg/gitg-ref.h
@@ -68,6 +68,10 @@ GitgRefState     gitg_ref_get_state             (GitgRef      *ref);
 void			 gitg_ref_set_state				(GitgRef      *ref,
                                                  GitgRefState state);
 
+void			 gitg_ref_set_working			(GitgRef      *ref,
+												 gboolean      working);
+gboolean		 gitg_ref_get_working			(GitgRef      *ref);
+
 GitgRef			*gitg_ref_copy					(GitgRef      *ref);
 void 			 gitg_ref_free					(GitgRef      *ref);
 
diff --git a/gitg/gitg-repository.c b/gitg/gitg-repository.c
index 67213c8..068ea10 100644
--- a/gitg/gitg-repository.c
+++ b/gitg/gitg-repository.c
@@ -459,6 +459,7 @@ get_current_working_ref(GitgRepository *repository)
 	if (hash && name)
 	{
 		ret = gitg_ref_new (hash, name);
+		gitg_ref_set_working (ret, TRUE);
 	}
 
 	g_free (hash);
@@ -1141,6 +1142,8 @@ load_refs(GitgRepository *self)
 	gchar *buf;
 	gchar *current = load_current_ref(self);
 
+	GitgRef *working = gitg_repository_get_current_working_ref (self);
+
 	while ((buf = *buffer++) != NULL)
 	{
 		// each line will look like <name> <hash>
@@ -1156,6 +1159,11 @@ load_refs(GitgRepository *self)
 			{
 				self->priv->current_ref = gitg_ref_copy(ref);
 			}
+
+			if (working != NULL && gitg_ref_equal (working, ref))
+			{
+				gitg_ref_set_working (ref, TRUE);
+			}
 		}
 
 		g_strfreev(components);



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