1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ppapi/cpp/dev/widget_client_dev.h" 6 7#include "ppapi/c/dev/ppp_scrollbar_dev.h" 8#include "ppapi/c/dev/ppp_widget_dev.h" 9#include "ppapi/cpp/dev/scrollbar_dev.h" 10#include "ppapi/cpp/dev/widget_dev.h" 11#include "ppapi/cpp/instance.h" 12#include "ppapi/cpp/instance_handle.h" 13#include "ppapi/cpp/module.h" 14#include "ppapi/cpp/module_impl.h" 15#include "ppapi/cpp/rect.h" 16 17namespace pp { 18 19namespace { 20 21// PPP_Widget_Dev -------------------------------------------------------------- 22 23const char kPPPWidgetInterface[] = PPP_WIDGET_DEV_INTERFACE; 24 25void Widget_Invalidate(PP_Instance instance, 26 PP_Resource widget_id, 27 const PP_Rect* dirty_rect) { 28 void* object = Instance::GetPerInstanceObject(instance, kPPPWidgetInterface); 29 if (!object) 30 return; 31 return static_cast<WidgetClient_Dev*>(object)->InvalidateWidget( 32 Widget_Dev(widget_id), *dirty_rect); 33} 34 35static PPP_Widget_Dev widget_interface = { 36 &Widget_Invalidate, 37}; 38 39// PPP_Scrollbar_Dev ----------------------------------------------------------- 40 41const char kPPPScrollbarInterface[] = PPP_SCROLLBAR_DEV_INTERFACE; 42 43void Scrollbar_ValueChanged(PP_Instance instance, 44 PP_Resource scrollbar_id, 45 uint32_t value) { 46 void* object = 47 Instance::GetPerInstanceObject(instance, kPPPScrollbarInterface); 48 if (!object) 49 return; 50 return static_cast<WidgetClient_Dev*>(object)->ScrollbarValueChanged( 51 Scrollbar_Dev(scrollbar_id), value); 52} 53 54void Scrollbar_OverlayChanged(PP_Instance instance, 55 PP_Resource scrollbar_id, 56 PP_Bool overlay) { 57 void* object = 58 Instance::GetPerInstanceObject(instance, kPPPScrollbarInterface); 59 if (!object) 60 return; 61 return static_cast<WidgetClient_Dev*>(object)->ScrollbarOverlayChanged( 62 Scrollbar_Dev(scrollbar_id), PP_ToBool(overlay)); 63} 64 65static PPP_Scrollbar_Dev scrollbar_interface = { 66 &Scrollbar_ValueChanged, 67 &Scrollbar_OverlayChanged, 68}; 69 70} // namespace 71 72WidgetClient_Dev::WidgetClient_Dev(Instance* instance) 73 : associated_instance_(instance) { 74 Module::Get()->AddPluginInterface(kPPPWidgetInterface, &widget_interface); 75 instance->AddPerInstanceObject(kPPPWidgetInterface, this); 76 Module::Get()->AddPluginInterface(kPPPScrollbarInterface, 77 &scrollbar_interface); 78 instance->AddPerInstanceObject(kPPPScrollbarInterface, this); 79} 80 81WidgetClient_Dev::~WidgetClient_Dev() { 82 Instance::RemovePerInstanceObject(associated_instance_, 83 kPPPScrollbarInterface, this); 84 Instance::RemovePerInstanceObject(associated_instance_, 85 kPPPWidgetInterface, this); 86} 87 88} // namespace pp 89