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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 112 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
113 // TODO(chrishtr): this should be pixel-snapped. | 113 // TODO(chrishtr): this should be pixel-snapped. |
114 paintInfo.context->clip(FloatRect(LayoutRect(rect.x(), rect.y(), m_inlin
eFlowBox.width(), m_inlineFlowBox.height()))); | 114 paintInfo.context->clip(FloatRect(LayoutRect(rect.x(), rect.y(), m_inlin
eFlowBox.width(), m_inlineFlowBox.height()))); |
115 BoxPainter::paintFillLayerExtended(*boxModel, paintInfo, c, fillLayer, r
ect, BackgroundBleedNone, &m_inlineFlowBox, rect.size(), op); | 115 BoxPainter::paintFillLayerExtended(*boxModel, paintInfo, c, fillLayer, r
ect, BackgroundBleedNone, &m_inlineFlowBox, rect.size(), op); |
116 } else { | 116 } else { |
117 // We have a fill image that spans multiple lines. | 117 // We have a fill image that spans multiple lines. |
118 // FIXME: frameSize ought to be the same as rect.size(). | 118 // FIXME: frameSize ought to be the same as rect.size(). |
119 LayoutSize frameSize(m_inlineFlowBox.width(), m_inlineFlowBox.height()); | 119 LayoutSize frameSize(m_inlineFlowBox.width(), m_inlineFlowBox.height()); |
120 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.layoutObject().style()->direction()); | 120 LayoutRect imageStripPaintRect = paintRectForImageStrip(rect.location(),
frameSize, m_inlineFlowBox.layoutObject().style()->direction()); |
121 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 121 GraphicsContextStateSaver stateSaver(*paintInfo.context); |
122 paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), m_inlineFlowBox.w
idth(), m_inlineFlowBox.height())); | 122 // TODO(chrishtr): this should likely be pixel-snapped. |
| 123 paintInfo.context->clip(FloatRect(LayoutRect(rect.x(), rect.y(), m_inlin
eFlowBox.width(), m_inlineFlowBox.height()))); |
123 BoxPainter::paintFillLayerExtended(*boxModel, paintInfo, c, fillLayer, i
mageStripPaintRect, BackgroundBleedNone, &m_inlineFlowBox, rect.size(), op); | 124 BoxPainter::paintFillLayerExtended(*boxModel, paintInfo, c, fillLayer, i
mageStripPaintRect, BackgroundBleedNone, &m_inlineFlowBox, rect.size(), op); |
124 } | 125 } |
125 } | 126 } |
126 | 127 |
127 void InlineFlowBoxPainter::paintBoxShadow(const PaintInfo& info, const ComputedS
tyle& s, ShadowStyle shadowStyle, const LayoutRect& paintRect) | 128 void InlineFlowBoxPainter::paintBoxShadow(const PaintInfo& info, const ComputedS
tyle& s, ShadowStyle shadowStyle, const LayoutRect& paintRect) |
128 { | 129 { |
129 if ((!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !m
_inlineFlowBox.parent()) { | 130 if ((!m_inlineFlowBox.prevLineBox() && !m_inlineFlowBox.nextLineBox()) || !m
_inlineFlowBox.parent()) { |
130 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle); | 131 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle); |
131 } else { | 132 } else { |
132 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't | 133 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't |
133 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines | 134 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines |
134 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle, m_inlineFlow
Box.includeLogicalLeftEdge(), m_inlineFlowBox.includeLogicalRightEdge()); | 135 BoxPainter::paintBoxShadow(info, paintRect, s, shadowStyle, m_inlineFlow
Box.includeLogicalLeftEdge(), m_inlineFlowBox.includeLogicalRightEdge()); |
135 } | 136 } |
136 } | 137 } |
137 | 138 |
138 | |
139 static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NineP
ieceImage& image, const LayoutRect& paintRect) | 139 static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NineP
ieceImage& image, const LayoutRect& paintRect) |
140 { | 140 { |
141 LayoutRect clipRect(paintRect); | 141 LayoutRect clipRect(paintRect); |
142 const ComputedStyle& style = box->layoutObject().styleRef(); | 142 const ComputedStyle& style = box->layoutObject().styleRef(); |
143 LayoutRectOutsets outsets = style.imageOutsets(image); | 143 LayoutRectOutsets outsets = style.imageOutsets(image); |
144 if (box->isHorizontal()) { | 144 if (box->isHorizontal()) { |
145 clipRect.setY(paintRect.y() - outsets.top()); | 145 clipRect.setY(paintRect.y() - outsets.top()); |
146 clipRect.setHeight(paintRect.height() + outsets.top() + outsets.bottom()
); | 146 clipRect.setHeight(paintRect.height() + outsets.top() + outsets.bottom()
); |
147 if (box->includeLogicalLeftEdge()) { | 147 if (box->includeLogicalLeftEdge()) { |
148 clipRect.setX(paintRect.x() - outsets.left()); | 148 clipRect.setX(paintRect.x() - outsets.left()); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 rect.setHeight(logicalHeight); | 361 rect.setHeight(logicalHeight); |
362 } else { | 362 } else { |
363 rect.setX(logicalTop); | 363 rect.setX(logicalTop); |
364 rect.setWidth(logicalHeight); | 364 rect.setWidth(logicalHeight); |
365 } | 365 } |
366 } | 366 } |
367 return rect; | 367 return rect; |
368 } | 368 } |
369 | 369 |
370 } // namespace blink | 370 } // namespace blink |
OLD | NEW |