diff --git a/src/anbox/cmds/session_manager.cpp b/src/anbox/cmds/session_manager.cpp index 5c294d0..7637741 100644 --- a/src/anbox/cmds/session_manager.cpp +++ b/src/anbox/cmds/session_manager.cpp @@ -159,8 +159,6 @@ anbox::cmds::SessionManager::SessionManager(const BusFactory &bus_factory) display_frame = window_size_; auto policy = std::make_shared(input_manager, display_frame, single_window_); - // FIXME this needs to be removed and solved differently behind the scenes - registerDisplayManager(policy); auto app_db = std::make_shared(); diff --git a/src/anbox/graphics/emugl/DisplayManager.cpp b/src/anbox/graphics/emugl/DisplayManager.cpp index 0a624cd..91b842d 100644 --- a/src/anbox/graphics/emugl/DisplayManager.cpp +++ b/src/anbox/graphics/emugl/DisplayManager.cpp @@ -17,22 +17,22 @@ #include "DisplayManager.h" -namespace { -std::shared_ptr display_mgr; - -class NullDisplayManager : public DisplayManager { - public: - DisplayInfo display_info() const override { return {1280, 720}; } -}; +namespace anbox { +namespace graphics { +namespace emugl { +std::shared_ptr DisplayInfo::get() { + static auto info = std::make_shared(); + return info; } -DisplayManager::~DisplayManager() {} - -std::shared_ptr DisplayManager::get() { - if (!display_mgr) display_mgr = std::make_shared(); - return display_mgr; +void DisplayInfo::set_resolution(const std::uint32_t &vertical, const std::uint32_t horizontal) { + vertical_resolution_ = vertical; + horizontal_resolution_ = horizontal; } -void registerDisplayManager(const std::shared_ptr &mgr) { - display_mgr = mgr; -} +std::uint32_t DisplayInfo::vertical_resolution() const { return vertical_resolution_; } + +std::uint32_t DisplayInfo::horizontal_resolution() const { return horizontal_resolution_; } +} // namespace emugl +} // namespace graphics +} // namespace anbox diff --git a/src/anbox/graphics/emugl/DisplayManager.h b/src/anbox/graphics/emugl/DisplayManager.h index 857742f..fdba3cd 100644 --- a/src/anbox/graphics/emugl/DisplayManager.h +++ b/src/anbox/graphics/emugl/DisplayManager.h @@ -15,25 +15,32 @@ * */ -#ifndef DISPLAY_MANAGER_H_ -#define DISPLAY_MANAGER_H_ +#ifndef ANBOX_GRAPHICS_EMUGL_DISPLAY_INFO_H_ +#define ANBOX_GRAPHICS_EMUGL_DISPLAY_INFO_H_ +#include #include -class DisplayManager { +namespace anbox { +namespace graphics { +namespace emugl { +class DisplayInfo { public: - virtual ~DisplayManager(); + DisplayInfo() = default; - struct DisplayInfo { - int horizontal_resolution; - int vertical_resolution; - }; + static std::shared_ptr get(); - virtual DisplayInfo display_info() const = 0; + void set_resolution(const std::uint32_t &vertical, const std::uint32_t horizontal); - static std::shared_ptr get(); + std::uint32_t vertical_resolution() const; + std::uint32_t horizontal_resolution() const; + + private: + std::uint32_t vertical_resolution_ = 1280; + std::uint32_t horizontal_resolution_ = 720; }; - -void registerDisplayManager(const std::shared_ptr &mgr); +} // namespace emugl +} // namespace graphics +} // namespace anbox #endif diff --git a/src/anbox/graphics/emugl/RenderControl.cpp b/src/anbox/graphics/emugl/RenderControl.cpp index b479be0..85f8aef 100644 --- a/src/anbox/graphics/emugl/RenderControl.cpp +++ b/src/anbox/graphics/emugl/RenderControl.cpp @@ -169,10 +169,10 @@ static EGLint rcGetFBParam(EGLint param) { switch (param) { case FB_WIDTH: - ret = DisplayManager::get()->display_info().horizontal_resolution; + ret = static_cast(anbox::graphics::emugl::DisplayInfo::get()->horizontal_resolution()); break; case FB_HEIGHT: - ret = DisplayManager::get()->display_info().vertical_resolution; + ret = static_cast(anbox::graphics::emugl::DisplayInfo::get()->vertical_resolution()); break; case FB_XDPI: ret = 72; // XXX: should be implemented @@ -360,12 +360,12 @@ int rcGetNumDisplays() { int rcGetDisplayWidth(uint32_t display_id) { (void)display_id; - return DisplayManager::get()->display_info().horizontal_resolution; + return static_cast(anbox::graphics::emugl::DisplayInfo::get()->horizontal_resolution()); } int rcGetDisplayHeight(uint32_t display_id) { (void)display_id; - return DisplayManager::get()->display_info().vertical_resolution; + return static_cast(anbox::graphics::emugl::DisplayInfo::get()->vertical_resolution()); } int rcGetDisplayDpiX(uint32_t display_id) { diff --git a/src/anbox/ubuntu/platform_policy.cpp b/src/anbox/ubuntu/platform_policy.cpp index 6c88c1b..cea5551 100644 --- a/src/anbox/ubuntu/platform_policy.cpp +++ b/src/anbox/ubuntu/platform_policy.cpp @@ -68,8 +68,7 @@ PlatformPolicy::PlatformPolicy( window_size_immutable_ = true; } - display_info_.horizontal_resolution = display_frame.width(); - display_info_.vertical_resolution = display_frame.height(); + graphics::emugl::DisplayInfo::get()->set_resolution(display_frame.width(), display_frame.height()); pointer_ = input_manager->create_device(); pointer_->set_name("anbox-pointer"); @@ -285,10 +284,6 @@ void PlatformPolicy::window_resized(const Window::Id &id, } } -DisplayManager::DisplayInfo PlatformPolicy::display_info() const { - return display_info_; -} - void PlatformPolicy::set_clipboard_data(const ClipboardData &data) { if (data.text.empty()) return; diff --git a/src/anbox/ubuntu/platform_policy.h b/src/anbox/ubuntu/platform_policy.h index 9a09c0d..62d69f5 100644 --- a/src/anbox/ubuntu/platform_policy.h +++ b/src/anbox/ubuntu/platform_policy.h @@ -41,8 +41,7 @@ class Manager; namespace ubuntu { class PlatformPolicy : public std::enable_shared_from_this, public platform::Policy, - public Window::Observer, - public DisplayManager { + public Window::Observer { public: PlatformPolicy(const std::shared_ptr &input_manager, const graphics::Rect &static_display_frame = graphics::Rect::Invalid, @@ -61,8 +60,6 @@ class PlatformPolicy : public std::enable_shared_from_this, void window_resized(const Window::Id &id, const std::int32_t &width, const std::int32_t &height) override; - DisplayInfo display_info() const override; - void set_renderer(const std::shared_ptr &renderer); void set_window_manager(const std::shared_ptr &window_manager); @@ -89,7 +86,6 @@ class PlatformPolicy : public std::enable_shared_from_this, bool event_thread_running_; std::shared_ptr pointer_; std::shared_ptr keyboard_; - DisplayManager::DisplayInfo display_info_; bool window_size_immutable_ = false; bool single_window_ = false; };