OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "core/layout/LayoutBoxModelObject.h" | 26 #include "core/layout/LayoutBoxModelObject.h" |
27 | 27 |
28 #include "core/frame/FrameView.h" | 28 #include "core/frame/FrameView.h" |
29 #include "core/frame/LocalFrame.h" | 29 #include "core/frame/LocalFrame.h" |
30 #include "core/html/HTMLBodyElement.h" | 30 #include "core/html/HTMLBodyElement.h" |
31 #include "core/layout/ImageQualityController.h" | 31 #include "core/layout/ImageQualityController.h" |
32 #include "core/layout/LayoutBlock.h" | 32 #include "core/layout/LayoutBlock.h" |
33 #include "core/layout/LayoutFlexibleBox.h" | 33 #include "core/layout/LayoutFlexibleBox.h" |
34 #include "core/layout/LayoutGeometryMap.h" | 34 #include "core/layout/LayoutGeometryMap.h" |
35 #include "core/layout/LayoutInline.h" | 35 #include "core/layout/LayoutInline.h" |
36 #include "core/layout/LayoutTheme.h" | |
37 #include "core/layout/LayoutView.h" | 36 #include "core/layout/LayoutView.h" |
38 #include "core/layout/compositing/CompositedLayerMapping.h" | 37 #include "core/layout/compositing/CompositedLayerMapping.h" |
39 #include "core/layout/compositing/PaintLayerCompositor.h" | 38 #include "core/layout/compositing/PaintLayerCompositor.h" |
40 #include "core/paint/ObjectPaintInvalidator.h" | 39 #include "core/paint/ObjectPaintInvalidator.h" |
41 #include "core/paint/PaintLayer.h" | 40 #include "core/paint/PaintLayer.h" |
42 #include "core/style/ShadowList.h" | 41 #include "core/style/ShadowList.h" |
43 #include "platform/LengthFunctions.h" | 42 #include "platform/LengthFunctions.h" |
44 #include "wtf/PtrUtil.h" | 43 #include "wtf/PtrUtil.h" |
45 | 44 |
46 namespace blink { | 45 namespace blink { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 LayoutBoxModelObject::LayoutBoxModelObject(ContainerNode* node) | 108 LayoutBoxModelObject::LayoutBoxModelObject(ContainerNode* node) |
110 : LayoutObject(node) | 109 : LayoutObject(node) |
111 { | 110 { |
112 } | 111 } |
113 | 112 |
114 bool LayoutBoxModelObject::usesCompositedScrolling() const | 113 bool LayoutBoxModelObject::usesCompositedScrolling() const |
115 { | 114 { |
116 return hasOverflowClip() && hasLayer() && layer()->getScrollableArea()->uses
CompositedScrolling(); | 115 return hasOverflowClip() && hasLayer() && layer()->getScrollableArea()->uses
CompositedScrolling(); |
117 } | 116 } |
118 | 117 |
119 bool LayoutBoxModelObject::hasLocalEquivalentBackground() const | |
120 { | |
121 int minBorderWidth = std::min(style()->borderTopWidth(), | |
122 std::min(style()->borderLeftWidth(), | |
123 std::min(style()->borderRightWidth(), style()->borderBottomWidth()))
); | |
124 bool outlineOverlapsPaddingBox = style()->outlineOffset() < -minBorderWidth; | |
125 bool hasCustomScrollbars = false; | |
126 // TODO(flackr): Detect opaque custom scrollbars which would cover up a bord
er-box | |
127 // background. | |
128 if (PaintLayerScrollableArea* scrollableArea = getScrollableArea()) { | |
129 if ((scrollableArea->horizontalScrollbar() && scrollableArea->horizontal
Scrollbar()->isCustomScrollbar()) | |
130 || (scrollableArea->verticalScrollbar() && scrollableArea->verticalS
crollbar()->isCustomScrollbar())) { | |
131 hasCustomScrollbars = true; | |
132 } | |
133 } | |
134 | |
135 const FillLayer* layer = &(style()->backgroundLayers()); | |
136 for (; layer; layer = layer->next()) { | |
137 if (layer->attachment() == LocalBackgroundAttachment) | |
138 continue; | |
139 | |
140 // If the outline draws inside the border, it intends to draw on top of
the scroller's background, | |
141 // however because it is painted into a layer behind the scrolling conte
nts layer we avoid auto | |
142 // promoting in this case to avoid obscuring the outline. | |
143 // TODO(flackr): Outlines should be drawn on top of the scrolling conten
ts layer so that | |
144 // they cannot be covered up by composited scrolling contents. | |
145 if (outlineOverlapsPaddingBox) | |
146 return false; | |
147 | |
148 // Solid color layers with an effective background clip of the padding b
ox can be treated | |
149 // as local. | |
150 if (!layer->image() && !layer->next() && resolveColor(CSSPropertyBackgro
undColor).alpha() > 0) { | |
151 EFillBox clip = layer->clip(); | |
152 if (clip == PaddingFillBox) | |
153 continue; | |
154 // A border box can be treated as a padding box if the border is opa
que or there is | |
155 // no border and we don't have custom scrollbars. | |
156 if (clip == BorderFillBox && !hasCustomScrollbars | |
157 && (style()->borderTopWidth() == 0 || !resolveColor(CSSPropertyB
orderTopColor).hasAlpha()) | |
158 && (style()->borderLeftWidth() == 0 || !resolveColor(CSSProperty
BorderLeftColor).hasAlpha()) | |
159 && (style()->borderRightWidth() == 0 || !resolveColor(CSSPropert
yBorderRightColor).hasAlpha()) | |
160 && (style()->borderBottomWidth() == 0 || !resolveColor(CSSProper
tyBorderBottomColor).hasAlpha())) { | |
161 continue; | |
162 } | |
163 // A content fill box can be treated as a padding fill box if there
is no padding. | |
164 if (clip == ContentFillBox | |
165 && style()->paddingTop().isZero() | |
166 && style()->paddingLeft().isZero() | |
167 && style()->paddingRight().isZero() | |
168 && style()->paddingBottom().isZero()) { | |
169 continue; | |
170 } | |
171 } | |
172 return false; | |
173 } | |
174 return true; | |
175 } | |
176 | |
177 LayoutBoxModelObject::~LayoutBoxModelObject() | 118 LayoutBoxModelObject::~LayoutBoxModelObject() |
178 { | 119 { |
179 // Our layer should have been destroyed and cleared by now | 120 // Our layer should have been destroyed and cleared by now |
180 ASSERT(!hasLayer()); | 121 ASSERT(!hasLayer()); |
181 ASSERT(!m_layer); | 122 ASSERT(!m_layer); |
182 } | 123 } |
183 | 124 |
184 void LayoutBoxModelObject::willBeDestroyed() | 125 void LayoutBoxModelObject::willBeDestroyed() |
185 { | 126 { |
186 ImageQualityController::remove(*this); | 127 ImageQualityController::remove(*this); |
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 if (rootElementStyle->hasBackground()) | 1111 if (rootElementStyle->hasBackground()) |
1171 return false; | 1112 return false; |
1172 | 1113 |
1173 if (node() != document().firstBodyElement()) | 1114 if (node() != document().firstBodyElement()) |
1174 return false; | 1115 return false; |
1175 | 1116 |
1176 return true; | 1117 return true; |
1177 } | 1118 } |
1178 | 1119 |
1179 } // namespace blink | 1120 } // namespace blink |
OLD | NEW |