summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurpreet Kaur <k.gurpreet@samsung.com>2013-09-19 11:03:32 +0000
committerKonstantin Tokarev <annulen@yandex.ru>2016-09-27 07:16:39 +0000
commit3bb3f4e49fec10dfe1bd58e3466384317d71ffbe (patch)
tree9c7e5057ea36aa86c3ed91cea12db98fc78a7f2d
parenta7a5227e2ca154172d19cdde023ca6ea76070369 (diff)
downloadqtwebkit-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.cpp2
-rw-r--r--Source/WebCore/css/CSSPrimitiveValue.h2
-rw-r--r--Source/WebCore/css/DeprecatedStyleBuilder.cpp16
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;