1
0
Fork 0

Lines where x1==x2 or y1==y2 may have the second element null

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.

svn path=/trunk/; revision=4119
This commit is contained in:
Thomas James Alexander Thurman 2009-02-06 04:50:50 +00:00 committed by Owen W. Taylor
parent c588e173f8
commit 152917d5e1
2 changed files with 29 additions and 5 deletions

View file

@ -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;

View file

@ -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));
}