summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas James Alexander Thurman <tthurman@src.gnome.org>2009-02-06 04:50:50 +0000
committerThomas James Alexander Thurman <tthurman@src.gnome.org>2009-02-06 04:50:50 +0000
commit5df096baf38030ff8de69626396ed45896085c02 (patch)
tree7059419d9cd5613640641ef8ec42b3d55f1b8b05
parent45cbaa2d1370e18dd404daa1841e60ccb6f9be29 (diff)
downloadmetacity-5df096baf38030ff8de69626396ed45896085c02.tar.gz
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
-rw-r--r--ChangeLog9
-rw-r--r--src/ui/theme-parser.c12
-rw-r--r--src/ui/theme.c22
3 files changed, 38 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 23529687..039ac35a 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 c3089621..c56e318d 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 ccd3fc0d..1b086a84 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));
}