15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/ppb_widget_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/renderer/pepper/host_globals.h" 858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/ppb_image_data_impl.h" 10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/plugin_module.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppp_widget_dev.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_input_event_api.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_widget_api.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::EnterResourceNoLock; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::PPB_ImageData_API; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::PPB_InputEvent_API; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::PPB_Widget_API; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PPB_Widget_Impl::PPB_Widget_Impl(PP_Instance instance) 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : Resource(ppapi::OBJECT_IS_IMPL, instance), scale_(1.0f) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(&location_, 0, sizeof(location_)); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPPB_Widget_Impl::~PPB_Widget_Impl() {} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPPB_Widget_API* PPB_Widget_Impl::AsPPB_Widget_API() { return this; } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::Paint(const PP_Rect* rect, PP_Resource image_id) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceNoLock<PPB_ImageData_API> enter(image_id, true); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return PaintInternal( 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gfx::Rect( 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch rect->point.x, rect->point.y, rect->size.width, rect->size.height), 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch static_cast<PPB_ImageData_Impl*>(enter.object())); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::HandleEvent(PP_Resource pp_input_event) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceNoLock<PPB_InputEvent_API> enter(pp_input_event, true); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HandleEventInternal(enter.object()->GetInputEventData()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::GetLocation(PP_Rect* location) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *location = location_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_TRUE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PPB_Widget_Impl::SetLocation(const PP_Rect* location) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_ = *location; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLocationInternal(location); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid PPB_Widget_Impl::SetScale(float scale) { scale_ = scale; } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PPB_Widget_Impl::Invalidate(const PP_Rect* dirty) { 6258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PepperPluginInstanceImpl* plugin_instance = 632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch HostGlobals::Get()->GetInstance(pp_instance()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!plugin_instance) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PPP_Widget_Dev* widget = static_cast<const PPP_Widget_Dev*>( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_instance->module()->GetPluginInterface(PPP_WIDGET_DEV_INTERFACE)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!widget) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Invalidate(pp_instance(), pp_resource(), dirty); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 74