| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 154 |
| 155 PPB_Graphics2D_Impl::PPB_Graphics2D_Impl(PP_Instance instance) | 155 PPB_Graphics2D_Impl::PPB_Graphics2D_Impl(PP_Instance instance) |
| 156 : Resource(instance), | 156 : Resource(instance), |
| 157 bound_instance_(NULL), | 157 bound_instance_(NULL), |
| 158 offscreen_flush_pending_(false), | 158 offscreen_flush_pending_(false), |
| 159 is_always_opaque_(false), | 159 is_always_opaque_(false), |
| 160 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 160 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 161 } | 161 } |
| 162 | 162 |
| 163 PPB_Graphics2D_Impl::~PPB_Graphics2D_Impl() { | 163 PPB_Graphics2D_Impl::~PPB_Graphics2D_Impl() { |
| 164 // LastPluginRefWasDeleted should have aborted all pending callbacks. |
| 165 DCHECK(painted_flush_callback_.is_null()); |
| 166 DCHECK(unpainted_flush_callback_.is_null()); |
| 164 } | 167 } |
| 165 | 168 |
| 166 // static | 169 // static |
| 167 PP_Resource PPB_Graphics2D_Impl::Create(PP_Instance instance, | 170 PP_Resource PPB_Graphics2D_Impl::Create(PP_Instance instance, |
| 168 const PP_Size& size, | 171 const PP_Size& size, |
| 169 PP_Bool is_always_opaque) { | 172 PP_Bool is_always_opaque) { |
| 170 scoped_refptr<PPB_Graphics2D_Impl> graphics_2d( | 173 scoped_refptr<PPB_Graphics2D_Impl> graphics_2d( |
| 171 new PPB_Graphics2D_Impl(instance)); | 174 new PPB_Graphics2D_Impl(instance)); |
| 172 if (!graphics_2d->Init(size.width, size.height, | 175 if (!graphics_2d->Init(size.width, size.height, |
| 173 PPBoolToBool(is_always_opaque))) { | 176 PPBoolToBool(is_always_opaque))) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 187 } | 190 } |
| 188 is_always_opaque_ = is_always_opaque; | 191 is_always_opaque_ = is_always_opaque; |
| 189 return true; | 192 return true; |
| 190 } | 193 } |
| 191 | 194 |
| 192 ::ppapi::thunk::PPB_Graphics2D_API* | 195 ::ppapi::thunk::PPB_Graphics2D_API* |
| 193 PPB_Graphics2D_Impl::AsPPB_Graphics2D_API() { | 196 PPB_Graphics2D_Impl::AsPPB_Graphics2D_API() { |
| 194 return this; | 197 return this; |
| 195 } | 198 } |
| 196 | 199 |
| 197 PPB_Graphics2D_Impl* PPB_Graphics2D_Impl::AsPPB_Graphics2D_Impl() { | 200 void PPB_Graphics2D_Impl::LastPluginRefWasDeleted() { |
| 198 return this; | 201 Resource::LastPluginRefWasDeleted(); |
| 202 |
| 203 // Abort any pending callbacks. |
| 204 if (!unpainted_flush_callback_.is_null()) |
| 205 unpainted_flush_callback_.Execute(PP_ERROR_ABORTED); |
| 206 if (!painted_flush_callback_.is_null()) |
| 207 painted_flush_callback_.Execute(PP_ERROR_ABORTED); |
| 199 } | 208 } |
| 200 | 209 |
| 201 PP_Bool PPB_Graphics2D_Impl::Describe(PP_Size* size, | 210 PP_Bool PPB_Graphics2D_Impl::Describe(PP_Size* size, |
| 202 PP_Bool* is_always_opaque) { | 211 PP_Bool* is_always_opaque) { |
| 203 size->width = image_data_->width(); | 212 size->width = image_data_->width(); |
| 204 size->height = image_data_->height(); | 213 size->height = image_data_->height(); |
| 205 *is_always_opaque = PP_FromBool(is_always_opaque_); | 214 *is_always_opaque = PP_FromBool(is_always_opaque_); |
| 206 return PP_TRUE; | 215 return PP_TRUE; |
| 207 } | 216 } |
| 208 | 217 |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 // |unpainted_flush_callback_| in the header for more. | 542 // |unpainted_flush_callback_| in the header for more. |
| 534 if (!unpainted_flush_callback_.is_null()) { | 543 if (!unpainted_flush_callback_.is_null()) { |
| 535 DCHECK(painted_flush_callback_.is_null()); | 544 DCHECK(painted_flush_callback_.is_null()); |
| 536 std::swap(painted_flush_callback_, unpainted_flush_callback_); | 545 std::swap(painted_flush_callback_, unpainted_flush_callback_); |
| 537 } | 546 } |
| 538 } | 547 } |
| 539 | 548 |
| 540 void PPB_Graphics2D_Impl::ViewFlushedPaint() { | 549 void PPB_Graphics2D_Impl::ViewFlushedPaint() { |
| 541 // Notify any "painted" callback. See |unpainted_flush_callback_| in the | 550 // Notify any "painted" callback. See |unpainted_flush_callback_| in the |
| 542 // header for more. | 551 // header for more. |
| 543 if (!painted_flush_callback_.is_null()) { | 552 if (!painted_flush_callback_.is_null()) |
| 544 // We must clear this variable before issuing the callback. It will be | 553 painted_flush_callback_.Execute(PP_OK); |
| 545 // common for the plugin to issue another invalidate in response to a flush | |
| 546 // callback, and we don't want to think that a callback is already pending. | |
| 547 FlushCallbackData callback; | |
| 548 std::swap(callback, painted_flush_callback_); | |
| 549 callback.Execute(PP_OK); | |
| 550 } | |
| 551 } | 554 } |
| 552 | 555 |
| 553 void PPB_Graphics2D_Impl::ExecutePaintImageData(PPB_ImageData_Impl* image, | 556 void PPB_Graphics2D_Impl::ExecutePaintImageData(PPB_ImageData_Impl* image, |
| 554 int x, int y, | 557 int x, int y, |
| 555 const gfx::Rect& src_rect, | 558 const gfx::Rect& src_rect, |
| 556 gfx::Rect* invalidated_rect) { | 559 gfx::Rect* invalidated_rect) { |
| 557 // Ensure the source image is mapped to read from it. | 560 // Ensure the source image is mapped to read from it. |
| 558 ImageDataAutoMapper auto_mapper(image); | 561 ImageDataAutoMapper auto_mapper(image); |
| 559 if (!auto_mapper.is_valid()) | 562 if (!auto_mapper.is_valid()) |
| 560 return; | 563 return; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 } | 643 } |
| 641 | 644 |
| 642 bool PPB_Graphics2D_Impl::HasPendingFlush() const { | 645 bool PPB_Graphics2D_Impl::HasPendingFlush() const { |
| 643 return !unpainted_flush_callback_.is_null() || | 646 return !unpainted_flush_callback_.is_null() || |
| 644 !painted_flush_callback_.is_null() || | 647 !painted_flush_callback_.is_null() || |
| 645 offscreen_flush_pending_; | 648 offscreen_flush_pending_; |
| 646 } | 649 } |
| 647 | 650 |
| 648 } // namespace ppapi | 651 } // namespace ppapi |
| 649 } // namespace webkit | 652 } // namespace webkit |
| OLD | NEW |