| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |