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) { |