Chromium Code Reviews| 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/BlockPainter.h" | 6 #include "core/paint/BlockPainter.h" |
| 7 | 7 |
| 8 #include "core/editing/DragCaretController.h" | 8 #include "core/editing/DragCaretController.h" |
| 9 #include "core/editing/FrameSelection.h" | 9 #include "core/editing/FrameSelection.h" |
| 10 #include "core/frame/Settings.h" | 10 #include "core/frame/Settings.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 layoutObject.paint(info, childPoint); | 155 layoutObject.paint(info, childPoint); |
| 156 info.phase = PaintPhaseFloat; | 156 info.phase = PaintPhaseFloat; |
| 157 layoutObject.paint(info, childPoint); | 157 layoutObject.paint(info, childPoint); |
| 158 info.phase = PaintPhaseForeground; | 158 info.phase = PaintPhaseForeground; |
| 159 layoutObject.paint(info, childPoint); | 159 layoutObject.paint(info, childPoint); |
| 160 info.phase = PaintPhaseOutline; | 160 info.phase = PaintPhaseOutline; |
| 161 layoutObject.paint(info, childPoint); | 161 layoutObject.paint(info, childPoint); |
| 162 } | 162 } |
| 163 } | 163 } |
| 164 | 164 |
| 165 static inline LayoutRect visualOverflowRectWithPaintOffset(const LayoutBlock& la youtBox, const LayoutPoint& paintOffset) | |
| 166 { | |
| 167 if (!RuntimeEnabledFeatures::slimmingPaintEnabled()) | |
|
chrishtr
2015/08/27 04:20:41
This flag conditional is not needed any more?
pdr.
2015/08/27 05:00:16
It was only present as a performance optimization
| |
| 168 return LayoutRect(); | |
| 169 LayoutRect bounds = layoutBox.visualOverflowRect(); | |
| 170 bounds.moveBy(paintOffset); | |
| 171 return bounds; | |
| 172 } | |
| 173 | |
| 174 void BlockPainter::paintObject(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) | 165 void BlockPainter::paintObject(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) |
| 175 { | 166 { |
| 176 const PaintPhase paintPhase = paintInfo.phase; | 167 const PaintPhase paintPhase = paintInfo.phase; |
| 177 | 168 |
| 178 if ((paintPhase == PaintPhaseBlockBackground || paintPhase == PaintPhaseChil dBlockBackground) | 169 if ((paintPhase == PaintPhaseBlockBackground || paintPhase == PaintPhaseChil dBlockBackground) |
| 179 && m_layoutBlock.style()->visibility() == VISIBLE | 170 && m_layoutBlock.style()->visibility() == VISIBLE |
| 180 && m_layoutBlock.hasBoxDecorationBackground()) | 171 && m_layoutBlock.hasBoxDecorationBackground()) |
| 181 m_layoutBlock.paintBoxDecorationBackground(paintInfo, paintOffset); | 172 m_layoutBlock.paintBoxDecorationBackground(paintInfo, paintOffset); |
| 182 | 173 |
| 183 if (paintPhase == PaintPhaseMask && m_layoutBlock.style()->visibility() == V ISIBLE) { | 174 if (paintPhase == PaintPhaseMask && m_layoutBlock.style()->visibility() == V ISIBLE) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 m_layoutBlock.paintSelection(contentsPaintInfo, paintOffset); // Fil l in gaps in selection on lines and between blocks. | 211 m_layoutBlock.paintSelection(contentsPaintInfo, paintOffset); // Fil l in gaps in selection on lines and between blocks. |
| 221 | 212 |
| 222 if (paintPhase == PaintPhaseFloat || paintPhase == PaintPhaseSelection | | paintPhase == PaintPhaseTextClip) | 213 if (paintPhase == PaintPhaseFloat || paintPhase == PaintPhaseSelection | | paintPhase == PaintPhaseTextClip) |
| 223 m_layoutBlock.paintFloats(contentsPaintInfo, paintOffset, paintPhase == PaintPhaseSelection || paintPhase == PaintPhaseTextClip); | 214 m_layoutBlock.paintFloats(contentsPaintInfo, paintOffset, paintPhase == PaintPhaseSelection || paintPhase == PaintPhaseTextClip); |
| 224 } | 215 } |
| 225 | 216 |
| 226 if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) && m_layoutBlock.style()->hasOutline() && m_layoutBlock.style()->visibility() = = VISIBLE) { | 217 if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) && m_layoutBlock.style()->hasOutline() && m_layoutBlock.style()->visibility() = = VISIBLE) { |
| 227 // Don't paint focus ring for anonymous block continuation because the | 218 // Don't paint focus ring for anonymous block continuation because the |
| 228 // inline element having outline-style:auto paints the whole focus ring. | 219 // inline element having outline-style:auto paints the whole focus ring. |
| 229 if (!m_layoutBlock.style()->outlineStyleIsAuto() || !m_layoutBlock.isAno nymousBlockContinuation()) | 220 if (!m_layoutBlock.style()->outlineStyleIsAuto() || !m_layoutBlock.isAno nymousBlockContinuation()) |
| 230 ObjectPainter(m_layoutBlock).paintOutline(paintInfo, LayoutRect(pain tOffset, m_layoutBlock.size()), visualOverflowRectWithPaintOffset(m_layoutBlock, paintOffset)); | 221 ObjectPainter(m_layoutBlock).paintOutline(paintInfo, m_layoutBlock.v isualOverflowRect(), m_layoutBlock.size(), paintOffset); |
| 231 } | 222 } |
| 232 | 223 |
| 233 if (paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseChildOutlines ) | 224 if (paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseChildOutlines ) |
| 234 paintContinuationOutlines(paintInfo, paintOffset); | 225 paintContinuationOutlines(paintInfo, paintOffset); |
| 235 | 226 |
| 236 // If the caret's node's layout object's containing block is this block, and the paint action is PaintPhaseForeground, | 227 // If the caret's node's layout object's containing block is this block, and the paint action is PaintPhaseForeground, |
| 237 // then paint the caret. | 228 // then paint the caret. |
| 238 if (paintPhase == PaintPhaseForeground && hasCaret() && !LayoutObjectDrawing Recorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutBlock, DisplayI tem::Caret)) { | 229 if (paintPhase == PaintPhaseForeground && hasCaret() && !LayoutObjectDrawing Recorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutBlock, DisplayI tem::Caret)) { |
| 239 LayoutObjectDrawingRecorder recorder(*paintInfo.context, m_layoutBlock, DisplayItem::Caret, visualOverflowRectWithPaintOffset(m_layoutBlock, paintOffset )); | 230 LayoutRect bounds = m_layoutBlock.visualOverflowRect(); |
| 231 bounds.moveBy(paintOffset); | |
| 232 LayoutObjectDrawingRecorder recorder(*paintInfo.context, m_layoutBlock, DisplayItem::Caret, bounds); | |
| 240 paintCarets(paintInfo, paintOffset); | 233 paintCarets(paintInfo, paintOffset); |
| 241 } | 234 } |
| 242 } | 235 } |
| 243 | 236 |
| 244 static inline bool caretBrowsingEnabled(const LocalFrame* frame) | 237 static inline bool caretBrowsingEnabled(const LocalFrame* frame) |
| 245 { | 238 { |
| 246 Settings* settings = frame->settings(); | 239 Settings* settings = frame->settings(); |
| 247 return settings && settings->caretBrowsingEnabled(); | 240 return settings && settings->caretBrowsingEnabled(); |
| 248 } | 241 } |
| 249 | 242 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 LayoutBlock* block = flow->containingBlock(); | 347 LayoutBlock* block = flow->containingBlock(); |
| 355 for ( ; block && block != &m_layoutBlock; block = block->containingBlock ()) | 348 for ( ; block && block != &m_layoutBlock; block = block->containingBlock ()) |
| 356 accumulatedPaintOffset.moveBy(block->location()); | 349 accumulatedPaintOffset.moveBy(block->location()); |
| 357 ASSERT(block); | 350 ASSERT(block); |
| 358 InlinePainter(*flow).paintOutline(info, accumulatedPaintOffset); | 351 InlinePainter(*flow).paintOutline(info, accumulatedPaintOffset); |
| 359 } | 352 } |
| 360 } | 353 } |
| 361 | 354 |
| 362 | 355 |
| 363 } // namespace blink | 356 } // namespace blink |
| OLD | NEW |