OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/pepper/pepper_graphics_2d_host.h" | 5 #include "content/renderer/pepper/pepper_graphics_2d_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 | 156 |
157 // Valid when type == SCROLL. | 157 // Valid when type == SCROLL. |
158 gfx::Rect scroll_clip_rect; | 158 gfx::Rect scroll_clip_rect; |
159 int scroll_dx, scroll_dy; | 159 int scroll_dx, scroll_dy; |
160 | 160 |
161 // Valid when type == REPLACE. | 161 // Valid when type == REPLACE. |
162 scoped_refptr<PPB_ImageData_Impl> replace_image; | 162 scoped_refptr<PPB_ImageData_Impl> replace_image; |
163 }; | 163 }; |
164 | 164 |
165 // static | 165 // static |
166 PepperGraphics2DHost* PepperGraphics2DHost::Create(RendererPpapiHost* host, | 166 PepperGraphics2DHost* PepperGraphics2DHost::Create( |
167 PP_Instance instance, | 167 RendererPpapiHost* host, |
168 PP_Resource resource, | 168 PP_Instance instance, |
169 const PP_Size& size, | 169 PP_Resource resource, |
170 PP_Bool is_always_opaque) { | 170 const PP_Size& size, |
| 171 PP_Bool is_always_opaque, |
| 172 scoped_refptr<PPB_ImageData_Impl> backing_store) { |
171 PepperGraphics2DHost* resource_host = | 173 PepperGraphics2DHost* resource_host = |
172 new PepperGraphics2DHost(host, instance, resource); | 174 new PepperGraphics2DHost(host, instance, resource); |
173 if (!resource_host->Init(size.width, size.height, | 175 if (!resource_host->Init(size.width, size.height, |
174 PP_ToBool(is_always_opaque))) { | 176 PP_ToBool(is_always_opaque), |
| 177 backing_store)) { |
175 delete resource_host; | 178 delete resource_host; |
176 return NULL; | 179 return NULL; |
177 } | 180 } |
178 return resource_host; | 181 return resource_host; |
179 } | 182 } |
180 | 183 |
181 PepperGraphics2DHost::PepperGraphics2DHost(RendererPpapiHost* host, | 184 PepperGraphics2DHost::PepperGraphics2DHost(RendererPpapiHost* host, |
182 PP_Instance instance, | 185 PP_Instance instance, |
183 PP_Resource resource) | 186 PP_Resource resource) |
184 : ResourceHost(host->GetPpapiHost(), instance, resource), | 187 : ResourceHost(host->GetPpapiHost(), instance, resource), |
185 renderer_ppapi_host_(host), | 188 renderer_ppapi_host_(host), |
186 bound_instance_(NULL), | 189 bound_instance_(NULL), |
187 need_flush_ack_(false), | 190 need_flush_ack_(false), |
188 offscreen_flush_pending_(false), | 191 offscreen_flush_pending_(false), |
189 is_always_opaque_(false), | 192 is_always_opaque_(false), |
190 scale_(1.0f), | 193 scale_(1.0f), |
191 is_running_in_process_(host->IsRunningInProcess()), | 194 is_running_in_process_(host->IsRunningInProcess()), |
192 texture_mailbox_modified_(true) {} | 195 texture_mailbox_modified_(true) {} |
193 | 196 |
194 PepperGraphics2DHost::~PepperGraphics2DHost() { | 197 PepperGraphics2DHost::~PepperGraphics2DHost() { |
195 // Unbind from the instance when destroyed if we're still bound. | 198 // Unbind from the instance when destroyed if we're still bound. |
196 if (bound_instance_) | 199 if (bound_instance_) |
197 bound_instance_->BindGraphics(bound_instance_->pp_instance(), 0); | 200 bound_instance_->BindGraphics(bound_instance_->pp_instance(), 0); |
198 } | 201 } |
199 | 202 |
200 bool PepperGraphics2DHost::Init(int width, int height, bool is_always_opaque) { | 203 bool PepperGraphics2DHost::Init( |
| 204 int width, |
| 205 int height, |
| 206 bool is_always_opaque, |
| 207 scoped_refptr<PPB_ImageData_Impl> backing_store) { |
201 // The underlying PPB_ImageData_Impl will validate the dimensions. | 208 // The underlying PPB_ImageData_Impl will validate the dimensions. |
202 image_data_ = new PPB_ImageData_Impl(pp_instance(), | 209 image_data_ = backing_store; |
203 PPB_ImageData_Impl::PLATFORM); | |
204 if (!image_data_->Init(PPB_ImageData_Impl::GetNativeImageDataFormat(), | 210 if (!image_data_->Init(PPB_ImageData_Impl::GetNativeImageDataFormat(), |
205 width, height, true) || | 211 width, height, true) || |
206 !image_data_->Map()) { | 212 !image_data_->Map()) { |
207 image_data_ = NULL; | 213 image_data_ = NULL; |
208 return false; | 214 return false; |
209 } | 215 } |
210 is_always_opaque_ = is_always_opaque; | 216 is_always_opaque_ = is_always_opaque; |
211 scale_ = 1.0f; | 217 scale_ = 1.0f; |
212 return true; | 218 return true; |
213 } | 219 } |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
790 gfx::Point inverse_scaled_point = | 796 gfx::Point inverse_scaled_point = |
791 gfx::ToFlooredPoint(gfx::ScalePoint(*delta, inverse_scale)); | 797 gfx::ToFlooredPoint(gfx::ScalePoint(*delta, inverse_scale)); |
792 if (original_delta != inverse_scaled_point) | 798 if (original_delta != inverse_scaled_point) |
793 return false; | 799 return false; |
794 } | 800 } |
795 | 801 |
796 return true; | 802 return true; |
797 } | 803 } |
798 | 804 |
799 } // namespace content | 805 } // namespace content |
OLD | NEW |