OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |