diff options
author | Gurpreet Kaur <k.gurpreet@samsung.com> | 2013-09-19 11:03:32 +0000 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2016-09-27 07:16:39 +0000 |
commit | 3bb3f4e49fec10dfe1bd58e3466384317d71ffbe (patch) | |
tree | 9c7e5057ea36aa86c3ed91cea12db98fc78a7f2d | |
parent | a7a5227e2ca154172d19cdde023ca6ea76070369 (diff) | |
download | qtwebkit-3bb3f4e49fec10dfe1bd58e3466384317d71ffbe.tar.gz |
CSS Unit vmax and vmin in border-width not handled
https://bugs.webkit.org/show_bug.cgi?id=121421
Patch by Gurpreet Kaur <k.gurpreet@samsung.com> on 2013-09-19
Reviewed by Darin Adler.
Source/WebCore:
Border properties were not applied incase its values
were given in vmax/vmin units.
Tests: fast/css/viewport-vmax-border.html
fast/css/viewport-vmin-border.html
* css/CSSPrimitiveValue.cpp:
(WebCore::CSSPrimitiveValue::computeLengthDouble):
* css/CSSPrimitiveValue.h:
(WebCore::CSSPrimitiveValue::isViewportPercentageMax):
(WebCore::CSSPrimitiveValue::isViewportPercentageMin):
* css/DeprecatedStyleBuilder.cpp:
(WebCore::ApplyPropertyComputeLength::applyValue):
Calculating the border values which has been specified in
vmax/vmin units. 1vmax: 1vw or 1vh, whatever is largest.
1vmin: 1vw or 1vh, whatever is smallest. The vh/vw units are
calcultated as percent of viewport height and viewport width respectively.
LayoutTests:
* fast/css/viewport-vmax-border-expected.txt: Added.
* fast/css/viewport-vmax-border.html: Added.
* fast/css/viewport-vmin-border-expected.txt: Added.
* fast/css/viewport-vmin-border.html: Added.
Added new tests for verifying that border properties are
applied when its values are given in vmax/vmin units.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156091 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Change-Id: I90501069a30cc57be3483c6048aa88568c6570f1
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r-- | Source/WebCore/css/CSSPrimitiveValue.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/css/CSSPrimitiveValue.h | 2 | ||||
-rw-r--r-- | Source/WebCore/css/DeprecatedStyleBuilder.cpp | 16 |
3 files changed, 16 insertions, 4 deletions
diff --git a/Source/WebCore/css/CSSPrimitiveValue.cpp b/Source/WebCore/css/CSSPrimitiveValue.cpp index 3ee8cdf53..d0c852465 100644 --- a/Source/WebCore/css/CSSPrimitiveValue.cpp +++ b/Source/WebCore/css/CSSPrimitiveValue.cpp @@ -602,6 +602,8 @@ double CSSPrimitiveValue::computeLengthDouble(const RenderStyle* style, const Re return -1.0; case CSS_VH: case CSS_VW: + case CSS_VMAX: + case CSS_VMIN: factor = 1.0; break; default: diff --git a/Source/WebCore/css/CSSPrimitiveValue.h b/Source/WebCore/css/CSSPrimitiveValue.h index 88acf041c..6bf437ac5 100644 --- a/Source/WebCore/css/CSSPrimitiveValue.h +++ b/Source/WebCore/css/CSSPrimitiveValue.h @@ -204,6 +204,8 @@ public: bool isViewportPercentageLength() const { return m_primitiveUnitType >= CSS_VW && m_primitiveUnitType <= CSS_VMAX; } bool isViewportPercentageWidth() const { return m_primitiveUnitType == CSS_VW; } bool isViewportPercentageHeight() const { return m_primitiveUnitType == CSS_VH; } + bool isViewportPercentageMax() const { return m_primitiveUnitType == CSS_VMAX; } + bool isViewportPercentageMin() const { return m_primitiveUnitType == CSS_VMIN; } bool isValueID() const { return m_primitiveUnitType == CSS_VALUE_ID; } static PassRefPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID) { return adoptRef(new CSSPrimitiveValue(valueID)); } diff --git a/Source/WebCore/css/DeprecatedStyleBuilder.cpp b/Source/WebCore/css/DeprecatedStyleBuilder.cpp index 7c6105285..1d52de322 100644 --- a/Source/WebCore/css/DeprecatedStyleBuilder.cpp +++ b/Source/WebCore/css/DeprecatedStyleBuilder.cpp @@ -613,10 +613,18 @@ public: if (originalLength >= 1.0) length = 1.0; } - if (primitiveValue->isViewportPercentageHeight()) - length = styleResolver->document()->renderView()->viewportSize().height() * length / 100.0f; - else if (primitiveValue->isViewportPercentageWidth()) - length = styleResolver->document()->renderView()->viewportSize().width() * length / 100.0f; + if (primitiveValue->isViewportPercentageLength()) { + int viewPortHeight = styleResolver->document()->renderView()->viewportSize().height() * length / 100.0f; + int viewPortWidth = styleResolver->document()->renderView()->viewportSize().width() * length / 100.0f; + if (primitiveValue->isViewportPercentageHeight()) + length = viewPortHeight; + else if (primitiveValue->isViewportPercentageWidth()) + length = viewPortWidth; + else if (primitiveValue->isViewportPercentageMax()) + length = max(viewPortWidth, viewPortHeight); + else if (primitiveValue->isViewportPercentageMin()) + length = min(viewPortWidth, viewPortHeight); + } } else { ASSERT_NOT_REACHED(); length = 0; |