| 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/paint/BoxPainter.h" | 8 #include "core/paint/BoxPainter.h" |
| 9 #include "core/paint/RenderDrawingRecorder.h" | 9 #include "core/paint/RenderDrawingRecorder.h" |
| 10 #include "core/rendering/InlineFlowBox.h" | 10 #include "core/rendering/InlineFlowBox.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 // We have a fill image that spans multiple lines. | 110 // We have a fill image that spans multiple lines. |
| 111 // FIXME: frameSize ought to be the same as rect.size(). | 111 // FIXME: frameSize ought to be the same as rect.size(). |
| 112 LayoutSize frameSize(m_inlineFlowBox.width().toLayoutUnit(), m_inlineFlo
wBox.height().toLayoutUnit()); | 112 LayoutSize frameSize(m_inlineFlowBox.width().toLayoutUnit(), m_inlineFlo
wBox.height().toLayoutUnit()); |
| 113 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.renderer().style()->direction()); | 113 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.renderer().style()->direction()); |
| 114 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 114 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
| 115 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); | 115 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); |
| 116 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.boxModelObject(), pa
intInfo, c, fillLayer, imageStripPaintRect, BackgroundBleedNone, &m_inlineFlowBo
x, rect.size(), op); | 116 BoxPainter::paintFillLayerExtended(*m_inlineFlowBox.boxModelObject(), pa
intInfo, c, fillLayer, imageStripPaintRect, BackgroundBleedNone, &m_inlineFlowBo
x, rect.size(), op); |
| 117 } | 117 } |
| 118 } | 118 } |
| 119 | 119 |
| 120 void InlineFlowBoxPainter::paintBoxShadow(const PaintInfo& info, RenderStyle* s,
ShadowStyle shadowStyle, const LayoutRect& paintRect) | 120 void InlineFlowBoxPainter::paintBoxShadow(const PaintInfo& info, const RenderSty
le* s, ShadowStyle shadowStyle, const LayoutRect& paintRect) |
| 121 { | 121 { |
| 122 if ((!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !m
_inlineFlowBox.parent()) { | 122 if ((!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !m
_inlineFlowBox.parent()) { |
| 123 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle); | 123 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle); |
| 124 } else { | 124 } else { |
| 125 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't | 125 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't |
| 126 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines | 126 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines |
| 127 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle, m_inlineFlow
Box.includeLogicalLeftEdge(), m_inlineFlowBox.includeLogicalRightEdge()); | 127 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle, m_inlineFlow
Box.includeLogicalLeftEdge(), m_inlineFlowBox.includeLogicalRightEdge()); |
| 128 } | 128 } |
| 129 } | 129 } |
| 130 | 130 |
| 131 | 131 |
| 132 static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NineP
ieceImage& image, const LayoutRect& paintRect) | 132 static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NineP
ieceImage& image, const LayoutRect& paintRect) |
| 133 { | 133 { |
| 134 LayoutRect clipRect(paintRect); | 134 LayoutRect clipRect(paintRect); |
| 135 RenderStyle* style = box->renderer().style(); | 135 const RenderStyle* style = box->renderer().style(); |
| 136 LayoutRectOutsets outsets = style->imageOutsets(image); | 136 LayoutRectOutsets outsets = style->imageOutsets(image); |
| 137 if (box->isHorizontal()) { | 137 if (box->isHorizontal()) { |
| 138 clipRect.setY(paintRect.y() - outsets.top()); | 138 clipRect.setY(paintRect.y() - outsets.top()); |
| 139 clipRect.setHeight(paintRect.height() + outsets.top() + outsets.bottom()
); | 139 clipRect.setHeight(paintRect.height() + outsets.top() + outsets.bottom()
); |
| 140 if (box->includeLogicalLeftEdge()) { | 140 if (box->includeLogicalLeftEdge()) { |
| 141 clipRect.setX(paintRect.x() - outsets.left()); | 141 clipRect.setX(paintRect.x() - outsets.left()); |
| 142 clipRect.setWidth(paintRect.width() + outsets.left()); | 142 clipRect.setWidth(paintRect.width() + outsets.left()); |
| 143 } | 143 } |
| 144 if (box->includeLogicalRightEdge()) | 144 if (box->includeLogicalRightEdge()) |
| 145 clipRect.setWidth(clipRect.width() + outsets.right()); | 145 clipRect.setWidth(clipRect.width() + outsets.right()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 } | 187 } |
| 188 | 188 |
| 189 void InlineFlowBoxPainter::paintBoxDecorationBackground(const PaintInfo& paintIn
fo, const LayoutPoint& paintOffset) | 189 void InlineFlowBoxPainter::paintBoxDecorationBackground(const PaintInfo& paintIn
fo, const LayoutPoint& paintOffset) |
| 190 { | 190 { |
| 191 ASSERT(paintInfo.phase == PaintPhaseForeground); | 191 ASSERT(paintInfo.phase == PaintPhaseForeground); |
| 192 if (!paintInfo.shouldPaintWithinRoot(&m_inlineFlowBox.renderer()) || m_inlin
eFlowBox.renderer().style()->visibility() != VISIBLE) | 192 if (!paintInfo.shouldPaintWithinRoot(&m_inlineFlowBox.renderer()) || m_inlin
eFlowBox.renderer().style()->visibility() != VISIBLE) |
| 193 return; | 193 return; |
| 194 | 194 |
| 195 // You can use p::first-line to specify a background. If so, the root line b
oxes for | 195 // You can use p::first-line to specify a background. If so, the root line b
oxes for |
| 196 // a line may actually have to paint a background. | 196 // a line may actually have to paint a background. |
| 197 RenderStyle* styleToUse = m_inlineFlowBox.renderer().style(m_inlineFlowBox.i
sFirstLineStyle()); | 197 const RenderStyle* styleToUse = m_inlineFlowBox.renderer().style(m_inlineFlo
wBox.isFirstLineStyle()); |
| 198 bool shouldPaintBoxDecorationBackground; | 198 bool shouldPaintBoxDecorationBackground; |
| 199 if (m_inlineFlowBox.parent()) | 199 if (m_inlineFlowBox.parent()) |
| 200 shouldPaintBoxDecorationBackground = m_inlineFlowBox.renderer().hasBoxDe
corationBackground(); | 200 shouldPaintBoxDecorationBackground = m_inlineFlowBox.renderer().hasBoxDe
corationBackground(); |
| 201 else | 201 else |
| 202 shouldPaintBoxDecorationBackground = m_inlineFlowBox.isFirstLineStyle()
&& styleToUse != m_inlineFlowBox.renderer().style(); | 202 shouldPaintBoxDecorationBackground = m_inlineFlowBox.isFirstLineStyle()
&& styleToUse != m_inlineFlowBox.renderer().style(); |
| 203 | 203 |
| 204 if (!shouldPaintBoxDecorationBackground) | 204 if (!shouldPaintBoxDecorationBackground) |
| 205 return; | 205 return; |
| 206 | 206 |
| 207 LayoutRect frameRect = roundedFrameRectClampedToLineTopAndBottomIfNeeded(); | 207 LayoutRect frameRect = roundedFrameRectClampedToLineTopAndBottomIfNeeded(); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 rect.setHeight(logicalHeight); | 330 rect.setHeight(logicalHeight); |
| 331 } else { | 331 } else { |
| 332 rect.setX(logicalTop); | 332 rect.setX(logicalTop); |
| 333 rect.setWidth(logicalHeight); | 333 rect.setWidth(logicalHeight); |
| 334 } | 334 } |
| 335 } | 335 } |
| 336 return rect; | 336 return rect; |
| 337 } | 337 } |
| 338 | 338 |
| 339 } // namespace blink | 339 } // namespace blink |
| OLD | NEW |