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

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: sync and take out WebKit changes 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/thunk.h" 10 #include "ppapi/thunk/thunk.h"
(...skipping 30 matching lines...) Expand all
41 // the GetThickness call which has no parameters. 41 // the GetThickness call which has no parameters.
42 42
43 PP_Resource Create(PP_Instance instance, PP_Bool vertical) { 43 PP_Resource Create(PP_Instance instance, PP_Bool vertical) {
44 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->Create(instance, vertical); 44 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->Create(instance, vertical);
45 } 45 }
46 46
47 PP_Bool IsScrollbar(PP_Resource resource) { 47 PP_Bool IsScrollbar(PP_Resource resource) {
48 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource); 48 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->IsScrollbar(resource);
49 } 49 }
50 50
51 uint32_t GetThickness() { 51 uint32_t GetThickness3() {
52 return WebScrollbar::defaultThickness(); 52 return WebScrollbar::defaultThickness();
53 } 53 }
54 54
55 uint32_t GetThickness4(PP_Resource resource) {
56 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetThickness(resource);
57 }
58
55 uint32_t GetValue(PP_Resource resource) { 59 uint32_t GetValue(PP_Resource resource) {
56 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource); 60 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->GetValue(resource);
57 } 61 }
58 62
59 void SetValue(PP_Resource resource, uint32_t value) { 63 void SetValue(PP_Resource resource, uint32_t value) {
60 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetValue(resource, value); 64 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetValue(resource, value);
61 } 65 }
62 66
63 void SetDocumentSize(PP_Resource resource, uint32_t size) { 67 void SetDocumentSize(PP_Resource resource, uint32_t size) {
64 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetDocumentSize(resource, 68 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->SetDocumentSize(resource,
(...skipping 10 matching lines...) Expand all
75 79
76 void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) { 80 void ScrollBy(PP_Resource resource, PP_ScrollBy_Dev unit, int32_t multiplier) {
77 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->ScrollBy(resource, 81 return ::ppapi::thunk::GetPPB_Scrollbar_Thunk()->ScrollBy(resource,
78 unit, 82 unit,
79 multiplier); 83 multiplier);
80 } 84 }
81 85
82 const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = { 86 const PPB_Scrollbar_0_3_Dev ppb_scrollbar_0_3 = {
83 &Create, 87 &Create,
84 &IsScrollbar, 88 &IsScrollbar,
85 &GetThickness, 89 &GetThickness3,
86 &GetValue, 90 &GetValue,
87 &SetValue, 91 &SetValue,
88 &SetDocumentSize, 92 &SetDocumentSize,
89 &SetTickMarks, 93 &SetTickMarks,
90 &ScrollBy 94 &ScrollBy
91 }; 95 };
92 96
97 const PPB_Scrollbar_0_4_Dev ppb_scrollbar_0_4 = {
98 &Create,
99 &IsScrollbar,
100 &GetThickness4,
101 &GetValue,
102 &SetValue,
103 &SetDocumentSize,
104 &SetTickMarks,
105 &ScrollBy
106 };
107
93 } // namespace 108 } // namespace
94 109
95 PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance, bool vertical) 110 // static
111 PP_Resource PPB_Scrollbar_Impl::Create(PluginInstance* instance,
112 bool vertical) {
113 scoped_refptr<PPB_Scrollbar_Impl> scrollbar(
114 new PPB_Scrollbar_Impl(instance));
115 scrollbar->Init(vertical);
116 return scrollbar->GetReference();
117 }
118
119 PPB_Scrollbar_Impl::PPB_Scrollbar_Impl(PluginInstance* instance)
96 : PPB_Widget_Impl(instance) { 120 : PPB_Widget_Impl(instance) {
97 scrollbar_.reset(WebScrollbar::create(
98 static_cast<WebKit::WebScrollbarClient*>(this),
99 vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
100 } 121 }
101 122
102 PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() { 123 PPB_Scrollbar_Impl::~PPB_Scrollbar_Impl() {
103 } 124 }
104 125
126 void PPB_Scrollbar_Impl::Init(bool vertical) {
127 #if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
128 scrollbar_.reset(WebScrollbar::createForPlugin(
129 vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal,
130 instance()->container(),
131 static_cast<WebKit::WebScrollbarClient*>(this)));
132 #else
133 scrollbar_.reset(WebScrollbar::create(
134 static_cast<WebKit::WebScrollbarClient*>(this),
135 vertical ? WebScrollbar::Vertical : WebScrollbar::Horizontal));
136 #endif
137 }
138
105 PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() { 139 PPB_Scrollbar_API* PPB_Scrollbar_Impl::AsPPB_Scrollbar_API() {
106 return this; 140 return this;
107 } 141 }
108 142
109 // static 143 // static
110 const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() { 144 const PPB_Scrollbar_0_3_Dev* PPB_Scrollbar_Impl::Get0_3Interface() {
111 return &ppb_scrollbar_0_3; 145 return &ppb_scrollbar_0_3;
112 } 146 }
113 147
148 // static
149 const PPB_Scrollbar_0_4_Dev* PPB_Scrollbar_Impl::Get0_4Interface() {
150 return &ppb_scrollbar_0_4;
151 }
152
114 uint32_t PPB_Scrollbar_Impl::GetThickness() { 153 uint32_t PPB_Scrollbar_Impl::GetThickness() {
115 return WebScrollbar::defaultThickness(); 154 return WebScrollbar::defaultThickness();
116 } 155 }
117 156
157 bool PPB_Scrollbar_Impl::IsOverlay() {
158 // TODO(jam): take this out once WebKit is rolled.
159 #if defined(WEBSCROLLBAR_SUPPORTS_OVERLAY)
160 return scrollbar_->isOverlay();
161 #else
162 return false;
163 #endif
164 }
165
118 uint32_t PPB_Scrollbar_Impl::GetValue() { 166 uint32_t PPB_Scrollbar_Impl::GetValue() {
119 return scrollbar_->value(); 167 return scrollbar_->value();
120 } 168 }
121 169
122 void PPB_Scrollbar_Impl::SetValue(uint32_t value) { 170 void PPB_Scrollbar_Impl::SetValue(uint32_t value) {
123 scrollbar_->setValue(value); 171 scrollbar_->setValue(value);
124 } 172 }
125 173
126 void PPB_Scrollbar_Impl::SetDocumentSize(uint32_t size) { 174 void PPB_Scrollbar_Impl::SetDocumentSize(uint32_t size) {
127 scrollbar_->setDocumentSize(size); 175 scrollbar_->setDocumentSize(size);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 scrollbar_->setLocation(WebRect(location->point.x, 238 scrollbar_->setLocation(WebRect(location->point.x,
191 location->point.y, 239 location->point.y,
192 location->size.width, 240 location->size.width,
193 location->size.height)); 241 location->size.height));
194 } 242 }
195 243
196 void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) { 244 void PPB_Scrollbar_Impl::valueChanged(WebKit::WebScrollbar* scrollbar) {
197 const PPP_Scrollbar_Dev* ppp_scrollbar = 245 const PPP_Scrollbar_Dev* ppp_scrollbar =
198 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()-> 246 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
199 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE)); 247 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
248 if (!ppp_scrollbar) {
249 // Try the old version. This is ok because the old interface is a subset of
250 // the new one, and ValueChanged didn't change.
251 ppp_scrollbar =
252 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
253 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE_0_2));
254 if (!ppp_scrollbar)
255 return;
256 }
257 ScopedResourceId resource(this);
258 ppp_scrollbar->ValueChanged(
259 instance()->pp_instance(), resource.id, scrollbar_->value());
260 }
261
262 void PPB_Scrollbar_Impl::overlayChanged(WebScrollbar* scrollbar) {
263 const PPP_Scrollbar_Dev* ppp_scrollbar =
264 static_cast<const PPP_Scrollbar_Dev*>(instance()->module()->
265 GetPluginInterface(PPP_SCROLLBAR_DEV_INTERFACE));
200 if (!ppp_scrollbar) 266 if (!ppp_scrollbar)
201 return; 267 return;
202 ScopedResourceId resource(this); 268 ScopedResourceId resource(this);
203 ppp_scrollbar->ValueChanged( 269 ppp_scrollbar->OverlayChanged(
204 instance()->pp_instance(), resource.id, scrollbar_->value()); 270 instance()->pp_instance(), resource.id,
271 PP_FromBool(IsOverlay()));
205 } 272 }
206 273
207 void PPB_Scrollbar_Impl::invalidateScrollbarRect( 274 void PPB_Scrollbar_Impl::invalidateScrollbarRect(
208 WebKit::WebScrollbar* scrollbar, 275 WebKit::WebScrollbar* scrollbar,
209 const WebKit::WebRect& rect) { 276 const WebKit::WebRect& rect) {
210 gfx::Rect gfx_rect(rect.x, 277 gfx::Rect gfx_rect(rect.x,
211 rect.y, 278 rect.y,
212 rect.width, 279 rect.width,
213 rect.height); 280 rect.height);
214 dirty_ = dirty_.Union(gfx_rect); 281 dirty_ = dirty_.Union(gfx_rect);
(...skipping 24 matching lines...) Expand all
239 pp_rect.point.y = dirty_.y(); 306 pp_rect.point.y = dirty_.y();
240 pp_rect.size.width = dirty_.width(); 307 pp_rect.size.width = dirty_.width();
241 pp_rect.size.height = dirty_.height(); 308 pp_rect.size.height = dirty_.height();
242 dirty_ = gfx::Rect(); 309 dirty_ = gfx::Rect();
243 Invalidate(&pp_rect); 310 Invalidate(&pp_rect);
244 } 311 }
245 312
246 } // namespace ppapi 313 } // namespace ppapi
247 } // namespace webkit 314 } // namespace webkit
248 315
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_scrollbar_impl.h ('k') | webkit/plugins/ppapi/resource_creation_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698