The changes to ImageBuffer have landed.  Here is what port authors need to know:

Image* image() on ImageBuffer is gone.

It has been replaced with:

PassRefPtr<Image> copyImage()

This function should always simply copy the image.   It is used in any place 
where you want to get a snapshot of the ImageBuffer and not be broken if the 
ImageBuffer subsequently changes.

For drawing, callers should now use drawImageBuffer on GraphicsContext instead 
of drawImage.  drawImageBuffer internally just turns around and calls a draw 
function on ImageBuffer.  clipToImageBuffer now also turns around and calls 
clip on the ImageBuffer.

        void clip(GraphicsContext*, const FloatRect&) const;

        // The draw method draws the contents of the buffer without copying it.
        void draw(GraphicsContext*, ColorSpace styleColorSpace, const 
FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1),
                             CompositeOperator = CompositeSourceOver, bool 
useLowQualityScale = false);
        void drawPattern(GraphicsContext*, const FloatRect& srcRect, const 
AffineTransform& patternTransform,
                         const FloatPoint& phase, ColorSpace styleColorSpace, 
CompositeOperator, const FloatRect& destRect);

I've made sure the above functions are implemented in the various ports, 
although the Skia and Cairo implementations currently draw by copying the image 
and then just calling drawImage.  I've left it up to those ports to fix this 
issue (the current behavior is the same on those platforms as it was before my 
patch).

There is a temporary method implemented by all ports called:

                bool drawsUsingCopy() const; // If the image buffer has to 
render using a copied image, it will return true.

This method only exists right now because some of the ports are still copying.  
Once everyone has switched over to drawing the image buffer without making 
copies, then I can remove this method from the interface.  HTMLCanvasElement is 
using it in order to cache a copy of the image for repeated drawing of a static 
canvas, so that the "copying" platforms don't suffer a performance degradation 
from my changes.

Feel free to ping me on IRC or in email if you have any questions about this 
change.

Thanks,
Dave
(hy...@apple.com)

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to