Title: [107818] trunk/Source/WebCore
Revision
107818
Author
[email protected]
Date
2012-02-15 07:54:31 -0800 (Wed, 15 Feb 2012)

Log Message

Remove clipToImageBuffer from SourceAlpha and feComposite
https://bugs.webkit.org/show_bug.cgi?id=78355

Reviewed by Nikolas Zimmermann.

The implementation of clipToImageBuffer is inefficient on
non-mac platforms, so we would benefit if remove it.

Existing tests cover this feature.

* platform/graphics/filters/FEComposite.cpp:
(WebCore::FEComposite::platformApplySoftware):
* platform/graphics/filters/SourceAlpha.cpp:
(WebCore::SourceAlpha::platformApplySoftware):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (107817 => 107818)


--- trunk/Source/WebCore/ChangeLog	2012-02-15 15:42:30 UTC (rev 107817)
+++ trunk/Source/WebCore/ChangeLog	2012-02-15 15:54:31 UTC (rev 107818)
@@ -1,3 +1,20 @@
+2012-02-15  Zoltan Herczeg  <[email protected]>
+
+        Remove clipToImageBuffer from SourceAlpha and feComposite
+        https://bugs.webkit.org/show_bug.cgi?id=78355
+
+        Reviewed by Nikolas Zimmermann.
+
+        The implementation of clipToImageBuffer is inefficient on
+        non-mac platforms, so we would benefit if remove it.
+
+        Existing tests cover this feature.
+
+        * platform/graphics/filters/FEComposite.cpp:
+        (WebCore::FEComposite::platformApplySoftware):
+        * platform/graphics/filters/SourceAlpha.cpp:
+        (WebCore::SourceAlpha::platformApplySoftware):
+
 2012-02-15  Simon Hausmann  <[email protected]>
 
         [Qt] Replace use of QGLWidget/QGLContext with QOpenGLContext and QSurface for Qt 5

Modified: trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp (107817 => 107818)


--- trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp	2012-02-15 15:42:30 UTC (rev 107817)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp	2012-02-15 15:54:31 UTC (rev 107818)
@@ -239,9 +239,19 @@
         filterContext->drawImageBuffer(in->asImageBuffer(), ColorSpaceDeviceRGB, drawingRegionOfInputImage(in->absolutePaintRect()));
         break;
     case FECOMPOSITE_OPERATOR_IN: {
-        GraphicsContextStateSaver stateSaver(*filterContext);
-        filterContext->clipToImageBuffer(in2->asImageBuffer(), drawingRegionOfInputImage(in2->absolutePaintRect()));
-        filterContext->drawImageBuffer(in->asImageBuffer(), ColorSpaceDeviceRGB, drawingRegionOfInputImage(in->absolutePaintRect()));
+        // Applies only to the intersected region.
+        IntRect destinationRect = in->absolutePaintRect();
+        destinationRect.intersect(in2->absolutePaintRect());
+        destinationRect.intersect(absolutePaintRect());
+        if (destinationRect.isEmpty())
+            break;
+        IntPoint destinationPoint(destinationRect.x() - absolutePaintRect().x(), destinationRect.y() - absolutePaintRect().y());
+        IntRect sourceRect(IntPoint(destinationRect.x() - in->absolutePaintRect().x(),
+                                    destinationRect.y() - in->absolutePaintRect().y()), destinationRect.size());
+        IntRect source2Rect(IntPoint(destinationRect.x() - in2->absolutePaintRect().x(),
+                                     destinationRect.y() - in2->absolutePaintRect().y()), destinationRect.size());
+        filterContext->drawImageBuffer(in2->asImageBuffer(), ColorSpaceDeviceRGB, destinationPoint, source2Rect);
+        filterContext->drawImageBuffer(in->asImageBuffer(), ColorSpaceDeviceRGB, destinationPoint, sourceRect, CompositeSourceIn);
         break;
     }
     case FECOMPOSITE_OPERATOR_OUT:

Modified: trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp (107817 => 107818)


--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2012-02-15 15:42:30 UTC (rev 107817)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2012-02-15 15:54:31 UTC (rev 107818)
@@ -63,9 +63,8 @@
 
     FloatRect imageRect(FloatPoint(), absolutePaintRect().size());
     GraphicsContext* filterContext = resultImage->context();
-    GraphicsContextStateSaver stateSaver(*filterContext);
-    filterContext->clipToImageBuffer(filter->sourceImage(), imageRect);
     filterContext->fillRect(imageRect, Color::black, ColorSpaceDeviceRGB);
+    filterContext->drawImageBuffer(filter->sourceImage(), ColorSpaceDeviceRGB, IntPoint(), CompositeDestinationIn);
 }
 
 void SourceAlpha::dump()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to