diff options
author | Michael Drake <michael.drake@codethink.co.uk> | 2018-07-30 13:42:35 +0100 |
---|---|---|
committer | Michael Drake <michael.drake@codethink.co.uk> | 2018-07-30 14:35:38 +0100 |
commit | ce50203db282ba649442a562e774e879a5f3744c (patch) | |
tree | 018fcb0c48f08866525a43473783e991db30b8a3 | |
parent | cce0123b55e0c911c1405b1d5ec6c5bf2a8d8bba (diff) | |
download | libcss-ce50203db282ba649442a562e774e879a5f3744c.tar.gz libcss-ce50203db282ba649442a562e774e879a5f3744c.tar.bz2 |
Media Queries: Update rule_good_for_media for new mq struct.
Doesn't currently match media query conditions, only the
media type.
-rw-r--r-- | src/select/mq.h | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/src/select/mq.h b/src/select/mq.h index a0a9f6d..5aa1404 100644 --- a/src/select/mq.h +++ b/src/select/mq.h @@ -10,10 +10,47 @@ #define css_select_mq_h_ /** + * Match media query conditions. + * + * \param[in] cond Condition to match. + * \return true if condition matches, otherwise false. + */ +static inline bool mq_match_condition(css_mq_cond *cond) +{ + /* TODO: Implement this. */ + return cond == NULL; +} + +/** + * Test whether media query list matches current media. + * + * If anything in the list matches, it the list matches. If none match + * it doesn't match. + * + * \param m Media query list. + * \meaid media Current media spec, to check against m. + * \return true if media query list matches media + */ +static inline bool mq__list_match(const css_mq_query *m, uint64_t media) +{ + for (; m != NULL; m = m->next) { + /* Check type */ + if (!!(m->type & media) != m->negate_type) { + if (mq_match_condition(m->cond)) { + /* We have a match, no need to look further. */ + return true; + } + } + } + + return false; +} + +/** * Test whether the rule applies for current media. * - * \param rule Rule to test - * \meaid media Current media type(s) + * \param rule Rule to test + * \param 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) @@ -24,10 +61,11 @@ static inline bool mq_rule_good_for_media(const css_rule *rule, uint64_t media) 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->type == CSS_RULE_MEDIA) { + applies = mq__list_match(m->media, media); + if (applies == false) { + break; + } } if (ancestor->ptype != CSS_RULE_PARENT_STYLESHEET) { |