Files
sousa-gecko/layout/style/ServoCSSParser.cpp
T
Emilio Cobos Álvarez 029a20c844 Bug 2067844 - Remove Rust color -> nscolor conversion. r=firefox-style-system-reviewers,layout-reviewers,dshin
We want to have just one of those. This doesn't change behavior right
now but would when we enable gamut mapping in e.g. canvas.

However it seems to me like we need deeper changes there, because
probably we shouldn't turn those into srgb upfront...

Differential Revision: https://phabricator.services.mozilla.com/D322384
2026-09-02 19:12:52 +00:00

132 lines
4.7 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* CSS parsing utility functions */
#include "ServoCSSParser.h"
#include "mozilla/CSSPropertyId.h"
#include "mozilla/ServoBindings.h"
#include "mozilla/ServoStyleSet.h"
#include "mozilla/dom/Document.h"
using namespace mozilla;
using namespace mozilla::dom;
/* static */
bool ServoCSSParser::IsValidCSSColor(const nsACString& aValue) {
return Servo_IsValidCSSColor(&aValue);
}
/* static */
bool ServoCSSParser::IsValidCSSImage(const nsACString& aValue) {
return Servo_IsValidCSSImage(&aValue);
}
/* static */
bool ServoCSSParser::ComputeColor(const StylePerDocumentStyleData* aStyleData,
const nsACString& aValue,
nscolor* aResultColor, bool* aWasCurrentColor,
css::Loader* aLoader) {
auto absolute =
ComputeAbsoluteColor(aStyleData, aValue, aWasCurrentColor, aLoader);
if (!absolute) {
return false;
}
*aResultColor = absolute->ToColor();
return true;
}
/* static */
Maybe<StyleAbsoluteColor> ServoCSSParser::ComputeAbsoluteColor(
const StylePerDocumentStyleData* aStyleData, const nsACString& aValue,
bool* aWasCurrentColor, css::Loader* aLoader) {
StyleAbsoluteColor color{};
if (!Servo_ComputeColor(aStyleData, &aValue, &color, aWasCurrentColor,
aLoader)) {
return Nothing();
}
return Some(color);
}
/* static */
bool ServoCSSParser::ColorTo(const nsACString& aFromColor,
const nsACString& aToColorSpace,
nsACString* aResultColor,
nsTArray<float>* aResultComponents,
bool* aResultAdjusted, css::Loader* aLoader) {
return Servo_ColorTo(&aFromColor, &aToColorSpace, aResultColor,
aResultComponents, aResultAdjusted, aLoader);
}
/* static */
already_AddRefed<StyleLockedDeclarationBlock> ServoCSSParser::ParseProperty(
NonCustomCSSPropertyId aProperty, const nsACString& aValue,
const ParsingEnvironment& aParsingEnvironment,
const StyleParsingMode& aParsingMode) {
CSSPropertyId property(aProperty);
return ParseProperty(property, aValue, aParsingEnvironment, aParsingMode);
}
/* static */
already_AddRefed<StyleLockedDeclarationBlock> ServoCSSParser::ParseProperty(
const CSSPropertyId& aProperty, const nsACString& aValue,
const ParsingEnvironment& aParsingEnvironment,
const StyleParsingMode& aParsingMode) {
return Servo_ParseProperty(
&aProperty, &aValue, aParsingEnvironment.mUrlExtraData,
aParsingMode, aParsingEnvironment.mCompatMode,
aParsingEnvironment.mLoader, aParsingEnvironment.mRuleType)
.Consume();
}
/* static */
bool ServoCSSParser::ParseEasing(const nsACString& aValue,
StyleComputedTimingFunction& aResult) {
return Servo_ParseEasing(&aValue, &aResult);
}
/* static */
bool ServoCSSParser::ParseViewTimelineInset(const nsACString& aValue,
StyleViewTimelineInset& aResult) {
return Servo_ParseViewTimelineInset(&aValue, &aResult);
}
/* static */
bool ServoCSSParser::ParseLengthPercentageForAbsoluteLengths(
const nsACString& aValue, StyleLengthPercentage& aResult) {
return Servo_ParseLengthPercentageForAbsoluteLengths(&aValue, &aResult);
}
/* static */
bool ServoCSSParser::ParseTransformIntoMatrix(const nsACString& aValue,
bool& aContains3DTransform,
gfx::Matrix4x4& aResult) {
return Servo_ParseTransformIntoMatrix(&aValue, &aContains3DTransform,
&aResult.components);
}
/* static */
bool ServoCSSParser::ParseFontShorthandForMatching(
const nsACString& aValue, URLExtraData* aUrl, StyleFontFamilyList& aList,
StyleFontStyle& aStyle, StyleFontWidth& aWidth, StyleFontWeight& aWeight,
float* aSize, bool* aSmallCaps) {
return Servo_ParseFontShorthandForMatching(
&aValue, aUrl, &aList, &aStyle, &aWidth, &aWeight, aSize, aSmallCaps);
}
/* static */
already_AddRefed<URLExtraData> ServoCSSParser::GetURLExtraData(
Document* aDocument) {
MOZ_ASSERT(aDocument);
return do_AddRef(aDocument->DefaultStyleAttrURLData());
}
/* static */ ServoCSSParser::ParsingEnvironment
ServoCSSParser::GetParsingEnvironment(Document* aDocument) {
return {
GetURLExtraData(aDocument), aDocument->GetCompatibilityMode(),
aDocument->GetExistingCSSLoader()}; // Loader for error reporting only.
}