diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebCore/css/CSSCalculationValue.h | |
parent | ab6df191029eeeb0b0f16f127d553265659f739e (diff) | |
download | qtwebkit-6882a04fb36642862b11efe514251d32070c3d65.tar.gz |
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore/css/CSSCalculationValue.h')
-rw-r--r-- | Source/WebCore/css/CSSCalculationValue.h | 107 |
1 files changed, 56 insertions, 51 deletions
diff --git a/Source/WebCore/css/CSSCalculationValue.h b/Source/WebCore/css/CSSCalculationValue.h index 266e8f76c..2c2000081 100644 --- a/Source/WebCore/css/CSSCalculationValue.h +++ b/Source/WebCore/css/CSSCalculationValue.h @@ -31,20 +31,16 @@ #ifndef CSSCalculationValue_h #define CSSCalculationValue_h -#include "CSSParserValues.h" -#include "CSSValue.h" +#include "CSSPrimitiveValue.h" #include "CalculationValue.h" -#include <wtf/PassOwnPtr.h> -#include <wtf/RefCounted.h> -#include <wtf/RefPtr.h> namespace WebCore { class CSSParserValueList; -class CSSValueList; +class CSSToLengthConversionData; class RenderStyle; -class CalculationValue; -class CalcExpressionNode; + +struct CSSParserString; enum CalculationCategory { CalcNumber = 0, @@ -52,12 +48,12 @@ enum CalculationCategory { CalcPercent, CalcPercentNumber, CalcPercentLength, -#if ENABLE(CSS_VARIABLES) - CalcVariable, -#endif + CalcAngle, + CalcTime, + CalcFrequency, CalcOther }; - + class CSSCalcExpressionNode : public RefCounted<CSSCalcExpressionNode> { public: enum Type { @@ -65,69 +61,78 @@ public: CssCalcBinaryOperation }; - virtual ~CSSCalcExpressionNode() = 0; + virtual ~CSSCalcExpressionNode() { } virtual bool isZero() const = 0; - virtual PassOwnPtr<CalcExpressionNode> toCalcValue(const RenderStyle*, const RenderStyle* rootStyle, double zoom = 1.0) const = 0; + virtual std::unique_ptr<CalcExpressionNode> createCalcExpression(const CSSToLengthConversionData&) const = 0; virtual double doubleValue() const = 0; - virtual double computeLengthPx(const RenderStyle* currentStyle, const RenderStyle* rootStyle, double multiplier = 1.0, bool computingFontSize = false) const = 0; - virtual String customCssText() const = 0; -#if ENABLE(CSS_VARIABLES) - virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const = 0; - virtual bool hasVariableReference() const = 0; -#endif + virtual double computeLengthPx(const CSSToLengthConversionData&) const = 0; + virtual String customCSSText() const = 0; virtual bool equals(const CSSCalcExpressionNode& other) const { return m_category == other.m_category && m_isInteger == other.m_isInteger; } virtual Type type() const = 0; + virtual CSSPrimitiveValue::UnitTypes primitiveType() const = 0; - CalculationCategory category() const { return m_category; } + CalculationCategory category() const { return m_category; } bool isInteger() const { return m_isInteger; } - + protected: CSSCalcExpressionNode(CalculationCategory category, bool isInteger) : m_category(category) , m_isInteger(isInteger) { } - + +private: CalculationCategory m_category; bool m_isInteger; }; - + class CSSCalcValue : public CSSValue { public: - static PassRefPtr<CSSCalcValue> create(CSSParserString name, CSSParserValueList*, CalculationPermittedValueRange); - static PassRefPtr<CSSCalcValue> create(CalculationValue*); + static RefPtr<CSSCalcValue> create(CSSParserString name, CSSParserValueList& arguments, CalculationPermittedValueRange); + static RefPtr<CSSCalcValue> create(const CalculationValue&, const RenderStyle&); - PassRefPtr<CalculationValue> toCalcValue(const RenderStyle* style, const RenderStyle* rootStyle, double zoom = 1.0) const - { - return CalculationValue::create(m_expression->toCalcValue(style, rootStyle, zoom), m_nonNegative ? CalculationRangeNonNegative : CalculationRangeAll); - } CalculationCategory category() const { return m_expression->category(); } - bool isInt() const { return m_expression->isInteger(); } + bool isInt() const { return m_expression->isInteger(); } double doubleValue() const; - bool isNegative() const { return m_expression->doubleValue() < 0; } - double computeLengthPx(const RenderStyle* currentStyle, const RenderStyle* rootStyle, double multiplier = 1.0, bool computingFontSize = false) const; - - String customCssText() const; + bool isPositive() const { return m_expression->doubleValue() > 0; } + double computeLengthPx(const CSSToLengthConversionData&) const; + unsigned short primitiveType() const { return m_expression->primitiveType(); } + + Ref<CalculationValue> createCalculationValue(const CSSToLengthConversionData&) const; + void setPermittedValueRange(CalculationPermittedValueRange); + + String customCSSText() const; bool equals(const CSSCalcValue&) const; -#if ENABLE(CSS_VARIABLES) - String customSerializeResolvingVariables(const HashMap<AtomicString, String>&) const; - bool hasVariableReference() const; -#endif - -private: - CSSCalcValue(PassRefPtr<CSSCalcExpressionNode> expression, CalculationPermittedValueRange range) - : CSSValue(CalculationClass) - , m_expression(expression) - , m_nonNegative(range == CalculationRangeNonNegative) - { - } - + +private: + CSSCalcValue(Ref<CSSCalcExpressionNode>&&, bool shouldClampToNonNegative); + double clampToPermittedRange(double) const; - const RefPtr<CSSCalcExpressionNode> m_expression; - const bool m_nonNegative; + const Ref<CSSCalcExpressionNode> m_expression; + bool m_shouldClampToNonNegative; }; - + +inline CSSCalcValue::CSSCalcValue(Ref<CSSCalcExpressionNode>&& expression, bool shouldClampToNonNegative) + : CSSValue(CalculationClass) + , m_expression(WTFMove(expression)) + , m_shouldClampToNonNegative(shouldClampToNonNegative) +{ +} + +inline Ref<CalculationValue> CSSCalcValue::createCalculationValue(const CSSToLengthConversionData& conversionData) const +{ + return CalculationValue::create(m_expression->createCalcExpression(conversionData), + m_shouldClampToNonNegative ? CalculationRangeNonNegative : CalculationRangeAll); +} + +inline void CSSCalcValue::setPermittedValueRange(CalculationPermittedValueRange range) +{ + m_shouldClampToNonNegative = range != CalculationRangeAll; +} + } // namespace WebCore +SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSCalcValue, isCalcValue()) + #endif // CSSCalculationValue_h |