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 17 namespace pp { 18 19 namespace { 20 21 // PPP_Widget_Dev -------------------------------------------------------------- 22 23 const char kPPPWidgetInterface[] = PPP_WIDGET_DEV_INTERFACE; 24 25 void 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 35 static PPP_Widget_Dev widget_interface = { 36 &Widget_Invalidate, 37 }; 38 39 // PPP_Scrollbar_Dev ----------------------------------------------------------- 40 41 const char kPPPScrollbarInterface[] = PPP_SCROLLBAR_DEV_INTERFACE; 42 43 void 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 54 void 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 65 static PPP_Scrollbar_Dev scrollbar_interface = { 66 &Scrollbar_ValueChanged, 67 &Scrollbar_OverlayChanged, 68 }; 69 70 } // namespace 71 72 WidgetClient_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 81 WidgetClient_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