Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Side by Side Diff: Source/core/rendering/style/StyleDifference.h

Issue 247713003: Separate repaint and layout requirements of StyleDifference (Step 3) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address comments; Rebase on RAL Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 StyleDifference_h 5 #ifndef StyleDifference_h
6 #define StyleDifference_h 6 #define StyleDifference_h
7 7
8 #include "wtf/Assertions.h"
9
8 namespace WebCore { 10 namespace WebCore {
9 11
10 // This class represents the difference between two computed styles (RenderStyle ). 12 // This class represents the difference between two computed styles (RenderStyle ).
11 // The difference can be of 3 types: 13 // The difference can be combination of 3 types according to the actions needed:
12 // - Layout difference 14 // - Difference needing layout
13 // - Repaint difference 15 // - Difference needing repaint
14 // - Recompositing difference 16 // - Difference needing recompositing layers
15 class StyleDifference { 17 class StyleDifference {
16 public: 18 public:
17 StyleDifference() 19 StyleDifference()
18 : m_needsRecompositeLayer(false) 20 : m_needsRecompositeLayer(false)
19 , m_repaintType(NoRepaint) 21 , m_repaintType(NoRepaint)
20 , m_layoutType(NoLayout) { } 22 , m_layoutType(NoLayout) { }
21 23
22 // The two styles are identical. 24 // The two styles are identical.
23 bool hasNoChange() const { return !m_needsRecompositeLayer && !m_repaintType && !m_layoutType; } 25 bool hasNoChange() const { return !m_needsRecompositeLayer && !m_repaintType && !m_layoutType; }
24 26
25 // The layer needs its position and transform updated. Implied by other repa int and layout flags. 27 // The layer needs its position and transform updated. Implied by other repa int and layout flags.
26 bool needsRecompositeLayer() const { return m_needsRecompositeLayer || needs Repaint() || needsLayout(); } 28 bool needsRecompositeLayer() const { return m_needsRecompositeLayer || needs Repaint() || needsLayout(); }
27 void setNeedsRecompositeLayer() { m_needsRecompositeLayer = true; } 29 void setNeedsRecompositeLayer() { m_needsRecompositeLayer = true; }
28 30
29 bool needsRepaint() const { return m_repaintType != NoRepaint; } 31 bool needsRepaint() const { return m_repaintType != NoRepaint; }
30 void clearNeedsRepaint() { m_repaintType = NoRepaint; } 32 void clearNeedsRepaint() { m_repaintType = NoRepaint; }
31 33
32 // The object just needs to be repainted. 34 // The object just needs to be repainted.
33 bool needsRepaintObjectOnly() const { return m_repaintType == RepaintObjectO nly; } 35 bool needsRepaintObject() const { return m_repaintType == RepaintObject; }
34 void setNeedsRepaintObject() 36 void setNeedsRepaintObject()
35 { 37 {
36 if (!needsRepaintLayer()) 38 ASSERT(!needsRepaintLayer());
37 m_repaintType = RepaintObjectOnly; 39 m_repaintType = RepaintObject;
38 } 40 }
39 41
40 // The layer and its descendant layers need to be repainted. 42 // The layer and its descendant layers need to be repainted.
41 bool needsRepaintLayer() const { return m_repaintType == RepaintLayer; } 43 bool needsRepaintLayer() const { return m_repaintType == RepaintLayer; }
42 void setNeedsRepaintLayer() { m_repaintType = RepaintLayer; } 44 void setNeedsRepaintLayer() { m_repaintType = RepaintLayer; }
43 45
44 bool needsLayout() const { return m_layoutType != NoLayout; } 46 bool needsLayout() const { return m_layoutType != NoLayout; }
45 void clearNeedsLayout() { m_layoutType = NoLayout; } 47 void clearNeedsLayout() { m_layoutType = NoLayout; }
46 48
47 // The offset of this positioned object has been updated. 49 // The offset of this positioned object has been updated.
48 bool needsPositionedMovementLayout() const { return m_layoutType & Positione dMovement; } 50 bool needsPositionedMovementLayout() const { return m_layoutType == Position edMovement; }
49 void setNeedsPositionedMovementLayout() 51 void setNeedsPositionedMovementLayout()
50 { 52 {
51 if (!needsFullLayout()) 53 ASSERT(!needsFullLayout());
52 m_layoutType |= PositionedMovement; 54 m_layoutType = PositionedMovement;
53 // FIXME: This is temporary to keep the StyleDifferenceLegacy behavior.
54 m_repaintType = NoRepaint;
55 } 55 }
56 56
57 bool needsFullLayout() const { return m_layoutType == FullLayout; } 57 bool needsFullLayout() const { return m_layoutType == FullLayout; }
58 void setNeedsFullLayout() 58 void setNeedsFullLayout() { m_layoutType = FullLayout; }
59 {
60 m_layoutType = FullLayout;
61 // FIXME: This is temporary to keep the StyleDifferenceLegacy behavior.
62 m_repaintType = NoRepaint;
63 }
64 59
65 private: 60 private:
66 unsigned m_needsRecompositeLayer : 1; 61 unsigned m_needsRecompositeLayer : 1;
67 62
68 enum RepaintType { 63 enum RepaintType {
69 NoRepaint = 0, 64 NoRepaint = 0,
70 RepaintObjectOnly, 65 RepaintObject,
71 RepaintLayer 66 RepaintLayer
72 }; 67 };
73 unsigned m_repaintType : 2; 68 unsigned m_repaintType : 2;
74 69
75 enum LayoutType { 70 enum LayoutType {
76 NoLayout = 0, 71 NoLayout = 0,
77 PositionedMovement = 1 << 0, 72 PositionedMovement,
78 FullLayout = 1 << 1 73 FullLayout
79 }; 74 };
80 unsigned m_layoutType : 2; 75 unsigned m_layoutType : 2;
81 }; 76 };
82 77
83 } // namespace WebCore 78 } // namespace WebCore
84 79
85 #endif // StyleDifference_h 80 #endif // StyleDifference_h
OLDNEW
« no previous file with comments | « Source/core/rendering/style/SVGRenderStyle.cpp ('k') | Source/core/rendering/svg/RenderSVGRoot.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698