Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: Source/core/rendering/RenderReplaced.cpp

Issue 596313004: Move painting code from RenderReplaced to ReplacedPainter. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Merged Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderReplaced.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2000 Dirk Mueller (mueller@kde.org) 3 * Copyright (C) 2000 Dirk Mueller (mueller@kde.org)
4 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
5 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved. 5 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details. 15 * Library General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Library General Public License 17 * You should have received a copy of the GNU Library General Public License
18 * along with this library; see the file COPYING.LIB. If not, write to 18 * along with this library; see the file COPYING.LIB. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA. 20 * Boston, MA 02110-1301, USA.
21 * 21 *
22 */ 22 */
23 23
24 #include "config.h" 24 #include "config.h"
25 #include "core/rendering/RenderReplaced.h" 25 #include "core/rendering/RenderReplaced.h"
26 26
27 #include "core/editing/PositionWithAffinity.h" 27 #include "core/editing/PositionWithAffinity.h"
28 #include "core/paint/BoxPainter.h" 28 #include "core/paint/ReplacedPainter.h"
29 #include "core/rendering/GraphicsContextAnnotator.h" 29 #include "core/rendering/GraphicsContextAnnotator.h"
30 #include "core/rendering/RenderBlock.h" 30 #include "core/rendering/RenderBlock.h"
31 #include "core/rendering/RenderImage.h" 31 #include "core/rendering/RenderImage.h"
32 #include "core/rendering/RenderLayer.h" 32 #include "core/rendering/RenderLayer.h"
33 #include "core/rendering/RenderView.h" 33 #include "core/rendering/RenderView.h"
34 #include "platform/LengthFunctions.h" 34 #include "platform/LengthFunctions.h"
35 #include "platform/graphics/GraphicsContext.h" 35 #include "platform/graphics/GraphicsContext.h"
36 36
37 namespace blink { 37 namespace blink {
38 38
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 void RenderReplaced::intrinsicSizeChanged() 95 void RenderReplaced::intrinsicSizeChanged()
96 { 96 {
97 int scaledWidth = static_cast<int>(defaultWidth * style()->effectiveZoom()); 97 int scaledWidth = static_cast<int>(defaultWidth * style()->effectiveZoom());
98 int scaledHeight = static_cast<int>(defaultHeight * style()->effectiveZoom() ); 98 int scaledHeight = static_cast<int>(defaultHeight * style()->effectiveZoom() );
99 m_intrinsicSize = IntSize(scaledWidth, scaledHeight); 99 m_intrinsicSize = IntSize(scaledWidth, scaledHeight);
100 setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); 100 setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation();
101 } 101 }
102 102
103 void RenderReplaced::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 103 void RenderReplaced::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
104 { 104 {
105 ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this); 105 ReplacedPainter(*this).paint(paintInfo, paintOffset);
106
107 if (!shouldPaint(paintInfo, paintOffset))
108 return;
109
110 LayoutPoint adjustedPaintOffset = paintOffset + location();
111
112 if (hasBoxDecorationBackground() && (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection))
113 paintBoxDecorationBackground(paintInfo, adjustedPaintOffset);
114
115 if (paintInfo.phase == PaintPhaseMask) {
116 paintMask(paintInfo, adjustedPaintOffset);
117 return;
118 }
119
120 if (paintInfo.phase == PaintPhaseClippingMask && (!hasLayer() || !layer()->h asCompositedClippingMask()))
121 return;
122
123 LayoutRect paintRect = LayoutRect(adjustedPaintOffset, size());
124 if ((paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSe lfOutline) && style()->outlineWidth())
125 paintOutline(paintInfo, paintRect);
126
127 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhase Selection && !canHaveChildren() && paintInfo.phase != PaintPhaseClippingMask)
128 return;
129
130 if (!paintInfo.shouldPaintWithinRoot(this))
131 return;
132
133 bool drawSelectionTint = selectionState() != SelectionNone && !document().pr inting();
134 if (paintInfo.phase == PaintPhaseSelection) {
135 if (selectionState() == SelectionNone)
136 return;
137 drawSelectionTint = false;
138 }
139
140 bool completelyClippedOut = false;
141 if (style()->hasBorderRadius()) {
142 LayoutRect borderRect = LayoutRect(adjustedPaintOffset, size());
143
144 if (borderRect.isEmpty())
145 completelyClippedOut = true;
146 else {
147 // Push a clip if we have a border radius, since we want to round th e foreground content that gets painted.
148 paintInfo.context->save();
149 RoundedRect roundedInnerRect = style()->getRoundedInnerBorderFor(pai ntRect,
150 paddingTop() + borderTop(), paddingBottom() + borderBottom(), pa ddingLeft() + borderLeft(), paddingRight() + borderRight(), true, true);
151 BoxPainter::clipRoundedInnerRect(paintInfo.context, paintRect, round edInnerRect);
152 }
153 }
154
155 if (!completelyClippedOut) {
156 if (paintInfo.phase == PaintPhaseClippingMask) {
157 paintClippingMask(paintInfo, adjustedPaintOffset);
158 } else {
159 paintReplaced(paintInfo, adjustedPaintOffset);
160 }
161
162 if (style()->hasBorderRadius())
163 paintInfo.context->restore();
164 }
165
166 // The selection tint never gets clipped by border-radius rounding, since we want it to run right up to the edges of
167 // surrounding content.
168 if (drawSelectionTint) {
169 LayoutRect selectionPaintingRect = localSelectionRect();
170 selectionPaintingRect.moveBy(adjustedPaintOffset);
171 paintInfo.context->fillRect(pixelSnappedIntRect(selectionPaintingRect), selectionBackgroundColor());
172 }
173 } 106 }
174 107
175 bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, const LayoutPoint& paintO ffset) 108 bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, const LayoutPoint& paintO ffset)
176 { 109 {
177 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhase Outline && paintInfo.phase != PaintPhaseSelfOutline 110 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhase Outline && paintInfo.phase != PaintPhaseSelfOutline
178 && paintInfo.phase != PaintPhaseSelection && paintInfo.phase != PaintPha seMask && paintInfo.phase != PaintPhaseClippingMask) 111 && paintInfo.phase != PaintPhaseSelection && paintInfo.phase != PaintPha seMask && paintInfo.phase != PaintPhaseClippingMask)
179 return false; 112 return false;
180 113
181 if (!paintInfo.shouldPaintWithinRoot(this)) 114 if (!paintInfo.shouldPaintWithinRoot(this))
182 return false; 115 return false;
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 return LayoutRect(); 496 return LayoutRect();
564 497
565 // The selectionRect can project outside of the overflowRect, so take their union 498 // The selectionRect can project outside of the overflowRect, so take their union
566 // for paint invalidation to avoid selection painting glitches. 499 // for paint invalidation to avoid selection painting glitches.
567 LayoutRect r = isSelected() ? localSelectionRect() : visualOverflowRect(); 500 LayoutRect r = isSelected() ? localSelectionRect() : visualOverflowRect();
568 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r, paintInvali dationState); 501 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r, paintInvali dationState);
569 return r; 502 return r;
570 } 503 }
571 504
572 } 505 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderReplaced.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698