Commit d1a1ebbb authored by Maksim Sisov's avatar Maksim Sisov Committed by Commit Bot

[ozone] Prepare Ozone desktop integration for Linux and other builds.

This cl adds an initial support for Ozone (Linux) builds by
utilizing DekstopWindowTreeHostPlatform design.

Actually, it looks very similar to DesktopWindowTreeHostX11 with
a difference that this design in this CL uses Ozone abstraction
layer to communicate with Wayland and other backends.

In overall, BrowserDesktopWindowTreeHostPlatform, which is actually
DesktopWindowTreeHostPlatform, is created and initialized, which triggers
creation of a PlatformWindow, which can be either Wayland, or X11, or other
ozone platform.

Also, DesktopScreenOzone class is added. This object inherits ScreenBase and
is meant to fetch displays data from underlaying ozone backends and provide
aura with necessary data.

Bug: 578890

Change-Id: I2d203cd6d1a6ddea0afe062059c6c1f9eecdafd3
Reviewed-on: https://chromium-review.googlesource.com/1039567
Commit-Queue: Maksim Sisov <msisov@igalia.com>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557149}
parent 4a460332
......@@ -2702,7 +2702,8 @@ split_static_library("ui") {
}
if (use_ozone) {
sources += [
"views/frame/browser_desktop_window_tree_host_ozone.cc",
"views/frame/browser_desktop_window_tree_host_platform.cc",
"views/frame/browser_desktop_window_tree_host_platform.h",
"views/frame/native_browser_frame_factory_ozone.cc",
]
} else {
......
......@@ -96,10 +96,8 @@ void ChromeBrowserMainExtraPartsViews::ToolkitInitialized() {
}
void ChromeBrowserMainExtraPartsViews::PreCreateThreads() {
#if defined(USE_AURA) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
// The screen may have already been set in test initialization.
if (!display::Screen::GetScreen())
display::Screen::SetScreenInstance(views::CreateDesktopScreen());
#if defined(USE_AURA)
views::InstallDesktopScreenIfNecessary();
#endif
// TODO(pkasting): Try to move ViewsDelegate creation here as well;
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Copyright 2018 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 "base/logging.h"
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_platform.h"
////////////////////////////////////////////////////////////////////////////////
//// BrowserDesktopWindowTreeHostPlatform, public:
BrowserDesktopWindowTreeHostPlatform::BrowserDesktopWindowTreeHostPlatform(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame)
: DesktopWindowTreeHostPlatform(native_widget_delegate,
desktop_native_widget_aura) {}
BrowserDesktopWindowTreeHostPlatform::~BrowserDesktopWindowTreeHostPlatform() {}
views::DesktopWindowTreeHost*
BrowserDesktopWindowTreeHostPlatform::AsDesktopWindowTreeHost() {
return this;
}
int BrowserDesktopWindowTreeHostPlatform::GetMinimizeButtonOffset() const {
return 0;
}
bool BrowserDesktopWindowTreeHostPlatform::UsesNativeSystemMenu() const {
return false;
}
////////////////////////////////////////////////////////////////////////////////
// BrowserDesktopWindowTreeHost, public:
......@@ -15,6 +40,7 @@ BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame) {
NOTREACHED();
return nullptr;
return new BrowserDesktopWindowTreeHostPlatform(native_widget_delegate,
desktop_native_widget_aura,
browser_view, browser_frame);
}
// Copyright 2018 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.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_PLATFORM_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_PLATFORM_H_
#include "base/macros.h"
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h"
class BrowserFrame;
class BrowserView;
namespace views {
class DesktopNativeWidgetAura;
}
// Platform independent frame implementation. Utilizes
// DesktopWindowTreeHostPlatform, which uses PlatformWindow with different
// backends like ozone and others.
class BrowserDesktopWindowTreeHostPlatform
: public BrowserDesktopWindowTreeHost,
public views::DesktopWindowTreeHostPlatform {
public:
BrowserDesktopWindowTreeHostPlatform(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame);
~BrowserDesktopWindowTreeHostPlatform() override;
private:
// Overridden from BrowserDesktopWindowTreeHost:
views::DesktopWindowTreeHost* AsDesktopWindowTreeHost() override;
int GetMinimizeButtonOffset() const override;
bool UsesNativeSystemMenu() const override;
DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostPlatform);
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_PLATFORM_H_
......@@ -5,6 +5,7 @@
#include "chrome/browser/ui/views/frame/native_browser_frame_factory.h"
#include "chrome/browser/ui/views/frame/browser_frame_mus.h"
#include "chrome/browser/ui/views/frame/desktop_browser_frame_aura.h"
#include "ui/aura/env.h"
NativeBrowserFrame* NativeBrowserFrameFactory::Create(
......@@ -12,7 +13,5 @@ NativeBrowserFrame* NativeBrowserFrameFactory::Create(
BrowserView* browser_view) {
if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS)
return new BrowserFrameMus(browser_frame, browser_view);
NOTREACHED() << "For Ozone builds, only mash launch is supported for now.";
return nullptr;
return new DesktopBrowserFrameAura(browser_frame, browser_view);
}
......@@ -633,6 +633,7 @@ jumbo_component("views") {
"widget/desktop_aura/desktop_focus_rules.cc",
"widget/desktop_aura/desktop_native_cursor_manager.cc",
"widget/desktop_aura/desktop_native_widget_aura.cc",
"widget/desktop_aura/desktop_screen.cc",
"widget/desktop_aura/desktop_screen_position_client.cc",
"widget/focus_manager_event_handler.cc",
"widget/native_widget_aura.cc",
......@@ -690,7 +691,8 @@ jumbo_component("views") {
"widget/desktop_aura/desktop_window_tree_host_win.h",
]
} else if (use_ozone) {
sources += [ "widget/desktop_aura/desktop_window_tree_host_ozone.cc" ]
public += [ "widget/desktop_aura/desktop_screen_ozone.h" ]
sources += [ "widget/desktop_aura/desktop_screen_ozone.cc" ]
}
if (is_linux) {
sources += [
......@@ -698,15 +700,16 @@ jumbo_component("views") {
"widget/desktop_aura/window_event_filter.cc",
"widget/desktop_aura/window_event_filter.h",
]
if (!use_x11) {
public +=
[ "widget/desktop_aura/desktop_window_tree_host_platform.h" ]
sources +=
[ "widget/desktop_aura/desktop_window_tree_host_platform.cc" ]
}
}
}
}
if (is_linux) {
sources += [ "widget/desktop_aura/desktop_window_tree_host_platform.cc" ]
public += [ "widget/desktop_aura/desktop_window_tree_host_platform.h" ]
}
if (is_mac) {
sources -= [ "controls/views_text_services_context_menu.cc" ]
deps += [
......
// Copyright 2018 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 "ui/views/widget/desktop_aura/desktop_screen.h"
#include "ui/display/screen.h"
namespace views {
void InstallDesktopScreenIfNecessary() {
#if defined(OS_CHROMEOS)
// ChromeOS ozone builds use another path instead, where display::Screen is
// properly set. Thus, do early return here.
return;
#endif
// The screen may have already been set in test initialization.
if (!display::Screen::GetScreen())
display::Screen::SetScreenInstance(CreateDesktopScreen());
}
} // namespace views
......@@ -17,6 +17,8 @@ namespace views {
// a WindowTreeHost. Caller owns the result.
VIEWS_EXPORT display::Screen* CreateDesktopScreen();
VIEWS_EXPORT void InstallDesktopScreenIfNecessary();
} // namespace views
#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_SCREEN_H_
// Copyright 2018 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 "ui/views/widget/desktop_aura/desktop_screen_ozone.h"
#include "ui/gfx/geometry/dip_util.h"
#include "ui/views/widget/desktop_aura/desktop_screen.h"
namespace views {
DesktopScreenOzone::DesktopScreenOzone() {
// TODO(msisov): Turn this hack into a real fetching of displays snapshot,
// which will be used to create a real display::Display based on the
// information from snapshots.
float device_scale_factor = 1.f;
if (display::Display::HasForceDeviceScaleFactor())
device_scale_factor = display::Display::GetForcedDeviceScaleFactor();
gfx::Size scaled_size =
gfx::ConvertSizeToDIP(device_scale_factor, gfx::Size(800, 600));
const int64_t display_id = 1;
display::Display display(display_id);
display.set_bounds(gfx::Rect(scaled_size));
display.set_work_area(gfx::Rect(0, 0, 800, 600));
display.set_device_scale_factor(device_scale_factor);
ProcessDisplayChanged(display, true /* is_primary */);
}
DesktopScreenOzone::~DesktopScreenOzone() = default;
//////////////////////////////////////////////////////////////////////////////
display::Screen* CreateDesktopScreen() {
return new DesktopScreenOzone;
}
} // namespace views
// Copyright 2018 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.
#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_SCREEN_OZONE_H_
#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_SCREEN_OZONE_H_
#include "ui/display/screen_base.h"
namespace views {
class DesktopScreenOzone : public display::ScreenBase {
public:
DesktopScreenOzone();
~DesktopScreenOzone() override;
private:
DISALLOW_COPY_AND_ASSIGN(DesktopScreenOzone);
};
} // namespace views
#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_SCREEN_OZONE_H_
// Copyright 2013 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 "ui/views/widget/desktop_aura/desktop_window_tree_host.h"
namespace views {
DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
internal::NativeWidgetDelegate* native_widget_delegate,
DesktopNativeWidgetAura* desktop_native_widget_aura) {
NOTREACHED() << "Ozone builds should use DesktopWindowTreeHostMus codepath.";
return nullptr;
}
} // namespace views
......@@ -17,6 +17,9 @@
namespace views {
////////////////////////////////////////////////////////////////////////////////
// DesktopWindowTreeHostPlatform:
DesktopWindowTreeHostPlatform::DesktopWindowTreeHostPlatform(
internal::NativeWidgetDelegate* native_widget_delegate,
DesktopNativeWidgetAura* desktop_native_widget_aura)
......@@ -424,4 +427,15 @@ Widget* DesktopWindowTreeHostPlatform::GetWidget() {
return native_widget_delegate_->AsWidget();
}
////////////////////////////////////////////////////////////////////////////////
// DesktopWindowTreeHost:
// static
DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
internal::NativeWidgetDelegate* native_widget_delegate,
DesktopNativeWidgetAura* desktop_native_widget_aura) {
return new DesktopWindowTreeHostPlatform(native_widget_delegate,
desktop_native_widget_aura);
}
} // namespace views
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