| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h" | 5 #include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h" |
| 6 | 6 |
| 7 #include "bindings/modules/v8/OffscreenCanvasRenderingContext2DOrWebGLRenderingC
ontextOrWebGL2RenderingContext.h" | 7 #include "bindings/modules/v8/OffscreenCanvasRenderingContext2DOrWebGLRenderingC
ontextOrWebGL2RenderingContext.h" |
| 8 #include "core/dom/ExecutionContext.h" | 8 #include "core/dom/ExecutionContext.h" |
| 9 #include "core/frame/ImageBitmap.h" | 9 #include "core/frame/ImageBitmap.h" |
| 10 #include "core/frame/Settings.h" | 10 #include "core/frame/Settings.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 | 103 |
| 104 ImageBuffer* OffscreenCanvasRenderingContext2D::GetImageBuffer() const { | 104 ImageBuffer* OffscreenCanvasRenderingContext2D::GetImageBuffer() const { |
| 105 return const_cast<CanvasRenderingContextHost*>(host()) | 105 return const_cast<CanvasRenderingContextHost*>(host()) |
| 106 ->GetOrCreateImageBuffer(); | 106 ->GetOrCreateImageBuffer(); |
| 107 } | 107 } |
| 108 | 108 |
| 109 RefPtr<StaticBitmapImage> | 109 RefPtr<StaticBitmapImage> |
| 110 OffscreenCanvasRenderingContext2D::TransferToStaticBitmapImage() { | 110 OffscreenCanvasRenderingContext2D::TransferToStaticBitmapImage() { |
| 111 if (!GetImageBuffer()) | 111 if (!GetImageBuffer()) |
| 112 return nullptr; | 112 return nullptr; |
| 113 sk_sp<SkImage> sk_image = host()->GetImageBuffer()->NewSkImageSnapshot( | 113 sk_sp<SkImage> sk_image = GetImageBuffer()->NewSkImageSnapshot( |
| 114 kPreferAcceleration, kSnapshotReasonTransferToImageBitmap); | 114 kPreferAcceleration, kSnapshotReasonTransferToImageBitmap); |
| 115 RefPtr<StaticBitmapImage> image = | 115 RefPtr<StaticBitmapImage> image = |
| 116 StaticBitmapImage::Create(std::move(sk_image)); | 116 StaticBitmapImage::Create(std::move(sk_image)); |
| 117 image->SetOriginClean(this->OriginClean()); | 117 image->SetOriginClean(this->OriginClean()); |
| 118 return image; | 118 return image; |
| 119 } | 119 } |
| 120 | 120 |
| 121 ImageBitmap* OffscreenCanvasRenderingContext2D::TransferToImageBitmap( | 121 ImageBitmap* OffscreenCanvasRenderingContext2D::TransferToImageBitmap( |
| 122 ScriptState* script_state) { | 122 ScriptState* script_state) { |
| 123 UseCounter::Feature feature = | 123 UseCounter::Feature feature = |
| 124 UseCounter::kOffscreenCanvasTransferToImageBitmap2D; | 124 UseCounter::kOffscreenCanvasTransferToImageBitmap2D; |
| 125 UseCounter::Count(ExecutionContext::From(script_state), feature); | 125 UseCounter::Count(ExecutionContext::From(script_state), feature); |
| 126 RefPtr<StaticBitmapImage> image = TransferToStaticBitmapImage(); | 126 RefPtr<StaticBitmapImage> image = TransferToStaticBitmapImage(); |
| 127 if (!image) | 127 if (!image) |
| 128 return nullptr; | 128 return nullptr; |
| 129 host()->DiscardImageBuffer(); // "Transfer" means no retained buffer | 129 host()->DiscardImageBuffer(); // "Transfer" means no retained buffer |
| 130 return ImageBitmap::Create(std::move(image)); | 130 return ImageBitmap::Create(std::move(image)); |
| 131 } | 131 } |
| 132 | 132 |
| 133 PassRefPtr<Image> OffscreenCanvasRenderingContext2D::GetImage( | 133 PassRefPtr<Image> OffscreenCanvasRenderingContext2D::GetImage( |
| 134 AccelerationHint hint, | 134 AccelerationHint hint, |
| 135 SnapshotReason reason) const { | 135 SnapshotReason reason) const { |
| 136 if (!GetImageBuffer()) | 136 if (!GetImageBuffer()) |
| 137 return nullptr; | 137 return nullptr; |
| 138 sk_sp<SkImage> sk_image = | 138 sk_sp<SkImage> sk_image = GetImageBuffer()->NewSkImageSnapshot(hint, reason); |
| 139 host()->GetImageBuffer()->NewSkImageSnapshot(hint, reason); | |
| 140 RefPtr<StaticBitmapImage> image = | 139 RefPtr<StaticBitmapImage> image = |
| 141 StaticBitmapImage::Create(std::move(sk_image)); | 140 StaticBitmapImage::Create(std::move(sk_image)); |
| 142 return image; | 141 return image; |
| 143 } | 142 } |
| 144 | 143 |
| 145 ImageData* OffscreenCanvasRenderingContext2D::ToImageData( | 144 ImageData* OffscreenCanvasRenderingContext2D::ToImageData( |
| 146 SnapshotReason reason) { | 145 SnapshotReason reason) { |
| 147 if (!GetImageBuffer()) | 146 if (!GetImageBuffer()) |
| 148 return nullptr; | 147 return nullptr; |
| 149 sk_sp<SkImage> snapshot = host()->GetImageBuffer()->NewSkImageSnapshot( | 148 sk_sp<SkImage> snapshot = |
| 150 kPreferNoAcceleration, reason); | 149 GetImageBuffer()->NewSkImageSnapshot(kPreferNoAcceleration, reason); |
| 151 ImageData* image_data = nullptr; | 150 ImageData* image_data = nullptr; |
| 152 if (snapshot) { | 151 if (snapshot) { |
| 153 image_data = ImageData::Create(host()->Size()); | 152 image_data = ImageData::Create(host()->Size()); |
| 154 SkImageInfo image_info = | 153 SkImageInfo image_info = |
| 155 SkImageInfo::Make(this->Width(), this->Height(), kRGBA_8888_SkColorType, | 154 SkImageInfo::Make(this->Width(), this->Height(), kRGBA_8888_SkColorType, |
| 156 kUnpremul_SkAlphaType); | 155 kUnpremul_SkAlphaType); |
| 157 snapshot->readPixels(image_info, image_data->data()->Data(), | 156 snapshot->readPixels(image_info, image_data->data()->Data(), |
| 158 image_info.minRowBytes(), 0, 0); | 157 image_info.minRowBytes(), 0, 0); |
| 159 } | 158 } |
| 160 return image_data; | 159 return image_data; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 172 } | 171 } |
| 173 | 172 |
| 174 PaintCanvas* OffscreenCanvasRenderingContext2D::DrawingCanvas() const { | 173 PaintCanvas* OffscreenCanvasRenderingContext2D::DrawingCanvas() const { |
| 175 ImageBuffer* buffer = GetImageBuffer(); | 174 ImageBuffer* buffer = GetImageBuffer(); |
| 176 if (!buffer) | 175 if (!buffer) |
| 177 return nullptr; | 176 return nullptr; |
| 178 return GetImageBuffer()->Canvas(); | 177 return GetImageBuffer()->Canvas(); |
| 179 } | 178 } |
| 180 | 179 |
| 181 PaintCanvas* OffscreenCanvasRenderingContext2D::ExistingDrawingCanvas() const { | 180 PaintCanvas* OffscreenCanvasRenderingContext2D::ExistingDrawingCanvas() const { |
| 182 if (!host()->GetImageBuffer()) | 181 if (!HasImageBuffer()) |
| 183 return nullptr; | 182 return nullptr; |
| 184 return host()->GetImageBuffer()->Canvas(); | 183 return GetImageBuffer()->Canvas(); |
| 185 } | 184 } |
| 186 | 185 |
| 187 void OffscreenCanvasRenderingContext2D::DisableDeferral(DisableDeferralReason) { | 186 void OffscreenCanvasRenderingContext2D::DisableDeferral(DisableDeferralReason) { |
| 188 } | 187 } |
| 189 | 188 |
| 190 AffineTransform OffscreenCanvasRenderingContext2D::BaseTransform() const { | 189 AffineTransform OffscreenCanvasRenderingContext2D::BaseTransform() const { |
| 191 if (!host()->GetImageBuffer()) | 190 if (!HasImageBuffer()) |
| 192 return AffineTransform(); // identity | 191 return AffineTransform(); // identity |
| 193 return host()->GetImageBuffer()->BaseTransform(); | 192 return GetImageBuffer()->BaseTransform(); |
| 194 } | 193 } |
| 195 | 194 |
| 196 void OffscreenCanvasRenderingContext2D::DidDraw(const SkIRect& dirty_rect) {} | 195 void OffscreenCanvasRenderingContext2D::DidDraw(const SkIRect& dirty_rect) {} |
| 197 | 196 |
| 198 bool OffscreenCanvasRenderingContext2D::StateHasFilter() { | 197 bool OffscreenCanvasRenderingContext2D::StateHasFilter() { |
| 199 return GetState().HasFilterForOffscreenCanvas(host()->Size()); | 198 return GetState().HasFilterForOffscreenCanvas(host()->Size()); |
| 200 } | 199 } |
| 201 | 200 |
| 202 sk_sp<SkImageFilter> OffscreenCanvasRenderingContext2D::StateGetFilter() { | 201 sk_sp<SkImageFilter> OffscreenCanvasRenderingContext2D::StateGetFilter() { |
| 203 return GetState().GetFilterForOffscreenCanvas(host()->Size()); | 202 return GetState().GetFilterForOffscreenCanvas(host()->Size()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 226 | 225 |
| 227 String OffscreenCanvasRenderingContext2D::ColorSpaceAsString() const { | 226 String OffscreenCanvasRenderingContext2D::ColorSpaceAsString() const { |
| 228 return CanvasRenderingContext::ColorSpaceAsString(); | 227 return CanvasRenderingContext::ColorSpaceAsString(); |
| 229 } | 228 } |
| 230 | 229 |
| 231 CanvasPixelFormat OffscreenCanvasRenderingContext2D::PixelFormat() const { | 230 CanvasPixelFormat OffscreenCanvasRenderingContext2D::PixelFormat() const { |
| 232 return color_params().pixel_format(); | 231 return color_params().pixel_format(); |
| 233 } | 232 } |
| 234 | 233 |
| 235 bool OffscreenCanvasRenderingContext2D::IsAccelerated() const { | 234 bool OffscreenCanvasRenderingContext2D::IsAccelerated() const { |
| 236 return host()->GetImageBuffer() && host()->GetImageBuffer()->IsAccelerated(); | 235 return HasImageBuffer() && GetImageBuffer()->IsAccelerated(); |
| 237 } | 236 } |
| 238 } | 237 } |
| OLD | NEW |