[mutter: 4/209] Lines where x1==x2 or y1==y2 may have the second element null. Lines where both are



commit 5df096baf38030ff8de69626396ed45896085c02
Author: Thomas James Alexander Thurman <tthurman src gnome org>
Date:   Fri Feb 6 04:50:50 2009 +0000

            Lines where x1==x2 or y1==y2 may have the second element
            null.  Lines where both are null, and the width is zero,
            are points.  This speeds things up surprisingly much.
    	* src/ui/theme-parser.c:
    	* src/ui/theme.c:
    
    
    svn path=/trunk/; revision=4119

 ChangeLog             |    9 +++++++++
 src/ui/theme-parser.c |   12 ++++++++++--
 src/ui/theme.c        |   22 +++++++++++++++++++---
 3 files changed, 38 insertions(+), 5 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 2352968..039ac35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2009-02-05  Thomas Thurman  <tthurman gnome org>
 
+        Lines where x1==x2 or y1==y2 may have the second element
+        null.  Lines where both are null, and the width is zero,
+        are points.  This speeds things up surprisingly much.
+
+	* src/ui/theme-parser.c:
+	* src/ui/theme.c:
+
+2009-02-05  Thomas Thurman  <tthurman gnome org>
+
 	* src/core/main.c: incredibly baroque system to make sure
         the translators don't have to update the year number every year.
 
diff --git a/src/ui/theme-parser.c b/src/ui/theme-parser.c
index c308962..c56e318 100644
--- a/src/ui/theme-parser.c
+++ b/src/ui/theme-parser.c
@@ -1658,8 +1658,16 @@ parse_draw_op_element (GMarkupParseContext  *context,
 
       op->data.line.x1 = meta_draw_spec_new (info->theme, x1, NULL);
       op->data.line.y1 = meta_draw_spec_new (info->theme, y1, NULL);
-      op->data.line.x2 = meta_draw_spec_new (info->theme, x2, NULL);
-      op->data.line.y2 = meta_draw_spec_new (info->theme, y2, NULL);
+
+      if (strcmp(x1, x2)==0)
+        op->data.line.x2 = NULL;
+      else
+        op->data.line.x2 = meta_draw_spec_new (info->theme, x2, NULL);
+
+      if (strcmp(y1, y2)==0)
+        op->data.line.y2 = NULL;
+      else
+        op->data.line.y2 = meta_draw_spec_new (info->theme, y2, NULL);
 
       op->data.line.width = width_val;
       op->data.line.dash_on_length = dash_on_val;
diff --git a/src/ui/theme.c b/src/ui/theme.c
index ccd3fc0..1b086a8 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -2645,6 +2645,7 @@ parse_size_unchecked (MetaDrawSpec        *spec,
 void
 meta_draw_spec_free (MetaDrawSpec *spec)
 {
+  if (!spec) return;
   free_tokens (spec->tokens, spec->n_tokens);
   g_slice_free (MetaDrawSpec, spec);
 }
@@ -3489,10 +3490,25 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
 
         x1 = parse_x_position_unchecked (op->data.line.x1, env);
         y1 = parse_y_position_unchecked (op->data.line.y1, env); 
-        x2 = parse_x_position_unchecked (op->data.line.x2, env);
-        y2 = parse_y_position_unchecked (op->data.line.y2, env);
 
-        gdk_draw_line (drawable, gc, x1, y1, x2, y2);
+        if (!op->data.line.x2 &&
+            !op->data.line.y2 &&
+            op->data.line.width==0)
+          gdk_draw_point (drawable, gc, x1, y1);
+        else
+          {
+            if (op->data.line.x2)
+              x2 = parse_x_position_unchecked (op->data.line.x2, env);
+            else
+              x2 = x1;
+
+            if (op->data.line.y2)
+              y2 = parse_y_position_unchecked (op->data.line.y2, env);
+            else
+              y2 = y1;
+
+            gdk_draw_line (drawable, gc, x1, y1, x2, y2);
+          }
 
         g_object_unref (G_OBJECT (gc));
       }



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