| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef ObjectPaintProperties_h | 5 #ifndef ObjectPaintProperties_h |
| 6 #define ObjectPaintProperties_h | 6 #define ObjectPaintProperties_h |
| 7 | 7 |
| 8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
| 9 #include "platform/geometry/LayoutPoint.h" | 9 #include "platform/geometry/LayoutPoint.h" |
| 10 #include "platform/graphics/paint/ClipPaintPropertyNode.h" | 10 #include "platform/graphics/paint/ClipPaintPropertyNode.h" |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 // instead point to the transform space setup by div's ancestors. | 127 // instead point to the transform space setup by div's ancestors. |
| 128 const PropertyTreeState* localBorderBoxProperties() const { | 128 const PropertyTreeState* localBorderBoxProperties() const { |
| 129 return m_localBorderBoxProperties.get(); | 129 return m_localBorderBoxProperties.get(); |
| 130 } | 130 } |
| 131 | 131 |
| 132 // This is the complete set of property nodes and paint offset that can be | 132 // This is the complete set of property nodes and paint offset that can be |
| 133 // used to paint the contents of this object. It is similar to | 133 // used to paint the contents of this object. It is similar to |
| 134 // localBorderBoxProperties but includes properties (e.g., overflow clip, | 134 // localBorderBoxProperties but includes properties (e.g., overflow clip, |
| 135 // scroll translation) that apply to contents. This is suitable for paint | 135 // scroll translation) that apply to contents. This is suitable for paint |
| 136 // invalidation. | 136 // invalidation. |
| 137 PropertyTreeState contentsProperties() const; | 137 const PropertyTreeState* contentsProperties() const { |
| 138 if (!m_contentsProperties) { |
| 139 if (!m_localBorderBoxProperties) |
| 140 return nullptr; |
| 141 updateContentsProperties(); |
| 142 } else { |
| 143 #if DCHECK_IS_ON() |
| 144 // Check if the cached m_contentsProperties is valid. |
| 145 DCHECK(m_localBorderBoxProperties); |
| 146 std::unique_ptr<PropertyTreeState> oldProperties = |
| 147 std::move(m_contentsProperties); |
| 148 updateContentsProperties(); |
| 149 DCHECK(*m_contentsProperties == *oldProperties); |
| 150 #endif |
| 151 } |
| 152 return m_contentsProperties.get(); |
| 153 }; |
| 138 | 154 |
| 139 void updateLocalBorderBoxProperties( | 155 void updateLocalBorderBoxProperties( |
| 140 const TransformPaintPropertyNode* transform, | 156 const TransformPaintPropertyNode* transform, |
| 141 const ClipPaintPropertyNode* clip, | 157 const ClipPaintPropertyNode* clip, |
| 142 const EffectPaintPropertyNode* effect, | 158 const EffectPaintPropertyNode* effect, |
| 143 const ScrollPaintPropertyNode* scroll) { | 159 const ScrollPaintPropertyNode* scroll) { |
| 144 if (m_localBorderBoxProperties) { | 160 if (m_localBorderBoxProperties) { |
| 145 m_localBorderBoxProperties->setTransform(transform); | 161 m_localBorderBoxProperties->setTransform(transform); |
| 146 m_localBorderBoxProperties->setClip(clip); | 162 m_localBorderBoxProperties->setClip(clip); |
| 147 m_localBorderBoxProperties->setEffect(effect); | 163 m_localBorderBoxProperties->setEffect(effect); |
| 148 m_localBorderBoxProperties->setScroll(scroll); | 164 m_localBorderBoxProperties->setScroll(scroll); |
| 149 } else { | 165 } else { |
| 150 m_localBorderBoxProperties = WTF::wrapUnique(new PropertyTreeState( | 166 m_localBorderBoxProperties = WTF::wrapUnique(new PropertyTreeState( |
| 151 PropertyTreeState(transform, clip, effect, scroll))); | 167 PropertyTreeState(transform, clip, effect, scroll))); |
| 152 } | 168 } |
| 169 m_contentsProperties = nullptr; |
| 153 } | 170 } |
| 154 void clearLocalBorderBoxProperties() { m_localBorderBoxProperties = nullptr; } | 171 void clearLocalBorderBoxProperties() { |
| 172 m_localBorderBoxProperties = nullptr; |
| 173 m_contentsProperties = nullptr; |
| 174 } |
| 155 | 175 |
| 156 // The following clear* functions return true if the property tree structure | 176 // The following clear* functions return true if the property tree structure |
| 157 // changes (an existing node was deleted), and false otherwise. See the | 177 // changes (an existing node was deleted), and false otherwise. See the |
| 158 // class-level comment ("update & clear implementation note") for details | 178 // class-level comment ("update & clear implementation note") for details |
| 159 // about why this is needed for efficient updates. | 179 // about why this is needed for efficient updates. |
| 160 bool clearPaintOffsetTranslation() { return clear(m_paintOffsetTranslation); } | 180 bool clearPaintOffsetTranslation() { return clear(m_paintOffsetTranslation); } |
| 161 bool clearTransform() { return clear(m_transform); } | 181 bool clearTransform() { return clear(m_transform); } |
| 162 bool clearEffect() { return clear(m_effect); } | 182 bool clearEffect() { return clear(m_effect); } |
| 163 bool clearCssClip() { return clear(m_cssClip); } | 183 bool clearCssClip() { return clear(m_cssClip); } |
| 164 bool clearCssClipFixedPosition() { return clear(m_cssClipFixedPosition); } | 184 bool clearCssClipFixedPosition() { return clear(m_cssClipFixedPosition); } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 template <typename PaintPropertyNode, typename... Args> | 310 template <typename PaintPropertyNode, typename... Args> |
| 291 bool update(RefPtr<PaintPropertyNode>& field, Args&&... args) { | 311 bool update(RefPtr<PaintPropertyNode>& field, Args&&... args) { |
| 292 if (field) { | 312 if (field) { |
| 293 field->update(std::forward<Args>(args)...); | 313 field->update(std::forward<Args>(args)...); |
| 294 return false; | 314 return false; |
| 295 } | 315 } |
| 296 field = PaintPropertyNode::create(std::forward<Args>(args)...); | 316 field = PaintPropertyNode::create(std::forward<Args>(args)...); |
| 297 return true; | 317 return true; |
| 298 } | 318 } |
| 299 | 319 |
| 320 void updateContentsProperties() const; |
| 321 |
| 300 RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation; | 322 RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation; |
| 301 RefPtr<TransformPaintPropertyNode> m_transform; | 323 RefPtr<TransformPaintPropertyNode> m_transform; |
| 302 RefPtr<EffectPaintPropertyNode> m_effect; | 324 RefPtr<EffectPaintPropertyNode> m_effect; |
| 303 RefPtr<ClipPaintPropertyNode> m_cssClip; | 325 RefPtr<ClipPaintPropertyNode> m_cssClip; |
| 304 RefPtr<ClipPaintPropertyNode> m_cssClipFixedPosition; | 326 RefPtr<ClipPaintPropertyNode> m_cssClipFixedPosition; |
| 305 RefPtr<ClipPaintPropertyNode> m_innerBorderRadiusClip; | 327 RefPtr<ClipPaintPropertyNode> m_innerBorderRadiusClip; |
| 306 RefPtr<ClipPaintPropertyNode> m_overflowClip; | 328 RefPtr<ClipPaintPropertyNode> m_overflowClip; |
| 307 RefPtr<TransformPaintPropertyNode> m_perspective; | 329 RefPtr<TransformPaintPropertyNode> m_perspective; |
| 308 // TODO(pdr): Only LayoutSVGRoot needs this and it should be moved there. | 330 // TODO(pdr): Only LayoutSVGRoot needs this and it should be moved there. |
| 309 RefPtr<TransformPaintPropertyNode> m_svgLocalToBorderBoxTransform; | 331 RefPtr<TransformPaintPropertyNode> m_svgLocalToBorderBoxTransform; |
| 310 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; | 332 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; |
| 311 RefPtr<TransformPaintPropertyNode> m_scrollbarPaintOffset; | 333 RefPtr<TransformPaintPropertyNode> m_scrollbarPaintOffset; |
| 312 RefPtr<ScrollPaintPropertyNode> m_scroll; | 334 RefPtr<ScrollPaintPropertyNode> m_scroll; |
| 313 | 335 |
| 314 std::unique_ptr<PropertyTreeState> m_localBorderBoxProperties; | 336 std::unique_ptr<PropertyTreeState> m_localBorderBoxProperties; |
| 337 mutable std::unique_ptr<PropertyTreeState> m_contentsProperties; |
| 315 }; | 338 }; |
| 316 | 339 |
| 317 } // namespace blink | 340 } // namespace blink |
| 318 | 341 |
| 319 #endif // ObjectPaintProperties_h | 342 #endif // ObjectPaintProperties_h |
| OLD | NEW |