summaryrefslogtreecommitdiff
path: root/src/select/computed.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/select/computed.c')
-rw-r--r--src/select/computed.c42
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);