Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 44b971f2036e0f36859ef9bed72062ea6597cab5..8d34bf3cde65fc3025a9001670330069212fb26d 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -25,6 +25,7 @@ |
#include "components/scheduler/renderer/render_widget_scheduling_state.h" |
#include "components/scheduler/renderer/renderer_scheduler.h" |
#include "content/child/npapi/webplugin.h" |
+#include "content/common/content_switches_internal.h" |
#include "content/common/gpu/client/context_provider_command_buffer.h" |
#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" |
#include "content/common/gpu/gpu_process_launch_causes.h" |
@@ -792,11 +793,15 @@ void RenderWidget::Resize(const gfx::Size& new_size, |
if (!webwidget_) |
return; |
- if (compositor_) { |
- compositor_->setViewportSize(new_size, physical_backing_size); |
- } |
+ if (compositor_) |
+ compositor_->setViewportSize(physical_backing_size); |
+ |
+ bool resized = size_ != new_size || |
+ physical_backing_size_ != physical_backing_size; |
+ size_ = new_size; |
physical_backing_size_ = physical_backing_size; |
+ |
top_controls_shrink_blink_size_ = top_controls_shrink_blink_size; |
top_controls_height_ = top_controls_height; |
visible_viewport_size_ = visible_viewport_size; |
@@ -810,18 +815,25 @@ void RenderWidget::Resize(const gfx::Size& new_size, |
webwidget_->setTopControlsHeight(top_controls_height, |
top_controls_shrink_blink_size_); |
- if (size_ != new_size) { |
- size_ = new_size; |
- |
+ if (resized) { |
+ gfx::Size new_widget_size = |
+ IsUseZoomForDSFEnabled() ? physical_backing_size_ : size_; |
// When resizing, we want to wait to paint before ACK'ing the resize. This |
// ensures that we only resize as fast as we can paint. We only need to |
// send an ACK if we are resized to a non-empty rect. |
- webwidget_->resize(new_size); |
+ webwidget_->resize(new_widget_size); |
} |
+ WebSize pinch_viewport_size; |
- webwidget()->resizePinchViewport(gfx::Size( |
- visible_viewport_size.width(), |
- visible_viewport_size.height())); |
+ if (IsUseZoomForDSFEnabled()) { |
+ gfx::SizeF scaled_visible_viewport_size = |
+ gfx::ScaleSize(gfx::SizeF(visible_viewport_size), device_scale_factor_); |
+ pinch_viewport_size = gfx::ToCeiledSize(scaled_visible_viewport_size); |
+ } else { |
+ pinch_viewport_size = visible_viewport_size_; |
+ } |
+ |
+ webwidget()->resizePinchViewport(pinch_viewport_size); |
if (new_size.IsEmpty() || physical_backing_size.IsEmpty()) { |
// In this case there is no paint/composite and therefore no |
@@ -1334,6 +1346,7 @@ void RenderWidget::FlushPendingInputEventAck() { |
// WebWidgetClient |
void RenderWidget::didAutoResize(const WebSize& new_size) { |
+ // TODO(oshima): support UseZoomForDSFEnabled() |
if (size_.width() != new_size.width || size_.height() != new_size.height) { |
size_ = new_size; |
@@ -1356,14 +1369,14 @@ void RenderWidget::didAutoResize(const WebSize& new_size) { |
void RenderWidget::AutoResizeCompositor() { |
physical_backing_size_ = gfx::ScaleToCeiledSize(size_, device_scale_factor_); |
if (compositor_) |
- compositor_->setViewportSize(size_, physical_backing_size_); |
+ compositor_->setViewportSize(physical_backing_size_); |
} |
void RenderWidget::initializeLayerTreeView() { |
DCHECK(!host_closing_); |
compositor_ = RenderWidgetCompositor::Create(this, compositor_deps_); |
- compositor_->setViewportSize(size_, physical_backing_size_); |
+ compositor_->setViewportSize(physical_backing_size_); |
// For background pages and certain tests, we don't want to trigger |
// OutputSurface creation. |
@@ -1621,6 +1634,7 @@ void RenderWidget::setToolTipText(const blink::WebString& text, |
} |
void RenderWidget::setWindowRect(const WebRect& rect) { |
+ // TODO(oshima): Scale back to DIP coordinates. |
WebRect window_rect = rect; |
if (popup_origin_scale_for_emulation_) { |
float scale = popup_origin_scale_for_emulation_; |
@@ -1971,8 +1985,16 @@ void RenderWidget::GetSelectionBounds(gfx::Rect* focus, gfx::Rect* anchor) { |
WebRect focus_webrect; |
WebRect anchor_webrect; |
webwidget_->selectionBounds(focus_webrect, anchor_webrect); |
- *focus = focus_webrect; |
- *anchor = anchor_webrect; |
+ if (IsUseZoomForDSFEnabled()) { |
+ float inverse_scale = 1.f / device_scale_factor_; |
+ gfx::RectF focus_rect(focus_webrect); |
+ *focus = gfx::ToEnclosingRect(gfx::ScaleRect(focus_rect, inverse_scale)); |
+ gfx::RectF anchor_rect(anchor_webrect); |
+ *anchor = gfx::ToEnclosingRect(gfx::ScaleRect(anchor_rect, inverse_scale)); |
+ } else { |
+ *focus = focus_webrect; |
+ *anchor = anchor_webrect; |
+ } |
} |
void RenderWidget::UpdateSelectionBounds() { |
@@ -2120,10 +2142,6 @@ WebScreenInfo RenderWidget::screenInfo() { |
return screen_info_; |
} |
-float RenderWidget::deviceScaleFactor() { |
- return device_scale_factor_; |
-} |
- |
void RenderWidget::resetInputMethod() { |
ImeEventGuard guard(this); |
// If the last text input type is not None, then we should finish any |