ppb_widget_impl.cc revision 58e6fbe4ee35d65e14b626c557d37565bf8ad179
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) 758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/ppb_image_data_impl.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/plugin_module.h" 10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/resource_helper.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) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : Resource(::ppapi::OBJECT_IS_IMPL, instance), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scale_(1.0f) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(&location_, 0, sizeof(location_)); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PPB_Widget_Impl::~PPB_Widget_Impl() { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PPB_Widget_API* PPB_Widget_Impl::AsPPB_Widget_API() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::Paint(const PP_Rect* rect, PP_Resource image_id) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceNoLock<PPB_ImageData_API> enter(image_id, true); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PaintInternal(gfx::Rect(rect->point.x, rect->point.y, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect->size.width, rect->size.height), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<PPB_ImageData_Impl*>(enter.object())); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::HandleEvent(PP_Resource pp_input_event) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceNoLock<PPB_InputEvent_API> enter(pp_input_event, true); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HandleEventInternal(enter.object()->GetInputEventData()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool PPB_Widget_Impl::GetLocation(PP_Rect* location) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *location = location_; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_TRUE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PPB_Widget_Impl::SetLocation(const PP_Rect* location) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_ = *location; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLocationInternal(location); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PPB_Widget_Impl::SetScale(float scale) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scale_ = scale; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PPB_Widget_Impl::Invalidate(const PP_Rect* dirty) { 6758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PepperPluginInstanceImpl* plugin_instance = 6858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch ResourceHelper::GetPluginInstance(this); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!plugin_instance) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PPP_Widget_Dev* widget = static_cast<const PPP_Widget_Dev*>( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_instance->module()->GetPluginInterface(PPP_WIDGET_DEV_INTERFACE)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!widget) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Invalidate(pp_instance(), pp_resource(), dirty); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80