From 8dd16259287f58f9273002717ec4d27e97127719 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:43:14 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- dom/svg/SVGLength.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'dom/svg/SVGLength.cpp') diff --git a/dom/svg/SVGLength.cpp b/dom/svg/SVGLength.cpp index f7c383a16f..bbe01e6878 100644 --- a/dom/svg/SVGLength.cpp +++ b/dom/svg/SVGLength.cpp @@ -20,15 +20,19 @@ using namespace mozilla::dom::SVGLength_Binding; namespace mozilla { +// These types are numbered so that different length categories are in +// contiguous ranges - See `SVGLength::Is[..]Unit()`. const unsigned short SVG_LENGTHTYPE_Q = 11; const unsigned short SVG_LENGTHTYPE_CH = 12; const unsigned short SVG_LENGTHTYPE_REM = 13; const unsigned short SVG_LENGTHTYPE_IC = 14; const unsigned short SVG_LENGTHTYPE_CAP = 15; -const unsigned short SVG_LENGTHTYPE_VW = 16; -const unsigned short SVG_LENGTHTYPE_VH = 17; -const unsigned short SVG_LENGTHTYPE_VMIN = 18; -const unsigned short SVG_LENGTHTYPE_VMAX = 19; +const unsigned short SVG_LENGTHTYPE_LH = 16; +const unsigned short SVG_LENGTHTYPE_RLH = 17; +const unsigned short SVG_LENGTHTYPE_VW = 18; +const unsigned short SVG_LENGTHTYPE_VH = 19; +const unsigned short SVG_LENGTHTYPE_VMIN = 20; +const unsigned short SVG_LENGTHTYPE_VMAX = 21; void SVGLength::GetValueAsString(nsAString& aValue) const { nsTextFormatter::ssprintf(aValue, u"%g", (double)mValue); @@ -74,7 +78,7 @@ bool SVGLength::IsAbsoluteUnit(uint8_t aUnit) { /*static*/ bool SVGLength::IsFontRelativeUnit(uint8_t aUnit) { return aUnit == SVG_LENGTHTYPE_EMS || aUnit == SVG_LENGTHTYPE_EXS || - (aUnit >= SVG_LENGTHTYPE_CH && aUnit <= SVG_LENGTHTYPE_CAP); + (aUnit >= SVG_LENGTHTYPE_CH && aUnit <= SVG_LENGTHTYPE_RLH); } /** @@ -192,6 +196,10 @@ float SVGLength::GetPixelsPerUnit(const UserSpaceMetrics& aMetrics, auto sz = aMetrics.GetCSSViewportSize(); return std::max(sz.width, sz.height) / 100.f; } + case SVG_LENGTHTYPE_LH: + return aMetrics.GetLineHeight(UserSpaceMetrics::Type::This); + case SVG_LENGTHTYPE_RLH: + return aMetrics.GetLineHeight(UserSpaceMetrics::Type::Root); default: MOZ_ASSERT(IsAbsoluteUnit(aUnitType)); return GetAbsUnitsPerAbsUnit(SVG_LENGTHTYPE_PX, aUnitType); @@ -256,6 +264,12 @@ nsCSSUnit SVGLength::SpecifiedUnitTypeToCSSUnit(uint8_t aSpecifiedUnit) { case SVG_LENGTHTYPE_VMAX: return nsCSSUnit::eCSSUnit_VMax; + case SVG_LENGTHTYPE_LH: + return nsCSSUnit::eCSSUnit_LineHeight; + + case SVG_LENGTHTYPE_RLH: + return nsCSSUnit::eCSSUnit_RootLineHeight; + default: MOZ_ASSERT_UNREACHABLE("Unknown unit type"); return nsCSSUnit::eCSSUnit_Pixel; @@ -322,6 +336,12 @@ void SVGLength::GetUnitString(nsAString& aUnit, uint16_t aUnitType) { case SVG_LENGTHTYPE_VMAX: aUnit.AssignLiteral("vmax"); return; + case SVG_LENGTHTYPE_LH: + aUnit.AssignLiteral("lh"); + return; + case SVG_LENGTHTYPE_RLH: + aUnit.AssignLiteral("rlh"); + return; } MOZ_ASSERT_UNREACHABLE( "Unknown unit type! Someone's using an SVGLength " @@ -387,6 +407,12 @@ uint16_t SVGLength::GetUnitTypeForString(const nsAString& aUnit) { if (aUnit.LowerCaseEqualsLiteral("vmax")) { return SVG_LENGTHTYPE_VMAX; } + if (aUnit.LowerCaseEqualsLiteral("lh")) { + return SVG_LENGTHTYPE_LH; + } + if (aUnit.LowerCaseEqualsLiteral("rlh")) { + return SVG_LENGTHTYPE_RLH; + } return SVG_LENGTHTYPE_UNKNOWN; } -- cgit v1.2.3