[Pixman] [PATCH 3/3] Simplify gradient_walker_reset()

Søren Sandmann sandmann at cs.au.dk
Sat Oct 15 07:57:12 PDT 2011


From: Søren Sandmann Pedersen <ssp at redhat.com>

The code that searches for the closest color stop to the given
position is duplicated across the various repeat modes. Replace the
switch with two if/else constructions, and put the search code between
them.
---
 pixman/pixman-gradient-walker.c |   93 +++++++++++++--------------------------
 1 files changed, 31 insertions(+), 62 deletions(-)

diff --git a/pixman/pixman-gradient-walker.c b/pixman/pixman-gradient-walker.c
index 3848247..048039e 100644
--- a/pixman/pixman-gradient-walker.c
+++ b/pixman/pixman-gradient-walker.c
@@ -56,57 +56,40 @@ gradient_walker_reset (pixman_gradient_walker_t *walker,
     int n, count = walker->num_stops;
     pixman_gradient_stop_t *stops = walker->stops;
 
-    switch (walker->repeat)
+    if (walker->repeat == PIXMAN_REPEAT_NORMAL)
     {
-    case PIXMAN_REPEAT_NORMAL:
-	x = (int32_t)pos & 0xFFFF;
-	for (n = 0; n < count; n++)
-	{
-	    if (x < stops[n].x)
-		break;
-	}
-
-	left_x =  stops[n - 1].x;
-	left_c = &stops[n - 1].color;
-
-	right_x =  stops[n].x;
-	right_c = &stops[n].color;
-
-	left_x  += (pos - x);
-	right_x += (pos - x);
-	break;
-
-    case PIXMAN_REPEAT_PAD:
-	for (n = 0; n < count; n++)
-	{
-	    if (pos < stops[n].x)
-		break;
-	}
-
-	left_x =  stops[n - 1].x;
-	left_c = &stops[n - 1].color;
-
-	right_x =  stops[n].x;
-	right_c = &stops[n].color;
-	break;
-
-    case PIXMAN_REPEAT_REFLECT:
-	x = (int32_t)pos & 0xFFFF;
+	x = (int32_t)pos & 0xffff;
+    }
+    else if (walker->repeat == PIXMAN_REPEAT_REFLECT)
+    {
+	x = (int32_t)pos & 0xffff;
 	if ((int32_t)pos & 0x10000)
 	    x = 0x10000 - x;
-
-	for (n = 0; n < count; n++)
-	{
-	    if (x < stops[n].x)
-		break;
-	}
-
-	left_x =  stops[n - 1].x;
-	left_c = &stops[n - 1].color;
-
-	right_x =  stops[n].x;
-	right_c = &stops[n].color;
-
+    }
+    else
+    {
+	x = pos;
+    }
+    
+    for (n = 0; n < count; n++)
+    {
+	if (x < stops[n].x)
+	    break;
+    }
+    
+    left_x =  stops[n - 1].x;
+    left_c = &stops[n - 1].color;
+    
+    right_x =  stops[n].x;
+    right_c = &stops[n].color;
+
+    if (walker->repeat == PIXMAN_REPEAT_NORMAL)
+    {
+	left_x  += (pos - x);
+	right_x += (pos - x);
+    }
+    else if (walker->repeat == PIXMAN_REPEAT_REFLECT)
+    {
 	if ((int32_t)pos & 0x10000)
 	{
 	    pixman_color_t  *tmp_c;
@@ -124,20 +107,6 @@ gradient_walker_reset (pixman_gradient_walker_t *walker,
 	}
 	left_x  += (pos - x);
 	right_x += (pos - x);
-	break;
-
-    default:  /* REPEAT_NONE */
-	for (n = 0; n < count; n++)
-	{
-	    if (pos < stops[n].x)
-		break;
-	}
-
-	left_x  =  stops[n - 1].x;
-	left_c  = &stops[n - 1].color;
-
-	right_x =  stops[n].x;
-	right_c = &stops[n].color;
     }
 
     walker->left_x   = left_x;
-- 
1.6.0.6



More information about the Pixman mailing list