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->color = node->parentNode->color;
|
||||||
node->fontFamily = node->parentNode->fontFamily;
|
node->fontFamily = node->parentNode->fontFamily;
|
||||||
node->fontSize = node->parentNode->fontSize;
|
node->fontSize = node->parentNode->fontSize;
|
||||||
|
node->textAlign = node->parentNode->textAlign;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < renderer->css_rules->length; i++) {
|
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;
|
Context2DWidget* block_widget;
|
||||||
|
|
||||||
// FIXME: Resolve if display: block is set
|
// 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;
|
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;
|
@window_widgets_list* widget_list_item = renderer->widgets_base->next;
|
||||||
Widget* widget;
|
Widget* widget;
|
||||||
@html_dom_node* node;
|
@html_dom_node* node;
|
||||||
|
@ -853,6 +866,25 @@ U0 @reflow_node_list(HtmlRenderer* renderer)
|
||||||
renderer->max_line_height = RENDERER_DEFAULT_MAX_LINE_HEIGHT;
|
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->x = renderer->render_x;
|
||||||
widget->y = renderer->render_y;
|
widget->y = renderer->render_y;
|
||||||
if (@self_or_ancestor_matches_tag_name(node, "a")) {
|
if (@self_or_ancestor_matches_tag_name(node, "a")) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue