OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) | 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
reserved. |
4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "core/rendering/TextAutosizer.h" | 30 #include "core/rendering/TextAutosizer.h" |
31 #include "core/rendering/style/ContentData.h" | 31 #include "core/rendering/style/ContentData.h" |
32 #include "core/rendering/style/CursorList.h" | 32 #include "core/rendering/style/CursorList.h" |
33 #include "core/rendering/style/QuotesData.h" | 33 #include "core/rendering/style/QuotesData.h" |
34 #include "core/rendering/style/ShadowList.h" | 34 #include "core/rendering/style/ShadowList.h" |
35 #include "core/rendering/style/StyleImage.h" | 35 #include "core/rendering/style/StyleImage.h" |
36 #include "core/rendering/style/StyleInheritedData.h" | 36 #include "core/rendering/style/StyleInheritedData.h" |
37 #include "platform/LengthFunctions.h" | 37 #include "platform/LengthFunctions.h" |
38 #include "platform/fonts/Font.h" | 38 #include "platform/fonts/Font.h" |
39 #include "platform/fonts/FontSelector.h" | 39 #include "platform/fonts/FontSelector.h" |
| 40 #include "platform/geometry/FloatRoundedRect.h" |
40 #include "wtf/MathExtras.h" | 41 #include "wtf/MathExtras.h" |
41 | 42 |
42 using namespace std; | 43 using namespace std; |
43 | 44 |
44 namespace WebCore { | 45 namespace WebCore { |
45 | 46 |
46 struct SameSizeAsBorderValue { | 47 struct SameSizeAsBorderValue { |
47 RGBA32 m_color; | 48 RGBA32 m_color; |
48 unsigned m_width; | 49 unsigned m_width; |
49 }; | 50 }; |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 IntSize(valueForLength(border.topLeft().width(), size.width()), | 920 IntSize(valueForLength(border.topLeft().width(), size.width()), |
920 valueForLength(border.topLeft().height(), size.height())), | 921 valueForLength(border.topLeft().height(), size.height())), |
921 IntSize(valueForLength(border.topRight().width(), size.width()), | 922 IntSize(valueForLength(border.topRight().width(), size.width()), |
922 valueForLength(border.topRight().height(), size.height())), | 923 valueForLength(border.topRight().height(), size.height())), |
923 IntSize(valueForLength(border.bottomLeft().width(), size.width()), | 924 IntSize(valueForLength(border.bottomLeft().width(), size.width()), |
924 valueForLength(border.bottomLeft().height(), size.height())), | 925 valueForLength(border.bottomLeft().height(), size.height())), |
925 IntSize(valueForLength(border.bottomRight().width(), size.width()), | 926 IntSize(valueForLength(border.bottomRight().width(), size.width()), |
926 valueForLength(border.bottomRight().height(), size.height()))); | 927 valueForLength(border.bottomRight().height(), size.height()))); |
927 } | 928 } |
928 | 929 |
929 static float calcConstraintScaleFor(const IntRect& rect, const RoundedRect::Radi
i& radii) | |
930 { | |
931 // Constrain corner radii using CSS3 rules: | |
932 // http://www.w3.org/TR/css3-background/#the-border-radius | |
933 | |
934 float factor = 1; | |
935 unsigned radiiSum; | |
936 | |
937 // top | |
938 radiiSum = static_cast<unsigned>(radii.topLeft().width()) + static_cast<unsi
gned>(radii.topRight().width()); // Casts to avoid integer overflow. | |
939 if (radiiSum > static_cast<unsigned>(rect.width())) | |
940 factor = min(static_cast<float>(rect.width()) / radiiSum, factor); | |
941 | |
942 // bottom | |
943 radiiSum = static_cast<unsigned>(radii.bottomLeft().width()) + static_cast<u
nsigned>(radii.bottomRight().width()); | |
944 if (radiiSum > static_cast<unsigned>(rect.width())) | |
945 factor = min(static_cast<float>(rect.width()) / radiiSum, factor); | |
946 | |
947 // left | |
948 radiiSum = static_cast<unsigned>(radii.topLeft().height()) + static_cast<uns
igned>(radii.bottomLeft().height()); | |
949 if (radiiSum > static_cast<unsigned>(rect.height())) | |
950 factor = min(static_cast<float>(rect.height()) / radiiSum, factor); | |
951 | |
952 // right | |
953 radiiSum = static_cast<unsigned>(radii.topRight().height()) + static_cast<un
signed>(radii.bottomRight().height()); | |
954 if (radiiSum > static_cast<unsigned>(rect.height())) | |
955 factor = min(static_cast<float>(rect.height()) / radiiSum, factor); | |
956 | |
957 ASSERT(factor <= 1); | |
958 return factor; | |
959 } | |
960 | |
961 StyleImage* RenderStyle::listStyleImage() const { return rareInheritedData->list
StyleImage.get(); } | 930 StyleImage* RenderStyle::listStyleImage() const { return rareInheritedData->list
StyleImage.get(); } |
962 void RenderStyle::setListStyleImage(PassRefPtr<StyleImage> v) | 931 void RenderStyle::setListStyleImage(PassRefPtr<StyleImage> v) |
963 { | 932 { |
964 if (rareInheritedData->listStyleImage != v) | 933 if (rareInheritedData->listStyleImage != v) |
965 rareInheritedData.access()->listStyleImage = v; | 934 rareInheritedData.access()->listStyleImage = v; |
966 } | 935 } |
967 | 936 |
968 Color RenderStyle::color() const { return inherited->color; } | 937 Color RenderStyle::color() const { return inherited->color; } |
969 Color RenderStyle::visitedLinkColor() const { return inherited->visitedLinkColor
; } | 938 Color RenderStyle::visitedLinkColor() const { return inherited->visitedLinkColor
; } |
970 void RenderStyle::setColor(const Color& v) { SET_VAR(inherited, color, v); } | 939 void RenderStyle::setColor(const Color& v) { SET_VAR(inherited, color, v); } |
971 void RenderStyle::setVisitedLinkColor(const Color& v) { SET_VAR(inherited, visit
edLinkColor, v); } | 940 void RenderStyle::setVisitedLinkColor(const Color& v) { SET_VAR(inherited, visit
edLinkColor, v); } |
972 | 941 |
973 short RenderStyle::horizontalBorderSpacing() const { return inherited->horizonta
l_border_spacing; } | 942 short RenderStyle::horizontalBorderSpacing() const { return inherited->horizonta
l_border_spacing; } |
974 short RenderStyle::verticalBorderSpacing() const { return inherited->vertical_bo
rder_spacing; } | 943 short RenderStyle::verticalBorderSpacing() const { return inherited->vertical_bo
rder_spacing; } |
975 void RenderStyle::setHorizontalBorderSpacing(short v) { SET_VAR(inherited, horiz
ontal_border_spacing, v); } | 944 void RenderStyle::setHorizontalBorderSpacing(short v) { SET_VAR(inherited, horiz
ontal_border_spacing, v); } |
976 void RenderStyle::setVerticalBorderSpacing(short v) { SET_VAR(inherited, vertica
l_border_spacing, v); } | 945 void RenderStyle::setVerticalBorderSpacing(short v) { SET_VAR(inherited, vertica
l_border_spacing, v); } |
977 | 946 |
978 RoundedRect RenderStyle::getRoundedBorderFor(const LayoutRect& borderRect, bool
includeLogicalLeftEdge, bool includeLogicalRightEdge) const | 947 RoundedRect RenderStyle::getRoundedBorderFor(const LayoutRect& borderRect, bool
includeLogicalLeftEdge, bool includeLogicalRightEdge) const |
979 { | 948 { |
980 IntRect snappedBorderRect(pixelSnappedIntRect(borderRect)); | 949 IntRect snappedBorderRect(pixelSnappedIntRect(borderRect)); |
981 RoundedRect roundedRect(snappedBorderRect); | 950 RoundedRect roundedRect(snappedBorderRect); |
982 if (hasBorderRadius()) { | 951 if (hasBorderRadius()) { |
983 RoundedRect::Radii radii = calcRadiiFor(surround->border, snappedBorderR
ect.size()); | 952 RoundedRect::Radii radii = calcRadiiFor(surround->border, snappedBorderR
ect.size()); |
984 radii.scale(calcConstraintScaleFor(snappedBorderRect, radii)); | 953 radii.scale(calcBorderRadiiConstraintScaleFor(borderRect, radii)); |
985 roundedRect.includeLogicalEdges(radii, isHorizontalWritingMode(), includ
eLogicalLeftEdge, includeLogicalRightEdge); | 954 roundedRect.includeLogicalEdges(radii, isHorizontalWritingMode(), includ
eLogicalLeftEdge, includeLogicalRightEdge); |
986 } | 955 } |
987 return roundedRect; | 956 return roundedRect; |
988 } | 957 } |
989 | 958 |
990 RoundedRect RenderStyle::getRoundedInnerBorderFor(const LayoutRect& borderRect,
bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const | 959 RoundedRect RenderStyle::getRoundedInnerBorderFor(const LayoutRect& borderRect,
bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const |
991 { | 960 { |
992 bool horizontal = isHorizontalWritingMode(); | 961 bool horizontal = isHorizontalWritingMode(); |
993 | 962 |
994 int leftWidth = (!horizontal || includeLogicalLeftEdge) ? borderLeftWidth()
: 0; | 963 int leftWidth = (!horizontal || includeLogicalLeftEdge) ? borderLeftWidth()
: 0; |
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 } | 1588 } |
1620 | 1589 |
1621 void RenderStyle::setBorderImageOutset(const BorderImageLengthBox& outset) | 1590 void RenderStyle::setBorderImageOutset(const BorderImageLengthBox& outset) |
1622 { | 1591 { |
1623 if (surround->border.m_image.outset() == outset) | 1592 if (surround->border.m_image.outset() == outset) |
1624 return; | 1593 return; |
1625 surround.access()->border.m_image.setOutset(outset); | 1594 surround.access()->border.m_image.setOutset(outset); |
1626 } | 1595 } |
1627 | 1596 |
1628 } // namespace WebCore | 1597 } // namespace WebCore |
OLD | NEW |