Home | History | Annotate | Download | only in dev
      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