summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.cc20
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.h3
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc7
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.h1
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.cc18
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.h1
-rw-r--r--content/common/view_messages.h3
-rw-r--r--content/port/browser/render_widget_host_view_port.h3
-rw-r--r--content/public/test/render_view_test.cc2
-rw-r--r--content/renderer/render_view_impl.cc7
-rw-r--r--content/renderer/render_view_impl.h1
-rw-r--r--content/renderer/render_widget.cc11
-rw-r--r--content/renderer/render_widget.h5
-rw-r--r--content/renderer/render_widget_fullscreen_pepper.cc19
-rw-r--r--content/renderer/render_widget_fullscreen_pepper.h1
15 files changed, 79 insertions, 23 deletions
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 85108c0..daba667 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -481,26 +481,30 @@ void RenderWidgetHostImpl::WasResized() {
gfx::Rect view_bounds = view_->GetViewBounds();
gfx::Size new_size(view_bounds.size());
+ gfx::Size old_physical_backing_size = physical_backing_size_;
+ physical_backing_size_ = view_->GetPhysicalBackingSize();
bool was_fullscreen = is_fullscreen_;
is_fullscreen_ = IsFullscreen();
- bool fullscreen_changed = was_fullscreen != is_fullscreen_;
+
bool size_changed = new_size != current_size_;
+ bool side_payload_changed =
+ old_physical_backing_size != physical_backing_size_ ||
+ was_fullscreen != is_fullscreen_;
- // Avoid asking the RenderWidget to resize to its current size, since it
- // won't send us a PaintRect message in that case.
- if (!size_changed && !fullscreen_changed)
+ if (!size_changed && !side_payload_changed)
return;
if (in_flight_size_ != gfx::Size() && new_size == in_flight_size_ &&
- !fullscreen_changed)
+ !side_payload_changed)
return;
- // We don't expect to receive an ACK when the requested size is empty.
+ // We don't expect to receive an ACK when the requested size is empty or when
+ // the main viewport size didn't change.
if (!new_size.IsEmpty() && size_changed)
resize_ack_pending_ = true;
- if (!Send(new ViewMsg_Resize(routing_id_, new_size,
- GetRootWindowResizerRect(), is_fullscreen_))) {
+ if (!Send(new ViewMsg_Resize(routing_id_, new_size, physical_backing_size_,
+ GetRootWindowResizerRect(), is_fullscreen_))) {
resize_ack_pending_ = false;
} else {
in_flight_size_ = new_size;
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 4ab0059..1d3313d 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -690,6 +690,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl : virtual public RenderWidgetHost,
// The current size of the RenderWidget.
gfx::Size current_size_;
+ // The size of the view's backing surface in non-DPI-adjusted pixels.
+ gfx::Size physical_backing_size_;
+
// The size we last sent as requested size to the renderer. |current_size_|
// is only updated once the resize message has been ack'd. This on the other
// hand is updated when the resize message is sent. This is very similar to
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 9637317..de560f1 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -280,6 +280,13 @@ gfx::Rect RenderWidgetHostViewAndroid::GetViewBounds() const {
return gfx::Rect(content_view_core_->GetViewportSizeDip());
}
+gfx::Size RenderWidgetHostViewAndroid::GetPhysicalBackingSize() const {
+ if (!content_view_core_)
+ return gfx::Size();
+
+ return content_view_core_->GetViewportSizePix();
+}
+
void RenderWidgetHostViewAndroid::UpdateCursor(const WebCursor& cursor) {
// There are no cursors on Android.
}
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 9bcff13..4874172 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -76,6 +76,7 @@ class RenderWidgetHostViewAndroid : public RenderWidgetHostViewBase {
virtual void Hide() OVERRIDE;
virtual bool IsShowing() OVERRIDE;
virtual gfx::Rect GetViewBounds() const OVERRIDE;
+ virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE;
virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE;
virtual void SetIsLoading(bool is_loading) OVERRIDE;
virtual void TextInputStateChanged(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index a2cb5a4..f56413e 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -12,6 +12,8 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
#include "ui/gfx/display.h"
#include "ui/gfx/screen.h"
+#include "ui/gfx/size_conversions.h"
+#include "ui/gfx/size_f.h"
#if defined(OS_WIN)
#include "base/command_line.h"
@@ -365,6 +367,14 @@ const SkBitmap& RenderWidgetHostViewBase::GetBackground() {
return background_;
}
+gfx::Size RenderWidgetHostViewBase::GetPhysicalBackingSize() const {
+ gfx::Display display =
+ gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(
+ GetViewBounds().origin());
+ return gfx::ToCeiledSize(gfx::ScaleSize(GetViewBounds().size(),
+ display.device_scale_factor()));
+}
+
void RenderWidgetHostViewBase::SelectionChanged(const string16& text,
size_t offset,
const ui::Range& range) {
@@ -432,11 +442,17 @@ void RenderWidgetHostViewBase::UpdateScreenInfo(gfx::NativeView view) {
if (current_display_area_ == display.work_area() &&
current_device_scale_factor_ == display.device_scale_factor())
return;
+
+ bool device_scale_factor_changed =
+ current_device_scale_factor_ != display.device_scale_factor();
current_display_area_ = display.work_area();
current_device_scale_factor_ = display.device_scale_factor();
- if (impl)
+ if (impl) {
+ if (device_scale_factor_changed)
+ impl->WasResized();
impl->NotifyScreenInfoChanged();
}
+}
SmoothScrollGesture* RenderWidgetHostViewBase::CreateSmoothScrollGesture(
bool scroll_down, int pixels_to_scroll, int mouse_event_x,
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 7515862..67b59b1 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -51,6 +51,7 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
const ui::Range& range) OVERRIDE;
virtual void SetBackground(const SkBitmap& background) OVERRIDE;
virtual const SkBitmap& GetBackground() OVERRIDE;
+ virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE;
virtual bool IsShowingContextMenu() const OVERRIDE;
virtual void SetShowingContextMenu(bool showing_menu) OVERRIDE;
virtual string16 GetSelectedText() const OVERRIDE;
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 42e3002..800c045 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -797,8 +797,9 @@ IPC_MESSAGE_ROUTED0(ViewMsg_Close)
// the view's current size. The generated ViewHostMsg_PaintRect message will
// have the IS_RESIZE_ACK flag set. It also receives the resizer rect so that
// we don't have to fetch it every time WebKit asks for it.
-IPC_MESSAGE_ROUTED3(ViewMsg_Resize,
+IPC_MESSAGE_ROUTED4(ViewMsg_Resize,
gfx::Size /* new_size */,
+ gfx::Size /* physical_backing_size */,
gfx::Rect /* resizer_rect */,
bool /* is_fullscreen */)
diff --git a/content/port/browser/render_widget_host_view_port.h b/content/port/browser/render_widget_host_view_port.h
index 52699be..05470af 100644
--- a/content/port/browser/render_widget_host_view_port.h
+++ b/content/port/browser/render_widget_host_view_port.h
@@ -229,6 +229,9 @@ class CONTENT_EXPORT RenderWidgetHostViewPort : public RenderWidgetHostView,
virtual void GetScreenInfo(WebKit::WebScreenInfo* results) = 0;
+ // The size of the view's backing surface in non-DPI-adjusted pixels.
+ virtual gfx::Size GetPhysicalBackingSize() const = 0;
+
// Gets the bounds of the window, in screen coordinates.
virtual gfx::Rect GetBoundsInRootWindow() = 0;
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 005cbab..3a18949 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -311,7 +311,7 @@ void RenderViewTest::Resize(gfx::Size new_size,
gfx::Rect resizer_rect,
bool is_fullscreen) {
scoped_ptr<IPC::Message> resize_message(new ViewMsg_Resize(
- 0, new_size, resizer_rect, is_fullscreen));
+ 0, new_size, new_size, resizer_rect, is_fullscreen));
OnMessageReceived(*resize_message);
}
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 61554f7..070baed 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -5431,7 +5431,8 @@ void RenderViewImpl::OnDisableAutoResize(const gfx::Size& new_size) {
return;
webview()->disableAutoResizeMode();
- Resize(new_size, resizer_rect_, is_fullscreen_, NO_RESIZE_ACK);
+ Resize(new_size, physical_backing_size_, resizer_rect_, is_fullscreen_,
+ NO_RESIZE_ACK);
}
void RenderViewImpl::OnEnablePreferredSizeChangedMode() {
@@ -5726,6 +5727,7 @@ void RenderViewImpl::OnMoveOrResizeStarted() {
}
void RenderViewImpl::OnResize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen) {
if (webview()) {
@@ -5737,7 +5739,8 @@ void RenderViewImpl::OnResize(const gfx::Size& new_size,
UpdateScrollState(webview()->mainFrame());
}
- RenderWidget::OnResize(new_size, resizer_rect, is_fullscreen);
+ RenderWidget::OnResize(new_size, physical_backing_size, resizer_rect,
+ is_fullscreen);
}
void RenderViewImpl::WillInitiatePaint() {
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index a8c049e..6b26d8f 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -780,6 +780,7 @@ class CONTENT_EXPORT RenderViewImpl
// RenderWidget overrides:
virtual void Close() OVERRIDE;
virtual void OnResize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen) OVERRIDE;
virtual void WillInitiatePaint() OVERRIDE;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index d4c3ac0..fa1900a 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -329,6 +329,7 @@ bool RenderWidget::Send(IPC::Message* message) {
}
void RenderWidget::Resize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen,
ResizeAck resize_ack) {
@@ -340,7 +341,10 @@ void RenderWidget::Resize(const gfx::Size& new_size,
if (!webwidget_)
return;
- // Remember the rect where the resize corner will be drawn.
+ if (compositor_)
+ compositor_->setViewportSize(new_size, physical_backing_size);
+
+ physical_backing_size_ = physical_backing_size_;
resizer_rect_ = resizer_rect;
// NOTE: We may have entered fullscreen mode without changing our size.
@@ -414,9 +418,11 @@ void RenderWidget::OnCreatingNewAck() {
}
void RenderWidget::OnResize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen) {
- Resize(new_size, resizer_rect, is_fullscreen, SEND_RESIZE_ACK);
+ Resize(new_size, physical_backing_size, resizer_rect, is_fullscreen,
+ SEND_RESIZE_ACK);
}
void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
@@ -1347,6 +1353,7 @@ void RenderWidget::initializeLayerTreeView(
return;
compositor_->setRootLayer(root_layer);
+ compositor_->setViewportSize(size_, physical_backing_size_);
if (init_complete_)
compositor_->setSurfaceReady();
}
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 5b763b5..653564e 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -269,6 +269,7 @@ class CONTENT_EXPORT RenderWidget
// Resizes the render widget.
void Resize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen,
ResizeAck resize_ack);
@@ -277,6 +278,7 @@ class CONTENT_EXPORT RenderWidget
void OnClose();
void OnCreatingNewAck();
virtual void OnResize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen);
void OnChangeResizeRect(const gfx::Rect& resizer_rect);
@@ -501,6 +503,9 @@ class CONTENT_EXPORT RenderWidget
PaintAggregator paint_aggregator_;
+ // The size of the view's backing surface in non-DPI-adjusted pixels.
+ gfx::Size physical_backing_size_;
+
// The area that must be reserved for drawing the resize corner.
gfx::Rect resizer_rect_;
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc
index c1cba49..3154bbbd 100644
--- a/content/renderer/render_widget_fullscreen_pepper.cc
+++ b/content/renderer/render_widget_fullscreen_pepper.cc
@@ -519,15 +519,18 @@ RenderWidgetFullscreenPepper::GetBitmapForOptimizedPluginPaint(
}
void RenderWidgetFullscreenPepper::OnResize(const gfx::Size& size,
- const gfx::Rect& resizer_rect,
- bool is_fullscreen) {
+ const gfx::Size& physical_backing_size,
+ const gfx::Rect& resizer_rect,
+ bool is_fullscreen) {
if (context_) {
- gfx::Size pixel_size = gfx::ToFlooredSize(
- gfx::ScaleSize(size, deviceScaleFactor()));
- context_->reshape(pixel_size.width(), pixel_size.height());
- context_->viewport(0, 0, pixel_size.width(), pixel_size.height());
- }
- RenderWidget::OnResize(size, resizer_rect, is_fullscreen);
+ context_->reshape(physical_backing_size.width(),
+ physical_backing_size.height());
+ context_->viewport(0, 0,
+ physical_backing_size.width(),
+ physical_backing_size.height());
+ }
+ RenderWidget::OnResize(size, physical_backing_size, resizer_rect,
+ is_fullscreen);
}
WebWidget* RenderWidgetFullscreenPepper::CreateWebWidget() {
diff --git a/content/renderer/render_widget_fullscreen_pepper.h b/content/renderer/render_widget_fullscreen_pepper.h
index 28a0e12..a20d53c 100644
--- a/content/renderer/render_widget_fullscreen_pepper.h
+++ b/content/renderer/render_widget_fullscreen_pepper.h
@@ -89,6 +89,7 @@ class RenderWidgetFullscreenPepper :
gfx::Rect* clip,
float* scale_factor) OVERRIDE;
virtual void OnResize(const gfx::Size& new_size,
+ const gfx::Size& physical_backing_size,
const gfx::Rect& resizer_rect,
bool is_fullscreen) OVERRIDE;