diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2022-07-30 21:26:39 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2022-07-31 20:46:35 +0100 |
commit | c0af9cfa9adf8fdc94efa32a6847d7aebba0e107 (patch) | |
tree | fc17243053dd5ff7fb805975a38fe4150d9a1f6c | |
parent | eb055263ee7625512f44782428925c3b2298ff6f (diff) | |
download | libcss-c0af9cfa9adf8fdc94efa32a6847d7aebba0e107.tar.gz libcss-c0af9cfa9adf8fdc94efa32a6847d7aebba0e107.tar.bz2 |
Selection: Media queries: Apply prefers-color-scheme
-rw-r--r-- | src/select/mq.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/select/mq.h b/src/select/mq.h index a012a7b..014814b 100644 --- a/src/select/mq.h +++ b/src/select/mq.h @@ -78,6 +78,31 @@ static inline bool mq_match_feature_range_length_op2( } } +static inline bool mq_match_feature_eq_ident_op1( + css_mq_feature_op op, + const css_mq_value *value, + const lwc_string *client_value) +{ + bool is_match; + + if (value->type != CSS_MQ_VALUE_TYPE_IDENT) { + return false; + } + + if (value->data.ident == NULL || client_value == NULL) { + return false; + } + + switch (op) { + case CSS_MQ_FEATURE_OP_EQ: + return (lwc_string_isequal(value->data.ident, + client_value, &is_match) == lwc_error_ok) && + is_match; + default: + return false; + } +} + /** * Match media query features. * @@ -108,6 +133,14 @@ static inline bool mq_match_feature( return mq_match_feature_range_length_op2(feat->op2, &feat->value2, media->height, unit_ctx); + + } else if (strcmp(lwc_string_data(feat->name), "prefers-color-scheme") == 0) { + if (!mq_match_feature_eq_ident_op1(feat->op, &feat->value, + media->prefers_color_scheme)) { + return false; + } + + return true; } /* TODO: Look at other feature names. */ |