// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SKY_ENGINE_CORE_RENDERING_STYLE_STYLEDIFFERENCE_H_ #define SKY_ENGINE_CORE_RENDERING_STYLE_STYLEDIFFERENCE_H_ #include "sky/engine/wtf/Assertions.h" namespace blink { class StyleDifference { public: enum PropertyDifference { TransformChanged = 1 << 0, OpacityChanged = 1 << 1, ZIndexChanged = 1 << 2, FilterChanged = 1 << 3, }; StyleDifference() : m_layoutType(NoLayout) , m_propertySpecificDifferences(0) { } bool needsLayout() const { return m_layoutType != NoLayout; } void clearNeedsLayout() { m_layoutType = NoLayout; } // The offset of this positioned object has been updated. bool needsPositionedMovementLayout() const { return m_layoutType == PositionedMovement; } void setNeedsPositionedMovementLayout() { ASSERT(!needsFullLayout()); m_layoutType = PositionedMovement; } bool needsFullLayout() const { return m_layoutType == FullLayout; } void setNeedsFullLayout() { m_layoutType = FullLayout; } bool transformChanged() const { return m_propertySpecificDifferences & TransformChanged; } void setTransformChanged() { m_propertySpecificDifferences |= TransformChanged; } bool opacityChanged() const { return m_propertySpecificDifferences & OpacityChanged; } void setOpacityChanged() { m_propertySpecificDifferences |= OpacityChanged; } bool zIndexChanged() const { return m_propertySpecificDifferences & ZIndexChanged; } void setZIndexChanged() { m_propertySpecificDifferences |= ZIndexChanged; } bool filterChanged() const { return m_propertySpecificDifferences & FilterChanged; } void setFilterChanged() { m_propertySpecificDifferences |= FilterChanged; } private: enum LayoutType { NoLayout = 0, PositionedMovement, FullLayout }; unsigned m_layoutType : 2; unsigned m_propertySpecificDifferences : 5; }; } // namespace blink #endif // SKY_ENGINE_CORE_RENDERING_STYLE_STYLEDIFFERENCE_H_