OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 #include "core/svg/SVGURIReference.h" | 43 #include "core/svg/SVGURIReference.h" |
44 #include "platform/graphics/filters/custom/CustomFilterArrayParameter.h" | 44 #include "platform/graphics/filters/custom/CustomFilterArrayParameter.h" |
45 #include "platform/graphics/filters/custom/CustomFilterConstants.h" | 45 #include "platform/graphics/filters/custom/CustomFilterConstants.h" |
46 #include "platform/graphics/filters/custom/CustomFilterNumberParameter.h" | 46 #include "platform/graphics/filters/custom/CustomFilterNumberParameter.h" |
47 #include "platform/graphics/filters/custom/CustomFilterParameter.h" | 47 #include "platform/graphics/filters/custom/CustomFilterParameter.h" |
48 #include "platform/graphics/filters/custom/CustomFilterProgramInfo.h" | 48 #include "platform/graphics/filters/custom/CustomFilterProgramInfo.h" |
49 #include "platform/graphics/filters/custom/CustomFilterTransformParameter.h" | 49 #include "platform/graphics/filters/custom/CustomFilterTransformParameter.h" |
50 | 50 |
51 namespace WebCore { | 51 namespace WebCore { |
52 | 52 |
53 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const Rend
erStyle* style, const RenderStyle* rootStyle, double multiplier) | |
54 { | |
55 return primitiveValue ? primitiveValue->convertToLength<FixedConversion | Pe
rcentConversion>(style, rootStyle, multiplier) : Length(Undefined); | |
56 } | |
57 | |
58 static FilterOperation::OperationType filterOperationForType(CSSFilterValue::Fil
terOperationType type) | 53 static FilterOperation::OperationType filterOperationForType(CSSFilterValue::Fil
terOperationType type) |
59 { | 54 { |
60 switch (type) { | 55 switch (type) { |
61 case CSSFilterValue::ReferenceFilterOperation: | 56 case CSSFilterValue::ReferenceFilterOperation: |
62 return FilterOperation::REFERENCE; | 57 return FilterOperation::REFERENCE; |
63 case CSSFilterValue::GrayscaleFilterOperation: | 58 case CSSFilterValue::GrayscaleFilterOperation: |
64 return FilterOperation::GRAYSCALE; | 59 return FilterOperation::GRAYSCALE; |
65 case CSSFilterValue::SepiaFilterOperation: | 60 case CSSFilterValue::SepiaFilterOperation: |
66 return FilterOperation::SEPIA; | 61 return FilterOperation::SEPIA; |
67 case CSSFilterValue::SaturateFilterOperation: | 62 case CSSFilterValue::SaturateFilterOperation: |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 return 0; | 117 return 0; |
123 numberParameter->addValue(primitiveValue->getDoubleValue()); | 118 numberParameter->addValue(primitiveValue->getDoubleValue()); |
124 } | 119 } |
125 return numberParameter.release(); | 120 return numberParameter.release(); |
126 } | 121 } |
127 | 122 |
128 static PassRefPtr<CustomFilterParameter> parseCustomFilterTransformParameter(con
st String& name, CSSValueList* values, StyleResolverState& state) | 123 static PassRefPtr<CustomFilterParameter> parseCustomFilterTransformParameter(con
st String& name, CSSValueList* values, StyleResolverState& state) |
129 { | 124 { |
130 RefPtr<CustomFilterTransformParameter> transformParameter = CustomFilterTran
sformParameter::create(name); | 125 RefPtr<CustomFilterTransformParameter> transformParameter = CustomFilterTran
sformParameter::create(name); |
131 TransformOperations operations; | 126 TransformOperations operations; |
132 TransformBuilder::createTransformOperations(values, state.style(), state.roo
tElementStyle(), operations); | 127 TransformBuilder::createTransformOperations(values, state.cssToLengthConvers
ionData(), operations); |
133 transformParameter->setOperations(operations); | 128 transformParameter->setOperations(operations); |
134 return transformParameter.release(); | 129 return transformParameter.release(); |
135 } | 130 } |
136 | 131 |
137 static PassRefPtr<CustomFilterParameter> parseCustomFilterParameter(const String
& name, CSSValue* parameterValue, StyleResolverState& state) | 132 static PassRefPtr<CustomFilterParameter> parseCustomFilterParameter(const String
& name, CSSValue* parameterValue, StyleResolverState& state) |
138 { | 133 { |
139 // FIXME: Implement other parameters types parsing. | 134 // FIXME: Implement other parameters types parsing. |
140 // booleans: https://bugs.webkit.org/show_bug.cgi?id=76438 | 135 // booleans: https://bugs.webkit.org/show_bug.cgi?id=76438 |
141 // textures: https://bugs.webkit.org/show_bug.cgi?id=71442 | 136 // textures: https://bugs.webkit.org/show_bug.cgi?id=71442 |
142 // mat2, mat3, mat4: https://bugs.webkit.org/show_bug.cgi?id=71444 | 137 // mat2, mat3, mat4: https://bugs.webkit.org/show_bug.cgi?id=71444 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 } | 340 } |
346 | 341 |
347 static PassRefPtr<CustomFilterOperation> createCustomFilterOperation(CSSFilterVa
lue* filterValue, StyleResolverState& state) | 342 static PassRefPtr<CustomFilterOperation> createCustomFilterOperation(CSSFilterVa
lue* filterValue, StyleResolverState& state) |
348 { | 343 { |
349 ASSERT(filterValue->length()); | 344 ASSERT(filterValue->length()); |
350 bool isAtRuleReferenceSyntax = filterValue->itemWithoutBoundsCheck(0)->isPri
mitiveValue(); | 345 bool isAtRuleReferenceSyntax = filterValue->itemWithoutBoundsCheck(0)->isPri
mitiveValue(); |
351 return isAtRuleReferenceSyntax ? createCustomFilterOperationWithAtRuleRefere
nceSyntax(filterValue) : createCustomFilterOperationWithInlineSyntax(filterValue
, state); | 346 return isAtRuleReferenceSyntax ? createCustomFilterOperationWithAtRuleRefere
nceSyntax(filterValue) : createCustomFilterOperationWithInlineSyntax(filterValue
, state); |
352 } | 347 } |
353 | 348 |
354 | 349 |
355 bool FilterOperationResolver::createFilterOperations(CSSValue* inValue, const Re
nderStyle* style, const RenderStyle* rootStyle, FilterOperations& outOperations,
StyleResolverState& state) | 350 bool FilterOperationResolver::createFilterOperations(CSSValue* inValue, const CS
SToLengthConversionData& unadjustedConversionData, FilterOperations& outOperatio
ns, StyleResolverState& state) |
356 { | 351 { |
357 ASSERT(outOperations.isEmpty()); | 352 ASSERT(outOperations.isEmpty()); |
358 | 353 |
359 if (!inValue) | 354 if (!inValue) |
360 return false; | 355 return false; |
361 | 356 |
362 if (inValue->isPrimitiveValue()) { | 357 if (inValue->isPrimitiveValue()) { |
363 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(inValue); | 358 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(inValue); |
364 if (primitiveValue->getValueID() == CSSValueNone) | 359 if (primitiveValue->getValueID() == CSSValueNone) |
365 return true; | 360 return true; |
366 } | 361 } |
367 | 362 |
368 if (!inValue->isValueList()) | 363 if (!inValue->isValueList()) |
369 return false; | 364 return false; |
370 | 365 |
371 float zoomFactor = (style ? style->effectiveZoom() : 1) * state.elementStyle
Resources().deviceScaleFactor(); | 366 float zoomFactor = unadjustedConversionData.zoom() * state.elementStyleResou
rces().deviceScaleFactor(); |
| 367 const CSSToLengthConversionData& conversionData = unadjustedConversionData.c
opyWithAdjustedZoom(zoomFactor); |
372 FilterOperations operations; | 368 FilterOperations operations; |
373 for (CSSValueListIterator i = inValue; i.hasMore(); i.advance()) { | 369 for (CSSValueListIterator i = inValue; i.hasMore(); i.advance()) { |
374 CSSValue* currValue = i.value(); | 370 CSSValue* currValue = i.value(); |
375 if (!currValue->isFilterValue()) | 371 if (!currValue->isFilterValue()) |
376 continue; | 372 continue; |
377 | 373 |
378 CSSFilterValue* filterValue = toCSSFilterValue(i.value()); | 374 CSSFilterValue* filterValue = toCSSFilterValue(i.value()); |
379 FilterOperation::OperationType operationType = filterOperationForType(fi
lterValue->operationType()); | 375 FilterOperation::OperationType operationType = filterOperationForType(fi
lterValue->operationType()); |
380 | 376 |
381 if (operationType == FilterOperation::VALIDATED_CUSTOM) { | 377 if (operationType == FilterOperation::VALIDATED_CUSTOM) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 if (firstValue->isPercentage()) | 456 if (firstValue->isPercentage()) |
461 amount /= 100; | 457 amount /= 100; |
462 } | 458 } |
463 | 459 |
464 operations.operations().append(BasicComponentTransferFilterOperation
::create(amount, operationType)); | 460 operations.operations().append(BasicComponentTransferFilterOperation
::create(amount, operationType)); |
465 break; | 461 break; |
466 } | 462 } |
467 case CSSFilterValue::BlurFilterOperation: { | 463 case CSSFilterValue::BlurFilterOperation: { |
468 Length stdDeviation = Length(0, Fixed); | 464 Length stdDeviation = Length(0, Fixed); |
469 if (filterValue->length() >= 1) | 465 if (filterValue->length() >= 1) |
470 stdDeviation = convertToFloatLength(firstValue, style, rootStyle
, zoomFactor); | 466 stdDeviation = firstValue->convertToLength<FixedConversion | Per
centConversion>(conversionData); |
471 if (stdDeviation.isUndefined()) | 467 if (stdDeviation.isUndefined()) |
472 return false; | 468 return false; |
473 | 469 |
474 operations.operations().append(BlurFilterOperation::create(stdDeviat
ion)); | 470 operations.operations().append(BlurFilterOperation::create(stdDeviat
ion)); |
475 break; | 471 break; |
476 } | 472 } |
477 case CSSFilterValue::DropShadowFilterOperation: { | 473 case CSSFilterValue::DropShadowFilterOperation: { |
478 if (filterValue->length() != 1) | 474 if (filterValue->length() != 1) |
479 return false; | 475 return false; |
480 | 476 |
481 CSSValue* cssValue = filterValue->itemWithoutBoundsCheck(0); | 477 CSSValue* cssValue = filterValue->itemWithoutBoundsCheck(0); |
482 if (!cssValue->isShadowValue()) | 478 if (!cssValue->isShadowValue()) |
483 continue; | 479 continue; |
484 | 480 |
485 CSSShadowValue* item = toCSSShadowValue(cssValue); | 481 CSSShadowValue* item = toCSSShadowValue(cssValue); |
486 IntPoint location(item->x->computeLength<int>(style, rootStyle, zoom
Factor), item->y->computeLength<int>(style, rootStyle, zoomFactor)); | 482 IntPoint location(item->x->computeLength<int>(conversionData), item-
>y->computeLength<int>(conversionData)); |
487 int blur = item->blur ? item->blur->computeLength<int>(style, rootSt
yle, zoomFactor) : 0; | 483 int blur = item->blur ? item->blur->computeLength<int>(conversionDat
a) : 0; |
488 Color shadowColor; | 484 Color shadowColor; |
489 if (item->color) | 485 if (item->color) |
490 shadowColor = state.document().textLinkColors().colorFromPrimiti
veValue(item->color.get(), state.style()->visitedDependentColor(CSSPropertyColor
)); | 486 shadowColor = state.document().textLinkColors().colorFromPrimiti
veValue(item->color.get(), state.style()->visitedDependentColor(CSSPropertyColor
)); |
491 | 487 |
492 operations.operations().append(DropShadowFilterOperation::create(loc
ation, blur, shadowColor.isValid() ? shadowColor : Color::transparent)); | 488 operations.operations().append(DropShadowFilterOperation::create(loc
ation, blur, shadowColor.isValid() ? shadowColor : Color::transparent)); |
493 break; | 489 break; |
494 } | 490 } |
495 case CSSFilterValue::UnknownFilterOperation: | 491 case CSSFilterValue::UnknownFilterOperation: |
496 default: | 492 default: |
497 ASSERT_NOT_REACHED(); | 493 ASSERT_NOT_REACHED(); |
498 break; | 494 break; |
499 } | 495 } |
500 } | 496 } |
501 | 497 |
502 outOperations = operations; | 498 outOperations = operations; |
503 return true; | 499 return true; |
504 } | 500 } |
505 | 501 |
506 } // namespace WebCore | 502 } // namespace WebCore |
OLD | NEW |