summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2010-08-14 15:27:45 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2010-08-14 15:27:45 +0000
commit561cb543cab3111078e0d49fc35d81650277facb (patch)
tree6197bd3f95e946366e1a00ffd9bacee646c15981
parentdb0640e32c475274946e90a526320c546e9c3ad1 (diff)
downloadnetsurf-561cb543cab3111078e0d49fc35d81650277facb.tar.gz
netsurf-561cb543cab3111078e0d49fc35d81650277facb.tar.bz2
Fix colour comparison to compare the right things. Plot left and right borders before top and bottom.
svn path=/trunk/netsurf/; revision=10703
-rw-r--r--render/html_redraw.c262
1 files changed, 133 insertions, 129 deletions
diff --git a/render/html_redraw.c b/render/html_redraw.c
index b5d2a8d2f..115fdbc2d 100644
--- a/render/html_redraw.c
+++ b/render/html_redraw.c
@@ -1053,7 +1053,7 @@ bool html_redraw_caret(struct caret *c, colour current_background_color,
bool html_redraw_borders(struct box *box, int x_parent, int y_parent,
int p_width, int p_height, float scale)
{
- unsigned int sides[] = { TOP, BOTTOM, LEFT, RIGHT };
+ unsigned int sides[] = { LEFT, RIGHT, TOP, BOTTOM };
int top = box->border[TOP].width;
int right = box->border[RIGHT].width;
int bottom = box->border[BOTTOM].width;
@@ -1101,84 +1101,84 @@ bool html_redraw_borders(struct box *box, int x_parent, int y_parent,
continue;
switch (side) {
- case TOP:
- z[0] = p[2]; z[1] = p[3];
- z[2] = p[0]; z[3] = p[1];
- z[4] = p[6]; z[5] = p[1];
- z[6] = p[4]; z[7] = p[3];
+ case LEFT:
+ z[0] = p[0]; z[1] = p[7];
+ z[2] = p[2]; z[3] = p[5];
+ z[4] = p[2]; z[5] = p[3];
+ z[6] = p[0]; z[7] = p[1];
- if (box->border[LEFT].color !=
+ if (box->border[TOP].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang left corner fully,
- * if left border is transparent */
- z[0] -= left;
+ /* make border overhang top corner fully,
+ * if top border is transparent */
+ z[5] -= top;
}
- if (box->border[RIGHT].color !=
+ if (box->border[BOTTOM].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang right corner fully,
- * if right border is transparent */
- z[6] += right;
+ /* make border overhang bottom corner fully,
+ * if bottom border is transparent */
+ z[3] += bottom;
}
break;
- case BOTTOM:
- z[0] = p[4]; z[1] = p[5];
- z[2] = p[6]; z[3] = p[7];
- z[4] = p[0]; z[5] = p[7];
- z[6] = p[2]; z[7] = p[5];
+ case RIGHT:
+ z[0] = p[6]; z[1] = p[1];
+ z[2] = p[4]; z[3] = p[3];
+ z[4] = p[4]; z[5] = p[5];
+ z[6] = p[6]; z[7] = p[7];
- if (box->border[LEFT].color !=
+ if (box->border[TOP].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang left corner fully,
- * if left border is transparent */
- z[6] -= left;
+ /* make border overhang top corner fully,
+ * if top border is transparent */
+ z[3] -= top;
}
- if (box->border[RIGHT].color !=
+ if (box->border[BOTTOM].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang right corner fully,
- * if right border is transparent */
- z[0] += right;
+ /* make border overhang bottom corner fully,
+ * if bottom border is transparent */
+ z[5] += bottom;
}
break;
- case LEFT:
- z[0] = p[0]; z[1] = p[7];
- z[2] = p[2]; z[3] = p[5];
- z[4] = p[2]; z[5] = p[3];
- z[6] = p[0]; z[7] = p[1];
+ case TOP:
+ z[0] = p[2]; z[1] = p[3];
+ z[2] = p[0]; z[3] = p[1];
+ z[4] = p[6]; z[5] = p[1];
+ z[6] = p[4]; z[7] = p[3];
if (box->border[side].style == CSS_BORDER_STYLE_SOLID &&
- box->border[LEFT].color ==
- box->border[TOP].color) {
- /* don't bother overlapping top corner if
+ box->border[TOP].c ==
+ box->border[LEFT].c) {
+ /* don't bother overlapping left corner if
* it's the same colour anyway */
- z[7] += top;
+ z[2] += left;
}
if (box->border[side].style == CSS_BORDER_STYLE_SOLID &&
- box->border[LEFT].color ==
- box->border[BOTTOM].color) {
- /* don't bother overlapping bottom corner if
+ box->border[TOP].c ==
+ box->border[RIGHT].c) {
+ /* don't bother overlapping right corner if
* it's the same colour anyway */
- z[1] -= bottom;
+ z[4] -= right;
}
break;
- case RIGHT:
- z[0] = p[6]; z[1] = p[1];
- z[2] = p[4]; z[3] = p[3];
- z[4] = p[4]; z[5] = p[5];
- z[6] = p[6]; z[7] = p[7];
+ case BOTTOM:
+ z[0] = p[4]; z[1] = p[5];
+ z[2] = p[6]; z[3] = p[7];
+ z[4] = p[0]; z[5] = p[7];
+ z[6] = p[2]; z[7] = p[5];
if (box->border[side].style == CSS_BORDER_STYLE_SOLID &&
- box->border[RIGHT].color ==
- box->border[TOP].color) {
- /* don't bother overlapping top corner if
+ box->border[BOTTOM].c ==
+ box->border[LEFT].c) {
+ /* don't bother overlapping left corner if
* it's the same colour anyway */
- z[1] += top;
+ z[4] += left;
}
if (box->border[side].style == CSS_BORDER_STYLE_SOLID &&
- box->border[RIGHT].color ==
- box->border[BOTTOM].color) {
- /* don't bother overlapping bottom corner if
+ box->border[BOTTOM].c ==
+ box->border[RIGHT].c) {
+ /* don't bother overlapping right corner if
* it's the same colour anyway */
- z[7] -= bottom;
+ z[2] -= right;
}
break;
default:
@@ -1248,123 +1248,127 @@ bool html_redraw_inline_borders(struct box *box, int x0, int y0, int x1, int y1,
assert(box->style);
- /* Top */
- if (top != 0 && box->border[TOP].color !=
+ /* Left */
+ if (left != 0 && first && box->border[LEFT].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- col = nscss_color_to_ns(box->border[TOP].c);
+ col = nscss_color_to_ns(box->border[LEFT].c);
- z[0] = p[2]; z[1] = p[3];
- z[2] = p[0]; z[3] = p[1];
- z[4] = p[6]; z[5] = p[1];
- z[6] = p[4]; z[7] = p[3];
+ z[0] = p[0]; z[1] = p[7];
+ z[2] = p[2]; z[3] = p[5];
+ z[4] = p[2]; z[5] = p[3];
+ z[6] = p[0]; z[7] = p[1];
- if (first && box->border[LEFT].color !=
+ if (box->border[TOP].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang left corner fully,
- * if left border is transparent */
- z[0] -= left;
+ /* make border overhang top corner fully,
+ * if top border is transparent */
+ z[5] -= top;
}
- if (last && box->border[RIGHT].color !=
+ if (box->border[BOTTOM].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang right corner fully,
- * if right border is transparent */
- z[6] += right;
+ /* make border overhang bottom corner fully,
+ * if bottom border is transparent */
+ z[3] += bottom;
}
- if (!html_redraw_border_plot(TOP, z, col,
- box->border[TOP].style,
- top))
+ if (!html_redraw_border_plot(LEFT, z, col,
+ box->border[LEFT].style,
+ left))
return false;
}
- /* Bottom */
- if (bottom != 0 && box->border[BOTTOM].color !=
+ /* Right */
+ if (right != 0 && last && box->border[RIGHT].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- col = nscss_color_to_ns(box->border[BOTTOM].c);
+ col = nscss_color_to_ns(box->border[RIGHT].c);
- z[0] = p[4]; z[1] = p[5];
- z[2] = p[6]; z[3] = p[7];
- z[4] = p[0]; z[5] = p[7];
- z[6] = p[2]; z[7] = p[5];
+ z[0] = p[6]; z[1] = p[1];
+ z[2] = p[4]; z[3] = p[3];
+ z[4] = p[4]; z[5] = p[5];
+ z[6] = p[6]; z[7] = p[7];
- if (first && box->border[LEFT].color !=
+ if (box->border[TOP].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang left corner fully,
- * if left border is transparent */
- z[6] -= left;
+ /* make border overhang top corner fully,
+ * if top border is transparent */
+ z[3] -= top;
}
- if (last && box->border[RIGHT].color !=
+ if (box->border[BOTTOM].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- /* make border overhang right corner fully,
- * if right border is transparent */
- z[0] += right;
+ /* make border overhang bottom corner fully,
+ * if bottom border is transparent */
+ z[5] += bottom;
}
- if (!html_redraw_border_plot(BOTTOM, z, col,
- box->border[BOTTOM].style,
- bottom))
+ if (!html_redraw_border_plot(RIGHT, z, col,
+ box->border[RIGHT].style,
+ right))
return false;
}
- /* Left */
- if (left != 0 && first && box->border[LEFT].color !=
+ /* Top */
+ if (top != 0 && box->border[TOP].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- col = nscss_color_to_ns(box->border[LEFT].c);
+ col = nscss_color_to_ns(box->border[TOP].c);
- z[0] = p[0]; z[1] = p[7];
- z[2] = p[2]; z[3] = p[5];
- z[4] = p[2]; z[5] = p[3];
- z[6] = p[0]; z[7] = p[1];
+ z[0] = p[2]; z[1] = p[3];
+ z[2] = p[0]; z[3] = p[1];
+ z[4] = p[6]; z[5] = p[1];
+ z[6] = p[4]; z[7] = p[3];
- if (box->border[LEFT].style == CSS_BORDER_STYLE_SOLID &&
- box->border[LEFT].color ==
- box->border[TOP].color) {
- /* don't bother overlapping top corner if
+ if (first && box->border[TOP].style ==
+ CSS_BORDER_STYLE_SOLID &&
+ box->border[TOP].c ==
+ box->border[LEFT].c) {
+ /* don't bother overlapping left corner if
* it's the same colour anyway */
- z[7] += top;
+ z[2] += left;
}
- if (box->border[LEFT].style == CSS_BORDER_STYLE_SOLID &&
- box->border[LEFT].color ==
- box->border[BOTTOM].color) {
- /* don't bother overlapping bottom corner if
+ if (last && box->border[TOP].style ==
+ CSS_BORDER_STYLE_SOLID &&
+ box->border[TOP].c ==
+ box->border[RIGHT].c) {
+ /* don't bother overlapping right corner if
* it's the same colour anyway */
- z[1] -= bottom;
+ z[4] -= right;
}
- if (!html_redraw_border_plot(LEFT, z, col,
- box->border[LEFT].style,
- left))
+ if (!html_redraw_border_plot(TOP, z, col,
+ box->border[TOP].style,
+ top))
return false;
}
- /* Right */
- if (right != 0 && last && box->border[RIGHT].color !=
+ /* Bottom */
+ if (bottom != 0 && box->border[BOTTOM].color !=
CSS_BORDER_COLOR_TRANSPARENT) {
- col = nscss_color_to_ns(box->border[RIGHT].c);
+ col = nscss_color_to_ns(box->border[BOTTOM].c);
- z[0] = p[6]; z[1] = p[1];
- z[2] = p[4]; z[3] = p[3];
- z[4] = p[4]; z[5] = p[5];
- z[6] = p[6]; z[7] = p[7];
+ z[0] = p[4]; z[1] = p[5];
+ z[2] = p[6]; z[3] = p[7];
+ z[4] = p[0]; z[5] = p[7];
+ z[6] = p[2]; z[7] = p[5];
- if (box->border[RIGHT].style == CSS_BORDER_STYLE_SOLID &&
- box->border[RIGHT].color ==
- box->border[TOP].color) {
- /* don't bother overlapping top corner if
+ if (first && box->border[BOTTOM].style ==
+ CSS_BORDER_STYLE_SOLID &&
+ box->border[BOTTOM].c ==
+ box->border[LEFT].c) {
+ /* don't bother overlapping left corner if
* it's the same colour anyway */
- z[1] += top;
+ z[4] += left;
}
- if (box->border[RIGHT].style == CSS_BORDER_STYLE_SOLID &&
- box->border[RIGHT].color ==
- box->border[BOTTOM].color) {
- /* don't bother overlapping bottom corner if
+ if (last && box->border[BOTTOM].style ==
+ CSS_BORDER_STYLE_SOLID &&
+ box->border[BOTTOM].c ==
+ box->border[RIGHT].c) {
+ /* don't bother overlapping right corner if
* it's the same colour anyway */
- z[7] -= bottom;
+ z[2] -= right;
}
- if (!html_redraw_border_plot(RIGHT, z, col,
- box->border[RIGHT].style,
- right))
+ if (!html_redraw_border_plot(BOTTOM, z, col,
+ box->border[BOTTOM].style,
+ bottom))
return false;
}