OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | |
4 * Copyright (C) 2003, 2006, 2007, 2009 Apple Inc. All rights reserved. | |
5 * Copyright (C) 2010, 2012 Google Inc. All rights reserved. | |
6 * | |
7 * This library is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Library General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2 of the License, or (at your option) any later version. | |
11 * | |
12 * This library is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Library General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Library General Public License | |
18 * along with this library; see the file COPYING.LIB. If not, write to | |
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
20 * Boston, MA 02110-1301, USA. | |
21 */ | |
22 | |
23 #ifndef LayoutLayerModelObject_h | |
24 #define LayoutLayerModelObject_h | |
25 | |
26 #include "core/layout/LayoutObject.h" | |
27 | |
28 namespace blink { | |
29 | |
30 class Layer; | |
31 class LayerScrollableArea; | |
32 | |
33 enum LayerType { | |
34 NoLayer, | |
35 NormalLayer, | |
36 // A forced or overflow clip layer is required for bookkeeping purposes, | |
37 // but does not force a layer to be self painting. | |
38 OverflowClipLayer, | |
39 ForcedLayer | |
40 }; | |
41 | |
42 class LayoutLayerModelObject : public LayoutObject { | |
43 public: | |
44 explicit LayoutLayerModelObject(ContainerNode*); | |
45 virtual ~LayoutLayerModelObject(); | |
46 | |
47 // This is the only way layers should ever be destroyed. | |
48 void destroyLayer(); | |
49 | |
50 bool hasSelfPaintingLayer() const; | |
51 Layer* layer() const { return m_layer.get(); } | |
52 LayerScrollableArea* scrollableArea() const; | |
53 | |
54 virtual void styleWillChange(StyleDifference, const LayoutStyle& newStyle) o
verride; | |
55 virtual void styleDidChange(StyleDifference, const LayoutStyle* oldStyle) ov
erride; | |
56 virtual void updateFromStyle() { } | |
57 | |
58 virtual LayerType layerTypeRequired() const = 0; | |
59 | |
60 // Returns true if the background is painted opaque in the given rect. | |
61 // The query rect is given in local coordinate system. | |
62 virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { re
turn false; } | |
63 | |
64 // This is null for anonymous renderers. | |
65 ContainerNode* node() const { return toContainerNode(LayoutObject::node());
} | |
66 | |
67 virtual void invalidateTreeIfNeeded(const PaintInvalidationState&) override; | |
68 | |
69 // Indicate that the contents of this renderer need to be repainted. Only ha
s an effect if compositing is being used, | |
70 void setBackingNeedsPaintInvalidationInRect(const LayoutRect&, PaintInvalida
tionReason) const; // r is in the coordinate space of this render object | |
71 | |
72 protected: | |
73 void createLayer(LayerType); | |
74 | |
75 virtual void willBeDestroyed() override; | |
76 | |
77 virtual void addLayerHitTestRects(LayerHitTestRects&, const Layer*, const La
youtPoint&, const LayoutRect&) const override; | |
78 | |
79 void addChildFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& addition
alOffset) const; | |
80 | |
81 private: | |
82 virtual bool isLayoutLayerModelObject() const override final { return true;
} | |
83 | |
84 OwnPtr<Layer> m_layer; | |
85 | |
86 // Used to store state between styleWillChange and styleDidChange | |
87 static bool s_wasFloating; | |
88 }; | |
89 | |
90 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutLayerModelObject, isLayoutLayerModelObject
()); | |
91 | |
92 } // namespace blink | |
93 | |
94 #endif // LayoutLayerModelObject_h | |
OLD | NEW |