Ojan Vafai 6d49e56b24 Simplify the paint invalidation bits.
The only thing they're used for now is to clear the
background obscuration state on RenderBox. They're
also used in RenderLayerModelObject::styleWillChange,
but that usage seems like a huge premature optimization.
Unfortunately, the RenderBox one walks up the ancestor
chain, so it's likely a necessary performance optimization.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/851033002
2015-01-15 13:02:00 -08:00

75 lines
2.4 KiB
C++

// 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_needsPaintInvalidation(false)
, m_layoutType(NoLayout)
, m_propertySpecificDifferences(0)
{ }
bool needsPaintInvalidation() const { return m_needsPaintInvalidation; }
void setNeedsPaintInvalidation()
{
m_needsPaintInvalidation = true;
}
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:
unsigned m_needsPaintInvalidation : 1;
enum LayoutType {
NoLayout = 0,
PositionedMovement,
FullLayout
};
unsigned m_layoutType : 2;
unsigned m_propertySpecificDifferences : 5;
};
} // namespace blink
#endif // SKY_ENGINE_CORE_RENDERING_STYLE_STYLEDIFFERENCE_H_