Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Unified Diff: third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp

Issue 2326633002: Adds filter support for offscreen canvas (Closed)
Patch Set: Sync Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
index 948350c998f4ff70305c9224f4153925fb82d539..16a2d9d10eb4c2e2898046b7f3bc71e7604dbbaf 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
@@ -28,6 +28,7 @@
#include "core/css/BasicShapeFunctions.h"
#include "core/css/CSSBasicShapeValues.h"
+#include "core/css/CSSColorValue.h"
#include "core/css/CSSContentDistributionValue.h"
#include "core/css/CSSCustomIdentValue.h"
#include "core/css/CSSFontFamilyValue.h"
@@ -156,6 +157,11 @@ FilterOperations StyleBuilderConverter::convertFilterOperations(
return FilterOperationResolver::createFilterOperations(state, value);
}
+FilterOperations StyleBuilderConverter::convertOffscreenFilterOperations(
+ const CSSValue& value) {
+ return FilterOperationResolver::createOffscreenFilterOperations(value);
+}
+
static FontDescription::GenericFamilyType convertGenericFamily(
CSSValueID valueID) {
switch (valueID) {
@@ -328,6 +334,36 @@ float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state,
return primitiveValue.getFloatValue();
}
+double StyleBuilderConverter::convertValueToNumber(
+ const CSSFunctionValue* filter,
+ const CSSPrimitiveValue* value) {
+ switch (filter->functionType()) {
+ case CSSValueGrayscale:
+ case CSSValueSepia:
+ case CSSValueSaturate:
+ case CSSValueInvert:
+ case CSSValueBrightness:
+ case CSSValueContrast:
+ case CSSValueOpacity: {
+ double amount = (filter->functionType() == CSSValueBrightness) ? 0 : 1;
+ if (filter->length() == 1) {
+ amount = value->getDoubleValue();
+ if (value->isPercentage())
+ amount /= 100;
+ }
+ return amount;
+ }
+ case CSSValueHueRotate: {
+ double angle = 0;
+ if (filter->length() == 1)
+ angle = value->computeDegrees();
+ return angle;
+ }
+ default:
+ return 0;
+ }
+}
+
FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state,
const CSSValue& value) {
const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value);
@@ -1000,25 +1036,48 @@ LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state,
return LengthSize(radiusWidth, radiusHeight);
}
-ShadowData StyleBuilderConverter::convertShadow(StyleResolverState& state,
- const CSSValue& value) {
+ShadowData StyleBuilderConverter::convertShadow(
+ const CSSToLengthConversionData& conversionData,
+ StyleResolverState* state,
+ const CSSValue& value) {
const CSSShadowValue& shadow = toCSSShadowValue(value);
- float x = shadow.x->computeLength<float>(state.cssToLengthConversionData());
- float y = shadow.y->computeLength<float>(state.cssToLengthConversionData());
+ float x = shadow.x->computeLength<float>(conversionData);
+ float y = shadow.y->computeLength<float>(conversionData);
float blur =
- shadow.blur
- ? shadow.blur->computeLength<float>(state.cssToLengthConversionData())
- : 0;
- float spread = shadow.spread
- ? shadow.spread->computeLength<float>(
- state.cssToLengthConversionData())
- : 0;
+ shadow.blur ? shadow.blur->computeLength<float>(conversionData) : 0;
+ float spread =
+ shadow.spread ? shadow.spread->computeLength<float>(conversionData) : 0;
ShadowStyle shadowStyle =
shadow.style && shadow.style->getValueID() == CSSValueInset ? Inset
: Normal;
StyleColor color = StyleColor::currentColor();
- if (shadow.color)
- color = convertStyleColor(state, *shadow.color);
+ if (shadow.color) {
+ if (state) {
+ color = convertStyleColor(*state, *shadow.color);
+ } else {
+ // For OffScreen canvas, we default to black and only parse non
+ // Document dependent CSS colors.
+ color = StyleColor(Color::black);
+ if (shadow.color->isColorValue()) {
+ color = toCSSColorValue(*shadow.color).value();
+ } else {
+ CSSValueID valueID = toCSSIdentifierValue(*shadow.color).getValueID();
+ switch (valueID) {
+ case CSSValueInvalid:
+ NOTREACHED();
+ case CSSValueInternalQuirkInherit:
+ case CSSValueWebkitLink:
+ case CSSValueWebkitActivelink:
+ case CSSValueWebkitFocusRingColor:
+ case CSSValueCurrentcolor:
+ break;
+ default:
+ color = StyleColor::colorFromKeyword(valueID);
+ }
+ }
+ }
+ }
+
return ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, color);
}
@@ -1031,8 +1090,10 @@ PassRefPtr<ShadowList> StyleBuilderConverter::convertShadowList(
}
ShadowDataVector shadows;
- for (const auto& item : toCSSValueList(value))
- shadows.push_back(convertShadow(state, *item));
+ for (const auto& item : toCSSValueList(value)) {
+ shadows.push_back(
+ convertShadow(state.cssToLengthConversionData(), &state, *item));
+ }
return ShadowList::adopt(shadows);
}

Powered by Google App Engine
This is Rietveld 408576698