Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(398)

Unified Diff: webkit/plugins/ppapi/ppb_scrollbar_impl.cc

Issue 7538006: Pepper and WebKit API change to support a plugin knowing if a scrollbar is an overlay one. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Get rid of ScrollbarGroup's methods and the ResizeClient interface Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698