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

Side by Side 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: Keep the logic to call WebScrollbarGroupImpl's methods in WebKit entirely 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/plugins/ppapi/ppb_scrollbar_impl.h" 5 #include "webkit/plugins/ppapi/ppb_scrollbar_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "ppapi/c/dev/ppp_scrollbar_dev.h" 9 #include "ppapi/c/dev/ppp_scrollbar_dev.h"
10 #include "ppapi/thunk/enter.h"
10 #include "ppapi/thunk/thunk.h" 11 #include "ppapi/thunk/thunk.h"
11 #include "skia/ext/platform_canvas.h" 12 #include "skia/ext/platform_canvas.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScrollbar.h" 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScrollbar.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVector.h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVector.h"
16 #include "webkit/plugins/ppapi/common.h" 17 #include "webkit/plugins/ppapi/common.h"
17 #include "webkit/plugins/ppapi/event_conversion.h" 18 #include "webkit/plugins/ppapi/event_conversion.h"
18 #include "webkit/plugins/ppapi/plugin_module.h" 19 #include "webkit/plugins/ppapi/plugin_module.h"
19 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 20 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
20 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" 21 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
22 #include "webkit/plugins/ppapi/ppb_scrollbar_group_impl.h"
21 #include "webkit/glue/webkit_glue.h" 23 #include "webkit/glue/webkit_glue.h"
22 24
23 #if defined(OS_WIN) 25 #if defined(OS_WIN)
24 #include "base/win/windows_version.h" 26 #include "base/win/windows_version.h"
25 #endif 27 #endif
26 28
29 using ppapi::thunk::EnterResourceNoLock;
27 using ppapi::thunk::PPB_Scrollbar_API; 30 using ppapi::thunk::PPB_Scrollbar_API;
31 using ppapi::thunk::PPB_ScrollbarGroup_API;
28 using WebKit::WebInputEvent; 32 using WebKit::WebInputEvent;
29 using WebKit::WebRect; 33 using WebKit::WebRect;
30 using WebKit::WebScrollbar; 34 using WebKit::WebScrollbar;
31 35
32 namespace webkit { 36 namespace webkit {
33 namespace ppapi { 37 namespace ppapi {
34 38
35 namespace { 39 // static
40 PP_Resource PPB_Scrollbar_Impl::Create(PP_Resource scrollbar_group,
41 bool vertical) {
42 EnterResourceNoLock<PPB_ScrollbarGroup_API> enter_request(
43 scrollbar_group, true);
44 if (enter_request.failed())
45 return PP_ERROR_BADARGUMENT;
46 PPB_ScrollbarGroup_Impl* scrollbar_group_impl =
47 static_cast<PPB_ScrollbarGroup_Impl*>(enter_request.object());
36 48
37 // Version 0.3 implementation -------------------------------------------------- 49 scoped_refptr<PPB_Scrollbar_Impl> scrollbar(
38 // 50 new PPB_Scrollbar_Impl(scrollbar_group_impl));
39 // TODO(brettw) remove this when we remove support for version 0.3 interface. 51 scrollbar->Init(vertical);
40 // This just forwards everything to the new version of the interface except for 52 return scrollbar->GetReference();
41 // the GetThickness call which has no parameters.
42
43 PP_Resource Create(PP_Instance instance, PP_Bool vertical) {
44 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->Create(instance, vertical);
45 } 53 }
46 54
47 PP_Bool IsScrollbar(PP_Resource resource) { 55 PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PPB_ScrollbarGroup_Impl* scrollbar_group)
48 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource); 56 : PPB_Widget_Impl(scrollbar_group->instance()),
49 } 57 scrollbar_group_(scrollbar_group) {
50
51 uint32_t GetThickness() {
52 return WebScrollbar::defaultThickness();
53 }
54
55 uint32_t GetValue(PP_Resource resource) {
56 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource);
57 }
58
59 void SetValue(PP_Resource resource, uint32_t value) {
60 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetValue(resource, value);
61 }
62
63 void SetDocumentSize(PP_Resource resource, uint32_t size) {
64 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetDocumentSize(resource,
65 size);
66 }
67
68 void SetTickMarks(PP_Resource resource,
69 const PP_Rect* tick_marks,
70 uint32_t count) {
71 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetTickMarks(resource,
72 tick_marks,
73 count);
74 }
75
76 void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) {
77 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->ScrollBy(resource,
78 unit,
79 multiplier);
80 }
81
82 const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
83 &Create,
84 &IsScrollbar,
85 &GetThickness,
86 &GetValue,
87 &SetValue,
88 &SetDocumentSize,
89 &SetTickMarks,
90 &ScrollBy
91 };
92
93 } // namespace
94
95 PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical)
96 : PPB_Widget_Impl(instance) {
97 scrollbar_.reset(WebScrollbar::create(
98 static_cast<WebKit::WebScrollbarClient*>(this),
99 vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
100 } 58 }
101 59
102 PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() { 60 PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
103 } 61 }
104 62
63 void PPB_Scrollbar_Impl::Init(bool vertical) {
64 scrollbar_.reset(WebScrollbar::create(
65 static_cast<WebKit::WebScrollbarClient*>(this),
66 scrollbar_group_->GetWebScrollbarGroup(),
67 vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
68 }
69
105 PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() { 70 PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() {
106 return this; 71 return this;
107 } 72 }
108 73
109 // static 74 uint32_t PPB_Scrollbar_Impl::GetThickness() {
110 const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() { 75 return WebScrollbar::defaultThickness();
111 return &ppb_scrollbar_0_3;
112 } 76 }
113 77
114 uint32_t PPB_Scrollbar_Impl::GetThickness() { 78 bool PPB_Scrollbar_Impl::IsOverlay() {
115 return WebScrollbar::defaultThickness(); 79 // TODO(jam): take this out once WebKit is rolled.
80 #if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
81 return scrollbar_->isOverlay();
82 #else
83 return false;
84 #endif
116 } 85 }
117 86
118 uint32_t PPB_Scrollbar_Impl::GetValue() { 87 uint32_t PPB_Scrollbar_Impl::GetValue() {
119 return scrollbar_->value(); 88 return scrollbar_->value();
120 } 89 }
121 90
122 void PPB_Scrollbar_Impl::SetValue(uint32_t value) { 91 void PPB_Scrollbar_Impl::SetValue(uint32_t value) {
123 scrollbar_->setValue(value); 92 scrollbar_->setValue(value);
124 } 93 }
125 94
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 scrollbar_->setLocation(WebRect(location->point.x, 159 scrollbar_->setLocation(WebRect(location->point.x,
191 location->point.y, 160 location->point.y,
192 location->size.width, 161 location->size.width,
193 location->size.height)); 162 location->size.height));
194 } 163 }
195 164
196 void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) { 165 void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) {
197 const PPP_Scrollbar_Dev* ppp_scrollbar = 166 const PPP_Scrollbar_Dev* ppp_scrollbar =
198 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()-> 167 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
199 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE)); 168 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
169 if (!ppp_scrollbar) {
170 // Try the old version.
171 ppp_scrollbar =
172 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
173 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE_0_2));
174 if (!ppp_scrollbar)
175 return;
176 }
177 ScopedResourceId resource(this);
178 ppp_scrollbar->ValueChanged(
179 instance()->pp_instance(), resource.id, scrollbar_->value());
180 }
181
182 void PPB_Scrollbar_Impl::overlayChanged(WebScrollbar* scrollbar) {
183 const PPP_Scrollbar_Dev* ppp_scrollbar =
184 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
185 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
200 if (!ppp_scrollbar) 186 if (!ppp_scrollbar)
201 return; 187 return;
202 ScopedResourceId resource(this); 188 ScopedResourceId resource(this);
203 ppp_scrollbar->ValueChanged( 189 ppp_scrollbar->OverlayChanged(
204 instance()->pp_instance(), resource.id, scrollbar_->value()); 190 instance()->pp_instance(), resource.id,
191 PP_FromBool(IsOverlay()));
205 } 192 }
206 193
207 void PPB_Scrollbar_Impl::invalidateScrollbarRect( 194 void PPB_Scrollbar_Impl::invalidateScrollbarRect(
208 WebKit::WebScrollbar* scrollbar, 195 WebKit::WebScrollbar* scrollbar,
209 const WebKit::WebRect& rect) { 196 const WebKit::WebRect& rect) {
210 gfx::Rect gfx_rect(rect.x, 197 gfx::Rect gfx_rect(rect.x,
211 rect.y, 198 rect.y,
212 rect.width, 199 rect.width,
213 rect.height); 200 rect.height);
214 dirty_ = dirty_.Union(gfx_rect); 201 dirty_ = dirty_.Union(gfx_rect);
(...skipping 24 matching lines...) Expand all
239 pp_rect.point.y = dirty_.y(); 226 pp_rect.point.y = dirty_.y();
240 pp_rect.size.width = dirty_.width(); 227 pp_rect.size.width = dirty_.width();
241 pp_rect.size.height = dirty_.height(); 228 pp_rect.size.height = dirty_.height();
242 dirty_ = gfx::Rect(); 229 dirty_ = gfx::Rect();
243 Invalidate(&pp_rect); 230 Invalidate(&pp_rect);
244 } 231 }
245 232
246 } // namespace ppapi 233 } // namespace ppapi
247 } // namespace webkit 234 } // namespace webkit
248 235
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698