File: StyleDifference.h

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (100 lines) | stat: -rw-r--r-- 3,794 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// 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 StyleDifference_h
#define StyleDifference_h

#include "wtf/Assertions.h"

namespace blink {

class StyleDifference {
public:
    enum PropertyDifference {
        TransformChanged = 1 << 0,
        OpacityChanged = 1 << 1,
        ZIndexChanged = 1 << 2,
        FilterChanged = 1 << 3,
        // The object needs to issue paint invalidations if it contains text or properties dependent on color (e.g., border or outline).
        TextOrColorChanged = 1 << 4,
    };

    StyleDifference()
        : m_paintInvalidationType(NoPaintInvalidation)
        , m_layoutType(NoLayout)
        , m_propertySpecificDifferences(0)
    { }

    bool hasDifference() const { return m_paintInvalidationType || m_layoutType || m_propertySpecificDifferences; }

    bool hasAtMostPropertySpecificDifferences(unsigned propertyDifferences) const
    {
        return !m_paintInvalidationType && !m_layoutType && !(m_propertySpecificDifferences & ~propertyDifferences);
    }

    bool needsPaintInvalidation() const { return m_paintInvalidationType != NoPaintInvalidation; }
    void clearNeedsPaintInvalidation() { m_paintInvalidationType = NoPaintInvalidation; }

    // The object just needs to issue paint invalidations.
    bool needsPaintInvalidationObject() const { return m_paintInvalidationType == PaintInvalidationObject; }
    void setNeedsPaintInvalidationObject()
    {
        ASSERT(!needsPaintInvalidationLayer());
        m_paintInvalidationType = PaintInvalidationObject;
    }

    // The layer and its descendant layers need to issue paint invalidations.
    bool needsPaintInvalidationLayer() const { return m_paintInvalidationType == PaintInvalidationLayer; }
    void setNeedsPaintInvalidationLayer() { m_paintInvalidationType = PaintInvalidationLayer; }

    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; }

    bool textOrColorChanged() const { return m_propertySpecificDifferences & TextOrColorChanged; }
    void setTextOrColorChanged() { m_propertySpecificDifferences |= TextOrColorChanged; }

private:
    enum PaintInvalidationType {
        NoPaintInvalidation = 0,
        PaintInvalidationObject,
        PaintInvalidationLayer
    };
    unsigned m_paintInvalidationType : 2;

    enum LayoutType {
        NoLayout = 0,
        PositionedMovement,
        FullLayout
    };
    unsigned m_layoutType : 2;

    unsigned m_propertySpecificDifferences : 5;
};

} // namespace blink

#endif // StyleDifference_h