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

Side by Side Diff: content/renderer/render_widget.cc

Issue 195793004: Implement overscroll support for the virtual keyboard. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge ToT Created 6 years, 7 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
« no previous file with comments | « content/renderer/render_widget.h ('k') | ui/keyboard/keyboard_controller.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_synthetic_delay.h" 10 #include "base/debug/trace_event_synthetic_delay.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 // The following methods alter handlers' behavior for messages related to 180 // The following methods alter handlers' behavior for messages related to
181 // widget size and position. 181 // widget size and position.
182 void OnResizeMessage(const ViewMsg_Resize_Params& params); 182 void OnResizeMessage(const ViewMsg_Resize_Params& params);
183 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, 183 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect,
184 const gfx::Rect& window_screen_rect); 184 const gfx::Rect& window_screen_rect);
185 void OnShowContextMenu(ContextMenuParams* params); 185 void OnShowContextMenu(ContextMenuParams* params);
186 186
187 private: 187 private:
188 void Reapply(); 188 void Reapply();
189 void Apply(float overdraw_bottom_height, 189 void Apply(float overdraw_bottom_height,
190 gfx::Rect resizer_rect, bool is_fullscreen); 190 const gfx::Size& visible_viewport_size,
191 gfx::Rect resizer_rect,
192 bool is_fullscreen);
191 193
192 RenderWidget* widget_; 194 RenderWidget* widget_;
193 195
194 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. 196 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation.
195 WebDeviceEmulationParams params_; 197 WebDeviceEmulationParams params_;
196 198
197 // The computed scale and offset used to fit widget into browser window. 199 // The computed scale and offset used to fit widget into browser window.
198 float scale_; 200 float scale_;
199 gfx::Point offset_; 201 gfx::Point offset_;
200 202
(...skipping 12 matching lines...) Expand all
213 RenderWidget* widget, 215 RenderWidget* widget,
214 const WebDeviceEmulationParams& params) 216 const WebDeviceEmulationParams& params)
215 : widget_(widget), 217 : widget_(widget),
216 params_(params), 218 params_(params),
217 scale_(1.f) { 219 scale_(1.f) {
218 original_size_ = widget_->size_; 220 original_size_ = widget_->size_;
219 original_physical_backing_size_ = widget_->physical_backing_size_; 221 original_physical_backing_size_ = widget_->physical_backing_size_;
220 original_screen_info_ = widget_->screen_info_; 222 original_screen_info_ = widget_->screen_info_;
221 original_view_screen_rect_ = widget_->view_screen_rect_; 223 original_view_screen_rect_ = widget_->view_screen_rect_;
222 original_window_screen_rect_ = widget_->window_screen_rect_; 224 original_window_screen_rect_ = widget_->window_screen_rect_;
223 Apply(widget_->overdraw_bottom_height_, 225 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
224 widget_->resizer_rect_, widget_->is_fullscreen_); 226 widget_->resizer_rect_, widget_->is_fullscreen_);
225 } 227 }
226 228
227 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { 229 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() {
228 widget_->screen_info_ = original_screen_info_; 230 widget_->screen_info_ = original_screen_info_;
229 231
230 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); 232 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor);
231 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); 233 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f);
232 widget_->view_screen_rect_ = original_view_screen_rect_; 234 widget_->view_screen_rect_ = original_view_screen_rect_;
233 widget_->window_screen_rect_ = original_window_screen_rect_; 235 widget_->window_screen_rect_ = original_window_screen_rect_;
234 widget_->Resize(original_size_, original_physical_backing_size_, 236 widget_->Resize(original_size_, original_physical_backing_size_,
235 widget_->overdraw_bottom_height_, widget_->resizer_rect_, 237 widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
236 widget_->is_fullscreen_, NO_RESIZE_ACK); 238 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK);
237 } 239 }
238 240
239 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( 241 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams(
240 const WebDeviceEmulationParams& params) { 242 const WebDeviceEmulationParams& params) {
241 params_ = params; 243 params_ = params;
242 Reapply(); 244 Reapply();
243 } 245 }
244 246
245 void RenderWidget::ScreenMetricsEmulator::Reapply() { 247 void RenderWidget::ScreenMetricsEmulator::Reapply() {
246 Apply(widget_->overdraw_bottom_height_, 248 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
247 widget_->resizer_rect_, widget_->is_fullscreen_); 249 widget_->resizer_rect_, widget_->is_fullscreen_);
248 } 250 }
249 251
250 void RenderWidget::ScreenMetricsEmulator::Apply( 252 void RenderWidget::ScreenMetricsEmulator::Apply(
251 float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) { 253 float overdraw_bottom_height,
254 const gfx::Size& visible_viewport_size,
255 gfx::Rect resizer_rect,
256 bool is_fullscreen) {
252 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ? 257 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ?
253 original_size_ : gfx::Size(params_.viewSize)); 258 original_size_ : gfx::Size(params_.viewSize));
254 259
255 if (params_.fitToView) { 260 if (params_.fitToView) {
256 DCHECK(!original_size_.IsEmpty()); 261 DCHECK(!original_size_.IsEmpty());
257 262
258 int width_with_gutter = 263 int width_with_gutter =
259 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1); 264 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1);
260 int height_with_gutter = 265 int height_with_gutter =
261 std::max(original_size_.height() - 2 * params_.viewInsets.height, 1); 266 std::max(original_size_.height() - 2 * params_.viewInsets.height, 1);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 // root layer. 304 // root layer.
300 widget_->SetScreenMetricsEmulationParameters( 305 widget_->SetScreenMetricsEmulationParameters(
301 original_screen_info_.deviceScaleFactor, offset_, scale_); 306 original_screen_info_.deviceScaleFactor, offset_, scale_);
302 307
303 widget_->SetDeviceScaleFactor(applied_device_scale_factor); 308 widget_->SetDeviceScaleFactor(applied_device_scale_factor);
304 widget_->view_screen_rect_ = applied_widget_rect_; 309 widget_->view_screen_rect_ = applied_widget_rect_;
305 310
306 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( 311 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize(
307 original_size_, original_screen_info_.deviceScaleFactor)); 312 original_size_, original_screen_info_.deviceScaleFactor));
308 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, 313 widget_->Resize(applied_widget_rect_.size(), physical_backing_size,
309 overdraw_bottom_height, resizer_rect, is_fullscreen, NO_RESIZE_ACK); 314 overdraw_bottom_height, visible_viewport_size, resizer_rect,
315 is_fullscreen, NO_RESIZE_ACK);
310 } 316 }
311 317
312 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( 318 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage(
313 const ViewMsg_Resize_Params& params) { 319 const ViewMsg_Resize_Params& params) {
314 bool need_ack = params.new_size != original_size_ && 320 bool need_ack = params.new_size != original_size_ &&
315 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); 321 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty();
316 original_size_ = params.new_size; 322 original_size_ = params.new_size;
317 original_physical_backing_size_ = params.physical_backing_size; 323 original_physical_backing_size_ = params.physical_backing_size;
318 original_screen_info_ = params.screen_info; 324 original_screen_info_ = params.screen_info;
319 Apply(params.overdraw_bottom_height, params.resizer_rect, 325 Apply(params.overdraw_bottom_height, params.visible_viewport_size,
320 params.is_fullscreen); 326 params.resizer_rect, params.is_fullscreen);
321 327
322 if (need_ack) { 328 if (need_ack) {
323 widget_->set_next_paint_is_resize_ack(); 329 widget_->set_next_paint_is_resize_ack();
324 if (widget_->compositor_) 330 if (widget_->compositor_)
325 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); 331 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_));
326 } 332 }
327 } 333 }
328 334
329 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( 335 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage(
330 const gfx::Rect& view_screen_rect, 336 const gfx::Rect& view_screen_rect,
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 // If given a messsage without a routing ID, then assign our routing ID. 629 // If given a messsage without a routing ID, then assign our routing ID.
624 if (message->routing_id() == MSG_ROUTING_NONE) 630 if (message->routing_id() == MSG_ROUTING_NONE)
625 message->set_routing_id(routing_id_); 631 message->set_routing_id(routing_id_);
626 632
627 return RenderThread::Get()->Send(message); 633 return RenderThread::Get()->Send(message);
628 } 634 }
629 635
630 void RenderWidget::Resize(const gfx::Size& new_size, 636 void RenderWidget::Resize(const gfx::Size& new_size,
631 const gfx::Size& physical_backing_size, 637 const gfx::Size& physical_backing_size,
632 float overdraw_bottom_height, 638 float overdraw_bottom_height,
639 const gfx::Size& visible_viewport_size,
633 const gfx::Rect& resizer_rect, 640 const gfx::Rect& resizer_rect,
634 bool is_fullscreen, 641 bool is_fullscreen,
635 ResizeAck resize_ack) { 642 ResizeAck resize_ack) {
636 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { 643 if (resizing_mode_selector_->NeverUsesSynchronousResize()) {
637 // A resize ack shouldn't be requested if we have not ACK'd the previous 644 // A resize ack shouldn't be requested if we have not ACK'd the previous
638 // one. 645 // one.
639 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); 646 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack());
640 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); 647 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK);
641 } 648 }
642 649
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 681
675 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { 682 if (resizing_mode_selector_->NeverUsesSynchronousResize()) {
676 // Resize should have caused an invalidation of the entire view. 683 // Resize should have caused an invalidation of the entire view.
677 DCHECK(new_size.IsEmpty() || is_accelerated_compositing_active_ || 684 DCHECK(new_size.IsEmpty() || is_accelerated_compositing_active_ ||
678 has_frame_pending_); 685 has_frame_pending_);
679 } 686 }
680 } else if (!resizing_mode_selector_->is_synchronous_mode()) { 687 } else if (!resizing_mode_selector_->is_synchronous_mode()) {
681 resize_ack = NO_RESIZE_ACK; 688 resize_ack = NO_RESIZE_ACK;
682 } 689 }
683 690
691 webwidget()->resizePinchViewport(gfx::Size(
692 visible_viewport_size.width(),
693 visible_viewport_size.height()));
694
684 if (new_size.IsEmpty() || physical_backing_size.IsEmpty()) { 695 if (new_size.IsEmpty() || physical_backing_size.IsEmpty()) {
685 // For empty size or empty physical_backing_size, there is no next paint 696 // For empty size or empty physical_backing_size, there is no next paint
686 // (along with which to send the ack) until they are set to non-empty. 697 // (along with which to send the ack) until they are set to non-empty.
687 resize_ack = NO_RESIZE_ACK; 698 resize_ack = NO_RESIZE_ACK;
688 } 699 }
689 700
690 // Send the Resize_ACK flag once we paint again if requested. 701 // Send the Resize_ACK flag once we paint again if requested.
691 if (resize_ack == SEND_RESIZE_ACK) 702 if (resize_ack == SEND_RESIZE_ACK)
692 set_next_paint_is_resize_ack(); 703 set_next_paint_is_resize_ack();
693 704
694 if (fullscreen_change) 705 if (fullscreen_change)
695 DidToggleFullscreen(); 706 DidToggleFullscreen();
696 707
697 // If a resize ack is requested and it isn't set-up, then no more resizes will 708 // If a resize ack is requested and it isn't set-up, then no more resizes will
698 // come in and in general things will go wrong. 709 // come in and in general things will go wrong.
699 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); 710 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack());
700 } 711 }
701 712
702 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { 713 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) {
703 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_, 714 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_,
704 gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK); 715 visible_viewport_size_, gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK);
705 view_screen_rect_ = new_position; 716 view_screen_rect_ = new_position;
706 window_screen_rect_ = new_position; 717 window_screen_rect_ = new_position;
707 if (!did_show_) 718 if (!did_show_)
708 initial_pos_ = new_position; 719 initial_pos_ = new_position;
709 } 720 }
710 721
711 void RenderWidget::OnClose() { 722 void RenderWidget::OnClose() {
712 if (closing_) 723 if (closing_)
713 return; 724 return;
714 closing_ = true; 725 closing_ = true;
(...skipping 29 matching lines...) Expand all
744 return; 755 return;
745 756
746 if (screen_metrics_emulator_) { 757 if (screen_metrics_emulator_) {
747 screen_metrics_emulator_->OnResizeMessage(params); 758 screen_metrics_emulator_->OnResizeMessage(params);
748 return; 759 return;
749 } 760 }
750 761
751 screen_info_ = params.screen_info; 762 screen_info_ = params.screen_info;
752 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); 763 SetDeviceScaleFactor(screen_info_.deviceScaleFactor);
753 Resize(params.new_size, params.physical_backing_size, 764 Resize(params.new_size, params.physical_backing_size,
754 params.overdraw_bottom_height, params.resizer_rect, 765 params.overdraw_bottom_height, params.visible_viewport_size,
755 params.is_fullscreen, SEND_RESIZE_ACK); 766 params.resizer_rect, params.is_fullscreen, SEND_RESIZE_ACK);
756 } 767 }
757 768
758 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { 769 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
759 if (resizer_rect_ != resizer_rect) { 770 if (resizer_rect_ != resizer_rect) {
760 gfx::Rect view_rect(size_); 771 gfx::Rect view_rect(size_);
761 772
762 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_); 773 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_);
763 if (!old_damage_rect.IsEmpty()) 774 if (!old_damage_rect.IsEmpty())
764 has_frame_pending_ = true; 775 has_frame_pending_ = true;
765 776
(...skipping 1562 matching lines...) Expand 10 before | Expand all | Expand 10 after
2328 2339
2329 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2340 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2330 swapped_out_frames_.AddObserver(frame); 2341 swapped_out_frames_.AddObserver(frame);
2331 } 2342 }
2332 2343
2333 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2344 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2334 swapped_out_frames_.RemoveObserver(frame); 2345 swapped_out_frames_.RemoveObserver(frame);
2335 } 2346 }
2336 2347
2337 } // namespace content 2348 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | ui/keyboard/keyboard_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698