| Index: services/ui/display/screen_manager_ozone.cc
|
| diff --git a/services/ui/display/screen_manager_ozone.cc b/services/ui/display/screen_manager_ozone.cc
|
| deleted file mode 100644
|
| index 772ee11d82b0fc2810999f36ffaebe2c51ac9d74..0000000000000000000000000000000000000000
|
| --- a/services/ui/display/screen_manager_ozone.cc
|
| +++ /dev/null
|
| @@ -1,396 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "services/ui/display/screen_manager_ozone.h"
|
| -
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "chromeos/system/devicemode.h"
|
| -#include "services/service_manager/public/cpp/interface_registry.h"
|
| -#include "third_party/skia/include/core/SkColor.h"
|
| -#include "ui/display/manager/chromeos/display_change_observer.h"
|
| -#include "ui/display/manager/chromeos/touch_transform_controller.h"
|
| -#include "ui/display/manager/display_layout_store.h"
|
| -#include "ui/display/manager/display_manager_utilities.h"
|
| -#include "ui/display/screen.h"
|
| -#include "ui/display/screen_base.h"
|
| -#include "ui/display/types/display_snapshot.h"
|
| -#include "ui/display/types/fake_display_controller.h"
|
| -#include "ui/display/types/native_display_delegate.h"
|
| -#include "ui/gfx/geometry/rect.h"
|
| -#include "ui/ozone/public/ozone_platform.h"
|
| -
|
| -namespace display {
|
| -namespace {
|
| -
|
| -// Needed for DisplayConfigurator::ForceInitialConfigure.
|
| -const SkColor kChromeOsBootColor = SkColorSetRGB(0xfe, 0xfe, 0xfe);
|
| -
|
| -// Recursively swaps the displays in a DisplayLayout to change the primary
|
| -// display but keep the same relative display layout.
|
| -// TODO(kylechar): This is copied from WindowTreeHostManager. The concept of
|
| -// getting the same relative display layout with a different primary display id
|
| -// should become a function on DisplayLayout itself to avoid reimplementing it
|
| -// here.
|
| -void SwapRecursive(const std::map<int64_t, DisplayPlacement*>& id_to_placement,
|
| - int64_t current_primary_id,
|
| - int64_t display_id) {
|
| - if (display_id == current_primary_id)
|
| - return;
|
| -
|
| - DCHECK(id_to_placement.count(display_id));
|
| - DisplayPlacement* placement = id_to_placement.at(display_id);
|
| - DCHECK(placement);
|
| - SwapRecursive(id_to_placement, current_primary_id,
|
| - placement->parent_display_id);
|
| - placement->Swap();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -std::unique_ptr<ScreenManager> ScreenManager::Create() {
|
| - return base::MakeUnique<ScreenManagerOzone>();
|
| -}
|
| -
|
| -ScreenManagerOzone::ScreenManagerOzone() {}
|
| -
|
| -ScreenManagerOzone::~ScreenManagerOzone() {
|
| - // We are shutting down and don't want to make anymore display changes.
|
| - fake_display_controller_ = nullptr;
|
| -
|
| - touch_transform_controller_.reset();
|
| -
|
| - if (display_manager_)
|
| - display_manager_->RemoveObserver(this);
|
| -
|
| - if (display_change_observer_) {
|
| - display_configurator_.RemoveObserver(display_change_observer_.get());
|
| - display_change_observer_.reset();
|
| - }
|
| -
|
| - if (display_manager_)
|
| - display_manager_.reset();
|
| -}
|
| -
|
| -void ScreenManagerOzone::SetPrimaryDisplayId(int64_t display_id) {
|
| - DCHECK_NE(kInvalidDisplayId, display_id);
|
| - if (primary_display_id_ == display_id)
|
| - return;
|
| -
|
| - const Display& new_primary_display =
|
| - display_manager_->GetDisplayForId(display_id);
|
| - if (!new_primary_display.is_valid()) {
|
| - LOG(ERROR) << "Invalid or non-existent display is requested:"
|
| - << new_primary_display.ToString();
|
| - return;
|
| - }
|
| -
|
| - int64_t old_primary_display_id = primary_display_id_;
|
| -
|
| - const DisplayLayout& layout = display_manager_->GetCurrentDisplayLayout();
|
| - // The requested primary id can be same as one in the stored layout
|
| - // when the primary id is set after new displays are connected.
|
| - // Only update the layout if it is requested to swap primary display.
|
| - if (layout.primary_id != new_primary_display.id()) {
|
| - std::unique_ptr<DisplayLayout> swapped_layout(layout.Copy());
|
| -
|
| - std::map<int64_t, DisplayPlacement*> id_to_placement;
|
| - for (auto& placement : swapped_layout->placement_list)
|
| - id_to_placement[placement.display_id] = &placement;
|
| - SwapRecursive(id_to_placement, primary_display_id_,
|
| - new_primary_display.id());
|
| -
|
| - std::sort(swapped_layout->placement_list.begin(),
|
| - swapped_layout->placement_list.end(),
|
| - [](const DisplayPlacement& d1, const DisplayPlacement& d2) {
|
| - return d1.display_id < d2.display_id;
|
| - });
|
| -
|
| - swapped_layout->primary_id = new_primary_display.id();
|
| - DisplayIdList list = display_manager_->GetCurrentDisplayIdList();
|
| - display_manager_->layout_store()->RegisterLayoutForDisplayIdList(
|
| - list, std::move(swapped_layout));
|
| - }
|
| -
|
| - primary_display_id_ = new_primary_display.id();
|
| - screen_->display_list().UpdateDisplay(new_primary_display,
|
| - DisplayList::Type::PRIMARY);
|
| -
|
| - // Force updating display bounds for new primary display.
|
| - display_manager_->set_force_bounds_changed(true);
|
| - display_manager_->UpdateDisplays();
|
| - display_manager_->set_force_bounds_changed(false);
|
| -
|
| - DVLOG(1) << "Primary display changed from " << old_primary_display_id
|
| - << " to " << primary_display_id_;
|
| - delegate_->OnPrimaryDisplayChanged(primary_display_id_);
|
| -}
|
| -
|
| -void ScreenManagerOzone::AddInterfaces(
|
| - service_manager::InterfaceRegistry* registry) {
|
| - registry->AddInterface<mojom::DisplayController>(this);
|
| - registry->AddInterface<mojom::TestDisplayController>(this);
|
| -}
|
| -
|
| -void ScreenManagerOzone::Init(ScreenManagerDelegate* delegate) {
|
| - DCHECK(delegate);
|
| - delegate_ = delegate;
|
| -
|
| - // Tests may inject a NativeDisplayDelegate, otherwise get it from
|
| - // OzonePlatform.
|
| - if (!native_display_delegate_) {
|
| - native_display_delegate_ =
|
| - ui::OzonePlatform::GetInstance()->CreateNativeDisplayDelegate();
|
| - }
|
| -
|
| - // The FakeDisplayController gives us a way to make the NativeDisplayDelegate
|
| - // pretend something display related has happened.
|
| - if (!chromeos::IsRunningAsSystemCompositor()) {
|
| - fake_display_controller_ =
|
| - native_display_delegate_->GetFakeDisplayController();
|
| - }
|
| -
|
| - // Create a new Screen instance.
|
| - std::unique_ptr<ScreenBase> screen = base::MakeUnique<ScreenBase>();
|
| - Screen::SetScreenInstance(screen.get());
|
| - screen_ = screen.get();
|
| -
|
| - // Configure display manager. ScreenManager acts as an observer to find out
|
| - // display changes and as a delegate to find out when changes start/stop.
|
| - display_manager_ = base::MakeUnique<DisplayManager>(std::move(screen));
|
| - display_manager_->set_configure_displays(true);
|
| - display_manager_->AddObserver(this);
|
| - display_manager_->set_delegate(this);
|
| -
|
| - // DisplayChangeObserver observes DisplayConfigurator and sends updates to
|
| - // DisplayManager.
|
| - display_change_observer_ = base::MakeUnique<DisplayChangeObserver>(
|
| - &display_configurator_, display_manager_.get());
|
| -
|
| - // We want display configuration to happen even off device to keep the control
|
| - // flow similar.
|
| - display_configurator_.set_configure_display(true);
|
| - display_configurator_.AddObserver(display_change_observer_.get());
|
| - display_configurator_.set_state_controller(display_change_observer_.get());
|
| - display_configurator_.set_mirroring_controller(display_manager_.get());
|
| -
|
| - // Perform initial configuration.
|
| - display_configurator_.Init(std::move(native_display_delegate_), false);
|
| - display_configurator_.ForceInitialConfigure(kChromeOsBootColor);
|
| -
|
| - touch_transform_controller_ = base::MakeUnique<TouchTransformController>(
|
| - &display_configurator_, display_manager_.get());
|
| -}
|
| -
|
| -void ScreenManagerOzone::RequestCloseDisplay(int64_t display_id) {
|
| - if (!fake_display_controller_)
|
| - return;
|
| -
|
| - // Tell the NDD to remove the display. ScreenManager will get an update
|
| - // that the display configuration has changed and the display will be gone.
|
| - fake_display_controller_->RemoveDisplay(display_id);
|
| -}
|
| -
|
| -int64_t ScreenManagerOzone::GetPrimaryDisplayId() const {
|
| - return primary_display_id_;
|
| -}
|
| -
|
| -void ScreenManagerOzone::ToggleAddRemoveDisplay() {
|
| - if (!fake_display_controller_)
|
| - return;
|
| - DVLOG(1) << "ToggleAddRemoveDisplay";
|
| -
|
| - int num_displays = display_manager_->GetNumDisplays();
|
| - if (num_displays == 1) {
|
| - const gfx::Size& pixel_size =
|
| - display_manager_->GetDisplayInfo(display_manager_->GetDisplayAt(0).id())
|
| - .bounds_in_native()
|
| - .size();
|
| - fake_display_controller_->AddDisplay(pixel_size);
|
| - } else if (num_displays > 1) {
|
| - DisplayIdList displays = display_manager_->GetCurrentDisplayIdList();
|
| - fake_display_controller_->RemoveDisplay(displays.back());
|
| - }
|
| -}
|
| -
|
| -void ScreenManagerOzone::ToggleDisplayResolution() {
|
| - if (primary_display_id_ == kInvalidDisplayId)
|
| - return;
|
| -
|
| - // Internal displays don't have alternate resolutions.
|
| - if (Display::HasInternalDisplay() &&
|
| - primary_display_id_ == Display::InternalDisplayId())
|
| - return;
|
| -
|
| - DVLOG(1) << "ToggleDisplayResolution";
|
| -
|
| - const ManagedDisplayInfo& info =
|
| - display_manager_->GetDisplayInfo(primary_display_id_);
|
| - scoped_refptr<ManagedDisplayMode> mode =
|
| - GetDisplayModeForNextResolution(info, true);
|
| -
|
| - // Loop back to first mode from last.
|
| - if (mode->size() == info.bounds_in_native().size())
|
| - mode = info.display_modes()[0];
|
| -
|
| - // Set mode only if it's different from current.
|
| - if (mode->size() != info.bounds_in_native().size())
|
| - display_manager_->SetDisplayMode(primary_display_id_, mode);
|
| -}
|
| -
|
| -void ScreenManagerOzone::IncreaseInternalDisplayZoom() {
|
| - if (Display::HasInternalDisplay())
|
| - display_manager_->ZoomInternalDisplay(false);
|
| -}
|
| -
|
| -void ScreenManagerOzone::DecreaseInternalDisplayZoom() {
|
| - if (Display::HasInternalDisplay())
|
| - display_manager_->ZoomInternalDisplay(true);
|
| -}
|
| -
|
| -void ScreenManagerOzone::ResetInternalDisplayZoom() {
|
| - if (Display::HasInternalDisplay())
|
| - display_manager_->ResetInternalDisplayZoom();
|
| -}
|
| -
|
| -void ScreenManagerOzone::RotateCurrentDisplayCW() {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -void ScreenManagerOzone::SwapPrimaryDisplay() {
|
| - // Can't swap if there is only 1 display and swapping isn't supported for 3 or
|
| - // more displays.
|
| - if (display_manager_->GetNumDisplays() != 2)
|
| - return;
|
| -
|
| - DVLOG(1) << "SwapPrimaryDisplay()";
|
| -
|
| - DisplayIdList display_ids = display_manager_->GetCurrentDisplayIdList();
|
| -
|
| - // Find the next primary display.
|
| - if (primary_display_id_ == display_ids[0])
|
| - SetPrimaryDisplayId(display_ids[1]);
|
| - else
|
| - SetPrimaryDisplayId(display_ids[0]);
|
| -}
|
| -
|
| -void ScreenManagerOzone::ToggleMirrorMode() {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -void ScreenManagerOzone::SetDisplayWorkArea(int64_t display_id,
|
| - const gfx::Size& size,
|
| - const gfx::Insets& insets) {
|
| - // TODO(kylechar): Check the size of the display matches the current size.
|
| - display_manager_->UpdateWorkAreaOfDisplay(display_id, insets);
|
| -}
|
| -
|
| -void ScreenManagerOzone::TakeDisplayControl(
|
| - const TakeDisplayControlCallback& callback) {
|
| - display_configurator_.TakeControl(callback);
|
| -}
|
| -
|
| -void ScreenManagerOzone::RelinquishDisplayControl(
|
| - const RelinquishDisplayControlCallback& callback) {
|
| - display_configurator_.RelinquishControl(callback);
|
| -}
|
| -
|
| -void ScreenManagerOzone::OnDisplayAdded(const Display& display) {
|
| - ViewportMetrics metrics = GetViewportMetricsForDisplay(display);
|
| - DVLOG(1) << "OnDisplayAdded: " << display.ToString() << "\n "
|
| - << metrics.ToString();
|
| - screen_->display_list().AddDisplay(display, DisplayList::Type::NOT_PRIMARY);
|
| - delegate_->OnDisplayAdded(display.id(), metrics);
|
| -}
|
| -
|
| -void ScreenManagerOzone::OnDisplayRemoved(const Display& display) {
|
| - // TODO(kylechar): If we're removing the primary display we need to first set
|
| - // a new primary display. This will crash until then.
|
| -
|
| - DVLOG(1) << "OnDisplayRemoved: " << display.ToString();
|
| - screen_->display_list().RemoveDisplay(display.id());
|
| - delegate_->OnDisplayRemoved(display.id());
|
| -}
|
| -
|
| -void ScreenManagerOzone::OnDisplayMetricsChanged(const Display& display,
|
| - uint32_t changed_metrics) {
|
| - ViewportMetrics metrics = GetViewportMetricsForDisplay(display);
|
| - DVLOG(1) << "OnDisplayModified: " << display.ToString() << "\n "
|
| - << metrics.ToString();
|
| - screen_->display_list().UpdateDisplay(display);
|
| - delegate_->OnDisplayModified(display.id(), metrics);
|
| -}
|
| -
|
| -ViewportMetrics ScreenManagerOzone::GetViewportMetricsForDisplay(
|
| - const Display& display) {
|
| - const ManagedDisplayInfo& managed_info =
|
| - display_manager_->GetDisplayInfo(display.id());
|
| -
|
| - ViewportMetrics metrics;
|
| - metrics.bounds = display.bounds();
|
| - metrics.work_area = display.work_area();
|
| - metrics.pixel_size = managed_info.bounds_in_native().size();
|
| - metrics.rotation = display.rotation();
|
| - metrics.touch_support = display.touch_support();
|
| - metrics.device_scale_factor = display.device_scale_factor();
|
| - metrics.ui_scale_factor = managed_info.configured_ui_scale();
|
| -
|
| - return metrics;
|
| -}
|
| -
|
| -void ScreenManagerOzone::CreateOrUpdateMirroringDisplay(
|
| - const DisplayInfoList& display_info_list) {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -void ScreenManagerOzone::CloseMirroringDisplayIfNotNecessary() {
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -void ScreenManagerOzone::PreDisplayConfigurationChange(bool clear_focus) {
|
| - DVLOG(1) << "PreDisplayConfigurationChange";
|
| -}
|
| -
|
| -void ScreenManagerOzone::PostDisplayConfigurationChange(
|
| - bool must_clear_window) {
|
| - // Set primary display if not set yet.
|
| - if (primary_display_id_ == kInvalidDisplayId) {
|
| - const Display& primary_display =
|
| - display_manager_->GetPrimaryDisplayCandidate();
|
| - if (primary_display.is_valid()) {
|
| - primary_display_id_ = primary_display.id();
|
| - DVLOG(1) << "Set primary display to " << primary_display_id_;
|
| - screen_->display_list().UpdateDisplay(primary_display,
|
| - DisplayList::Type::PRIMARY);
|
| - delegate_->OnPrimaryDisplayChanged(primary_display_id_);
|
| - }
|
| - }
|
| -
|
| - touch_transform_controller_->UpdateTouchTransforms();
|
| -
|
| - DVLOG(1) << "PostDisplayConfigurationChange";
|
| -}
|
| -
|
| -DisplayConfigurator* ScreenManagerOzone::display_configurator() {
|
| - return &display_configurator_;
|
| -}
|
| -
|
| -void ScreenManagerOzone::Create(
|
| - const service_manager::Identity& remote_identity,
|
| - mojom::DisplayControllerRequest request) {
|
| - controller_bindings_.AddBinding(this, std::move(request));
|
| -}
|
| -
|
| -void ScreenManagerOzone::Create(
|
| - const service_manager::Identity& remote_identity,
|
| - mojom::TestDisplayControllerRequest request) {
|
| - test_bindings_.AddBinding(this, std::move(request));
|
| -}
|
| -
|
| -} // namespace display
|
|
|