blob: 60f7c9a901220a23d2ed3f2662da1cdb6a714211 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// Copyright 2015 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/ozone/platform/cast/ozone_platform_cast.h"
#include "base/command_line.h"
#include "chromecast/public/cast_egl_platform.h"
#include "chromecast/public/cast_egl_platform_shlib.h"
#include "ui/ozone/common/native_display_delegate_ozone.h"
#include "ui/ozone/platform/cast/gpu_platform_support_cast.h"
#include "ui/ozone/platform/cast/overlay_manager_cast.h"
#include "ui/ozone/platform/cast/platform_window_cast.h"
#include "ui/ozone/platform/cast/surface_factory_cast.h"
#include "ui/ozone/public/cursor_factory_ozone.h"
#include "ui/ozone/public/gpu_platform_support_host.h"
#include "ui/ozone/public/input_controller.h"
#include "ui/ozone/public/ozone_platform.h"
#include "ui/ozone/public/system_input_injector.h"
using chromecast::CastEglPlatform;
namespace ui {
namespace {
// Ozone platform implementation for Cast. Implements functionality
// common to all Cast implementations:
// - Always one window with window size equal to display size
// - No input, cursor support
// - Relinquish GPU resources flow for switching to external applications
// Meanwhile, platform-specific implementation details are abstracted out
// to the CastEglPlatform interface.
class OzonePlatformCast : public OzonePlatform {
public:
explicit OzonePlatformCast(scoped_ptr<CastEglPlatform> egl_platform)
: egl_platform_(egl_platform.Pass()) {}
~OzonePlatformCast() override {}
// OzonePlatform implementation:
SurfaceFactoryOzone* GetSurfaceFactoryOzone() override {
return surface_factory_.get();
}
OverlayManagerOzone* GetOverlayManager() override {
return overlay_manager_.get();
}
CursorFactoryOzone* GetCursorFactoryOzone() override {
return cursor_factory_.get();
}
InputController* GetInputController() override {
return input_controller_.get();
}
GpuPlatformSupport* GetGpuPlatformSupport() override {
return gpu_platform_support_.get();
}
GpuPlatformSupportHost* GetGpuPlatformSupportHost() override {
return gpu_platform_support_host_.get();
}
scoped_ptr<SystemInputInjector> CreateSystemInputInjector() override {
return nullptr; // no input injection support
}
scoped_ptr<PlatformWindow> CreatePlatformWindow(
PlatformWindowDelegate* delegate,
const gfx::Rect& bounds) override {
return make_scoped_ptr<PlatformWindow>(
new PlatformWindowCast(delegate, bounds));
}
scoped_ptr<NativeDisplayDelegate> CreateNativeDisplayDelegate() override {
return make_scoped_ptr(new NativeDisplayDelegateOzone());
}
void InitializeUI() override {
overlay_manager_.reset(new OverlayManagerCast());
cursor_factory_.reset(new CursorFactoryOzone());
input_controller_ = CreateStubInputController();
gpu_platform_support_host_.reset(CreateStubGpuPlatformSupportHost());
}
void InitializeGPU() override {
surface_factory_.reset(new SurfaceFactoryCast(egl_platform_.Pass()));
gpu_platform_support_.reset(
new GpuPlatformSupportCast(surface_factory_.get()));
}
private:
scoped_ptr<CastEglPlatform> egl_platform_;
scoped_ptr<SurfaceFactoryCast> surface_factory_;
scoped_ptr<CursorFactoryOzone> cursor_factory_;
scoped_ptr<InputController> input_controller_;
scoped_ptr<GpuPlatformSupportCast> gpu_platform_support_;
scoped_ptr<GpuPlatformSupportHost> gpu_platform_support_host_;
scoped_ptr<OverlayManagerOzone> overlay_manager_;
DISALLOW_COPY_AND_ASSIGN(OzonePlatformCast);
};
} // namespace
OzonePlatform* CreateOzonePlatformCast() {
const std::vector<std::string>& argv =
base::CommandLine::ForCurrentProcess()->argv();
scoped_ptr<chromecast::CastEglPlatform> platform(
chromecast::CastEglPlatformShlib::Create(argv));
return new OzonePlatformCast(platform.Pass());
}
} // namespace ui
|