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

Unified Diff: content/renderer/render_widget.cc

Issue 1456753002: Compute the popup location/size correctly when use-zoom-for-dsf is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_widget.cc
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index cb0944417a612a42d4176a4e3642d324ebeeec02..f5f5bac72ea721dfdb93663481174f924614b6d5 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -879,9 +879,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_;
}
@@ -1456,7 +1455,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())
@@ -1712,9 +1711,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() +
@@ -1792,6 +1790,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_)
@@ -1850,7 +1856,7 @@ void RenderWidget::showImeIfNeeded() {
void RenderWidget::convertViewportToWindow(blink::WebRect* rect) {
if (IsUseZoomForDSFEnabled()) {
float reverse = 1 / device_scale_factor_;
- // TODO(oshima): We may wait to allow pixel precision here as the the
+ // TODO(oshima): We may need to allow pixel precision here as the the
// anchor element can be placed at half pixel.
gfx::Rect window_rect =
gfx::ScaleToEnclosedRect(gfx::Rect(*rect), reverse);
@@ -1927,6 +1933,9 @@ void RenderWidget::SetDeviceScaleFactor(float device_scale_factor) {
return;
device_scale_factor_ = device_scale_factor;
+
+ OnDeviceScaleFactorChanged();
+
ScheduleComposite();
}

Powered by Google App Engine
This is Rietveld 408576698