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
Widget_Invalidate(PP_Instance instance,PP_Resource widget_id,const PP_Rect * dirty_rect)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
Scrollbar_ValueChanged(PP_Instance instance,PP_Resource scrollbar_id,uint32_t value)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
Scrollbar_OverlayChanged(PP_Instance instance,PP_Resource scrollbar_id,PP_Bool overlay)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
WidgetClient_Dev(Instance * instance)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
~WidgetClient_Dev()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