#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 {
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<DeviceDisplayInfoEflImpl>;
int display_height_;
double dip_scale_;
int rotation_degrees_;
+ base::ObserverList<DeviceDisplayInfoObserverEfl>::Unchecked observer_list_;
DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEflImpl);
};
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 {
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());
return DeviceDisplayInfoEflImpl::GetInstance()->GetRotationDegrees();
}
+void DeviceDisplayInfoEfl::AddObserver(DeviceDisplayInfoObserverEfl* observer) {
+ DeviceDisplayInfoEflImpl::GetInstance()->AddObserver(observer);
+}
+
+void DeviceDisplayInfoEfl::RemoveObserver(
+ DeviceDisplayInfoObserverEfl* observer) {
+ DeviceDisplayInfoEflImpl::GetInstance()->RemoveObserver(observer);
+}
+
} // namespace display
namespace display {
+class DeviceDisplayInfoObserverEfl;
+
// Facilitates access to device information in browser or renderer.
class DISPLAY_EXPORT DeviceDisplayInfoEfl {
public:
// 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);
};
--- /dev/null
+// 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_
#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"
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 {
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();
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()
display.set_device_scale_factor(device_scale_factor);
display.set_bounds(bounds_in_dip);
-
- displays_.push_back(display);
+ std::vector<display::Display> displays(1, display);
+ displays_.swap(displays);
}
std::vector<display::Display> displays_;
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",