From a89a6f74df4b13cd292f31f94ffccdc701be8055 Mon Sep 17 00:00:00 2001 From: "suyambu.rm" Date: Fri, 23 Oct 2020 00:31:34 +0530 Subject: [PATCH] [M85 Migration] Refactor ScreenEfl. Added features (AddObserver, RemoveObserver and NotifyDevice) in DeviceDisplayInfoEflImpl. References: https://review.tizen.org/gerrit/223074 Change-Id: Ifdf1c7d4b05259c4933af0731122aba455471716 Signed-off-by: ayushi.arya Signed-off-by: suyambu.rm (cherry picked from commit 1961110af787ad4b73eb7a99e859962933ef47b7) --- .../ui/display/device_display_info_efl.cc | 40 ++++++++++++++++++++-- .../ui/display/device_display_info_efl.h | 5 +++ .../ui/display/device_display_info_observer_efl.h | 22 ++++++++++++ tizen_src/chromium_impl/ui/display/screen_efl.cc | 29 ++++++++++++---- tizen_src/chromium_impl/ui/ui_efl.gni | 1 + 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc b/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc index 22846cf..5527da6 100644 --- a/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc +++ b/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc @@ -5,7 +5,9 @@ #include "ui/display/device_display_info_efl.h" #include "base/logging.h" +#include "base/observer_list.h" #include "tizen/system_info.h" +#include "ui/display/device_display_info_observer_efl.h" namespace display { @@ -67,9 +69,12 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl { int GetDisplayHeight() const; double GetDIPScale() const; int GetRotationDegrees() const; + void AddObserver(DeviceDisplayInfoObserverEfl* observer); + void RemoveObserver(DeviceDisplayInfoObserverEfl* observer); private: DeviceDisplayInfoEflImpl(); + void NotifyDeviceDisplayInfoChanged(); friend struct base::DefaultSingletonTraits; @@ -80,6 +85,7 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl { int display_height_; double dip_scale_; int rotation_degrees_; + base::ObserverList::Unchecked observer_list_; DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEflImpl); }; @@ -107,11 +113,17 @@ void DeviceDisplayInfoEflImpl::Update(int display_width, int display_height, rotation_degrees_ = rotation_degrees; DCHECK_NE(kInvalidRotationDegrees, rotation_degrees_); } + + NotifyDeviceDisplayInfoChanged(); } void DeviceDisplayInfoEflImpl::SetRotationDegrees(int rotation_degrees) { - base::AutoLock autolock(rotation_accessor_); - rotation_degrees_ = rotation_degrees; + { + base::AutoLock autolock(rotation_accessor_); + rotation_degrees_ = rotation_degrees; + } + + NotifyDeviceDisplayInfoChanged(); } int DeviceDisplayInfoEflImpl::GetDisplayWidth() const { @@ -138,12 +150,27 @@ int DeviceDisplayInfoEflImpl::GetRotationDegrees() const { return rotation_degrees_; } +void DeviceDisplayInfoEflImpl::AddObserver( + DeviceDisplayInfoObserverEfl* observer) { + observer_list_.AddObserver(observer); +} + +void DeviceDisplayInfoEflImpl::RemoveObserver( + DeviceDisplayInfoObserverEfl* observer) { + observer_list_.RemoveObserver(observer); +} + DeviceDisplayInfoEflImpl::DeviceDisplayInfoEflImpl() : display_width_(0), display_height_(0), dip_scale_(1.0), rotation_degrees_(kInvalidRotationDegrees) {} +void DeviceDisplayInfoEflImpl::NotifyDeviceDisplayInfoChanged() { + for (auto& observer : observer_list_) + observer.OnDeviceDisplayInfoChanged(); +} + // DeviceDisplayInfoEfl DeviceDisplayInfoEfl::DeviceDisplayInfoEfl() { DCHECK(DeviceDisplayInfoEflImpl::GetInstance()); @@ -188,5 +215,14 @@ int DeviceDisplayInfoEfl::GetRotationDegrees() const { return DeviceDisplayInfoEflImpl::GetInstance()->GetRotationDegrees(); } +void DeviceDisplayInfoEfl::AddObserver(DeviceDisplayInfoObserverEfl* observer) { + DeviceDisplayInfoEflImpl::GetInstance()->AddObserver(observer); +} + +void DeviceDisplayInfoEfl::RemoveObserver( + DeviceDisplayInfoObserverEfl* observer) { + DeviceDisplayInfoEflImpl::GetInstance()->RemoveObserver(observer); +} + } // namespace display diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_efl.h b/tizen_src/chromium_impl/ui/display/device_display_info_efl.h index 43d4ac0..2c3dd9a 100644 --- a/tizen_src/chromium_impl/ui/display/device_display_info_efl.h +++ b/tizen_src/chromium_impl/ui/display/device_display_info_efl.h @@ -11,6 +11,8 @@ namespace display { +class DeviceDisplayInfoObserverEfl; + // Facilitates access to device information in browser or renderer. class DISPLAY_EXPORT DeviceDisplayInfoEfl { public: @@ -40,6 +42,9 @@ class DISPLAY_EXPORT DeviceDisplayInfoEfl { // values are one of { 0, 90, 180, 270 }. int GetRotationDegrees() const; + void AddObserver(DeviceDisplayInfoObserverEfl* observer); + void RemoveObserver(DeviceDisplayInfoObserverEfl* observer); + private: DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEfl); }; diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h b/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h new file mode 100644 index 0000000..9221a6a --- /dev/null +++ b/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h @@ -0,0 +1,22 @@ +// Copyright 2018 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ +#define UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ + +#include "ui/display/display_export.h" + +namespace display { + +class DISPLAY_EXPORT DeviceDisplayInfoObserverEfl { + public: + virtual void OnDeviceDisplayInfoChanged() = 0; + + protected: + virtual ~DeviceDisplayInfoObserverEfl() {} +}; + +} // namespace display + +#endif // UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ diff --git a/tizen_src/chromium_impl/ui/display/screen_efl.cc b/tizen_src/chromium_impl/ui/display/screen_efl.cc index e48ea49..d385a77 100644 --- a/tizen_src/chromium_impl/ui/display/screen_efl.cc +++ b/tizen_src/chromium_impl/ui/display/screen_efl.cc @@ -8,6 +8,7 @@ #include "content/browser/renderer_host/dip_util.h" #include "ui/display/device_display_info_efl.h" +#include "ui/display/device_display_info_observer_efl.h" #include "ui/display/display.h" #include "ui/display/display_observer.h" #include "ui/display/screen.h" @@ -18,11 +19,19 @@ using namespace display; namespace ui { -class ScreenEfl : public display::Screen { +class ScreenEfl : public display::Screen, + public display::DeviceDisplayInfoObserverEfl { public: - ScreenEfl() { AddDisplay(); } + ScreenEfl() { + display::DeviceDisplayInfoEfl display_info; + display_info.AddObserver(this); + UpdateDisplays(); + } - ~ScreenEfl() override {} + ~ScreenEfl() override { + display::DeviceDisplayInfoEfl display_info; + display_info.RemoveObserver(this); + } // display::Screen overrides gfx::Point GetCursorScreenPoint() override { @@ -66,7 +75,10 @@ class ScreenEfl : public display::Screen { return GetPrimaryDisplay(); } - display::Display GetPrimaryDisplay() const override { return displays_[0]; } + display::Display GetPrimaryDisplay() const override { + DCHECK(!displays_.empty()); + return displays_[0]; + } void AddObserver(display::DisplayObserver* /*observer*/) override { NOTIMPLEMENTED(); @@ -76,8 +88,11 @@ class ScreenEfl : public display::Screen { NOTIMPLEMENTED(); } + // display::DeviceDisplayInfoObserverEfl implementation. + void OnDeviceDisplayInfoChanged() override { UpdateDisplays(); } + private: - void AddDisplay() { + void UpdateDisplays() { display::DeviceDisplayInfoEfl display_info; const float device_scale_factor = display::Display::HasForceDeviceScaleFactor() @@ -96,8 +111,8 @@ class ScreenEfl : public display::Screen { display.set_device_scale_factor(device_scale_factor); display.set_bounds(bounds_in_dip); - - displays_.push_back(display); + std::vector displays(1, display); + displays_.swap(displays); } std::vector displays_; diff --git a/tizen_src/chromium_impl/ui/ui_efl.gni b/tizen_src/chromium_impl/ui/ui_efl.gni index bab6e66..268f51f 100644 --- a/tizen_src/chromium_impl/ui/ui_efl.gni +++ b/tizen_src/chromium_impl/ui/ui_efl.gni @@ -62,6 +62,7 @@ if (use_ozone) { external_ui_gfx_sources = [ "//tizen_src/chromium_impl/ui/display/device_display_info_efl.cc", "//tizen_src/chromium_impl/ui/display/device_display_info_efl.h", + "//tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h", "//tizen_src/chromium_impl/ui/display/screen_efl.cc", "//tizen_src/chromium_impl/ui/display/screen_efl.h", "//ui/gfx/nine_image_painter.cc", -- 2.7.4