diff --git a/System/Libraries/Html/Reflow.HC b/System/Libraries/Html/Reflow.HC
index 76a4a9a..24db646 100644
--- a/System/Libraries/Html/Reflow.HC
+++ b/System/Libraries/Html/Reflow.HC
@@ -96,15 +96,43 @@ U0 @reflow_resolve_dynamic_padding(@html_dom_node* node)
@reflow_resolve_css_side(node, &node->parentNode->resolvedPadding.left, &node->resolvedPadding.left, &node->padding.left);
}
-I64 @reflow_resolve_css_distance(F64 parent_distance, F64 distance, I64 type)
+I64 @reflow_resolve_css_width_for_node(@html_dom_node* node)
{
- switch (type) {
+ I64 resolved_width = 0;
+ switch (node->widthDistanceType) {
+ case CSS_DISTANCE_AUTO:
+ while (!resolved_width) {
+ node = node->parentNode;
+ resolved_width = node->resolvedWidth;
+ }
+ return resolved_width;
case CSS_DISTANCE_PIXELS:
- return ToI64(distance);
+ return ToI64(node->width);
case CSS_DISTANCE_EM:
- return ToI64(distance * RENDERER_DEFAULT_MAX_LINE_HEIGHT);
+ return ToI64(node->width * RENDERER_DEFAULT_MAX_LINE_HEIGHT);
case CSS_DISTANCE_PERCENT:
- return ToI64(parent_distance * (100 / distance));
+ return ToI64(node->parentNode->resolvedWidth * (100 / node->width));
+ default:
+ return 0;
+ }
+}
+
+I64 @reflow_resolve_css_height_for_node(@html_dom_node* node)
+{
+ I64 resolved_height = 0;
+ switch (node->heightDistanceType) {
+ case CSS_DISTANCE_AUTO:
+ while (!resolved_height) {
+ node = node->parentNode;
+ resolved_height = node->resolvedHeight;
+ }
+ return resolved_height;
+ case CSS_DISTANCE_PIXELS:
+ return ToI64(node->height);
+ case CSS_DISTANCE_EM:
+ return ToI64(node->height * RENDERER_DEFAULT_MAX_LINE_HEIGHT);
+ case CSS_DISTANCE_PERCENT:
+ return ToI64(node->parentNode->resolvedHeight * (100 / node->height));
default:
return 0;
}
@@ -112,8 +140,8 @@ I64 @reflow_resolve_css_distance(F64 parent_distance, F64 distance, I64 type)
U0 @reflow_resolve_dynamic_width_and_height(@html_dom_node* node)
{
- node->resolvedWidth = @reflow_resolve_css_distance(node->parentNode->width, node->width, node->widthDistanceType);
- node->resolvedHeight = @reflow_resolve_css_distance(node->parentNode->height, node->height, node->heightDistanceType);
+ node->resolvedWidth = @reflow_resolve_css_width_for_node(node);
+ node->resolvedHeight = @reflow_resolve_css_height_for_node(node);
}
U0 @reflow_set_image_widget_dimensions_from_base(Context2DWidget* widget)