| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index 5f19a2f9466bed9021a04e66897dac5a2f8058ed..4ffa0abb190c1cac27b9a42aa635f35c682fcec2 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -185,6 +185,7 @@ class RenderWidget::ScreenMetricsEmulator {
|
| void OnShowContextMenu(ContextMenuParams* params);
|
|
|
| private:
|
| + void CalculateScaleAndOffset();
|
| void Apply(float overdraw_bottom_height,
|
| gfx::Rect resizer_rect, bool is_fullscreen);
|
|
|
| @@ -254,8 +255,7 @@ void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams(
|
| widget_->resizer_rect_, widget_->is_fullscreen_);
|
| }
|
|
|
| -void RenderWidget::ScreenMetricsEmulator::Apply(
|
| - float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) {
|
| +void RenderWidget::ScreenMetricsEmulator::CalculateScaleAndOffset() {
|
| if (fit_to_view_) {
|
| DCHECK(!original_size_.IsEmpty());
|
|
|
| @@ -269,17 +269,42 @@ void RenderWidget::ScreenMetricsEmulator::Apply(
|
| static_cast<float>(widget_rect_.height()) / height_with_gutter;
|
| float ratio = std::max(1.0f, std::max(width_ratio, height_ratio));
|
| scale_ = 1.f / ratio;
|
| +
|
| + // Center emulated view inside available view space.
|
| + offset_.set_x((original_size_.width() - scale_ * widget_rect_.width()) / 2);
|
| + offset_.set_y(
|
| + (original_size_.height() - scale_ * widget_rect_.height()) / 2);
|
| } else {
|
| scale_ = 1.f;
|
| + offset_.SetPoint(0, 0);
|
| + }
|
| +}
|
| +
|
| +void RenderWidget::ScreenMetricsEmulator::Apply(
|
| + float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) {
|
| + gfx::Rect applied_widget_rect = widget_rect_;
|
| + if (widget_rect_.size().IsEmpty()) {
|
| + scale_ = 1.f;
|
| + offset_.SetPoint(0, 0);
|
| + applied_widget_rect =
|
| + gfx::Rect(original_view_screen_rect_.origin(), original_size_);
|
| + } else {
|
| + CalculateScaleAndOffset();
|
| }
|
|
|
| - // Center emulated view inside available view space.
|
| - offset_.set_x((original_size_.width() - scale_ * widget_rect_.width()) / 2);
|
| - offset_.set_y((original_size_.height() - scale_ * widget_rect_.height()) / 2);
|
| + if (device_rect_.size().IsEmpty()) {
|
| + widget_->screen_info_.rect = original_screen_info_.rect;
|
| + widget_->screen_info_.availableRect = original_screen_info_.availableRect;
|
| + widget_->window_screen_rect_ = original_window_screen_rect_;
|
| + } else {
|
| + widget_->screen_info_.rect = gfx::Rect(device_rect_.size());
|
| + widget_->screen_info_.availableRect = gfx::Rect(device_rect_.size());
|
| + widget_->window_screen_rect_ = widget_->screen_info_.availableRect;
|
| + }
|
|
|
| - widget_->screen_info_.rect = gfx::Rect(device_rect_.size());
|
| - widget_->screen_info_.availableRect = gfx::Rect(device_rect_.size());
|
| - widget_->screen_info_.deviceScaleFactor = device_scale_factor_;
|
| + float applied_device_scale_factor = device_scale_factor_ ?
|
| + device_scale_factor_ : original_screen_info_.deviceScaleFactor;
|
| + widget_->screen_info_.deviceScaleFactor = applied_device_scale_factor;
|
|
|
| // Pass three emulation parameters to the blink side:
|
| // - we keep the real device scale factor in compositor to produce sharp image
|
| @@ -289,13 +314,12 @@ void RenderWidget::ScreenMetricsEmulator::Apply(
|
| widget_->SetScreenMetricsEmulationParameters(
|
| original_screen_info_.deviceScaleFactor, offset_, scale_);
|
|
|
| - widget_->SetDeviceScaleFactor(device_scale_factor_);
|
| - widget_->view_screen_rect_ = widget_rect_;
|
| - widget_->window_screen_rect_ = widget_->screen_info_.availableRect;
|
| + widget_->SetDeviceScaleFactor(applied_device_scale_factor);
|
| + widget_->view_screen_rect_ = applied_widget_rect;
|
|
|
| gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize(
|
| original_size_, original_screen_info_.deviceScaleFactor));
|
| - widget_->Resize(widget_rect_.size(), physical_backing_size,
|
| + widget_->Resize(applied_widget_rect.size(), physical_backing_size,
|
| overdraw_bottom_height, resizer_rect, is_fullscreen, NO_RESIZE_ACK);
|
| }
|
|
|
| @@ -321,6 +345,10 @@ void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage(
|
| const gfx::Rect& window_screen_rect) {
|
| original_view_screen_rect_ = view_screen_rect;
|
| original_window_screen_rect_ = window_screen_rect;
|
| + if (device_rect_.size().IsEmpty())
|
| + widget_->window_screen_rect_ = window_screen_rect;
|
| + if (widget_rect_.size().IsEmpty())
|
| + widget_->view_screen_rect_ = view_screen_rect;
|
| }
|
|
|
| void RenderWidget::ScreenMetricsEmulator::OnShowContextMenu(
|
|
|