| Index: webkit/plugins/ppapi/ppb_scrollbar_impl.cc
|
| ===================================================================
|
| --- webkit/plugins/ppapi/ppb_scrollbar_impl.cc (revision 95420)
|
| +++ webkit/plugins/ppapi/ppb_scrollbar_impl.cc (working copy)
|
| @@ -7,6 +7,7 @@
|
| #include "base/logging.h"
|
| #include "base/message_loop.h"
|
| #include "ppapi/c/dev/ppp_scrollbar_dev.h"
|
| +#include "ppapi/thunk/enter.h"
|
| #include "ppapi/thunk/thunk.h"
|
| #include "skia/ext/platform_canvas.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
|
| @@ -18,13 +19,16 @@
|
| #include "webkit/plugins/ppapi/plugin_module.h"
|
| #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
|
| #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
|
| +#include "webkit/plugins/ppapi/ppb_scrollbar_group_impl.h"
|
| #include "webkit/glue/webkit_glue.h"
|
|
|
| #if defined(OS_WIN)
|
| #include "base/win/windows_version.h"
|
| #endif
|
|
|
| +using ppapi::thunk::EnterResourceNoLock;
|
| using ppapi::thunk::PPB_Scrollbar_API;
|
| +using ppapi::thunk::PPB_ScrollbarGroup_API;
|
| using WebKit::WebInputEvent;
|
| using WebKit::WebRect;
|
| using WebKit::WebScrollbar;
|
| @@ -32,89 +36,57 @@
|
| namespace webkit {
|
| namespace ppapi {
|
|
|
| -namespace {
|
| +// static
|
| +PP_Resource PPB_Scrollbar_Impl::Create(PluginInstance* instance,
|
| + PP_Resource scrollbar_group,
|
| + bool vertical) {
|
| + EnterResourceNoLock<PPB_ScrollbarGroup_API> enter_request(
|
| + scrollbar_group, true);
|
| + if (enter_request.failed())
|
| + return PP_ERROR_BADARGUMENT;
|
| + PPB_ScrollbarGroup_Impl* scrollbar_group_impl =
|
| + static_cast<PPB_ScrollbarGroup_Impl*>(enter_request.object());
|
|
|
| -// Version 0.3 implementation --------------------------------------------------
|
| -//
|
| -// TODO(brettw) remove this when we remove support for version 0.3 interface.
|
| -// This just forwards everything to the new version of the interface except for
|
| -// the GetThickness call which has no parameters.
|
| -
|
| -PP_Resource Create(PP_Instance instance, PP_Bool vertical) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->Create(instance, vertical);
|
| + scoped_refptr<PPB_Scrollbar_Impl> scrollbar(
|
| + new PPB_Scrollbar_Impl(instance, scrollbar_group_impl));
|
| + scrollbar->Init(vertical);
|
| + return scrollbar->GetReference();
|
| }
|
|
|
| -PP_Bool IsScrollbar(PP_Resource resource) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource);
|
| +PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(
|
| + PluginInstance* instance,
|
| + PPB_ScrollbarGroup_Impl* scrollbar_group)
|
| + : PPB_Widget_Impl(instance),
|
| + scrollbar_group_(scrollbar_group) {
|
| }
|
|
|
| -uint32_t GetThickness() {
|
| - return WebScrollbar::defaultThickness();
|
| +PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
|
| }
|
|
|
| -uint32_t GetValue(PP_Resource resource) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource);
|
| -}
|
| -
|
| -void SetValue(PP_Resource resource, uint32_t value) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetValue(resource, value);
|
| -}
|
| -
|
| -void SetDocumentSize(PP_Resource resource, uint32_t size) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetDocumentSize(resource,
|
| - size);
|
| -}
|
| -
|
| -void SetTickMarks(PP_Resource resource,
|
| - const PP_Rect* tick_marks,
|
| - uint32_t count) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetTickMarks(resource,
|
| - tick_marks,
|
| - count);
|
| -}
|
| -
|
| -void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) {
|
| - return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->ScrollBy(resource,
|
| - unit,
|
| - multiplier);
|
| -}
|
| -
|
| -const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
|
| - &Create,
|
| - &IsScrollbar,
|
| - &GetThickness,
|
| - &GetValue,
|
| - &SetValue,
|
| - &SetDocumentSize,
|
| - &SetTickMarks,
|
| - &ScrollBy
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical)
|
| - : PPB_Widget_Impl(instance) {
|
| +void PPB_Scrollbar_Impl::Init(bool vertical) {
|
| scrollbar_.reset(WebScrollbar::create(
|
| static_cast<WebKit::WebScrollbarClient*>(this),
|
| + scrollbar_group_->GetWebScrollbarGroup(),
|
| vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
|
| }
|
|
|
| -PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
|
| -}
|
| -
|
| PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() {
|
| return this;
|
| }
|
|
|
| -// static
|
| -const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() {
|
| - return &ppb_scrollbar_0_3;
|
| -}
|
| -
|
| uint32_t PPB_Scrollbar_Impl::GetThickness() {
|
| return WebScrollbar::defaultThickness();
|
| }
|
|
|
| +bool PPB_Scrollbar_Impl::IsOverlay() {
|
| +// TODO(jam): take this out once WebKit is rolled.
|
| +#if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
|
| + return scrollbar_->isOverlay();
|
| +#else
|
| + return false;
|
| +#endif
|
| +}
|
| +
|
| uint32_t PPB_Scrollbar_Impl::GetValue() {
|
| return scrollbar_->value();
|
| }
|
| @@ -197,13 +169,31 @@
|
| const PPP_Scrollbar_Dev* ppp_scrollbar =
|
| static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
|
| GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
|
| - if (!ppp_scrollbar)
|
| - return;
|
| + if (!ppp_scrollbar) {
|
| + // Try the old version.
|
| + ppp_scrollbar =
|
| + static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
|
| + GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE_0_2));
|
| + if (!ppp_scrollbar)
|
| + return;
|
| + }
|
| ScopedResourceId resource(this);
|
| ppp_scrollbar->ValueChanged(
|
| instance()->pp_instance(), resource.id, scrollbar_->value());
|
| }
|
|
|
| +void PPB_Scrollbar_Impl::overlayChanged(WebScrollbar* scrollbar) {
|
| + const PPP_Scrollbar_Dev* ppp_scrollbar =
|
| + static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
|
| + GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
|
| + if (!ppp_scrollbar)
|
| + return;
|
| + ScopedResourceId resource(this);
|
| + ppp_scrollbar->OverlayChanged(
|
| + instance()->pp_instance(), resource.id,
|
| + PP_FromBool(IsOverlay()));
|
| +}
|
| +
|
| void PPB_Scrollbar_Impl::invalidateScrollbarRect(
|
| WebKit::WebScrollbar* scrollbar,
|
| const WebKit::WebRect& rect) {
|
|
|