diff options
Diffstat (limited to 'src/select/computed.c')
-rw-r--r-- | src/select/computed.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/select/computed.c b/src/select/computed.c index 590b8ba..be936cd 100644 --- a/src/select/computed.c +++ b/src/select/computed.c @@ -688,7 +688,47 @@ uint8_t css_computed_max_width(const css_computed_style *style, return get_max_width(style, length, unit); } -uint8_t css_computed_width(const css_computed_style *style, +uint8_t css_computed_width( + const css_computed_style *style, + const css_unit_ctx *unit_ctx, + int available_px, + int *px_out) +{ + enum css_width_e type; + css_unit unit = CSS_UNIT_PX; + css_fixed value = 0; + + type = get_width(style, &value, &unit); + switch (type) { + case CSS_WIDTH_INHERIT: + break; + case CSS_WIDTH_AUTO: + break; + case CSS_WIDTH_SET: + switch (unit) { + case CSS_UNIT_PCT: + if (available_px < 0) { + type = CSS_WIDTH_AUTO; + break; + } + + *px_out = FPCT_OF_INT_TOINT( + value, + available_px); + break; + default: + *px_out = FIXTOINT(css_unit_len2device_px( + style, unit_ctx, + value, unit)); + break; + } + break; + } + + return type; +} + +uint8_t css_computed_width_static(const css_computed_style *style, css_fixed *length, css_unit *unit) { return get_width(style, length, unit); |