System/Libraries/Html/Renderer: Initial support for node->textAlign
This only works for very simple cases, but it is enough for centering and right-align text on sites like Wiby, and a centered Google logo. :^)
This commit is contained in:
parent
e8bc19b444
commit
9e0668d0e0
1 changed files with 32 additions and 0 deletions
|
@ -257,6 +257,7 @@ Bool @render_css_for_node(@html_dom_node* node, HtmlRenderer* renderer)
|
|||
node->color = node->parentNode->color;
|
||||
node->fontFamily = node->parentNode->fontFamily;
|
||||
node->fontSize = node->parentNode->fontSize;
|
||||
node->textAlign = node->parentNode->textAlign;
|
||||
}
|
||||
|
||||
for (i = 0; i < renderer->css_rules->length; i++) {
|
||||
|
@ -750,6 +751,16 @@ U0 @render_node_list(@html_dom_node* node, HtmlRenderer* renderer)
|
|||
}
|
||||
}
|
||||
|
||||
if (node->attributes->@("align")) {
|
||||
if (!StrICmp(node->attributes->@("align"), "center"))
|
||||
node->textAlign = CSS_TEXT_ALIGN_CENTER;
|
||||
if (!StrICmp(node->attributes->@("align"), "right"))
|
||||
node->textAlign = CSS_TEXT_ALIGN_RIGHT;
|
||||
}
|
||||
|
||||
if (!StrICmp(node->tagName, "center"))
|
||||
node->textAlign = CSS_TEXT_ALIGN_CENTER;
|
||||
|
||||
Context2DWidget* block_widget;
|
||||
|
||||
// FIXME: Resolve if display: block is set
|
||||
|
@ -838,6 +849,8 @@ U0 @reflow_node_list(HtmlRenderer* renderer)
|
|||
}
|
||||
renderer->max_line_height = RENDERER_DEFAULT_MAX_LINE_HEIGHT;
|
||||
|
||||
I64 cumulative_widgets_width;
|
||||
@window_widgets_list* cumulative_list_item;
|
||||
@window_widgets_list* widget_list_item = renderer->widgets_base->next;
|
||||
Widget* widget;
|
||||
@html_dom_node* node;
|
||||
|
@ -853,6 +866,25 @@ U0 @reflow_node_list(HtmlRenderer* renderer)
|
|||
renderer->max_line_height = RENDERER_DEFAULT_MAX_LINE_HEIGHT;
|
||||
}
|
||||
|
||||
if (!renderer->render_x && node->textAlign) {
|
||||
cumulative_list_item = widget_list_item->next;
|
||||
cumulative_widgets_width = 0;
|
||||
while (cumulative_list_item && cumulative_list_item->widget && !cumulative_list_item->widget->data(@html_dom_node*)->display_block) {
|
||||
cumulative_widgets_width += cumulative_list_item->widget->width;
|
||||
cumulative_list_item = cumulative_list_item->next;
|
||||
}
|
||||
switch (node->textAlign) {
|
||||
case CSS_TEXT_ALIGN_CENTER:
|
||||
renderer->render_x = (renderer->win->width / 2) - (cumulative_widgets_width / 2);
|
||||
break;
|
||||
case CSS_TEXT_ALIGN_RIGHT:
|
||||
renderer->render_x = renderer->win->width - cumulative_widgets_width;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
widget->x = renderer->render_x;
|
||||
widget->y = renderer->render_y;
|
||||
if (@self_or_ancestor_matches_tag_name(node, "a")) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue