• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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