#ifndef MediaQueryExp_h
#define MediaQueryExp_h
+#include "CSSValueKeywords.h"
#include "MediaFeatureNames.h"
+#include "core/css/CSSPrimitiveValue.h"
#include "core/css/CSSValue.h"
#include "wtf/PassOwnPtr.h"
#include "wtf/RefPtr.h"
namespace WebCore {
class CSSParserValueList;
-class MediaQueryExp : public NoBaseWillBeGarbageCollectedFinalized<MediaQueryExp> {
+struct MediaQueryExpValue {
+ CSSValueID id;
+ double value;
+ CSSPrimitiveValue::UnitTypes unit;
+ unsigned numerator;
+ unsigned denominator;
+
+ bool isID;
+ bool isValue;
+ bool isRatio;
+ bool isInteger;
+
+ MediaQueryExpValue()
+ : id(CSSValueInvalid)
+ , value(0)
+ , unit(CSSPrimitiveValue::CSS_UNKNOWN)
+ , numerator(0)
+ , denominator(1)
+ , isID(false)
+ , isValue(false)
+ , isRatio(false)
+ , isInteger(false)
+ {
+ }
+
+ bool isValid() const { return (isID || isValue || isRatio); }
+ String cssText() const;
+ bool equals(const MediaQueryExpValue& expValue) const
+ {
+ if (isID)
+ return (id == expValue.id);
+ if (isValue)
+ return (value == expValue.value);
+ if (isRatio)
+ return (numerator == expValue.numerator && denominator == expValue.denominator);
+ return !expValue.isValid();
+ }
+};
+
+class MediaQueryExp : public NoBaseWillBeGarbageCollectedFinalized<MediaQueryExp> {
WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
public:
static PassOwnPtrWillBeRawPtr<MediaQueryExp> createIfValid(const String& mediaFeature, CSSParserValueList*);
const String& mediaFeature() const { return m_mediaFeature; }
- CSSValue* value() const { return m_value.get(); }
+ MediaQueryExpValue expValue() const { return m_expValue; }
- bool operator==(const MediaQueryExp& other) const
- {
- return (other.m_mediaFeature == m_mediaFeature)
- && ((!other.m_value && !m_value)
- || (other.m_value && m_value && other.m_value->equals(*m_value)));
- }
+ bool operator==(const MediaQueryExp& other) const;
bool isViewportDependent() const;
PassOwnPtrWillBeRawPtr<MediaQueryExp> copy() const { return adoptPtrWillBeNoop(new MediaQueryExp(*this)); }
- void trace(Visitor* visitor) { visitor->trace(m_value); }
-
MediaQueryExp(const MediaQueryExp& other);
+ void trace(Visitor* visitor) { }
+
private:
- MediaQueryExp(const String&, PassRefPtrWillBeRawPtr<CSSValue>);
+ MediaQueryExp(const String&, const MediaQueryExpValue&);
String m_mediaFeature;
- RefPtrWillBeMember<CSSValue> m_value;
+ MediaQueryExpValue m_expValue;
};
} // namespace