| Index: Source/core/page/ImageBitmap.cpp
|
| diff --git a/Source/core/page/ImageBitmap.cpp b/Source/core/page/ImageBitmap.cpp
|
| index 2f83dd31d15ef34c1697d544f39b783227b699fb..ffe3af0dfa65d59ae71c04122efe6fad942d5949 100644
|
| --- a/Source/core/page/ImageBitmap.cpp
|
| +++ b/Source/core/page/ImageBitmap.cpp
|
| @@ -38,8 +38,9 @@ ImageBitmap::ImageBitmap(HTMLImageElement* image, const IntRect& cropRect)
|
| {
|
| m_imageElement->addClient(this);
|
|
|
| - IntSize bitmapSize = intersection(cropRect, IntRect(0, 0, image->width(), image->height())).size();
|
| - m_bitmapRect = IntRect(IntPoint(max(0, -cropRect.x()), max(0, -cropRect.y())), bitmapSize);
|
| + IntRect srcRect = intersection(cropRect, IntRect(0, 0, image->width(), image->height()));
|
| + m_bitmapRect = IntRect(IntPoint(max(0, -cropRect.x()), max(0, -cropRect.y())), srcRect.size());
|
| + m_bitmapOffset = srcRect.location();
|
|
|
| ScriptWrappable::init(this);
|
| }
|
| @@ -47,6 +48,7 @@ ImageBitmap::ImageBitmap(HTMLImageElement* image, const IntRect& cropRect)
|
| ImageBitmap::ImageBitmap(HTMLVideoElement* video, const IntRect& cropRect)
|
| : m_cropRect(cropRect)
|
| , m_imageElement(0)
|
| + , m_bitmapOffset(IntPoint())
|
| {
|
| IntRect videoRect = IntRect(IntPoint(), video->player()->naturalSize());
|
| IntRect srcRect = intersection(cropRect, videoRect);
|
| @@ -66,6 +68,7 @@ ImageBitmap::ImageBitmap(HTMLVideoElement* video, const IntRect& cropRect)
|
| ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, const IntRect& cropRect)
|
| : m_cropRect(cropRect)
|
| , m_imageElement(0)
|
| + , m_bitmapOffset(IntPoint())
|
| {
|
| IntSize canvasSize = canvas->size();
|
| IntRect srcRect = intersection(cropRect, IntRect(IntPoint(), canvasSize));
|
| @@ -82,6 +85,7 @@ ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, const IntRect& cropRect)
|
| ImageBitmap::ImageBitmap(ImageData* data, const IntRect& cropRect)
|
| : m_cropRect(cropRect)
|
| , m_imageElement(0)
|
| + , m_bitmapOffset(IntPoint())
|
| {
|
| IntRect srcRect = intersection(cropRect, IntRect(IntPoint(), data->size()));
|
|
|
| @@ -98,14 +102,16 @@ ImageBitmap::ImageBitmap(ImageData* data, const IntRect& cropRect)
|
| ImageBitmap::ImageBitmap(ImageBitmap* bitmap, const IntRect& cropRect)
|
| : m_cropRect(cropRect)
|
| , m_imageElement(bitmap->imageElement())
|
| + , m_bitmapOffset(IntPoint())
|
| {
|
| IntRect oldBitmapRect = bitmap->bitmapRect();
|
| - IntSize bitmapSize = intersection(cropRect, oldBitmapRect).size();
|
| - IntPoint bitmapOffset(max(0, oldBitmapRect.x() - cropRect.x()), max(0, oldBitmapRect.y() - cropRect.y()));
|
| - m_bitmapRect = IntRect(bitmapOffset, bitmapSize);
|
| + IntRect srcRect = intersection(cropRect, oldBitmapRect);
|
| + m_bitmapRect = IntRect(IntPoint(max(0, oldBitmapRect.x() - cropRect.x()), max(0, oldBitmapRect.y() - cropRect.y())), srcRect.size());
|
| +
|
| if (m_imageElement) {
|
| m_imageElement->addClient(this);
|
| m_bitmap = 0;
|
| + m_bitmapOffset = srcRect.location();
|
| } else {
|
| IntRect adjustedCropRect(IntPoint(cropRect.x() -oldBitmapRect.x(), cropRect.y() - oldBitmapRect.y()), cropRect.size());
|
| m_bitmap = cropImage(bitmap->bitmapImage().get(), adjustedCropRect);
|
| @@ -157,6 +163,7 @@ PassRefPtr<ImageBitmap> ImageBitmap::create(ImageBitmap* bitmap, const IntRect&
|
| void ImageBitmap::notifyImageSourceChanged()
|
| {
|
| m_bitmap = cropImage(m_imageElement->cachedImage()->image(), m_cropRect);
|
| + m_bitmapOffset = IntPoint();
|
| m_imageElement = 0;
|
| }
|
|
|
| @@ -164,7 +171,7 @@ PassRefPtr<Image> ImageBitmap::bitmapImage() const
|
| {
|
| ASSERT((m_imageElement || m_bitmap) && (!m_imageElement || !m_bitmap));
|
| if (m_imageElement)
|
| - return cropImage(m_imageElement->cachedImage()->image(), m_cropRect);
|
| + return m_imageElement->cachedImage()->image();
|
| return m_bitmap;
|
| }
|
|
|
|
|