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

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: Address reviewer feedback. Created 6 years, 8 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) 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::SizeF& visible_viewport_size, gfx::Rect resizer_rect,
sky 2014/04/24 15:55:09 nit: one param per line here, and align params wit
kevers 2014/04/24 18:38:33 Done.
191 bool is_fullscreen);
191 192
192 RenderWidget* widget_; 193 RenderWidget* widget_;
193 194
194 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. 195 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation.
195 WebDeviceEmulationParams params_; 196 WebDeviceEmulationParams params_;
196 197
197 // The computed scale and offset used to fit widget into browser window. 198 // The computed scale and offset used to fit widget into browser window.
198 float scale_; 199 float scale_;
199 gfx::Point offset_; 200 gfx::Point offset_;
200 201
(...skipping 12 matching lines...) Expand all
213 RenderWidget* widget, 214 RenderWidget* widget,
214 const WebDeviceEmulationParams& params) 215 const WebDeviceEmulationParams& params)
215 : widget_(widget), 216 : widget_(widget),
216 params_(params), 217 params_(params),
217 scale_(1.f) { 218 scale_(1.f) {
218 original_size_ = widget_->size_; 219 original_size_ = widget_->size_;
219 original_physical_backing_size_ = widget_->physical_backing_size_; 220 original_physical_backing_size_ = widget_->physical_backing_size_;
220 original_screen_info_ = widget_->screen_info_; 221 original_screen_info_ = widget_->screen_info_;
221 original_view_screen_rect_ = widget_->view_screen_rect_; 222 original_view_screen_rect_ = widget_->view_screen_rect_;
222 original_window_screen_rect_ = widget_->window_screen_rect_; 223 original_window_screen_rect_ = widget_->window_screen_rect_;
223 Apply(widget_->overdraw_bottom_height_, 224 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
224 widget_->resizer_rect_, widget_->is_fullscreen_); 225 widget_->resizer_rect_, widget_->is_fullscreen_);
225 } 226 }
226 227
227 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { 228 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() {
228 widget_->screen_info_ = original_screen_info_; 229 widget_->screen_info_ = original_screen_info_;
229 230
230 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); 231 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor);
231 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); 232 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f);
232 widget_->view_screen_rect_ = original_view_screen_rect_; 233 widget_->view_screen_rect_ = original_view_screen_rect_;
233 widget_->window_screen_rect_ = original_window_screen_rect_; 234 widget_->window_screen_rect_ = original_window_screen_rect_;
234 widget_->Resize(original_size_, original_physical_backing_size_, 235 widget_->Resize(original_size_, original_physical_backing_size_,
235 widget_->overdraw_bottom_height_, widget_->resizer_rect_, 236 widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
236 widget_->is_fullscreen_, NO_RESIZE_ACK); 237 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK);
237 } 238 }
238 239
239 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( 240 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams(
240 const WebDeviceEmulationParams& params) { 241 const WebDeviceEmulationParams& params) {
241 params_ = params; 242 params_ = params;
242 Reapply(); 243 Reapply();
243 } 244 }
244 245
245 void RenderWidget::ScreenMetricsEmulator::Reapply() { 246 void RenderWidget::ScreenMetricsEmulator::Reapply() {
246 Apply(widget_->overdraw_bottom_height_, 247 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_,
247 widget_->resizer_rect_, widget_->is_fullscreen_); 248 widget_->resizer_rect_, widget_->is_fullscreen_);
248 } 249 }
249 250
250 void RenderWidget::ScreenMetricsEmulator::Apply( 251 void RenderWidget::ScreenMetricsEmulator::Apply(
251 float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) { 252 float overdraw_bottom_height, const gfx::SizeF& visible_viewport_size,
253 gfx::Rect resizer_rect, bool is_fullscreen) {
252 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ? 254 applied_widget_rect_.set_size(params_.viewSize.isEmpty() ?
253 original_size_ : gfx::Size(params_.viewSize)); 255 original_size_ : gfx::Size(params_.viewSize));
254 256
255 if (params_.fitToView) { 257 if (params_.fitToView) {
256 DCHECK(!original_size_.IsEmpty()); 258 DCHECK(!original_size_.IsEmpty());
257 259
258 int width_with_gutter = 260 int width_with_gutter =
259 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1); 261 std::max(original_size_.width() - 2 * params_.viewInsets.width, 1);
260 int height_with_gutter = 262 int height_with_gutter =
261 std::max(original_size_.height() - 2 * params_.viewInsets.height, 1); 263 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. 301 // root layer.
300 widget_->SetScreenMetricsEmulationParameters( 302 widget_->SetScreenMetricsEmulationParameters(
301 original_screen_info_.deviceScaleFactor, offset_, scale_); 303 original_screen_info_.deviceScaleFactor, offset_, scale_);
302 304
303 widget_->SetDeviceScaleFactor(applied_device_scale_factor); 305 widget_->SetDeviceScaleFactor(applied_device_scale_factor);
304 widget_->view_screen_rect_ = applied_widget_rect_; 306 widget_->view_screen_rect_ = applied_widget_rect_;
305 307
306 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( 308 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize(
307 original_size_, original_screen_info_.deviceScaleFactor)); 309 original_size_, original_screen_info_.deviceScaleFactor));
308 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, 310 widget_->Resize(applied_widget_rect_.size(), physical_backing_size,
309 overdraw_bottom_height, resizer_rect, is_fullscreen, NO_RESIZE_ACK); 311 overdraw_bottom_height, visible_viewport_size, resizer_rect,
312 is_fullscreen, NO_RESIZE_ACK);
310 } 313 }
311 314
312 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( 315 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage(
313 const ViewMsg_Resize_Params& params) { 316 const ViewMsg_Resize_Params& params) {
314 bool need_ack = params.new_size != original_size_ && 317 bool need_ack = params.new_size != original_size_ &&
315 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); 318 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty();
316 original_size_ = params.new_size; 319 original_size_ = params.new_size;
317 original_physical_backing_size_ = params.physical_backing_size; 320 original_physical_backing_size_ = params.physical_backing_size;
318 original_screen_info_ = params.screen_info; 321 original_screen_info_ = params.screen_info;
319 Apply(params.overdraw_bottom_height, params.resizer_rect, 322 Apply(params.overdraw_bottom_height, params.visible_viewport_size,
320 params.is_fullscreen); 323 params.resizer_rect, params.is_fullscreen);
321 324
322 if (need_ack) { 325 if (need_ack) {
323 widget_->set_next_paint_is_resize_ack(); 326 widget_->set_next_paint_is_resize_ack();
324 if (widget_->compositor_) 327 if (widget_->compositor_)
325 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); 328 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_));
326 } 329 }
327 } 330 }
328 331
329 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( 332 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage(
330 const gfx::Rect& view_screen_rect, 333 const gfx::Rect& view_screen_rect,
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 // If given a messsage without a routing ID, then assign our routing ID. 641 // If given a messsage without a routing ID, then assign our routing ID.
639 if (message->routing_id() == MSG_ROUTING_NONE) 642 if (message->routing_id() == MSG_ROUTING_NONE)
640 message->set_routing_id(routing_id_); 643 message->set_routing_id(routing_id_);
641 644
642 return RenderThread::Get()->Send(message); 645 return RenderThread::Get()->Send(message);
643 } 646 }
644 647
645 void RenderWidget::Resize(const gfx::Size& new_size, 648 void RenderWidget::Resize(const gfx::Size& new_size,
646 const gfx::Size& physical_backing_size, 649 const gfx::Size& physical_backing_size,
647 float overdraw_bottom_height, 650 float overdraw_bottom_height,
651 const gfx::SizeF& visible_viewport_size,
648 const gfx::Rect& resizer_rect, 652 const gfx::Rect& resizer_rect,
649 bool is_fullscreen, 653 bool is_fullscreen,
650 ResizeAck resize_ack) { 654 ResizeAck resize_ack) {
651 if (resizing_mode_selector_->NeverUsesSynchronousResize()) { 655 if (resizing_mode_selector_->NeverUsesSynchronousResize()) {
652 // A resize ack shouldn't be requested if we have not ACK'd the previous 656 // A resize ack shouldn't be requested if we have not ACK'd the previous
653 // one. 657 // one.
654 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack()); 658 DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack());
655 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK); 659 DCHECK(resize_ack == SEND_RESIZE_ACK || resize_ack == NO_RESIZE_ACK);
656 } 660 }
657 661
658 // Ignore this during shutdown. 662 // Ignore this during shutdown.
659 if (!webwidget_) 663 if (!webwidget_)
660 return; 664 return;
661 665
662 if (compositor_) { 666 if (compositor_) {
663 compositor_->setViewportSize(new_size, physical_backing_size); 667 compositor_->setViewportSize(new_size, physical_backing_size);
664 compositor_->SetOverdrawBottomHeight(overdraw_bottom_height); 668 compositor_->SetOverdrawBottomHeight(overdraw_bottom_height);
669 webwidget()->resizePinchViewport(gfx::Size(
bokan 2014/04/24 17:37:47 This should actually go below the webwidget_->resi
kevers 2014/04/24 18:38:33 Done.
670 visible_viewport_size.width(),
671 visible_viewport_size.height()));
665 } 672 }
666 673
667 physical_backing_size_ = physical_backing_size; 674 physical_backing_size_ = physical_backing_size;
668 overdraw_bottom_height_ = overdraw_bottom_height; 675 overdraw_bottom_height_ = overdraw_bottom_height;
669 resizer_rect_ = resizer_rect; 676 resizer_rect_ = resizer_rect;
670 677
671 // NOTE: We may have entered fullscreen mode without changing our size. 678 // NOTE: We may have entered fullscreen mode without changing our size.
672 bool fullscreen_change = is_fullscreen_ != is_fullscreen; 679 bool fullscreen_change = is_fullscreen_ != is_fullscreen;
673 if (fullscreen_change) 680 if (fullscreen_change)
674 WillToggleFullscreen(); 681 WillToggleFullscreen();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 if (fullscreen_change) 716 if (fullscreen_change)
710 DidToggleFullscreen(); 717 DidToggleFullscreen();
711 718
712 // If a resize ack is requested and it isn't set-up, then no more resizes will 719 // If a resize ack is requested and it isn't set-up, then no more resizes will
713 // come in and in general things will go wrong. 720 // come in and in general things will go wrong.
714 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack()); 721 DCHECK(resize_ack != SEND_RESIZE_ACK || next_paint_is_resize_ack());
715 } 722 }
716 723
717 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) { 724 void RenderWidget::ResizeSynchronously(const gfx::Rect& new_position) {
718 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_, 725 Resize(new_position.size(), new_position.size(), overdraw_bottom_height_,
719 gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK); 726 visible_viewport_size_, gfx::Rect(), is_fullscreen_, NO_RESIZE_ACK);
720 view_screen_rect_ = new_position; 727 view_screen_rect_ = new_position;
721 window_screen_rect_ = new_position; 728 window_screen_rect_ = new_position;
722 if (!did_show_) 729 if (!did_show_)
723 initial_pos_ = new_position; 730 initial_pos_ = new_position;
724 } 731 }
725 732
726 void RenderWidget::OnClose() { 733 void RenderWidget::OnClose() {
727 if (closing_) 734 if (closing_)
728 return; 735 return;
729 closing_ = true; 736 closing_ = true;
(...skipping 29 matching lines...) Expand all
759 return; 766 return;
760 767
761 if (screen_metrics_emulator_) { 768 if (screen_metrics_emulator_) {
762 screen_metrics_emulator_->OnResizeMessage(params); 769 screen_metrics_emulator_->OnResizeMessage(params);
763 return; 770 return;
764 } 771 }
765 772
766 screen_info_ = params.screen_info; 773 screen_info_ = params.screen_info;
767 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); 774 SetDeviceScaleFactor(screen_info_.deviceScaleFactor);
768 Resize(params.new_size, params.physical_backing_size, 775 Resize(params.new_size, params.physical_backing_size,
769 params.overdraw_bottom_height, params.resizer_rect, 776 params.overdraw_bottom_height, params.visible_viewport_size,
770 params.is_fullscreen, SEND_RESIZE_ACK); 777 params.resizer_rect, params.is_fullscreen, SEND_RESIZE_ACK);
771 } 778 }
772 779
773 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { 780 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
774 if (resizer_rect_ != resizer_rect) { 781 if (resizer_rect_ != resizer_rect) {
775 gfx::Rect view_rect(size_); 782 gfx::Rect view_rect(size_);
776 783
777 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_); 784 gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_);
778 if (!old_damage_rect.IsEmpty()) 785 if (!old_damage_rect.IsEmpty())
779 has_frame_pending_ = true; 786 has_frame_pending_ = true;
780 787
(...skipping 1709 matching lines...) Expand 10 before | Expand all | Expand 10 after
2490 2497
2491 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2498 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2492 swapped_out_frames_.AddObserver(frame); 2499 swapped_out_frames_.AddObserver(frame);
2493 } 2500 }
2494 2501
2495 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2502 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2496 swapped_out_frames_.RemoveObserver(frame); 2503 swapped_out_frames_.RemoveObserver(frame);
2497 } 2504 }
2498 2505
2499 } // namespace content 2506 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698