mailto urls don't have passwords or ports, so we don't need to look for ':'.
This commit is contained in:
parent
04ea4b52a0
commit
a807d762f9
76
render/box.c
76
render/box.c
|
@ -342,6 +342,79 @@ void box_bounds(struct box *box, struct rect *r)
|
|||
r->y1 = r->y0 + height;
|
||||
}
|
||||
|
||||
enum box_walk_dir {
|
||||
BOX_WALK_CHILDREN,
|
||||
BOX_WALK_PARENT,
|
||||
BOX_WALK_NEXT_SIBLING,
|
||||
BOX_WALK_FLOAT_CHILDREN,
|
||||
BOX_WALK_NEXT_FLOAT_SIBLING
|
||||
};
|
||||
|
||||
static inline struct box *box_move_xy(struct box *b, enum box_walk_dir dir,
|
||||
int *x, int *y)
|
||||
{
|
||||
switch (dir) {
|
||||
case BOX_WALK_CHILDREN:
|
||||
b = b->children;
|
||||
*x += b->x;
|
||||
*y += b->y;
|
||||
return b;
|
||||
|
||||
case BOX_WALK_PARENT:
|
||||
*x -= b->x;
|
||||
*y -= b->y;
|
||||
return b->parent;
|
||||
|
||||
case BOX_WALK_NEXT_SIBLING:
|
||||
*x -= b->x;
|
||||
*y -= b->y;
|
||||
b = b->next;
|
||||
*x += b->x;
|
||||
*y += b->y;
|
||||
return b;
|
||||
|
||||
case BOX_WALK_FLOAT_CHILDREN:
|
||||
b = b->float_children;
|
||||
*x += b->x;
|
||||
*y += b->y;
|
||||
return b;
|
||||
|
||||
case BOX_WALK_NEXT_FLOAT_SIBLING:
|
||||
*x -= b->x;
|
||||
*y -= b->y;
|
||||
b = b->next_float;
|
||||
*x += b->x;
|
||||
*y += b->y;
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static struct box *box_next_xy(struct box *b, int *x, int *y)
|
||||
{
|
||||
assert(b != NULL);
|
||||
|
||||
if (b->float_children != NULL) {
|
||||
/* Next node is float child */
|
||||
b = box_move_xy(b, BOX_WALK_FLOAT_CHILDREN, x, y);
|
||||
} else if (b->children != NULL) {
|
||||
/* Next node is child */
|
||||
b = box_move_xy(b, BOX_WALK_CHILDREN, x, y);
|
||||
} else if (b->type == BOX_FLOAT_LEFT || b->type == BOX_FLOAT_RIGHT) {
|
||||
/* Go to next float sibling */
|
||||
b = box_move_xy(b, BOX_WALK_NEXT_FLOAT_SIBLING, x, y);
|
||||
} else {
|
||||
/* Go to next sibling, or nearest ancestor with next sibling. */
|
||||
while (b->next == NULL && b->parent != NULL) {
|
||||
b = box_move_xy(b, BOX_WALK_PARENT, x, y);
|
||||
}
|
||||
|
||||
b = box_move_xy(b, BOX_WALK_NEXT_SIBLING, x, y);
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find the boxes at a point.
|
||||
|
@ -373,7 +446,8 @@ struct box *box_at_point(struct box *box, const int x, const int y,
|
|||
int bx = *box_x, by = *box_y;
|
||||
struct box *child, *sibling;
|
||||
bool physically;
|
||||
|
||||
printf("x0:%i y0:%i x1:%i y1:%i\n", box->descendant_x0, box->descendant_y0,
|
||||
box->descendant_y0, box->descendant_y1);
|
||||
assert(box);
|
||||
|
||||
/* consider floats first, since they will often overlap other boxes */
|
||||
|
|
|
@ -5068,7 +5068,7 @@ static void layout_get_box_bbox(struct box *box, int *desc_x0, int *desc_y0,
|
|||
|
||||
css_computed_font_size(box->style, &font_size, &font_unit);
|
||||
text_height = nscss_len2px(font_size, font_unit, box->style);
|
||||
|
||||
printf("%i", text_height);
|
||||
*desc_y0 = (*desc_y0 < -text_height) ? *desc_y0 : -text_height;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -411,13 +411,15 @@ static void nsurl__get_string_markers(const char * const url_s,
|
|||
/* End of the authority */
|
||||
break;
|
||||
|
||||
} else if (*pos == ':' && marker.colon_first ==
|
||||
} else if (marker.scheme_type != NSURL_SCHEME_MAILTO &&
|
||||
*pos == ':' && marker.colon_first ==
|
||||
marker.authority) {
|
||||
/* could be username:password or host:port
|
||||
* separator */
|
||||
marker.colon_first = pos - url_s;
|
||||
|
||||
} else if (*pos == ':' && marker.colon_first !=
|
||||
} else if (marker.scheme_type != NSURL_SCHEME_MAILTO &&
|
||||
*pos == ':' && marker.colon_first !=
|
||||
marker.authority) {
|
||||
/* could be host:port separator */
|
||||
marker.colon_last = pos - url_s;
|
||||
|
|
Loading…
Reference in New Issue