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 |