[mutter] Clean up antialiasing fixes
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] Clean up antialiasing fixes
- Date: Mon, 11 Oct 2010 21:46:55 +0000 (UTC)
commit 4b214b47107304b4ec7daa4ae3eb428101271d60
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Wed Oct 6 12:47:57 2010 -0400
Clean up antialiasing fixes
Simplify the code by noting that when we have square end-caps, the
results of generic line path give the right pixel-aligned rectangle
for horizontal/vertical lines.
Add comments and remove some extra braces.
https://bugzilla.gnome.org/show_bug.cgi?id=630426
src/ui/theme.c | 35 +++++++++++------------------------
1 files changed, 11 insertions(+), 24 deletions(-)
---
diff --git a/src/ui/theme.c b/src/ui/theme.c
index 7c76b2b..8e88ec5 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -3505,44 +3505,31 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
y2 = y1;
/* This is one of the cases where we are matching the exact
- * pixel aligned rectangle produced by X.
+ * pixel aligned rectangle produced by X; for zero-width lines
+ * the generic algorithm produces the right result so we don't
+ * need to handle them here.
*/
- if (y1 == y2 || x1 == x2)
+ if ((y1 == y2 || x1 == x2) && op->data.line.width != 0)
{
- double offset = (op->data.line.width == 0 ||
- op->data.line.width % 2) ? .5 : 0;
- /* X includes end points for lines of width 0 */
- double line_extend = op->data.line.width == 0 ? 1. : 0.;
+ double offset = op->data.line.width % 2 ? .5 : 0;
if (y1 == y2)
{
- if (x2 < x1)
- {
- x1 ^= x2;
- x2 ^= x1;
- x1 ^= x2;
- }
cairo_move_to (cr, x1, y1 + offset);
- cairo_line_to (cr, x2 + line_extend, y2 + offset);
+ cairo_line_to (cr, x2, y2 + offset);
}
else
{
- if (y2 < y1)
- {
- y1 ^= y2;
- y2 ^= y1;
- y1 ^= y2;
- }
cairo_move_to (cr, x1 + offset, y1);
- cairo_line_to (cr, x2 + offset, y2 + line_extend);
+ cairo_line_to (cr, x2 + offset, y2);
}
}
else
{
- if (op->data.line.width <= 0)
- {
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
- }
+ /* zero-width lines include both end-points in X, unlike wide lines */
+ if (op->data.line.width == 0)
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+
cairo_move_to (cr, x1 + .5, y1 + .5);
cairo_line_to (cr, x2 + .5, y2 + .5);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]