Make box flags and move new line indicator to it.

svn path=/trunk/netsurf/; revision=11886
This commit is contained in:
Michael Drake 2011-03-02 17:50:51 +00:00
parent 4aef849eba
commit f744c9dfa0
4 changed files with 13 additions and 5 deletions

View File

@ -131,6 +131,7 @@ struct box * box_create(css_select_results *styles, css_computed_style *style,
talloc_set_destructor(box, free_box_style); talloc_set_destructor(box, free_box_style);
box->type = BOX_INLINE; box->type = BOX_INLINE;
box->flags = 0;
box->styles = styles; box->styles = styles;
box->style = style; box->style = style;
box->style_owned = style_owned; box->style_owned = style_owned;
@ -156,7 +157,6 @@ struct box * box_create(css_select_results *styles, css_computed_style *style,
box->columns = 1; box->columns = 1;
box->rows = 1; box->rows = 1;
box->start_column = 0; box->start_column = 0;
box->inline_new_line = false;
box->printed = false; box->printed = false;
box->next = NULL; box->next = NULL;
box->prev = NULL; box->prev = NULL;

View File

@ -115,6 +115,12 @@ typedef enum {
BOX_INLINE_END, BOX_NONE BOX_INLINE_END, BOX_NONE
} box_type; } box_type;
/** Type of a struct box. */
typedef enum {
NEW_LINE = 1 << 0 /* first inline on a new line */
} box_flags;
/* Sides of a box */ /* Sides of a box */
enum box_side { TOP, RIGHT, BOTTOM, LEFT }; enum box_side { TOP, RIGHT, BOTTOM, LEFT };
@ -132,6 +138,9 @@ struct box {
/** Type of box. */ /** Type of box. */
box_type type; box_type type;
/** Box flags */
box_flags flags;
/** Computed styles for elements and their pseudo elements. NULL on /** Computed styles for elements and their pseudo elements. NULL on
* non-element boxes. */ * non-element boxes. */
css_select_results *styles; css_select_results *styles;
@ -219,7 +228,6 @@ struct box {
/** INLINE_END box corresponding to this INLINE box, or INLINE box /** INLINE_END box corresponding to this INLINE box, or INLINE box
* corresponding to this INLINE_END box. */ * corresponding to this INLINE_END box. */
struct box *inline_end; struct box *inline_end;
bool inline_new_line;
/** First float child box, or 0. Float boxes are in the tree twice, in /** First float child box, or 0. Float boxes are in the tree twice, in
* this list for the block box which defines the area for floats, and * this list for the block box which defines the area for floats, and

View File

@ -528,7 +528,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
ib_b_right = ib->border[RIGHT].width * scale; ib_b_right = ib->border[RIGHT].width * scale;
} }
if (ib->inline_new_line && ib != box) { if ((ib->flags & NEW_LINE) && ib != box) {
/* inline element has wrapped, plot background /* inline element has wrapped, plot background
* and borders */ * and borders */
if (!html_redraw_inline_background( if (!html_redraw_inline_background(

View File

@ -2560,7 +2560,7 @@ bool layout_line(struct box *first, int *width, int *y,
} }
for (d = first; d != b; d = d->next) { for (d = first; d != b; d = d->next) {
d->inline_new_line = false; d->flags &= ~NEW_LINE;
if (d->type == BOX_INLINE_BLOCK && if (d->type == BOX_INLINE_BLOCK &&
(css_computed_position(d->style) == (css_computed_position(d->style) ==
@ -2601,7 +2601,7 @@ bool layout_line(struct box *first, int *width, int *y,
} }
} }
first->inline_new_line = true; first->flags |= NEW_LINE;
assert(b != first || (move_y && 0 < used_height && (left || right))); assert(b != first || (move_y && 0 < used_height && (left || right)));