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

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, 1 month 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 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();
}

Powered by Google App Engine
This is Rietveld 408576698