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/Caret.h" | 8 #include "core/editing/Caret.h" |
9 #include "core/editing/FrameSelection.h" | 9 #include "core/editing/FrameSelection.h" |
10 #include "core/frame/LocalFrame.h" | 10 #include "core/frame/LocalFrame.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
102 if (!child->hasSelfPaintingLayer() && !child->isFloating()) | 102 if (!child->hasSelfPaintingLayer() && !child->isFloating()) |
103 paintAsInlineBlock(child, paintInfo, childPoint); | 103 paintAsInlineBlock(child, paintInfo, childPoint); |
104 } | 104 } |
105 | 105 |
106 void BlockPainter::paintInlineBox(InlineBox& inlineBox, PaintInfo& paintInfo, co nst LayoutPoint& paintOffset) | 106 void BlockPainter::paintInlineBox(InlineBox& inlineBox, PaintInfo& paintInfo, co nst LayoutPoint& paintOffset) |
107 { | 107 { |
108 if (!paintInfo.shouldPaintWithinRoot(&inlineBox.renderer()) || (paintInfo.ph ase != PaintPhaseForeground && paintInfo.phase != PaintPhaseSelection)) | 108 if (!paintInfo.shouldPaintWithinRoot(&inlineBox.renderer()) || (paintInfo.ph ase != PaintPhaseForeground && paintInfo.phase != PaintPhaseSelection)) |
109 return; | 109 return; |
110 | 110 |
111 LayoutPoint childPoint = paintOffset; | 111 LayoutPoint childPoint = paintOffset; |
112 if (inlineBox.parent()->renderer().style()->isFlippedBlocksWritingMode()) // Faster than calling containingBlock(). | 112 const RenderObject& renderer = inlineBox.parent()->renderer(); |
113 if (!UNLIKELY(renderer.document().containsAnyVerticalWritingModes()) | |
114 && renderer.style()->slowIsFlippedBlocksWritingMode()) { // Faster than calling containingBlock(). | |
pdr.
2014/10/21 23:35:34
I think this comment belongs with the parent() cal
| |
113 childPoint = inlineBox.renderer().containingBlock()->flipForWritingModeF orChild(&toRenderBox(inlineBox.renderer()), childPoint); | 115 childPoint = inlineBox.renderer().containingBlock()->flipForWritingModeF orChild(&toRenderBox(inlineBox.renderer()), childPoint); |
116 } | |
114 | 117 |
115 paintAsInlineBlock(&inlineBox.renderer(), paintInfo, childPoint); | 118 paintAsInlineBlock(&inlineBox.renderer(), paintInfo, childPoint); |
116 } | 119 } |
117 | 120 |
118 void BlockPainter::paintAsInlineBlock(RenderObject* renderer, PaintInfo& paintIn fo, const LayoutPoint& childPoint) | 121 void BlockPainter::paintAsInlineBlock(RenderObject* renderer, PaintInfo& paintIn fo, const LayoutPoint& childPoint) |
119 { | 122 { |
120 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhase Selection) | 123 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhase Selection) |
121 return; | 124 return; |
122 | 125 |
123 // Paint all phases atomically, as though the element established its own | 126 // Paint all phases atomically, as though the element established its own |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
324 LayoutUnit ruleRight = m_renderBlock.isHorizontalWritingMode() ? ruleLeft + ruleThickness : ruleLeft + m_renderBlock.contentWidth(); | 327 LayoutUnit ruleRight = m_renderBlock.isHorizontalWritingMode() ? ruleLeft + ruleThickness : ruleLeft + m_renderBlock.contentWidth(); |
325 LayoutUnit ruleTop = m_renderBlock.isHorizontalWritingMode() ? p aintOffset.y() + m_renderBlock.borderTop() + m_renderBlock.paddingTop() : paintO ffset.y() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd; | 328 LayoutUnit ruleTop = m_renderBlock.isHorizontalWritingMode() ? p aintOffset.y() + m_renderBlock.borderTop() + m_renderBlock.paddingTop() : paintO ffset.y() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd; |
326 LayoutUnit ruleBottom = m_renderBlock.isHorizontalWritingMode() ? ruleTop + m_renderBlock.contentHeight() : ruleTop + ruleThickness; | 329 LayoutUnit ruleBottom = m_renderBlock.isHorizontalWritingMode() ? ruleTop + m_renderBlock.contentHeight() : ruleTop + ruleThickness; |
327 IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(rule Left, ruleTop, ruleRight, ruleBottom); | 330 IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(rule Left, ruleTop, ruleRight, ruleBottom); |
328 ObjectPainter::drawLineForBoxSide(paintInfo.context, pixelSnappe dRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnapp edRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias); | 331 ObjectPainter::drawLineForBoxSide(paintInfo.context, pixelSnappe dRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnapp edRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias); |
329 } | 332 } |
330 | 333 |
331 ruleLogicalLeft = currLogicalLeftOffset; | 334 ruleLogicalLeft = currLogicalLeftOffset; |
332 } | 335 } |
333 } else { | 336 } else { |
334 bool topToBottom = !m_renderBlock.style()->isFlippedBlocksWritingMode(); | 337 bool topToBottom = !m_renderBlock.style()->slowIsFlippedBlocksWritingMod e(); |
335 LayoutUnit ruleLeft = m_renderBlock.isHorizontalWritingMode() | 338 LayoutUnit ruleLeft = m_renderBlock.isHorizontalWritingMode() |
336 ? m_renderBlock.borderLeft() + m_renderBlock.paddingLeft() | 339 ? m_renderBlock.borderLeft() + m_renderBlock.paddingLeft() |
337 : colGap / 2 - colGap - ruleThickness / 2 + m_renderBlock.borderBefo re() + m_renderBlock.paddingBefore(); | 340 : colGap / 2 - colGap - ruleThickness / 2 + m_renderBlock.borderBefo re() + m_renderBlock.paddingBefore(); |
338 LayoutUnit ruleWidth = m_renderBlock.isHorizontalWritingMode() ? m_rende rBlock.contentWidth() : ruleThickness; | 341 LayoutUnit ruleWidth = m_renderBlock.isHorizontalWritingMode() ? m_rende rBlock.contentWidth() : ruleThickness; |
339 LayoutUnit ruleTop = m_renderBlock.isHorizontalWritingMode() | 342 LayoutUnit ruleTop = m_renderBlock.isHorizontalWritingMode() |
340 ? colGap / 2 - colGap - ruleThickness / 2 + m_renderBlock.borderBefo re() + m_renderBlock.paddingBefore() | 343 ? colGap / 2 - colGap - ruleThickness / 2 + m_renderBlock.borderBefo re() + m_renderBlock.paddingBefore() |
341 : m_renderBlock.borderStart() + m_renderBlock.paddingStart(); | 344 : m_renderBlock.borderStart() + m_renderBlock.paddingStart(); |
342 LayoutUnit ruleHeight = m_renderBlock.isHorizontalWritingMode() ? ruleTh ickness : m_renderBlock.contentHeight(); | 345 LayoutUnit ruleHeight = m_renderBlock.isHorizontalWritingMode() ? ruleTh ickness : m_renderBlock.contentHeight(); |
343 LayoutRect ruleRect(ruleLeft, ruleTop, ruleWidth, ruleHeight); | 346 LayoutRect ruleRect(ruleLeft, ruleTop, ruleWidth, ruleHeight); |
344 | 347 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
411 | 414 |
412 // Adjust our x and y when painting. | 415 // Adjust our x and y when painting. |
413 LayoutPoint adjustedPaintOffset = paintOffset + offset; | 416 LayoutPoint adjustedPaintOffset = paintOffset + offset; |
414 if (paintingFloats) | 417 if (paintingFloats) |
415 m_renderBlock.paintFloats(info, adjustedPaintOffset, paintInfo.p hase == PaintPhaseSelection || paintInfo.phase == PaintPhaseTextClip); | 418 m_renderBlock.paintFloats(info, adjustedPaintOffset, paintInfo.p hase == PaintPhaseSelection || paintInfo.phase == PaintPhaseTextClip); |
416 else | 419 else |
417 paintContents(info, adjustedPaintOffset); | 420 paintContents(info, adjustedPaintOffset); |
418 } | 421 } |
419 | 422 |
420 LayoutUnit blockDelta = (m_renderBlock.isHorizontalWritingMode() ? colRe ct.height() : colRect.width()); | 423 LayoutUnit blockDelta = (m_renderBlock.isHorizontalWritingMode() ? colRe ct.height() : colRect.width()); |
421 if (m_renderBlock.style()->isFlippedBlocksWritingMode()) | 424 if (m_renderBlock.style()->slowIsFlippedBlocksWritingMode()) |
422 currLogicalTopOffset += blockDelta; | 425 currLogicalTopOffset += blockDelta; |
423 else | 426 else |
424 currLogicalTopOffset -= blockDelta; | 427 currLogicalTopOffset -= blockDelta; |
425 } | 428 } |
426 } | 429 } |
427 | 430 |
428 void BlockPainter::paintContents(PaintInfo& paintInfo, const LayoutPoint& paintO ffset) | 431 void BlockPainter::paintContents(PaintInfo& paintInfo, const LayoutPoint& paintO ffset) |
429 { | 432 { |
430 // Avoid painting descendants of the root element when stylesheets haven't l oaded. This eliminates FOUC. | 433 // Avoid painting descendants of the root element when stylesheets haven't l oaded. This eliminates FOUC. |
431 // It's ok not to draw, because later on, when all the stylesheets do load, styleResolverChanged() on the Document | 434 // It's ok not to draw, because later on, when all the stylesheets do load, styleResolverChanged() on the Document |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
512 RenderBlock* block = flow->containingBlock(); | 515 RenderBlock* block = flow->containingBlock(); |
513 for ( ; block && block != &m_renderBlock; block = block->containingBlock ()) | 516 for ( ; block && block != &m_renderBlock; block = block->containingBlock ()) |
514 accumulatedPaintOffset.moveBy(block->location()); | 517 accumulatedPaintOffset.moveBy(block->location()); |
515 ASSERT(block); | 518 ASSERT(block); |
516 InlinePainter(*flow).paintOutline(info, accumulatedPaintOffset); | 519 InlinePainter(*flow).paintOutline(info, accumulatedPaintOffset); |
517 } | 520 } |
518 } | 521 } |
519 | 522 |
520 | 523 |
521 } // namespace blink | 524 } // namespace blink |
OLD | NEW |