Commit 1f3a4e3e authored by Christopher Cameron's avatar Christopher Cameron Committed by Commit Bot

color: Make ui::Compositor receive color profile updates

RenderWidgetHostViewAura currently listens appropriately, but
the message is not sent to the compositor, so we always composite
back into whatever the default color profile was when the window
was created. Make WindowTreeHost be a DisplayObserver to fix this.

Bug: 735613
Change-Id: Id560d5ec0e2f2083f3218b6b68ed7fb4ac9dea75
Reviewed-on: https://chromium-review.googlesource.com/569140
Commit-Queue: ccameron chromium <ccameron@chromium.org>
Reviewed-by: default avatarFredrik Hubinette <hubbe@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487395}
parent c464b976
...@@ -223,13 +223,17 @@ void WindowTreeHost::Hide() { ...@@ -223,13 +223,17 @@ void WindowTreeHost::Hide() {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// WindowTreeHost, protected: // WindowTreeHost, protected:
WindowTreeHost::WindowTreeHost() : WindowTreeHost(nullptr) {} WindowTreeHost::WindowTreeHost() : WindowTreeHost(nullptr) {
display::Screen::GetScreen()->AddObserver(this);
}
WindowTreeHost::WindowTreeHost(std::unique_ptr<WindowPort> window_port) WindowTreeHost::WindowTreeHost(std::unique_ptr<WindowPort> window_port)
: window_(new Window(nullptr, std::move(window_port))), : window_(new Window(nullptr, std::move(window_port))),
last_cursor_(ui::CursorType::kNull), last_cursor_(ui::CursorType::kNull),
input_method_(nullptr), input_method_(nullptr),
owned_input_method_(false) {} owned_input_method_(false) {
display::Screen::GetScreen()->RemoveObserver(this);
}
void WindowTreeHost::DestroyCompositor() { void WindowTreeHost::DestroyCompositor() {
compositor_.reset(); compositor_.reset();
...@@ -340,6 +344,22 @@ ui::EventSink* WindowTreeHost::GetEventSink() { ...@@ -340,6 +344,22 @@ ui::EventSink* WindowTreeHost::GetEventSink() {
return dispatcher_.get(); return dispatcher_.get();
} }
void WindowTreeHost::OnDisplayAdded(const display::Display& new_display) {}
void WindowTreeHost::OnDisplayRemoved(const display::Display& old_display) {}
void WindowTreeHost::OnDisplayMetricsChanged(const display::Display& display,
uint32_t metrics) {
display::Screen* screen = display::Screen::GetScreen();
if (display.id() != screen->GetDisplayNearestView(window()).id())
return;
if (metrics & DisplayObserver::DISPLAY_METRIC_COLOR_SPACE) {
if (compositor_)
compositor_->SetDisplayColorSpace(display.color_space());
}
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// WindowTreeHost, private: // WindowTreeHost, private:
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ui/aura/aura_export.h" #include "ui/aura/aura_export.h"
#include "ui/base/cursor/cursor.h" #include "ui/base/cursor/cursor.h"
#include "ui/base/ime/input_method_delegate.h" #include "ui/base/ime/input_method_delegate.h"
#include "ui/display/display_observer.h"
#include "ui/events/event_source.h" #include "ui/events/event_source.h"
#include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/insets.h"
#include "ui/gfx/native_widget_types.h" #include "ui/gfx/native_widget_types.h"
...@@ -47,7 +48,8 @@ class WindowTreeHostObserver; ...@@ -47,7 +48,8 @@ class WindowTreeHostObserver;
// It provides the accelerated widget and maps events from the native os to // It provides the accelerated widget and maps events from the native os to
// aura. // aura.
class AURA_EXPORT WindowTreeHost : public ui::internal::InputMethodDelegate, class AURA_EXPORT WindowTreeHost : public ui::internal::InputMethodDelegate,
public ui::EventSource { public ui::EventSource,
public display::DisplayObserver {
public: public:
~WindowTreeHost() override; ~WindowTreeHost() override;
...@@ -227,6 +229,12 @@ class AURA_EXPORT WindowTreeHost : public ui::internal::InputMethodDelegate, ...@@ -227,6 +229,12 @@ class AURA_EXPORT WindowTreeHost : public ui::internal::InputMethodDelegate,
// Overridden from ui::EventSource: // Overridden from ui::EventSource:
ui::EventSink* GetEventSink() override; ui::EventSink* GetEventSink() override;
// display::DisplayObserver implementation.
void OnDisplayAdded(const display::Display& new_display) override;
void OnDisplayRemoved(const display::Display& old_display) override;
void OnDisplayMetricsChanged(const display::Display& display,
uint32_t metrics) override;
private: private:
friend class test::WindowTreeHostTestApi; friend class test::WindowTreeHostTestApi;
......
...@@ -166,7 +166,6 @@ DesktopWindowTreeHostX11::DesktopWindowTreeHostX11( ...@@ -166,7 +166,6 @@ DesktopWindowTreeHostX11::DesktopWindowTreeHostX11(
modal_dialog_counter_(0), modal_dialog_counter_(0),
close_widget_factory_(this), close_widget_factory_(this),
weak_factory_(this) { weak_factory_(this) {
display::Screen::GetScreen()->AddObserver(this);
} }
DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() { DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() {
...@@ -174,7 +173,6 @@ DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() { ...@@ -174,7 +173,6 @@ DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() {
wm::SetWindowMoveClient(window(), NULL); wm::SetWindowMoveClient(window(), NULL);
desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this);
DestroyDispatcher(); DestroyDispatcher();
display::Screen::GetScreen()->RemoveObserver(this);
} }
// static // static
...@@ -1302,15 +1300,11 @@ void DesktopWindowTreeHostX11::OnCursorVisibilityChangedNative(bool show) { ...@@ -1302,15 +1300,11 @@ void DesktopWindowTreeHostX11::OnCursorVisibilityChangedNative(bool show) {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// DesktopWindowTreeHostX11, display::DisplayObserver implementation: // DesktopWindowTreeHostX11, display::DisplayObserver implementation:
void DesktopWindowTreeHostX11::OnDisplayAdded(
const display::Display& new_display) {}
void DesktopWindowTreeHostX11::OnDisplayRemoved(
const display::Display& old_display) {}
void DesktopWindowTreeHostX11::OnDisplayMetricsChanged( void DesktopWindowTreeHostX11::OnDisplayMetricsChanged(
const display::Display& display, const display::Display& display,
uint32_t changed_metrics) { uint32_t changed_metrics) {
aura::WindowTreeHost::OnDisplayMetricsChanged(display, changed_metrics);
if ((changed_metrics & DISPLAY_METRIC_DEVICE_SCALE_FACTOR) && if ((changed_metrics & DISPLAY_METRIC_DEVICE_SCALE_FACTOR) &&
display::Screen::GetScreen()->GetDisplayNearestWindow(window()).id() == display::Screen::GetScreen()->GetDisplayNearestWindow(window()).id() ==
display.id()) { display.id()) {
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "ui/aura/scoped_window_targeter.h" #include "ui/aura/scoped_window_targeter.h"
#include "ui/aura/window_tree_host.h" #include "ui/aura/window_tree_host.h"
#include "ui/base/cursor/cursor_loader_x11.h" #include "ui/base/cursor/cursor_loader_x11.h"
#include "ui/display/display_observer.h"
#include "ui/events/platform/platform_event_dispatcher.h" #include "ui/events/platform/platform_event_dispatcher.h"
#include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
...@@ -45,8 +44,7 @@ class X11DesktopWindowMoveClient; ...@@ -45,8 +44,7 @@ class X11DesktopWindowMoveClient;
class VIEWS_EXPORT DesktopWindowTreeHostX11 class VIEWS_EXPORT DesktopWindowTreeHostX11
: public DesktopWindowTreeHost, : public DesktopWindowTreeHost,
public aura::WindowTreeHost, public aura::WindowTreeHost,
public ui::PlatformEventDispatcher, public ui::PlatformEventDispatcher {
public display::DisplayObserver {
public: public:
DesktopWindowTreeHostX11( DesktopWindowTreeHostX11(
internal::NativeWidgetDelegate* native_widget_delegate, internal::NativeWidgetDelegate* native_widget_delegate,
...@@ -171,9 +169,7 @@ class VIEWS_EXPORT DesktopWindowTreeHostX11 ...@@ -171,9 +169,7 @@ class VIEWS_EXPORT DesktopWindowTreeHostX11
const gfx::Point& location_in_pixels) override; const gfx::Point& location_in_pixels) override;
void OnCursorVisibilityChangedNative(bool show) override; void OnCursorVisibilityChangedNative(bool show) override;
// Overridden from display::DisplayObserver: // Overridden from display::DisplayObserver via aura::WindowTreeHost:
void OnDisplayAdded(const display::Display& new_display) override;
void OnDisplayRemoved(const display::Display& old_display) override;
void OnDisplayMetricsChanged(const display::Display& display, void OnDisplayMetricsChanged(const display::Display& display,
uint32_t changed_metrics) override; uint32_t changed_metrics) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment