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

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

Issue 1737733002: [DevTools] Handle emulated device scale factor and original device scale factor properly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
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 <utility> 7 #include <utility>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 resize_params.physical_backing_size = physical_backing_size_; 582 resize_params.physical_backing_size = physical_backing_size_;
583 resize_params.visible_viewport_size = visible_viewport_size_; 583 resize_params.visible_viewport_size = visible_viewport_size_;
584 resize_params.top_controls_shrink_blink_size = 584 resize_params.top_controls_shrink_blink_size =
585 top_controls_shrink_blink_size_; 585 top_controls_shrink_blink_size_;
586 resize_params.top_controls_height = top_controls_height_; 586 resize_params.top_controls_height = top_controls_height_;
587 resize_params.resizer_rect = resizer_rect_; 587 resize_params.resizer_rect = resizer_rect_;
588 resize_params.is_fullscreen_granted = is_fullscreen_granted_; 588 resize_params.is_fullscreen_granted = is_fullscreen_granted_;
589 resize_params.display_mode = display_mode_; 589 resize_params.display_mode = display_mode_;
590 screen_metrics_emulator_.reset(new RenderWidgetScreenMetricsEmulator( 590 screen_metrics_emulator_.reset(new RenderWidgetScreenMetricsEmulator(
591 this, params, resize_params, view_screen_rect_, window_screen_rect_)); 591 this, params, resize_params, view_screen_rect_, window_screen_rect_));
592 screen_metrics_emulator_->Apply();
592 } else { 593 } else {
593 screen_metrics_emulator_->ChangeEmulationParams(params); 594 screen_metrics_emulator_->ChangeEmulationParams(params);
594 } 595 }
595 } 596 }
596 597
597 void RenderWidget::OnDisableDeviceEmulation() { 598 void RenderWidget::OnDisableDeviceEmulation() {
598 screen_metrics_emulator_.reset(); 599 screen_metrics_emulator_.reset();
599 } 600 }
600 601
601 void RenderWidget::OnColorProfile(const std::vector<char>& color_profile) { 602 void RenderWidget::OnColorProfile(const std::vector<char>& color_profile) {
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 // NOTE: We may have entered fullscreen mode without changing our size. 1094 // NOTE: We may have entered fullscreen mode without changing our size.
1094 bool fullscreen_change = 1095 bool fullscreen_change =
1095 is_fullscreen_granted_ != params.is_fullscreen_granted; 1096 is_fullscreen_granted_ != params.is_fullscreen_granted;
1096 is_fullscreen_granted_ = params.is_fullscreen_granted; 1097 is_fullscreen_granted_ = params.is_fullscreen_granted;
1097 display_mode_ = params.display_mode; 1098 display_mode_ = params.display_mode;
1098 1099
1099 webwidget_->setTopControlsHeight(params.top_controls_height, 1100 webwidget_->setTopControlsHeight(params.top_controls_height,
1100 top_controls_shrink_blink_size_); 1101 top_controls_shrink_blink_size_);
1101 1102
1102 if (resized) { 1103 if (resized) {
1103 gfx::Size new_widget_size = 1104 gfx::Size new_widget_size = size_;
1104 IsUseZoomForDSFEnabled() ? physical_backing_size_ : size_; 1105 if (IsUseZoomForDSFEnabled()) {
1106 new_widget_size = gfx::ScaleToCeiledSize(new_widget_size,
1107 GetOriginalDeviceScaleFactor());
1108 }
1105 // When resizing, we want to wait to paint before ACK'ing the resize. This 1109 // When resizing, we want to wait to paint before ACK'ing the resize. This
1106 // ensures that we only resize as fast as we can paint. We only need to 1110 // ensures that we only resize as fast as we can paint. We only need to
1107 // send an ACK if we are resized to a non-empty rect. 1111 // send an ACK if we are resized to a non-empty rect.
1108 webwidget_->resize(new_widget_size); 1112 webwidget_->resize(new_widget_size);
1109 } 1113 }
1110 WebSize visual_viewport_size; 1114 WebSize visual_viewport_size;
1111 1115
1112 if (IsUseZoomForDSFEnabled()) { 1116 if (IsUseZoomForDSFEnabled()) {
1113 visual_viewport_size = gfx::ScaleToCeiledSize(params.visible_viewport_size, 1117 visual_viewport_size = gfx::ScaleToCeiledSize(
1114 device_scale_factor_); 1118 params.visible_viewport_size,
1119 GetOriginalDeviceScaleFactor());
1115 } else { 1120 } else {
1116 visual_viewport_size = visible_viewport_size_; 1121 visual_viewport_size = visible_viewport_size_;
1117 } 1122 }
1118 1123
1119 webwidget()->resizeVisualViewport(visual_viewport_size); 1124 webwidget()->resizeVisualViewport(visual_viewport_size);
1120 1125
1121 if (params.new_size.IsEmpty() || params.physical_backing_size.IsEmpty()) { 1126 if (params.new_size.IsEmpty() || params.physical_backing_size.IsEmpty()) {
1122 // In this case there is no paint/composite and therefore no 1127 // In this case there is no paint/composite and therefore no
1123 // ViewHostMsg_UpdateRect to send the resize ack with. We'd need to send the 1128 // ViewHostMsg_UpdateRect to send the resize ack with. We'd need to send the
1124 // ack through a fake ViewHostMsg_UpdateRect or a different message. 1129 // ack through a fake ViewHostMsg_UpdateRect or a different message.
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 webwidget_->confirmComposition(WebWidget::KeepSelection); 1476 webwidget_->confirmComposition(WebWidget::KeepSelection);
1472 else 1477 else
1473 webwidget_->confirmComposition(WebWidget::DoNotKeepSelection); 1478 webwidget_->confirmComposition(WebWidget::DoNotKeepSelection);
1474 input_handler_->set_handling_input_event(false); 1479 input_handler_->set_handling_input_event(false);
1475 UpdateCompositionInfo(true); 1480 UpdateCompositionInfo(true);
1476 } 1481 }
1477 1482
1478 void RenderWidget::OnDeviceScaleFactorChanged() { 1483 void RenderWidget::OnDeviceScaleFactorChanged() {
1479 if (!compositor_) 1484 if (!compositor_)
1480 return; 1485 return;
1481
1482 if (IsUseZoomForDSFEnabled()) 1486 if (IsUseZoomForDSFEnabled())
1483 compositor_->SetPaintedDeviceScaleFactor(device_scale_factor_); 1487 compositor_->SetPaintedDeviceScaleFactor(GetOriginalDeviceScaleFactor());
1484 else 1488 else
1485 compositor_->setDeviceScaleFactor(device_scale_factor_); 1489 compositor_->setDeviceScaleFactor(device_scale_factor_);
1486 } 1490 }
1487 1491
1488 void RenderWidget::OnRepaint(gfx::Size size_to_paint) { 1492 void RenderWidget::OnRepaint(gfx::Size size_to_paint) {
1489 // During shutdown we can just ignore this message. 1493 // During shutdown we can just ignore this message.
1490 if (!webwidget_) 1494 if (!webwidget_)
1491 return; 1495 return;
1492 1496
1493 // Even if the browser provides an empty damage rect, it's still expecting to 1497 // Even if the browser provides an empty damage rect, it's still expecting to
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 return; 1568 return;
1565 composition_character_bounds_ = character_bounds; 1569 composition_character_bounds_ = character_bounds;
1566 composition_range_ = range; 1570 composition_range_ = range;
1567 Send(new InputHostMsg_ImeCompositionRangeChanged( 1571 Send(new InputHostMsg_ImeCompositionRangeChanged(
1568 routing_id(), composition_range_, composition_character_bounds_)); 1572 routing_id(), composition_range_, composition_character_bounds_));
1569 #endif 1573 #endif
1570 } 1574 }
1571 1575
1572 void RenderWidget::convertViewportToWindow(blink::WebRect* rect) { 1576 void RenderWidget::convertViewportToWindow(blink::WebRect* rect) {
1573 if (IsUseZoomForDSFEnabled()) { 1577 if (IsUseZoomForDSFEnabled()) {
1574 float reverse = 1 / device_scale_factor_; 1578 float reverse = 1 / GetOriginalDeviceScaleFactor();
1575 // TODO(oshima): We may need to allow pixel precision here as the the 1579 // TODO(oshima): We may need to allow pixel precision here as the the
1576 // anchor element can be placed at half pixel. 1580 // anchor element can be placed at half pixel.
1577 gfx::Rect window_rect = 1581 gfx::Rect window_rect =
1578 gfx::ScaleToEnclosedRect(gfx::Rect(*rect), reverse); 1582 gfx::ScaleToEnclosedRect(gfx::Rect(*rect), reverse);
1579 rect->x = window_rect.x(); 1583 rect->x = window_rect.x();
1580 rect->y = window_rect.y(); 1584 rect->y = window_rect.y();
1581 rect->width = window_rect.width(); 1585 rect->width = window_rect.width();
1582 rect->height = window_rect.height(); 1586 rect->height = window_rect.height();
1583 } 1587 }
1584 } 1588 }
1585 1589
1586 void RenderWidget::convertWindowToViewport(blink::WebFloatRect* rect) { 1590 void RenderWidget::convertWindowToViewport(blink::WebFloatRect* rect) {
1587 if (IsUseZoomForDSFEnabled()) { 1591 if (IsUseZoomForDSFEnabled()) {
1588 rect->x *= device_scale_factor_; 1592 rect->x *= GetOriginalDeviceScaleFactor();
1589 rect->y *= device_scale_factor_; 1593 rect->y *= GetOriginalDeviceScaleFactor();
1590 rect->width *= device_scale_factor_; 1594 rect->width *= GetOriginalDeviceScaleFactor();
1591 rect->height *= device_scale_factor_; 1595 rect->height *= GetOriginalDeviceScaleFactor();
1592 } 1596 }
1593 } 1597 }
1594 1598
1595 void RenderWidget::OnShowImeIfNeeded() { 1599 void RenderWidget::OnShowImeIfNeeded() {
1596 #if defined(OS_ANDROID) || defined(USE_AURA) 1600 #if defined(OS_ANDROID) || defined(USE_AURA)
1597 UpdateTextInputState(ShowIme::IF_NEEDED, ChangeSource::FROM_NON_IME); 1601 UpdateTextInputState(ShowIme::IF_NEEDED, ChangeSource::FROM_NON_IME);
1598 #endif 1602 #endif
1599 1603
1600 // TODO(rouslan): Fix ChromeOS and Windows 8 behavior of autofill popup with 1604 // TODO(rouslan): Fix ChromeOS and Windows 8 behavior of autofill popup with
1601 // virtual keyboard. 1605 // virtual keyboard.
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
2112 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { 2116 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
2113 video_hole_frames_.RemoveObserver(frame); 2117 video_hole_frames_.RemoveObserver(frame);
2114 } 2118 }
2115 #endif // defined(VIDEO_HOLE) 2119 #endif // defined(VIDEO_HOLE)
2116 2120
2117 void RenderWidget::OnWaitNextFrameForTests(int routing_id) { 2121 void RenderWidget::OnWaitNextFrameForTests(int routing_id) {
2118 QueueMessage(new ViewHostMsg_WaitForNextFrameForTests_ACK(routing_id), 2122 QueueMessage(new ViewHostMsg_WaitForNextFrameForTests_ACK(routing_id),
2119 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); 2123 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
2120 } 2124 }
2121 2125
2126 float RenderWidget::GetOriginalDeviceScaleFactor() const {
2127 return
2128 screen_metrics_emulator_ ?
2129 screen_metrics_emulator_->original_screen_info().deviceScaleFactor :
2130 device_scale_factor_;
2131 }
2132
2122 } // namespace content 2133 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | third_party/WebKit/Source/core/inspector/DevToolsHost.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698