diff options
author | Michael Drake <michael.drake@codethink.co.uk> | 2018-06-08 14:56:29 +0100 |
---|---|---|
committer | Michael Drake <michael.drake@codethink.co.uk> | 2018-07-27 14:16:58 +0100 |
commit | 21955293e6769732a671d700e3b3862dd6c3a901 (patch) | |
tree | 3946928ded61292540b939383780690a2f2c18e9 /src/select/mq.h | |
parent | e220b0fc2ede1dcbbe7e6e62c256e2ec297f26a3 (diff) | |
download | libcss-21955293e6769732a671d700e3b3862dd6c3a901.tar.gz libcss-21955293e6769732a671d700e3b3862dd6c3a901.tar.bz2 |
Selection: Unify rule good for media helper.
Diffstat (limited to 'src/select/mq.h')
-rw-r--r-- | src/select/mq.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/select/mq.h b/src/select/mq.h new file mode 100644 index 0000000..a0a9f6d --- /dev/null +++ b/src/select/mq.h @@ -0,0 +1,43 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2018 Michael Drake <tlsa@netsurf-browser.org> + */ + +#ifndef css_select_mq_h_ +#define css_select_mq_h_ + +/** + * Test whether the rule applies for current media. + * + * \param rule Rule to test + * \meaid media Current media type(s) + * \return true iff chain's rule applies for media + */ +static inline bool mq_rule_good_for_media(const css_rule *rule, uint64_t media) +{ + bool applies = true; + const css_rule *ancestor = rule; + + while (ancestor != NULL) { + const css_rule_media *m = (const css_rule_media *) ancestor; + + if (ancestor->type == CSS_RULE_MEDIA && + (m->media & media) == 0) { + applies = false; + break; + } + + if (ancestor->ptype != CSS_RULE_PARENT_STYLESHEET) { + ancestor = ancestor->parent; + } else { + ancestor = NULL; + } + } + + return applies; +} + +#endif |