Commit a240fd6b authored by jam@chromium.org's avatar jam@chromium.org

Pepper and WebKit API change to support a plugin knowing if a scrollbar is an overlay one.

BUG=90530
Review URL: http://codereview.chromium.org/7538006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96244 0039d316-1c4b-4281-b951-d872f2087c98
parent f1c2c71f
...@@ -23,11 +23,12 @@ PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_ScrollBy_Dev, 4); ...@@ -23,11 +23,12 @@ PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_ScrollBy_Dev, 4);
#define PPB_SCROLLBAR_DEV_INTERFACE_0_3 "PPB_Scrollbar(Dev);0.3" #define PPB_SCROLLBAR_DEV_INTERFACE_0_3 "PPB_Scrollbar(Dev);0.3"
#define PPB_SCROLLBAR_DEV_INTERFACE_0_4 "PPB_Scrollbar(Dev);0.4" #define PPB_SCROLLBAR_DEV_INTERFACE_0_4 "PPB_Scrollbar(Dev);0.4"
#define PPB_SCROLLBAR_DEV_INTERFACE PPB_SCROLLBAR_DEV_INTERFACE_0_4 #define PPB_SCROLLBAR_DEV_INTERFACE_0_5 "PPB_Scrollbar(Dev);0.5"
#define PPB_SCROLLBAR_DEV_INTERFACE PPB_SCROLLBAR_DEV_INTERFACE_0_5
// The interface for a scrollbar. A scrollbar is a widget, so the functions // The interface for a scrollbar. A scrollbar is a widget, so the functions
// in PPB_Widget can also be used with scrollbar objects. // in PPB_Widget can also be used with scrollbar objects.
struct PPB_Scrollbar_0_4_Dev { struct PPB_Scrollbar_0_5_Dev {
// Create a new scrollbar. Returns 0 if the instance is invalid. // Create a new scrollbar. Returns 0 if the instance is invalid.
PP_Resource (*Create)(PP_Instance instance, PP_Resource (*Create)(PP_Instance instance,
PP_Bool vertical); PP_Bool vertical);
...@@ -39,6 +40,9 @@ struct PPB_Scrollbar_0_4_Dev { ...@@ -39,6 +40,9 @@ struct PPB_Scrollbar_0_4_Dev {
// Gets the thickness of a scrollbar. // Gets the thickness of a scrollbar.
uint32_t (*GetThickness)(PP_Resource resource); uint32_t (*GetThickness)(PP_Resource resource);
// Returns PP_TRUE if the system scrollbar style is an overlap scrollbar.
PP_Bool (*IsOverlay)(PP_Resource scrollbar);
// Get/set the value of the scrollbar. // Get/set the value of the scrollbar.
uint32_t (*GetValue)(PP_Resource scrollbar); uint32_t (*GetValue)(PP_Resource scrollbar);
...@@ -64,6 +68,25 @@ struct PPB_Scrollbar_0_4_Dev { ...@@ -64,6 +68,25 @@ struct PPB_Scrollbar_0_4_Dev {
int32_t multiplier); int32_t multiplier);
}; };
// Old version without IsOverlay.
struct PPB_Scrollbar_0_4_Dev {
PP_Resource (*Create)(PP_Instance instance,
PP_Bool vertical);
PP_Bool (*IsScrollbar)(PP_Resource resource);
uint32_t (*GetThickness)(PP_Resource resource);
uint32_t (*GetValue)(PP_Resource scrollbar);
void (*SetValue)(PP_Resource scrollbar,
uint32_t value);
void (*SetDocumentSize)(PP_Resource scrollbar,
uint32_t size);
void (*SetTickMarks)(PP_Resource scrollbar,
const struct PP_Rect* tick_marks,
uint32_t count);
void (*ScrollBy)(PP_Resource scrollbar,
PP_ScrollBy_Dev unit,
int32_t multiplier);
};
// Old version with no resource argument to GetThickness. // Old version with no resource argument to GetThickness.
struct PPB_Scrollbar_0_3_Dev { struct PPB_Scrollbar_0_3_Dev {
PP_Resource (*Create)(PP_Instance instance, PP_Resource (*Create)(PP_Instance instance,
...@@ -83,7 +106,6 @@ struct PPB_Scrollbar_0_3_Dev { ...@@ -83,7 +106,6 @@ struct PPB_Scrollbar_0_3_Dev {
int32_t multiplier); int32_t multiplier);
}; };
typedef struct PPB_Scrollbar_0_4_Dev PPB_Scrollbar_Dev; typedef struct PPB_Scrollbar_0_5_Dev PPB_Scrollbar_Dev;
#endif /* PPAPI_C_DEV_PPB_SCROLLBAR_DEV_H_ */ #endif /* PPAPI_C_DEV_PPB_SCROLLBAR_DEV_H_ */
...@@ -5,18 +5,26 @@ ...@@ -5,18 +5,26 @@
#ifndef PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_ #ifndef PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_
#define PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_ #define PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h" #include "ppapi/c/pp_stdint.h"
// Interface for the plugin to implement when using a scrollbar widget. // Interface for the plugin to implement when using a scrollbar widget.
#define PPP_SCROLLBAR_DEV_INTERFACE "PPP_Scrollbar(Dev);0.2" #define PPP_SCROLLBAR_DEV_INTERFACE_0_2 "PPP_Scrollbar(Dev);0.2"
#define PPP_SCROLLBAR_DEV_INTERFACE_0_3 "PPP_Scrollbar(Dev);0.3"
#define PPP_SCROLLBAR_DEV_INTERFACE PPP_SCROLLBAR_DEV_INTERFACE_0_3
struct PPP_Scrollbar_Dev { struct PPP_Scrollbar_Dev {
// Informs the instance that the scrollbar's value has changed. // Informs the instance that the scrollbar's value has changed.
void (*ValueChanged)(PP_Instance instance, void (*ValueChanged)(PP_Instance instance,
PP_Resource scrollbar, PP_Resource scrollbar,
uint32_t value); uint32_t value);
// Informs the instance that the user has changed the system scrollbar style.
void (*OverlayChanged)(PP_Instance instance,
PP_Resource scrollbar,
PP_Bool overlay);
}; };
#endif /* PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_ */ #endif /* PPAPI_C_DEV_PPP_SCROLLBAR_DEV_H_ */
......
...@@ -41,6 +41,13 @@ uint32_t Scrollbar_Dev::GetThickness() { ...@@ -41,6 +41,13 @@ uint32_t Scrollbar_Dev::GetThickness() {
return get_interface<PPB_Scrollbar_Dev>()->GetThickness(pp_resource()); return get_interface<PPB_Scrollbar_Dev>()->GetThickness(pp_resource());
} }
bool Scrollbar_Dev::IsOverlay() {
if (!has_interface<PPB_Scrollbar_Dev>())
return false;
return
PP_ToBool(get_interface<PPB_Scrollbar_Dev>()->IsOverlay(pp_resource()));
}
uint32_t Scrollbar_Dev::GetValue() { uint32_t Scrollbar_Dev::GetValue() {
if (!has_interface<PPB_Scrollbar_Dev>()) if (!has_interface<PPB_Scrollbar_Dev>())
return 0; return 0;
......
...@@ -26,6 +26,7 @@ class Scrollbar_Dev : public Widget_Dev { ...@@ -26,6 +26,7 @@ class Scrollbar_Dev : public Widget_Dev {
// PPB_Scrollbar methods: // PPB_Scrollbar methods:
uint32_t GetThickness(); uint32_t GetThickness();
bool IsOverlay();
uint32_t GetValue(); uint32_t GetValue();
void SetValue(uint32_t value); void SetValue(uint32_t value);
void SetDocumentSize(uint32_t size); void SetDocumentSize(uint32_t size);
......
...@@ -51,8 +51,20 @@ void Scrollbar_ValueChanged(PP_Instance instance, ...@@ -51,8 +51,20 @@ void Scrollbar_ValueChanged(PP_Instance instance,
Scrollbar_Dev(scrollbar_id), value); Scrollbar_Dev(scrollbar_id), value);
} }
void Scrollbar_OverlayChanged(PP_Instance instance,
PP_Resource scrollbar_id,
PP_Bool overlay) {
void* object =
pp::Instance::GetPerInstanceObject(instance, kPPPScrollbarInterface);
if (!object)
return;
return static_cast<WidgetClient_Dev*>(object)->ScrollbarOverlayChanged(
Scrollbar_Dev(scrollbar_id), PP_ToBool(overlay));
}
static PPP_Scrollbar_Dev scrollbar_interface = { static PPP_Scrollbar_Dev scrollbar_interface = {
&Scrollbar_ValueChanged, &Scrollbar_ValueChanged,
&Scrollbar_OverlayChanged,
}; };
} // namespace } // namespace
......
...@@ -35,6 +35,13 @@ class WidgetClient_Dev { ...@@ -35,6 +35,13 @@ class WidgetClient_Dev {
virtual void ScrollbarValueChanged(Scrollbar_Dev scrollbar, virtual void ScrollbarValueChanged(Scrollbar_Dev scrollbar,
uint32_t value) = 0; uint32_t value) = 0;
/**
* Notification that the given scrollbar's overlay type has changed. This is
* the implementation for PPP_Scrollbar_Dev.
*/
virtual void ScrollbarOverlayChanged(Scrollbar_Dev scrollbar,
bool type) = 0;
private: private:
Instance* associated_instance_; Instance* associated_instance_;
}; };
......
...@@ -31,7 +31,6 @@ class Resource; ...@@ -31,7 +31,6 @@ class Resource;
class Surface3D_Dev; class Surface3D_Dev;
class URLLoader; class URLLoader;
class Var; class Var;
class Widget_Dev;
class Instance { class Instance {
public: public:
......
...@@ -60,3 +60,7 @@ void TestScrollbar::ScrollbarValueChanged(pp::Scrollbar_Dev scrollbar, ...@@ -60,3 +60,7 @@ void TestScrollbar::ScrollbarValueChanged(pp::Scrollbar_Dev scrollbar,
if (scrollbar == scrollbar_) if (scrollbar == scrollbar_)
scrollbar_value_changed_ = true; scrollbar_value_changed_ = true;
} }
void TestScrollbar::ScrollbarOverlayChanged(pp::Scrollbar_Dev scrollbar,
bool type) {
}
...@@ -26,6 +26,8 @@ class TestScrollbar : public TestCase, ...@@ -26,6 +26,8 @@ class TestScrollbar : public TestCase,
const pp::Rect& dirty_rect); const pp::Rect& dirty_rect);
virtual void ScrollbarValueChanged(pp::Scrollbar_Dev scrollbar, virtual void ScrollbarValueChanged(pp::Scrollbar_Dev scrollbar,
uint32_t value); uint32_t value);
virtual void ScrollbarOverlayChanged(pp::Scrollbar_Dev scrollbar,
bool type);
pp::Scrollbar_Dev scrollbar_; pp::Scrollbar_Dev scrollbar_;
bool scrollbar_value_changed_; bool scrollbar_value_changed_;
......
...@@ -15,6 +15,7 @@ class PPB_Scrollbar_API { ...@@ -15,6 +15,7 @@ class PPB_Scrollbar_API {
virtual ~PPB_Scrollbar_API() {} virtual ~PPB_Scrollbar_API() {}
virtual uint32_t GetThickness() = 0; virtual uint32_t GetThickness() = 0;
virtual bool IsOverlay() = 0;
virtual uint32_t GetValue() = 0; virtual uint32_t GetValue() = 0;
virtual void SetValue(uint32_t value) = 0; virtual void SetValue(uint32_t value) = 0;
virtual void SetDocumentSize(uint32_t size) = 0; virtual void SetDocumentSize(uint32_t size) = 0;
......
...@@ -33,6 +33,13 @@ uint32_t GetThickness(PP_Resource scrollbar) { ...@@ -33,6 +33,13 @@ uint32_t GetThickness(PP_Resource scrollbar) {
return enter.object()->GetThickness(); return enter.object()->GetThickness();
} }
PP_Bool IsOverlay(PP_Resource scrollbar) {
EnterScrollbar enter(scrollbar, true);
if (enter.failed())
return PP_FALSE;
return PP_FromBool(enter.object()->IsOverlay());
}
uint32_t GetValue(PP_Resource scrollbar) { uint32_t GetValue(PP_Resource scrollbar) {
EnterScrollbar enter(scrollbar, true); EnterScrollbar enter(scrollbar, true);
if (enter.failed()) if (enter.failed())
...@@ -66,10 +73,11 @@ void ScrollBy(PP_Resource scrollbar, PP_ScrollBy_Dev unit, int32_t multiplier) { ...@@ -66,10 +73,11 @@ void ScrollBy(PP_Resource scrollbar, PP_ScrollBy_Dev unit, int32_t multiplier) {
enter.object()->ScrollBy(unit, multiplier); enter.object()->ScrollBy(unit, multiplier);
} }
const PPB_Scrollbar_0_4_Dev g_ppb_scrollbar_thunk = { const PPB_Scrollbar_0_5_Dev g_ppb_scrollbar_thunk = {
&Create, &Create,
&IsScrollbar, &IsScrollbar,
&GetThickness, &GetThickness,
&IsOverlay,
&GetValue, &GetValue,
&SetValue, &SetValue,
&SetDocumentSize, &SetDocumentSize,
...@@ -79,7 +87,7 @@ const PPB_Scrollbar_0_4_Dev g_ppb_scrollbar_thunk = { ...@@ -79,7 +87,7 @@ const PPB_Scrollbar_0_4_Dev g_ppb_scrollbar_thunk = {
} // namespace } // namespace
const PPB_Scrollbar_0_4_Dev* GetPPB_Scrollbar_Thunk() { const PPB_Scrollbar_0_5_Dev* GetPPB_Scrollbar_Thunk() {
return &g_ppb_scrollbar_thunk; return &g_ppb_scrollbar_thunk;
} }
......
...@@ -40,7 +40,7 @@ struct PPB_LayerCompositor_Dev; ...@@ -40,7 +40,7 @@ struct PPB_LayerCompositor_Dev;
struct PPB_Messaging; struct PPB_Messaging;
struct PPB_MouseInputEvent; struct PPB_MouseInputEvent;
struct PPB_QueryPolicy_Dev; struct PPB_QueryPolicy_Dev;
struct PPB_Scrollbar_0_4_Dev; struct PPB_Scrollbar_0_5_Dev;
struct PPB_Surface3D_Dev; struct PPB_Surface3D_Dev;
struct PPB_Transport_Dev; struct PPB_Transport_Dev;
struct PPB_URLLoader; struct PPB_URLLoader;
...@@ -95,7 +95,7 @@ const PPB_LayerCompositor_Dev* GetPPB_LayerCompositor_Thunk(); ...@@ -95,7 +95,7 @@ const PPB_LayerCompositor_Dev* GetPPB_LayerCompositor_Thunk();
const PPB_QueryPolicy_Dev* GetPPB_QueryPolicy_Thunk(); const PPB_QueryPolicy_Dev* GetPPB_QueryPolicy_Thunk();
const PPB_Messaging* GetPPB_Messaging_Thunk(); const PPB_Messaging* GetPPB_Messaging_Thunk();
const PPB_MouseInputEvent* GetPPB_MouseInputEvent_Thunk(); const PPB_MouseInputEvent* GetPPB_MouseInputEvent_Thunk();
const PPB_Scrollbar_0_4_Dev* GetPPB_Scrollbar_Thunk(); const PPB_Scrollbar_0_5_Dev* GetPPB_Scrollbar_Thunk();
const PPB_Surface3D_Dev* GetPPB_Surface3D_Thunk(); const PPB_Surface3D_Dev* GetPPB_Surface3D_Thunk();
const PPB_Transport_Dev* GetPPB_Transport_Thunk(); const PPB_Transport_Dev* GetPPB_Transport_Thunk();
const PPB_URLLoader* GetPPB_URLLoader_Thunk(); const PPB_URLLoader* GetPPB_URLLoader_Thunk();
......
...@@ -303,9 +303,11 @@ const void* GetInterface(const char* name) { ...@@ -303,9 +303,11 @@ const void* GetInterface(const char* name) {
if (strcmp(name, PPB_QUERY_POLICY_DEV_INTERFACE_0_1) == 0) if (strcmp(name, PPB_QUERY_POLICY_DEV_INTERFACE_0_1) == 0)
return ::ppapi::thunk::GetPPB_QueryPolicy_Thunk(); return ::ppapi::thunk::GetPPB_QueryPolicy_Thunk();
if (strcmp(name, PPB_SCROLLBAR_DEV_INTERFACE_0_4) == 0) if (strcmp(name, PPB_SCROLLBAR_DEV_INTERFACE_0_4) == 0)
return ::ppapi::thunk::GetPPB_Scrollbar_Thunk(); return PPB_Scrollbar_Impl::Get0_4Interface();
if (strcmp(name, PPB_SCROLLBAR_DEV_INTERFACE_0_3) == 0) if (strcmp(name, PPB_SCROLLBAR_DEV_INTERFACE_0_3) == 0)
return PPB_Scrollbar_Impl::Get0_3Interface(); return PPB_Scrollbar_Impl::Get0_3Interface();
if (strcmp(name, PPB_SCROLLBAR_DEV_INTERFACE_0_5) == 0)
return ::ppapi::thunk::GetPPB_Scrollbar_Thunk();
if (strcmp(name, PPB_UMA_PRIVATE_INTERFACE) == 0) if (strcmp(name, PPB_UMA_PRIVATE_INTERFACE) == 0)
return PPB_UMA_Private_Impl::GetInterface(); return PPB_UMA_Private_Impl::GetInterface();
if (strcmp(name, PPB_URLLOADER_INTERFACE_1_0) == 0) if (strcmp(name, PPB_URLLOADER_INTERFACE_1_0) == 0)
......
...@@ -48,10 +48,14 @@ PP_Bool IsScrollbar(PP_Resource resource) { ...@@ -48,10 +48,14 @@ PP_Bool IsScrollbar(PP_Resource resource) {
return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource); return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource);
} }
uint32_t GetThickness() { uint32_t GetThickness3() {
return WebScrollbar::defaultThickness(); return WebScrollbar::defaultThickness();
} }
uint32_t GetThickness4(PP_Resource resource) {
return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetThickness(resource);
}
uint32_t GetValue(PP_Resource resource) { uint32_t GetValue(PP_Resource resource) {
return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource); return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource);
} }
...@@ -82,7 +86,18 @@ void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) { ...@@ -82,7 +86,18 @@ void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) {
const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = { const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
&Create, &Create,
&IsScrollbar, &IsScrollbar,
&GetThickness, &GetThickness3,
&GetValue,
&SetValue,
&SetDocumentSize,
&SetTickMarks,
&ScrollBy
};
const PPB_Scrollbar_0_4_Dev ppb_scrollbar_0_4 = {
&Create,
&IsScrollbar,
&GetThickness4,
&GetValue, &GetValue,
&SetValue, &SetValue,
&SetDocumentSize, &SetDocumentSize,
...@@ -92,16 +107,35 @@ const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = { ...@@ -92,16 +107,35 @@ const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
} // namespace } // namespace
PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical) // static
PP_Resource PPB_Scrollbar_Impl::Create(PluginInstance* instance,
bool vertical) {
scoped_refptr<PPB_Scrollbar_Impl> scrollbar(
new PPB_Scrollbar_Impl(instance));
scrollbar->Init(vertical);
return scrollbar->GetReference();
}
PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance)
: PPB_Widget_Impl(instance) { : PPB_Widget_Impl(instance) {
scrollbar_.reset(WebScrollbar::create(
static_cast<WebKit::WebScrollbarClient*>(this),
vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
} }
PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() { PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
} }
void PPB_Scrollbar_Impl::Init(bool vertical) {
#if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
scrollbar_.reset(WebScrollbar::createForPlugin(
vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal,
instance()->container(),
static_cast<WebKit::WebScrollbarClient*>(this)));
#else
scrollbar_.reset(WebScrollbar::create(
static_cast<WebKit::WebScrollbarClient*>(this),
vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
#endif
}
PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() { PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() {
return this; return this;
} }
...@@ -111,10 +145,24 @@ const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() { ...@@ -111,10 +145,24 @@ const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() {
return &ppb_scrollbar_0_3; return &ppb_scrollbar_0_3;
} }
// static
const PPB_Scrollbar_0_4_Dev* PPB_Scrollbar_Impl::Get0_4Interface() {
return &ppb_scrollbar_0_4;
}
uint32_t PPB_Scrollbar_Impl::GetThickness() { uint32_t PPB_Scrollbar_Impl::GetThickness() {
return WebScrollbar::defaultThickness(); 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() { uint32_t PPB_Scrollbar_Impl::GetValue() {
return scrollbar_->value(); return scrollbar_->value();
} }
...@@ -197,13 +245,32 @@ void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) { ...@@ -197,13 +245,32 @@ void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) {
const PPP_Scrollbar_Dev* ppp_scrollbar = const PPP_Scrollbar_Dev* ppp_scrollbar =
static_cast<const PPP_Scrollbar_Dev*>(instance()->module()-> static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE)); GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
if (!ppp_scrollbar) {
// Try the old version. This is ok because the old interface is a subset of
// the new one, and ValueChanged didn't change.
ppp_scrollbar =
static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE_0_2));
if (!ppp_scrollbar) if (!ppp_scrollbar)
return; return;
}
ScopedResourceId resource(this); ScopedResourceId resource(this);
ppp_scrollbar->ValueChanged( ppp_scrollbar->ValueChanged(
instance()->pp_instance(), resource.id, scrollbar_->value()); 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( void PPB_Scrollbar_Impl::invalidateScrollbarRect(
WebKit::WebScrollbar* scrollbar, WebKit::WebScrollbar* scrollbar,
const WebKit::WebRect& rect) { const WebKit::WebRect& rect) {
......
...@@ -22,7 +22,9 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl, ...@@ -22,7 +22,9 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl,
public ::ppapi::thunk::PPB_Scrollbar_API, public ::ppapi::thunk::PPB_Scrollbar_API,
public WebKit::WebScrollbarClient { public WebKit::WebScrollbarClient {
public: public:
PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical); static PP_Resource Create(PluginInstance* instance,
bool vertical);
virtual ~PPB_Scrollbar_Impl(); virtual ~PPB_Scrollbar_Impl();
// ResourceObjectBase override. // ResourceObjectBase override.
...@@ -33,8 +35,14 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl, ...@@ -33,8 +35,14 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl,
// version of this API. // version of this API.
static const PPB_Scrollbar_0_3_Dev* Get0_3Interface(); static const PPB_Scrollbar_0_3_Dev* Get0_3Interface();
// Returns a pointer to the interface implementing PPB_Scrollbar_0_4 that is
// exposed to the plugin. New code should use the thunk system for the new
// version of this API.
static const PPB_Scrollbar_0_4_Dev* Get0_4Interface();
// PPB_Scrollbar_API implementation. // PPB_Scrollbar_API implementation.
virtual uint32_t GetThickness() OVERRIDE; virtual uint32_t GetThickness() OVERRIDE;
virtual bool IsOverlay() OVERRIDE;
virtual uint32_t GetValue() OVERRIDE; virtual uint32_t GetValue() OVERRIDE;
virtual void SetValue(uint32_t value) OVERRIDE; virtual void SetValue(uint32_t value) OVERRIDE;
virtual void SetDocumentSize(uint32_t size) OVERRIDE; virtual void SetDocumentSize(uint32_t size) OVERRIDE;
...@@ -42,6 +50,9 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl, ...@@ -42,6 +50,9 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl,
virtual void ScrollBy(PP_ScrollBy_Dev unit, int32_t multiplier) OVERRIDE; virtual void ScrollBy(PP_ScrollBy_Dev unit, int32_t multiplier) OVERRIDE;
private: private:
PPB_Scrollbar_Impl(PluginInstance* instance);
void Init(bool vertical);
// PPB_Widget private implementation. // PPB_Widget private implementation.
virtual PP_Bool PaintInternal(const gfx::Rect& rect, virtual PP_Bool PaintInternal(const gfx::Rect& rect,
PPB_ImageData_Impl* image) OVERRIDE; PPB_ImageData_Impl* image) OVERRIDE;
...@@ -51,6 +62,8 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl, ...@@ -51,6 +62,8 @@ class PPB_Scrollbar_Impl : public PPB_Widget_Impl,
// WebKit::WebScrollbarClient implementation. // WebKit::WebScrollbarClient implementation.
virtual void valueChanged(WebKit::WebScrollbar* scrollbar) OVERRIDE; virtual void valueChanged(WebKit::WebScrollbar* scrollbar) OVERRIDE;
// TODO(jam): add OVERRIDE once WebKit is rolled
virtual void overlayChanged(WebKit::WebScrollbar* scrollbar);
virtual void invalidateScrollbarRect(WebKit::WebScrollbar* scrollbar, virtual void invalidateScrollbarRect(WebKit::WebScrollbar* scrollbar,
const WebKit::WebRect& rect) OVERRIDE; const WebKit::WebRect& rect) OVERRIDE;
virtual void getTickmarks( virtual void getTickmarks(
......
...@@ -261,7 +261,7 @@ PP_Resource ResourceCreationImpl::CreateMouseInputEvent( ...@@ -261,7 +261,7 @@ PP_Resource ResourceCreationImpl::CreateMouseInputEvent(
PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance, PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance,
PP_Bool vertical) { PP_Bool vertical) {
return ReturnResource(new PPB_Scrollbar_Impl(instance_, PP_ToBool(vertical))); return PPB_Scrollbar_Impl::Create(instance_, PP_ToBool(vertical));
} }
PP_Resource ResourceCreationImpl::CreateSurface3D( PP_Resource ResourceCreationImpl::CreateSurface3D(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment