summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriceman <iceman@yandex-team.ru>2015-12-22 01:19:24 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-22 09:20:32 +0000
commitba587a918ca859045437211ebca414e08f61320b (patch)
tree1e8804c65e398a46baa823f6f181f32b72b27324
parent35be41e12dc81561006a772b4c7726dba83193ae (diff)
downloadchromium_src-ba587a918ca859045437211ebca414e08f61320b.zip
chromium_src-ba587a918ca859045437211ebca414e08f61320b.tar.gz
chromium_src-ba587a918ca859045437211ebca414e08f61320b.tar.bz2
MacViews: Implement BridgedNativeWidget::OnDeviceScaleFactorChanged function.
Add a cross-platform unit-test for that functionality. TEST=views_unittests --gtest_filter="WidgetTest.OnDeviceScaleFactorChanged" BUG=415024 Review URL: https://codereview.chromium.org/1533883002 Cr-Commit-Position: refs/heads/master@{#366573}
-rw-r--r--ui/views/cocoa/bridged_native_widget.mm3
-rw-r--r--ui/views/widget/widget_unittest.cc46
2 files changed, 48 insertions, 1 deletions
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index 8344584..14de487 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -911,7 +911,8 @@ void BridgedNativeWidget::OnDelegatedFrameDamage(
void BridgedNativeWidget::OnDeviceScaleFactorChanged(
float device_scale_factor) {
- NOTIMPLEMENTED();
+ native_widget_mac_->GetWidget()->DeviceScaleFactorChanged(
+ device_scale_factor);
}
base::Closure BridgedNativeWidget::PrepareForLayerBoundsChange() {
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 5bb82e6..db8b112 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -3398,5 +3398,51 @@ TEST_F(WidgetTest, AlwaysOnTop) {
widget->CloseNow();
}
+namespace {
+
+class ScaleFactorView : public View {
+ public:
+ ScaleFactorView() = default;
+
+ // Overridden from ui::LayerDelegate:
+ void OnDeviceScaleFactorChanged(float device_scale_factor) override {
+ last_scale_factor_ = device_scale_factor;
+ View::OnDeviceScaleFactorChanged(device_scale_factor);
+ }
+
+ float last_scale_factor() const { return last_scale_factor_; };
+
+ private:
+ float last_scale_factor_ = 0.f;
+
+ DISALLOW_COPY_AND_ASSIGN(ScaleFactorView);
+};
+
+struct WidgetCloser {
+ inline void operator()(Widget* widget) const { widget->CloseNow(); }
+};
+
+}
+
+// Ensure scale factor changes are propagated from the native Widget.
+TEST_F(WidgetTest, OnDeviceScaleFactorChanged) {
+ // Automatically close the widget, but not delete it.
+ scoped_ptr<Widget, WidgetCloser> widget(CreateTopLevelPlatformWidget());
+ ScaleFactorView* view = new ScaleFactorView;
+ widget->GetRootView()->AddChildView(view);
+ float scale_factor = widget->GetLayer()->device_scale_factor();
+ EXPECT_NE(scale_factor, 0.f);
+
+ // For views that are not layer-backed, adding the view won't notify the view
+ // about the initial scale factor. Fake it.
+ view->OnDeviceScaleFactorChanged(scale_factor);
+ EXPECT_EQ(scale_factor, view->last_scale_factor());
+
+ // Changes should be propagated.
+ scale_factor *= 2.0f;
+ widget->GetLayer()->OnDeviceScaleFactorChanged(scale_factor);
+ EXPECT_EQ(scale_factor, view->last_scale_factor());
+}
+
} // namespace test
} // namespace views