OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 } | 788 } |
789 | 789 |
790 void RenderBox::paintFillLayer(const PaintInfo& paintInfo, const Color& c, const
FillLayer& fillLayer, const LayoutRect& rect, | 790 void RenderBox::paintFillLayer(const PaintInfo& paintInfo, const Color& c, const
FillLayer& fillLayer, const LayoutRect& rect, |
791 BackgroundBleedAvoidance bleedAvoidance, RenderObject* backgroundObject, boo
l skipBaseColor) | 791 BackgroundBleedAvoidance bleedAvoidance, RenderObject* backgroundObject, boo
l skipBaseColor) |
792 { | 792 { |
793 paintFillLayerExtended(paintInfo, c, fillLayer, rect, bleedAvoidance, 0, Lay
outSize(), backgroundObject, skipBaseColor); | 793 paintFillLayerExtended(paintInfo, c, fillLayer, rect, bleedAvoidance, 0, Lay
outSize(), backgroundObject, skipBaseColor); |
794 } | 794 } |
795 | 795 |
796 bool RenderBox::pushContentsClip(PaintInfo& paintInfo, const LayoutPoint& accumu
latedOffset, ContentsClipBehavior contentsClipBehavior) | 796 bool RenderBox::pushContentsClip(PaintInfo& paintInfo, const LayoutPoint& accumu
latedOffset, ContentsClipBehavior contentsClipBehavior) |
797 { | 797 { |
798 if (paintInfo.phase == PaintPhaseSelfOutline || paintInfo.phase == PaintPhas
eMask) | 798 if (paintInfo.phase == PaintPhaseMask) |
799 return false; | 799 return false; |
800 | 800 |
801 bool isControlClip = hasControlClip(); | 801 bool isControlClip = hasControlClip(); |
802 bool isOverflowClip = hasOverflowClip() && !layer()->isSelfPaintingLayer(); | 802 bool isOverflowClip = hasOverflowClip() && !layer()->isSelfPaintingLayer(); |
803 | 803 |
804 if (!isControlClip && !isOverflowClip) | 804 if (!isControlClip && !isOverflowClip) |
805 return false; | 805 return false; |
806 | 806 |
807 LayoutRect clipRect = isControlClip ? controlClipRect(accumulatedOffset) : o
verflowClipRect(accumulatedOffset); | 807 LayoutRect clipRect = isControlClip ? controlClipRect(accumulatedOffset) : o
verflowClipRect(accumulatedOffset); |
808 RoundedRect clipRoundedRect(0, 0, 0, 0); | 808 RoundedRect clipRoundedRect(0, 0, 0, 0); |
809 bool hasBorderRadius = style()->hasBorderRadius(); | 809 bool hasBorderRadius = style()->hasBorderRadius(); |
810 if (hasBorderRadius) | 810 if (hasBorderRadius) |
811 clipRoundedRect = style()->getRoundedInnerBorderFor(LayoutRect(accumulat
edOffset, size())); | 811 clipRoundedRect = style()->getRoundedInnerBorderFor(LayoutRect(accumulat
edOffset, size())); |
812 | 812 |
813 if (contentsClipBehavior == SkipContentsClipIfPossible) { | 813 if (contentsClipBehavior == SkipContentsClipIfPossible) { |
814 LayoutRect contentsVisualOverflow = contentsVisualOverflowRect(); | 814 LayoutRect contentsVisualOverflow = contentsVisualOverflowRect(); |
815 if (contentsVisualOverflow.isEmpty()) | 815 if (contentsVisualOverflow.isEmpty()) |
816 return false; | 816 return false; |
817 | 817 |
818 LayoutRect conservativeClipRect = clipRect; | 818 LayoutRect conservativeClipRect = clipRect; |
819 if (hasBorderRadius) | 819 if (hasBorderRadius) |
820 conservativeClipRect.intersect(clipRoundedRect.radiusCenterRect()); | 820 conservativeClipRect.intersect(clipRoundedRect.radiusCenterRect()); |
821 conservativeClipRect.moveBy(-accumulatedOffset); | 821 conservativeClipRect.moveBy(-accumulatedOffset); |
822 if (hasLayer()) | 822 if (hasLayer()) |
823 conservativeClipRect.move(scrolledContentOffset()); | 823 conservativeClipRect.move(scrolledContentOffset()); |
824 if (conservativeClipRect.contains(contentsVisualOverflow)) | 824 if (conservativeClipRect.contains(contentsVisualOverflow)) |
825 return false; | 825 return false; |
826 } | 826 } |
827 | 827 |
828 if (paintInfo.phase == PaintPhaseOutline) | |
829 paintInfo.phase = PaintPhaseChildOutlines; | |
830 paintInfo.context->save(); | 828 paintInfo.context->save(); |
831 if (hasBorderRadius) | 829 if (hasBorderRadius) |
832 paintInfo.context->clipRoundedRect(clipRoundedRect); | 830 paintInfo.context->clipRoundedRect(clipRoundedRect); |
833 paintInfo.context->clip(pixelSnappedIntRect(clipRect)); | 831 paintInfo.context->clip(pixelSnappedIntRect(clipRect)); |
834 return true; | 832 return true; |
835 } | 833 } |
836 | 834 |
837 void RenderBox::popContentsClip(PaintInfo& paintInfo, PaintPhase originalPhase,
const LayoutPoint& accumulatedOffset) | 835 void RenderBox::popContentsClip(PaintInfo& paintInfo, PaintPhase originalPhase,
const LayoutPoint& accumulatedOffset) |
838 { | 836 { |
839 ASSERT(hasControlClip() || (hasOverflowClip() && !layer()->isSelfPaintingLay
er())); | 837 ASSERT(hasControlClip() || (hasOverflowClip() && !layer()->isSelfPaintingLay
er())); |
840 | |
841 paintInfo.context->restore(); | 838 paintInfo.context->restore(); |
842 if (originalPhase == PaintPhaseOutline) { | |
843 paintInfo.phase = PaintPhaseSelfOutline; | |
844 paintObject(paintInfo, accumulatedOffset); | |
845 paintInfo.phase = originalPhase; | |
846 } | |
847 } | 839 } |
848 | 840 |
849 LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location) | 841 LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location) |
850 { | 842 { |
851 LayoutRect clipRect = borderBoxRect(); | 843 LayoutRect clipRect = borderBoxRect(); |
852 clipRect.setLocation(location + clipRect.location() + LayoutSize(borderLeft(
), borderTop())); | 844 clipRect.setLocation(location + clipRect.location() + LayoutSize(borderLeft(
), borderTop())); |
853 clipRect.setSize(clipRect.size() - LayoutSize(borderLeft() + borderRight(),
borderTop() + borderBottom())); | 845 clipRect.setSize(clipRect.size() - LayoutSize(borderLeft() + borderRight(),
borderTop() + borderBottom())); |
854 return clipRect; | 846 return clipRect; |
855 } | 847 } |
856 | 848 |
(...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2940 | 2932 |
2941 RenderBox::BoxDecorationData::BoxDecorationData(const RenderStyle& style) | 2933 RenderBox::BoxDecorationData::BoxDecorationData(const RenderStyle& style) |
2942 { | 2934 { |
2943 backgroundColor = style.colorIncludingFallback(CSSPropertyBackgroundColor); | 2935 backgroundColor = style.colorIncludingFallback(CSSPropertyBackgroundColor); |
2944 hasBackground = backgroundColor.alpha() || style.hasBackgroundImage(); | 2936 hasBackground = backgroundColor.alpha() || style.hasBackgroundImage(); |
2945 ASSERT(hasBackground == style.hasBackground()); | 2937 ASSERT(hasBackground == style.hasBackground()); |
2946 hasBorder = style.hasBorder(); | 2938 hasBorder = style.hasBorder(); |
2947 } | 2939 } |
2948 | 2940 |
2949 } // namespace blink | 2941 } // namespace blink |
OLD | NEW |