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

Side by Side Diff: third_party/WebKit/Source/core/paint/BlockPainter.cpp

Issue 2392443009: reflow comments in core/paint (Closed)
Patch Set: Created 4 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
OLDNEW
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 "core/paint/BlockPainter.h" 5 #include "core/paint/BlockPainter.h"
6 6
7 #include "core/editing/DragCaretController.h" 7 #include "core/editing/DragCaretController.h"
8 #include "core/editing/FrameSelection.h" 8 #include "core/editing/FrameSelection.h"
9 #include "core/layout/LayoutFlexibleBox.h" 9 #include "core/layout/LayoutFlexibleBox.h"
10 #include "core/layout/LayoutInline.h" 10 #include "core/layout/LayoutInline.h"
(...skipping 18 matching lines...) Expand all
29 29
30 void BlockPainter::paint(const PaintInfo& paintInfo, 30 void BlockPainter::paint(const PaintInfo& paintInfo,
31 const LayoutPoint& paintOffset) { 31 const LayoutPoint& paintOffset) {
32 LayoutPoint adjustedPaintOffset = paintOffset + m_layoutBlock.location(); 32 LayoutPoint adjustedPaintOffset = paintOffset + m_layoutBlock.location();
33 if (!intersectsPaintRect(paintInfo, adjustedPaintOffset)) 33 if (!intersectsPaintRect(paintInfo, adjustedPaintOffset))
34 return; 34 return;
35 35
36 PaintInfo localPaintInfo(paintInfo); 36 PaintInfo localPaintInfo(paintInfo);
37 PaintPhase originalPhase = localPaintInfo.phase; 37 PaintPhase originalPhase = localPaintInfo.phase;
38 38
39 // There are some cases where not all clipped visual overflow is accounted for . 39 // There are some cases where not all clipped visual overflow is accounted
40 // for.
40 // FIXME: reduce the number of such cases. 41 // FIXME: reduce the number of such cases.
41 ContentsClipBehavior contentsClipBehavior = ForceContentsClip; 42 ContentsClipBehavior contentsClipBehavior = ForceContentsClip;
42 if (m_layoutBlock.hasOverflowClip() && !m_layoutBlock.hasControlClip() && 43 if (m_layoutBlock.hasOverflowClip() && !m_layoutBlock.hasControlClip() &&
43 !m_layoutBlock.hasCaret()) 44 !m_layoutBlock.hasCaret())
44 contentsClipBehavior = SkipContentsClipIfPossible; 45 contentsClipBehavior = SkipContentsClipIfPossible;
45 46
46 if (originalPhase == PaintPhaseOutline) { 47 if (originalPhase == PaintPhaseOutline) {
47 localPaintInfo.phase = PaintPhaseDescendantOutlinesOnly; 48 localPaintInfo.phase = PaintPhaseDescendantOutlinesOnly;
48 } else if (shouldPaintSelfBlockBackground(originalPhase)) { 49 } else if (shouldPaintSelfBlockBackground(originalPhase)) {
49 localPaintInfo.phase = PaintPhaseSelfBlockBackgroundOnly; 50 localPaintInfo.phase = PaintPhaseSelfBlockBackgroundOnly;
50 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset); 51 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset);
51 if (shouldPaintDescendantBlockBackgrounds(originalPhase)) 52 if (shouldPaintDescendantBlockBackgrounds(originalPhase))
52 localPaintInfo.phase = PaintPhaseDescendantBlockBackgroundsOnly; 53 localPaintInfo.phase = PaintPhaseDescendantBlockBackgroundsOnly;
53 } 54 }
54 55
55 if (originalPhase != PaintPhaseSelfBlockBackgroundOnly && 56 if (originalPhase != PaintPhaseSelfBlockBackgroundOnly &&
56 originalPhase != PaintPhaseSelfOutlineOnly) { 57 originalPhase != PaintPhaseSelfOutlineOnly) {
57 BoxClipper boxClipper(m_layoutBlock, localPaintInfo, adjustedPaintOffset, 58 BoxClipper boxClipper(m_layoutBlock, localPaintInfo, adjustedPaintOffset,
58 contentsClipBehavior); 59 contentsClipBehavior);
59 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset); 60 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset);
60 } 61 }
61 62
62 if (shouldPaintSelfOutline(originalPhase)) { 63 if (shouldPaintSelfOutline(originalPhase)) {
63 localPaintInfo.phase = PaintPhaseSelfOutlineOnly; 64 localPaintInfo.phase = PaintPhaseSelfOutlineOnly;
64 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset); 65 m_layoutBlock.paintObject(localPaintInfo, adjustedPaintOffset);
65 } 66 }
66 67
67 // Our scrollbar widgets paint exactly when we tell them to, so that they work properly with 68 // Our scrollbar widgets paint exactly when we tell them to, so that they work
68 // z-index. We paint after we painted the background/border, so that the scrol lbars will 69 // properly with z-index. We paint after we painted the background/border, so
69 // sit above the background/border. 70 // that the scrollbars will sit above the background/border.
70 localPaintInfo.phase = originalPhase; 71 localPaintInfo.phase = originalPhase;
71 paintOverflowControlsIfNeeded(localPaintInfo, adjustedPaintOffset); 72 paintOverflowControlsIfNeeded(localPaintInfo, adjustedPaintOffset);
72 } 73 }
73 74
74 void BlockPainter::paintOverflowControlsIfNeeded( 75 void BlockPainter::paintOverflowControlsIfNeeded(
75 const PaintInfo& paintInfo, 76 const PaintInfo& paintInfo,
76 const LayoutPoint& paintOffset) { 77 const LayoutPoint& paintOffset) {
77 if (m_layoutBlock.hasOverflowClip() && 78 if (m_layoutBlock.hasOverflowClip() &&
78 m_layoutBlock.style()->visibility() == EVisibility::Visible && 79 m_layoutBlock.style()->visibility() == EVisibility::Visible &&
79 shouldPaintSelfBlockBackground(paintInfo.phase) && 80 shouldPaintSelfBlockBackground(paintInfo.phase) &&
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 ObjectPainter(child).paintAllPhasesAtomically(paintInfo, childPoint); 131 ObjectPainter(child).paintAllPhasesAtomically(paintInfo, childPoint);
131 } 132 }
132 133
133 void BlockPainter::paintInlineBox(const InlineBox& inlineBox, 134 void BlockPainter::paintInlineBox(const InlineBox& inlineBox,
134 const PaintInfo& paintInfo, 135 const PaintInfo& paintInfo,
135 const LayoutPoint& paintOffset) { 136 const LayoutPoint& paintOffset) {
136 if (paintInfo.phase != PaintPhaseForeground && 137 if (paintInfo.phase != PaintPhaseForeground &&
137 paintInfo.phase != PaintPhaseSelection) 138 paintInfo.phase != PaintPhaseSelection)
138 return; 139 return;
139 140
140 // Text clips are painted only for the direct inline children of the object th at has a text clip style on it, not block children. 141 // Text clips are painted only for the direct inline children of the object
142 // that has a text clip style on it, not block children.
141 ASSERT(paintInfo.phase != PaintPhaseTextClip); 143 ASSERT(paintInfo.phase != PaintPhaseTextClip);
142 144
143 LayoutPoint childPoint = paintOffset; 145 LayoutPoint childPoint = paintOffset;
144 if (inlineBox.parent() 146 if (inlineBox.parent()
145 ->getLineLayoutItem() 147 ->getLineLayoutItem()
146 .style() 148 .style()
147 ->isFlippedBlocksWritingMode()) // Faster than calling containingBloc k(). 149 ->isFlippedBlocksWritingMode()) {
150 // Faster than calling containingBlock().
148 childPoint = 151 childPoint =
149 LineLayoutAPIShim::layoutObjectFrom(inlineBox.getLineLayoutItem()) 152 LineLayoutAPIShim::layoutObjectFrom(inlineBox.getLineLayoutItem())
150 ->containingBlock() 153 ->containingBlock()
151 ->flipForWritingModeForChild( 154 ->flipForWritingModeForChild(
152 toLayoutBox(LineLayoutAPIShim::layoutObjectFrom( 155 toLayoutBox(LineLayoutAPIShim::layoutObjectFrom(
153 inlineBox.getLineLayoutItem())), 156 inlineBox.getLineLayoutItem())),
154 childPoint); 157 childPoint);
158 }
155 159
156 ObjectPainter( 160 ObjectPainter(
157 *LineLayoutAPIShim::constLayoutObjectFrom(inlineBox.getLineLayoutItem())) 161 *LineLayoutAPIShim::constLayoutObjectFrom(inlineBox.getLineLayoutItem()))
158 .paintAllPhasesAtomically(paintInfo, childPoint); 162 .paintAllPhasesAtomically(paintInfo, childPoint);
159 } 163 }
160 164
161 void BlockPainter::paintObject(const PaintInfo& paintInfo, 165 void BlockPainter::paintObject(const PaintInfo& paintInfo,
162 const LayoutPoint& paintOffset) { 166 const LayoutPoint& paintOffset) {
163 const PaintPhase paintPhase = paintInfo.phase; 167 const PaintPhase paintPhase = paintInfo.phase;
164 168
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 paintPhase == PaintPhaseTextClip) 236 paintPhase == PaintPhaseTextClip)
233 blockFlowPainter.paintFloats(contentsPaintInfo, paintOffset); 237 blockFlowPainter.paintFloats(contentsPaintInfo, paintOffset);
234 } else { 238 } else {
235 paintContents(contentsPaintInfo, paintOffset); 239 paintContents(contentsPaintInfo, paintOffset);
236 } 240 }
237 } 241 }
238 242
239 if (shouldPaintSelfOutline(paintPhase)) 243 if (shouldPaintSelfOutline(paintPhase))
240 ObjectPainter(m_layoutBlock).paintOutline(paintInfo, paintOffset); 244 ObjectPainter(m_layoutBlock).paintOutline(paintInfo, paintOffset);
241 245
242 // If the caret's node's layout object's containing block is this block, and t he paint action is PaintPhaseForeground, 246 // If the caret's node's layout object's containing block is this block, and
243 // then paint the caret. 247 // the paint action is PaintPhaseForeground, then paint the caret.
244 if (paintPhase == PaintPhaseForeground && m_layoutBlock.hasCaret()) 248 if (paintPhase == PaintPhaseForeground && m_layoutBlock.hasCaret())
245 paintCarets(paintInfo, paintOffset); 249 paintCarets(paintInfo, paintOffset);
246 } 250 }
247 251
248 void BlockPainter::paintCarets(const PaintInfo& paintInfo, 252 void BlockPainter::paintCarets(const PaintInfo& paintInfo,
249 const LayoutPoint& paintOffset) { 253 const LayoutPoint& paintOffset) {
250 LocalFrame* frame = m_layoutBlock.frame(); 254 LocalFrame* frame = m_layoutBlock.frame();
251 255
252 if (m_layoutBlock.hasCursorCaret()) 256 if (m_layoutBlock.hasCursorCaret())
253 frame->selection().paintCaret(paintInfo.context, paintOffset); 257 frame->selection().paintCaret(paintInfo.context, paintOffset);
254 258
255 if (m_layoutBlock.hasDragCaret()) 259 if (m_layoutBlock.hasDragCaret())
256 frame->page()->dragCaretController().paintDragCaret( 260 frame->page()->dragCaretController().paintDragCaret(
257 frame, paintInfo.context, paintOffset); 261 frame, paintInfo.context, paintOffset);
258 } 262 }
259 263
260 bool BlockPainter::intersectsPaintRect( 264 bool BlockPainter::intersectsPaintRect(
261 const PaintInfo& paintInfo, 265 const PaintInfo& paintInfo,
262 const LayoutPoint& adjustedPaintOffset) const { 266 const LayoutPoint& adjustedPaintOffset) const {
263 LayoutRect overflowRect; 267 LayoutRect overflowRect;
264 if (paintInfo.isPrinting() && m_layoutBlock.isAnonymousBlock() && 268 if (paintInfo.isPrinting() && m_layoutBlock.isAnonymousBlock() &&
265 m_layoutBlock.childrenInline()) { 269 m_layoutBlock.childrenInline()) {
266 // For case <a href="..."><div>...</div></a>, when m_layoutBlock is the anon ymous container 270 // For case <a href="..."><div>...</div></a>, when m_layoutBlock is the
267 // of <a>, the anonymous container's visual overflow is empty, but we need t o continue 271 // anonymous container of <a>, the anonymous container's visual overflow is
268 // painting to output <a>'s PDF URL rect which covers the continuations, as if we included 272 // empty, but we need to continue painting to output <a>'s PDF URL rect
269 // <a>'s PDF URL rect into m_layoutBlock's visual overflow. 273 // which covers the continuations, as if we included <a>'s PDF URL rect into
274 // m_layoutBlock's visual overflow.
270 Vector<LayoutRect> rects; 275 Vector<LayoutRect> rects;
271 m_layoutBlock.addElementVisualOverflowRects(rects, LayoutPoint()); 276 m_layoutBlock.addElementVisualOverflowRects(rects, LayoutPoint());
272 overflowRect = unionRect(rects); 277 overflowRect = unionRect(rects);
273 } 278 }
274 overflowRect.unite(m_layoutBlock.visualOverflowRect()); 279 overflowRect.unite(m_layoutBlock.visualOverflowRect());
275 280
276 bool usesCompositedScrolling = m_layoutBlock.hasOverflowModel() && 281 bool usesCompositedScrolling = m_layoutBlock.hasOverflowModel() &&
277 m_layoutBlock.usesCompositedScrolling(); 282 m_layoutBlock.usesCompositedScrolling();
278 283
279 if (usesCompositedScrolling) { 284 if (usesCompositedScrolling) {
280 LayoutRect layoutOverflowRect = m_layoutBlock.layoutOverflowRect(); 285 LayoutRect layoutOverflowRect = m_layoutBlock.layoutOverflowRect();
281 overflowRect.unite(layoutOverflowRect); 286 overflowRect.unite(layoutOverflowRect);
282 } 287 }
283 m_layoutBlock.flipForWritingMode(overflowRect); 288 m_layoutBlock.flipForWritingMode(overflowRect);
284 289
285 // Scrolling is applied in physical space, which is why it is after the flip a bove. 290 // Scrolling is applied in physical space, which is why it is after the flip
291 // above.
286 if (usesCompositedScrolling) { 292 if (usesCompositedScrolling) {
287 overflowRect.move(-m_layoutBlock.scrolledContentOffset()); 293 overflowRect.move(-m_layoutBlock.scrolledContentOffset());
288 } 294 }
289 295
290 overflowRect.moveBy(adjustedPaintOffset); 296 overflowRect.moveBy(adjustedPaintOffset);
291 return paintInfo.cullRect().intersectsCullRect(overflowRect); 297 return paintInfo.cullRect().intersectsCullRect(overflowRect);
292 } 298 }
293 299
294 void BlockPainter::paintContents(const PaintInfo& paintInfo, 300 void BlockPainter::paintContents(const PaintInfo& paintInfo,
295 const LayoutPoint& paintOffset) { 301 const LayoutPoint& paintOffset) {
296 DCHECK(!m_layoutBlock.childrenInline()); 302 DCHECK(!m_layoutBlock.childrenInline());
297 PaintInfo paintInfoForDescendants = paintInfo.forDescendants(); 303 PaintInfo paintInfoForDescendants = paintInfo.forDescendants();
298 m_layoutBlock.paintChildren(paintInfoForDescendants, paintOffset); 304 m_layoutBlock.paintChildren(paintInfoForDescendants, paintOffset);
299 } 305 }
300 306
301 } // namespace blink 307 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/BlockPainter.h ('k') | third_party/WebKit/Source/core/paint/BoxBorderPainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698