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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 if (containingBlockPaintsContinuationOutline) { | 55 if (containingBlockPaintsContinuationOutline) { |
56 // Add ourselves to the containing block of the entire continuat
ion so that it can | 56 // Add ourselves to the containing block of the entire continuat
ion so that it can |
57 // paint us atomically. | 57 // paint us atomically. |
58 cb->addContinuationWithOutline(toRenderInline(m_inlineFlowBox.re
nderer().node()->renderer())); | 58 cb->addContinuationWithOutline(toRenderInline(m_inlineFlowBox.re
nderer().node()->renderer())); |
59 } else if (!inlineFlow.isInlineElementContinuation()) { | 59 } else if (!inlineFlow.isInlineElementContinuation()) { |
60 paintInfo.outlineObjects()->add(&inlineFlow); | 60 paintInfo.outlineObjects()->add(&inlineFlow); |
61 } | 61 } |
62 } | 62 } |
63 } else if (paintInfo.phase == PaintPhaseMask) { | 63 } else if (paintInfo.phase == PaintPhaseMask) { |
64 RenderDrawingRecorder recorder(paintInfo.context, &m_inlineFlowBox.rende
rer(), paintInfo.phase, pixelSnappedIntRect(overflowRect)); | 64 RenderDrawingRecorder recorder(paintInfo.context, m_inlineFlowBox.render
er(), paintInfo.phase, pixelSnappedIntRect(overflowRect)); |
65 paintMask(paintInfo, paintOffset); | 65 if (!recorder.canUseCachedDrawing()) |
| 66 paintMask(paintInfo, paintOffset); |
66 return; | 67 return; |
67 } else if (paintInfo.phase == PaintPhaseForeground) { | 68 } else if (paintInfo.phase == PaintPhaseForeground) { |
68 // Paint our background, border and box-shadow. | 69 // Paint our background, border and box-shadow. |
69 paintBoxDecorationBackground(paintInfo, paintOffset); | 70 paintBoxDecorationBackground(paintInfo, paintOffset); |
70 } | 71 } |
71 | 72 |
72 // Paint our children. | 73 // Paint our children. |
73 if (paintInfo.phase != PaintPhaseSelfOutline) { | 74 if (paintInfo.phase != PaintPhaseSelfOutline) { |
74 PaintInfo childInfo(paintInfo); | 75 PaintInfo childInfo(paintInfo); |
75 childInfo.phase = paintInfo.phase == PaintPhaseChildOutlines ? PaintPhas
eOutline : paintInfo.phase; | 76 childInfo.phase = paintInfo.phase == PaintPhaseChildOutlines ? PaintPhas
eOutline : paintInfo.phase; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 206 |
206 LayoutRect frameRect = roundedFrameRectClampedToLineTopAndBottomIfNeeded(); | 207 LayoutRect frameRect = roundedFrameRectClampedToLineTopAndBottomIfNeeded(); |
207 | 208 |
208 // Move x/y to our coordinates. | 209 // Move x/y to our coordinates. |
209 LayoutRect localRect(frameRect); | 210 LayoutRect localRect(frameRect); |
210 m_inlineFlowBox.flipForWritingMode(localRect); | 211 m_inlineFlowBox.flipForWritingMode(localRect); |
211 LayoutPoint adjustedPaintOffset = paintOffset + localRect.location(); | 212 LayoutPoint adjustedPaintOffset = paintOffset + localRect.location(); |
212 | 213 |
213 LayoutRect paintRect = LayoutRect(adjustedPaintOffset, frameRect.size()); | 214 LayoutRect paintRect = LayoutRect(adjustedPaintOffset, frameRect.size()); |
214 | 215 |
215 RenderDrawingRecorder recorder(paintInfo.context, &m_inlineFlowBox.renderer(
), paintInfo.phase, pixelSnappedIntRect(paintRect)); | 216 RenderDrawingRecorder recorder(paintInfo.context, m_inlineFlowBox.renderer()
, paintInfo.phase, pixelSnappedIntRect(paintRect)); |
| 217 if (recorder.canUseCachedDrawing()) |
| 218 return; |
216 | 219 |
217 // Shadow comes first and is behind the background and border. | 220 // Shadow comes first and is behind the background and border. |
218 if (!m_inlineFlowBox.boxModelObject()->boxShadowShouldBeAppliedToBackground(
BackgroundBleedNone, &m_inlineFlowBox)) | 221 if (!m_inlineFlowBox.boxModelObject()->boxShadowShouldBeAppliedToBackground(
BackgroundBleedNone, &m_inlineFlowBox)) |
219 paintBoxShadow(paintInfo, styleToUse, Normal, paintRect); | 222 paintBoxShadow(paintInfo, styleToUse, Normal, paintRect); |
220 | 223 |
221 Color backgroundColor = m_inlineFlowBox.renderer().resolveColor(styleToUse,
CSSPropertyBackgroundColor); | 224 Color backgroundColor = m_inlineFlowBox.renderer().resolveColor(styleToUse,
CSSPropertyBackgroundColor); |
222 paintFillLayers(paintInfo, backgroundColor, styleToUse->backgroundLayers(),
paintRect); | 225 paintFillLayers(paintInfo, backgroundColor, styleToUse->backgroundLayers(),
paintRect); |
223 paintBoxShadow(paintInfo, styleToUse, Inset, paintRect); | 226 paintBoxShadow(paintInfo, styleToUse, Inset, paintRect); |
224 | 227 |
225 // :first-line cannot be used to put borders on a line. Always paint borders
with our | 228 // :first-line cannot be used to put borders on a line. Always paint borders
with our |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 rect.setHeight(logicalHeight); | 330 rect.setHeight(logicalHeight); |
328 } else { | 331 } else { |
329 rect.setX(logicalTop); | 332 rect.setX(logicalTop); |
330 rect.setWidth(logicalHeight); | 333 rect.setWidth(logicalHeight); |
331 } | 334 } |
332 } | 335 } |
333 return rect; | 336 return rect; |
334 } | 337 } |
335 | 338 |
336 } // namespace blink | 339 } // namespace blink |
OLD | NEW |