OLD | NEW |
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 #include "config.h" | 5 #include "config.h" |
6 #include "core/paint/BoxPainter.h" | 6 #include "core/paint/BoxPainter.h" |
7 | 7 |
8 #include "core/HTMLNames.h" | 8 #include "core/HTMLNames.h" |
9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
10 #include "core/html/HTMLFrameOwnerElement.h" | 10 #include "core/html/HTMLFrameOwnerElement.h" |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 FloatSize shadowOffset(boxShadow.x(), boxShadow.y()); | 257 FloatSize shadowOffset(boxShadow.x(), boxShadow.y()); |
258 context->setShadow(shadowOffset, boxShadow.blur(), | 258 context->setShadow(shadowOffset, boxShadow.blur(), |
259 boxShadow.color().resolve(obj.resolveColor(CSSPropertyColor)), | 259 boxShadow.color().resolve(obj.resolveColor(CSSPropertyColor)), |
260 DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::Shad
owIgnoresAlpha); | 260 DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::Shad
owIgnoresAlpha); |
261 return; | 261 return; |
262 } | 262 } |
263 } | 263 } |
264 | 264 |
265 FloatRoundedRect BoxPainter::getBackgroundRoundedRect(LayoutObject& obj, const L
ayoutRect& borderRect, | 265 FloatRoundedRect BoxPainter::getBackgroundRoundedRect(LayoutObject& obj, const L
ayoutRect& borderRect, |
266 InlineFlowBox* box, LayoutUnit inlineBoxWidth, LayoutUnit inlineBoxHeight, | 266 InlineFlowBox* box, LayoutUnit inlineBoxWidth, LayoutUnit inlineBoxHeight, |
267 bool includeLogicalLeftEdge, bool includeLogicalRightEdge, const FloatRectOu
tsets* insets) | 267 bool includeLogicalLeftEdge, bool includeLogicalRightEdge) |
268 { | 268 { |
269 FloatRoundedRect border = obj.style()->getRoundedBorderFor(borderRect, inclu
deLogicalLeftEdge, | 269 FloatRoundedRect border = obj.style()->getRoundedBorderFor(borderRect, inclu
deLogicalLeftEdge, includeLogicalRightEdge); |
270 includeLogicalRightEdge, insets); | |
271 if (box && (box->nextLineBox() || box->prevLineBox())) { | 270 if (box && (box->nextLineBox() || box->prevLineBox())) { |
272 FloatRoundedRect segmentBorder = obj.style()->getRoundedBorderFor(Layout
Rect(0, 0, inlineBoxWidth, inlineBoxHeight), | 271 FloatRoundedRect segmentBorder = obj.style()->getRoundedBorderFor(Layout
Rect(0, 0, inlineBoxWidth, inlineBoxHeight), |
273 includeLogicalLeftEdge, includeLogicalRightEdge, insets); | 272 includeLogicalLeftEdge, includeLogicalRightEdge); |
274 border.setRadii(segmentBorder.radii()); | 273 border.setRadii(segmentBorder.radii()); |
275 } | 274 } |
276 | |
277 return border; | 275 return border; |
278 } | 276 } |
279 | 277 |
280 FloatRoundedRect BoxPainter::backgroundRoundedRectAdjustedForBleedAvoidance(Layo
utObject& obj, | 278 FloatRoundedRect BoxPainter::backgroundRoundedRectAdjustedForBleedAvoidance(Layo
utObject& obj, |
281 const LayoutRect& borderRect, BackgroundBleedAvoidance bleedAvoidance, Inlin
eFlowBox* box, | 279 const LayoutRect& borderRect, BackgroundBleedAvoidance bleedAvoidance, Inlin
eFlowBox* box, |
282 const LayoutSize& boxSize, bool includeLogicalLeftEdge, bool includeLogicalR
ightEdge) | 280 const LayoutSize& boxSize, bool includeLogicalLeftEdge, bool includeLogicalR
ightEdge) |
283 { | 281 { |
284 if (bleedAvoidance == BackgroundBleedShrinkBackground) { | 282 if (bleedAvoidance == BackgroundBleedShrinkBackground) { |
285 // Inset the background rect by a "safe" amount: 1/2 border-width for op
aque border styles, | 283 // Inset the background rect by a "safe" amount: 1/2 border-width for op
aque border styles, |
286 // 1/6 border-width for double borders. | 284 // 1/6 border-width for double borders. |
(...skipping 11 matching lines...) Expand all Loading... |
298 break; | 296 break; |
299 } | 297 } |
300 } | 298 } |
301 | 299 |
302 FloatRectOutsets insets( | 300 FloatRectOutsets insets( |
303 -fractionalInset * edges[BSTop].width, | 301 -fractionalInset * edges[BSTop].width, |
304 -fractionalInset * edges[BSRight].width, | 302 -fractionalInset * edges[BSRight].width, |
305 -fractionalInset * edges[BSBottom].width, | 303 -fractionalInset * edges[BSBottom].width, |
306 -fractionalInset * edges[BSLeft].width); | 304 -fractionalInset * edges[BSLeft].width); |
307 | 305 |
308 return getBackgroundRoundedRect(obj, borderRect, box, boxSize.width(), b
oxSize.height(), | 306 FloatRoundedRect backgroundRoundedRect = getBackgroundRoundedRect(obj, b
orderRect, box, boxSize.width(), boxSize.height(), |
309 includeLogicalLeftEdge, includeLogicalRightEdge, &insets); | 307 includeLogicalLeftEdge, includeLogicalRightEdge); |
| 308 FloatRect insetRect(backgroundRoundedRect.rect()); |
| 309 insetRect.expand(insets); |
| 310 FloatRoundedRect::Radii insetRadii(backgroundRoundedRect.radii()); |
| 311 insetRadii.shrink(-insets.top(), -insets.bottom(), -insets.left(), -inse
ts.right()); |
| 312 return FloatRoundedRect(insetRect, insetRadii); |
310 } | 313 } |
311 if (bleedAvoidance == BackgroundBleedBackgroundOverBorder) | 314 if (bleedAvoidance == BackgroundBleedBackgroundOverBorder) |
312 return obj.style()->getRoundedInnerBorderFor(borderRect, includeLogicalL
eftEdge, includeLogicalRightEdge); | 315 return obj.style()->getRoundedInnerBorderFor(borderRect, includeLogicalL
eftEdge, includeLogicalRightEdge); |
313 | 316 |
314 return getBackgroundRoundedRect(obj, borderRect, box, boxSize.width(), boxSi
ze.height(), includeLogicalLeftEdge, includeLogicalRightEdge); | 317 return getBackgroundRoundedRect(obj, borderRect, box, boxSize.width(), boxSi
ze.height(), includeLogicalLeftEdge, includeLogicalRightEdge); |
315 } | 318 } |
316 | 319 |
317 void BoxPainter::paintFillLayerExtended(LayoutBoxModelObject& obj, const PaintIn
fo& paintInfo, const Color& color, const FillLayer& bgLayer, const LayoutRect& r
ect, | 320 void BoxPainter::paintFillLayerExtended(LayoutBoxModelObject& obj, const PaintIn
fo& paintInfo, const Color& color, const FillLayer& bgLayer, const LayoutRect& r
ect, |
318 BackgroundBleedAvoidance bleedAvoidance, InlineFlowBox* box, const LayoutSiz
e& boxSize, SkXfermode::Mode op, LayoutObject* backgroundObject, bool skipBaseCo
lor) | 321 BackgroundBleedAvoidance bleedAvoidance, InlineFlowBox* box, const LayoutSiz
e& boxSize, SkXfermode::Mode op, LayoutObject* backgroundObject, bool skipBaseCo
lor) |
319 { | 322 { |
(...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2294 | 2297 |
2295 FloatPoint secondQuad[4]; | 2298 FloatPoint secondQuad[4]; |
2296 secondQuad[0] = quad[0]; | 2299 secondQuad[0] = quad[0]; |
2297 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); | 2300 secondQuad[1] = FloatPoint(quad[0].x() - r1 * cx, quad[0].y() - r1 * cy); |
2298 secondQuad[2] = quad[2]; | 2301 secondQuad[2] = quad[2]; |
2299 secondQuad[3] = quad[3]; | 2302 secondQuad[3] = quad[3]; |
2300 graphicsContext->clipPolygon(4, secondQuad, !secondEdgeMatches); | 2303 graphicsContext->clipPolygon(4, secondQuad, !secondEdgeMatches); |
2301 } | 2304 } |
2302 | 2305 |
2303 } // namespace blink | 2306 } // namespace blink |
OLD | NEW |