Index: Source/platform/graphics/filters/Filter.cpp |
diff --git a/Source/platform/graphics/filters/Filter.cpp b/Source/platform/graphics/filters/Filter.cpp |
index 6aa814174cf3c2b485dbfd493fbab4b508f8ace4..22ba718e5ef557466470ce0ddee8ac86ff241189 100644 |
--- a/Source/platform/graphics/filters/Filter.cpp |
+++ b/Source/platform/graphics/filters/Filter.cpp |
@@ -36,10 +36,11 @@ |
namespace blink { |
-Filter::Filter(const FloatRect& referenceBox, const FloatRect& filterRegion, float scale) |
+Filter::Filter(const FloatRect& referenceBox, const FloatRect& filterRegion, float scale, UnitScaling unitScaling) |
: m_referenceBox(referenceBox) |
, m_filterRegion(filterRegion) |
, m_scale(scale) |
+ , m_unitScaling(unitScaling) |
, m_sourceGraphic(SourceGraphic::create(this)) |
{ |
} |
@@ -48,6 +49,16 @@ Filter::~Filter() |
{ |
} |
+PassRefPtrWillBeRawPtr<Filter> Filter::create(const FloatRect& referenceBox, const FloatRect& filterRegion, float scale, UnitScaling unitScaling) |
+{ |
+ return adoptRefWillBeNoop(new Filter(referenceBox, filterRegion, scale, unitScaling)); |
+} |
+ |
+PassRefPtrWillBeRawPtr<Filter> Filter::create(float scale) |
+{ |
+ return adoptRefWillBeNoop(new Filter(FloatRect(), FloatRect(), scale, UserSpace)); |
+} |
+ |
DEFINE_TRACE(Filter) |
{ |
visitor->trace(m_sourceGraphic); |
@@ -68,6 +79,29 @@ FloatRect Filter::mapAbsoluteRectToLocalRect(const FloatRect& rect) const |
return result; |
} |
+float Filter::applyHorizontalScale(float value) const |
+{ |
+ if (m_unitScaling == BoundingBox) |
+ value *= referenceBox().width(); |
+ return m_scale * value; |
+} |
+ |
+float Filter::applyVerticalScale(float value) const |
+{ |
+ if (m_unitScaling == BoundingBox) |
+ value *= referenceBox().height(); |
+ return m_scale * value; |
+} |
+ |
+FloatPoint3D Filter::resolve3dPoint(const FloatPoint3D& point) const |
+{ |
+ if (m_unitScaling != BoundingBox) |
+ return point; |
+ return FloatPoint3D(point.x() * referenceBox().width() + referenceBox().x(), |
+ point.y() * referenceBox().height() + referenceBox().y(), |
+ point.z() * sqrtf(referenceBox().size().diagonalLengthSquared() / 2)); |
+} |
+ |
void Filter::setLastEffect(PassRefPtrWillBeRawPtr<FilterEffect> effect) |
{ |
m_lastEffect = effect; |