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/InlineFlowBoxPainter.h" | 6 #include "core/paint/InlineFlowBoxPainter.h" |
7 | 7 |
8 #include "core/layout/LayoutBlock.h" | 8 #include "core/layout/LayoutBlock.h" |
9 #include "core/layout/LayoutInline.h" | 9 #include "core/layout/LayoutInline.h" |
10 #include "core/layout/LayoutView.h" | 10 #include "core/layout/LayoutView.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 } | 101 } |
102 | 102 |
103 void InlineFlowBoxPainter::paintFillLayer(const PaintInfo& paintInfo, const Colo
r& c, const FillLayer& fillLayer, const LayoutRect& rect, SkXfermode::Mode op) | 103 void InlineFlowBoxPainter::paintFillLayer(const PaintInfo& paintInfo, const Colo
r& c, const FillLayer& fillLayer, const LayoutRect& rect, SkXfermode::Mode op) |
104 { | 104 { |
105 StyleImage* img = fillLayer.image(); | 105 StyleImage* img = fillLayer.image(); |
106 bool hasFillImage = img && img->canRender(m_inlineFlowBox.layoutObject(), m_
inlineFlowBox.layoutObject().style()->effectiveZoom()); | 106 bool hasFillImage = img && img->canRender(m_inlineFlowBox.layoutObject(), m_
inlineFlowBox.layoutObject().style()->effectiveZoom()); |
107 if ((!hasFillImage && !m_inlineFlowBox.layoutObject().style()->hasBorderRadi
us()) || (!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !
m_inlineFlowBox.parent()) { | 107 if ((!hasFillImage && !m_inlineFlowBox.layoutObject().style()->hasBorderRadi
us()) || (!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !
m_inlineFlowBox.parent()) { |
108 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, rect, BackgroundBleedNone, &m_inlineFlowBox, re
ct.size(), op); | 108 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, rect, BackgroundBleedNone, &m_inlineFlowBox, re
ct.size(), op); |
109 } else if (m_inlineFlowBox.layoutObject().style()->boxDecorationBreak() == D
CLONE) { | 109 } else if (m_inlineFlowBox.layoutObject().style()->boxDecorationBreak() == D
CLONE) { |
110 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 110 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
111 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); | 111 // TODO(chrishtr): this should be pixel-snapped. |
| 112 paintInfo.context->clip(FloatRect(LayoutRect(rect.x(), rect.y(), m_inlin
eFlowBox.width(), m_inlineFlowBox.height()))); |
112 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, rect, BackgroundBleedNone, &m_inlineFlowBox, re
ct.size(), op); | 113 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, rect, BackgroundBleedNone, &m_inlineFlowBox, re
ct.size(), op); |
113 } else { | 114 } else { |
114 // We have a fill image that spans multiple lines. | 115 // We have a fill image that spans multiple lines. |
115 // FIXME: frameSize ought to be the same as rect.size(). | 116 // FIXME: frameSize ought to be the same as rect.size(). |
116 LayoutSize frameSize(m_inlineFlowBox.width(), m_inlineFlowBox.height()); | 117 LayoutSize frameSize(m_inlineFlowBox.width(), m_inlineFlowBox.height()); |
117 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.layoutObject().style()->direction()); | 118 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.layoutObject().style()->direction()); |
118 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 119 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
119 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); | 120 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); |
120 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, imageStripPaintRect, BackgroundBleedNone, &m_in
lineFlowBox, rect.size(), op); | 121 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.deprecatedBoxModelOb
ject(), paintInfo, c, fillLayer, imageStripPaintRect, BackgroundBleedNone, &m_in
lineFlowBox, rect.size(), op); |
121 } | 122 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 break; | 263 break; |
263 case PaintBordersWithoutClip: | 264 case PaintBordersWithoutClip: |
264 BoxPainter::paintBorder(*m_inlineFlowBox.deprecatedBoxModelObject(), pai
ntInfo, adjustedFrameRect, m_inlineFlowBox.layoutObject().styleRef(m_inlineFlowB
ox.isFirstLineStyle()), | 265 BoxPainter::paintBorder(*m_inlineFlowBox.deprecatedBoxModelObject(), pai
ntInfo, adjustedFrameRect, m_inlineFlowBox.layoutObject().styleRef(m_inlineFlowB
ox.isFirstLineStyle()), |
265 BackgroundBleedNone, m_inlineFlowBox.includeLogicalLeftEdge(), m_inl
ineFlowBox.includeLogicalRightEdge()); | 266 BackgroundBleedNone, m_inlineFlowBox.includeLogicalLeftEdge(), m_inl
ineFlowBox.includeLogicalRightEdge()); |
266 break; | 267 break; |
267 case PaintBordersWithClip: | 268 case PaintBordersWithClip: |
268 // FIXME: What the heck do we do with RTL here? The math we're using is
obviously not right, | 269 // FIXME: What the heck do we do with RTL here? The math we're using is
obviously not right, |
269 // but it isn't even clear how this should work at all. | 270 // but it isn't even clear how this should work at all. |
270 LayoutRect imageStripPaintRect = paintRectForImageStrip(adjustedPaintOff
set, frameRect.size(), LTR); | 271 LayoutRect imageStripPaintRect = paintRectForImageStrip(adjustedPaintOff
set, frameRect.size(), LTR); |
271 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 272 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
272 paintInfo.context->clip(adjustedClipRect); | 273 // TODO(chrishtr): this should be pixel-snapped. |
| 274 paintInfo.context->clip(FloatRect(adjustedClipRect)); |
273 BoxPainter::paintBorder(*m_inlineFlowBox.deprecatedBoxModelObject(), pai
ntInfo, imageStripPaintRect, m_inlineFlowBox.layoutObject().styleRef(m_inlineFlo
wBox.isFirstLineStyle())); | 275 BoxPainter::paintBorder(*m_inlineFlowBox.deprecatedBoxModelObject(), pai
ntInfo, imageStripPaintRect, m_inlineFlowBox.layoutObject().styleRef(m_inlineFlo
wBox.isFirstLineStyle())); |
274 break; | 276 break; |
275 } | 277 } |
276 } | 278 } |
277 | 279 |
278 void InlineFlowBoxPainter::paintMask(const PaintInfo& paintInfo, const LayoutPoi
nt& paintOffset) | 280 void InlineFlowBoxPainter::paintMask(const PaintInfo& paintInfo, const LayoutPoi
nt& paintOffset) |
279 { | 281 { |
280 if (!paintInfo.shouldPaintWithinRoot(&m_inlineFlowBox.layoutObject()) || m_i
nlineFlowBox.layoutObject().style()->visibility() != VISIBLE || paintInfo.phase
!= PaintPhaseMask) | 282 if (!paintInfo.shouldPaintWithinRoot(&m_inlineFlowBox.layoutObject()) || m_i
nlineFlowBox.layoutObject().style()->visibility() != VISIBLE || paintInfo.phase
!= PaintPhaseMask) |
281 return; | 283 return; |
282 | 284 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 | 323 |
322 // The simple case is where we are the only box for this object. In those | 324 // The simple case is where we are the only box for this object. In those |
323 // cases only a single call to draw is required. | 325 // cases only a single call to draw is required. |
324 if (!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) { | 326 if (!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) { |
325 BoxPainter::paintNinePieceImage(*m_inlineFlowBox.deprecatedBoxModelObjec
t(), paintInfo.context, paintRect, m_inlineFlowBox.layoutObject().styleRef(), ma
skNinePieceImage, compositeOp); | 327 BoxPainter::paintNinePieceImage(*m_inlineFlowBox.deprecatedBoxModelObjec
t(), paintInfo.context, paintRect, m_inlineFlowBox.layoutObject().styleRef(), ma
skNinePieceImage, compositeOp); |
326 } else { | 328 } else { |
327 // We have a mask image that spans multiple lines. | 329 // We have a mask image that spans multiple lines. |
328 // FIXME: What the heck do we do with RTL here? The math we're using is
obviously not right, | 330 // FIXME: What the heck do we do with RTL here? The math we're using is
obviously not right, |
329 // but it isn't even clear how this should work at all. | 331 // but it isn't even clear how this should work at all. |
330 LayoutRect imageStripPaintRect = paintRectForImageStrip(adjustedPaintOff
set, frameRect.size(), LTR); | 332 LayoutRect imageStripPaintRect = paintRectForImageStrip(adjustedPaintOff
set, frameRect.size(), LTR); |
331 LayoutRect clipRect = clipRectForNinePieceImageStrip(&m_inlineFlowBox, m
askNinePieceImage, paintRect); | 333 FloatRect clipRect(clipRectForNinePieceImageStrip(&m_inlineFlowBox, mask
NinePieceImage, paintRect)); |
332 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 334 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
| 335 // TODO(chrishtr): this should be pixel-snapped. |
333 paintInfo.context->clip(clipRect); | 336 paintInfo.context->clip(clipRect); |
334 BoxPainter::paintNinePieceImage(*m_inlineFlowBox.deprecatedBoxModelObjec
t(), paintInfo.context, imageStripPaintRect, m_inlineFlowBox.layoutObject().styl
eRef(), maskNinePieceImage, compositeOp); | 337 BoxPainter::paintNinePieceImage(*m_inlineFlowBox.deprecatedBoxModelObjec
t(), paintInfo.context, imageStripPaintRect, m_inlineFlowBox.layoutObject().styl
eRef(), maskNinePieceImage, compositeOp); |
335 } | 338 } |
336 | 339 |
337 if (pushTransparencyLayer) | 340 if (pushTransparencyLayer) |
338 paintInfo.context->endLayer(); | 341 paintInfo.context->endLayer(); |
339 } | 342 } |
340 | 343 |
341 LayoutRect InlineFlowBoxPainter::roundedFrameRectClampedToLineTopAndBottomIfNeed
ed() const | 344 LayoutRect InlineFlowBoxPainter::roundedFrameRectClampedToLineTopAndBottomIfNeed
ed() const |
342 { | 345 { |
(...skipping 13 matching lines...) Expand all Loading... |
356 rect.setHeight(logicalHeight); | 359 rect.setHeight(logicalHeight); |
357 } else { | 360 } else { |
358 rect.setX(logicalTop); | 361 rect.setX(logicalTop); |
359 rect.setWidth(logicalHeight); | 362 rect.setWidth(logicalHeight); |
360 } | 363 } |
361 } | 364 } |
362 return rect; | 365 return rect; |
363 } | 366 } |
364 | 367 |
365 } // namespace blink | 368 } // namespace blink |
OLD | NEW |