| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index 9a8aaf1e0201b97512c4fdce21c358c84732f9cd..642108eae7a0d9b0b59d572f1332f217aa05a15f 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -828,9 +828,8 @@ void RenderWidget::Resize(const gfx::Size& new_size,
|
| WebSize visual_viewport_size;
|
|
|
| if (IsUseZoomForDSFEnabled()) {
|
| - gfx::SizeF scaled_visible_viewport_size =
|
| - gfx::ScaleSize(gfx::SizeF(visible_viewport_size), device_scale_factor_);
|
| - visual_viewport_size = gfx::ToCeiledSize(scaled_visible_viewport_size);
|
| + visual_viewport_size =
|
| + gfx::ScaleToCeiledSize(visible_viewport_size, device_scale_factor_);
|
| } else {
|
| visual_viewport_size = visible_viewport_size_;
|
| }
|
| @@ -1371,7 +1370,7 @@ void RenderWidget::initializeLayerTreeView() {
|
|
|
| compositor_ = RenderWidgetCompositor::Create(this, compositor_deps_);
|
| compositor_->setViewportSize(physical_backing_size_);
|
| -
|
| + OnDeviceScaleFactorChanged();
|
| // For background pages and certain tests, we don't want to trigger
|
| // OutputSurface creation.
|
| if (compositor_never_visible_ || !RenderThreadImpl::current())
|
| @@ -1627,9 +1626,8 @@ void RenderWidget::setToolTipText(const blink::WebString& text,
|
| Send(new ViewHostMsg_SetTooltipText(routing_id_, text, hint));
|
| }
|
|
|
| -void RenderWidget::setWindowRect(const WebRect& rect) {
|
| - // TODO(oshima): Scale back to DIP coordinates.
|
| - WebRect window_rect = rect;
|
| +void RenderWidget::setWindowRect(const WebRect& rect_in_screen) {
|
| + WebRect window_rect = rect_in_screen;
|
| if (popup_origin_scale_for_emulation_) {
|
| float scale = popup_origin_scale_for_emulation_;
|
| window_rect.x = popup_screen_origin_for_emulation_.x() +
|
| @@ -1707,6 +1705,14 @@ void RenderWidget::OnImeConfirmComposition(const base::string16& text,
|
| UpdateCompositionInfo(true);
|
| }
|
|
|
| +void RenderWidget::OnDeviceScaleFactorChanged() {
|
| + DCHECK(compositor_);
|
| + if (IsUseZoomForDSFEnabled())
|
| + compositor_->SetPaintedDeviceScaleFactor(device_scale_factor_);
|
| + else
|
| + compositor_->setDeviceScaleFactor(device_scale_factor_);
|
| +}
|
| +
|
| void RenderWidget::OnRepaint(gfx::Size size_to_paint) {
|
| // During shutdown we can just ignore this message.
|
| if (!webwidget_)
|
| @@ -1757,6 +1763,25 @@ void RenderWidget::showImeIfNeeded() {
|
| OnShowImeIfNeeded();
|
| }
|
|
|
| +void RenderWidget::convertViewportToScreen(blink::WebRect* rect) {
|
| + gfx::Rect screen_rect(*rect);
|
| + if (IsUseZoomForDSFEnabled()) {
|
| + // TODO(oshima): We may need to allow pixel precision here as the the
|
| + // anchor element can be placed at half pixel.
|
| + float reverse = 1 / device_scale_factor_;
|
| + screen_rect.set_origin(
|
| + gfx::ScaleToRoundedPoint(screen_rect.origin(), reverse));
|
| + screen_rect.set_size(gfx::ScaleToRoundedSize(screen_rect.size(), reverse));
|
| + }
|
| +
|
| + blink::WebRect window_rect = windowRect();
|
| + screen_rect.Offset(window_rect.x, window_rect.y);
|
| + rect->x = screen_rect.x();
|
| + rect->y = screen_rect.y();
|
| + rect->width = screen_rect.width();
|
| + rect->height = screen_rect.height();
|
| +}
|
| +
|
| void RenderWidget::OnShowImeIfNeeded() {
|
| #if defined(OS_ANDROID) || defined(USE_AURA)
|
| UpdateTextInputState(SHOW_IME_IF_NEEDED, FROM_NON_IME);
|
| @@ -1823,6 +1848,9 @@ void RenderWidget::SetDeviceScaleFactor(float device_scale_factor) {
|
| return;
|
|
|
| device_scale_factor_ = device_scale_factor;
|
| +
|
| + OnDeviceScaleFactorChanged();
|
| +
|
| ScheduleComposite();
|
| }
|
|
|
|
|