1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_OZONE_PUBLIC_OZONE_PLATFORM_H_
6#define UI_OZONE_PUBLIC_OZONE_PLATFORM_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "ui/ozone/ozone_export.h"
10
11namespace gfx {
12class Rect;
13}
14
15namespace ui {
16
17class CursorFactoryOzone;
18class NativeDisplayDelegate;
19class SurfaceFactoryOzone;
20class GpuPlatformSupport;
21class GpuPlatformSupportHost;
22class PlatformWindow;
23class PlatformWindowDelegate;
24
25// Base class for Ozone platform implementations.
26//
27// Ozone platforms must override this class and implement the virtual
28// GetFooFactoryOzone() methods to provide implementations of the
29// various ozone interfaces.
30//
31// The OzonePlatform subclass can own any state needed by the
32// implementation that is shared between the various ozone interfaces,
33// such as a connection to the windowing system.
34//
35// A platform is free to use different implementations of each
36// interface depending on the context. You can, for example, create
37// different objects depending on the underlying hardware, command
38// line flags, or whatever is appropriate for the platform.
39class OZONE_EXPORT OzonePlatform {
40 public:
41  OzonePlatform();
42  virtual ~OzonePlatform();
43
44  // Initializes the subsystems/resources necessary for the UI process (e.g.
45  // events, surface, etc.)
46  static void InitializeForUI();
47
48  // Initializes the subsystems/resources necessary for the GPU process.
49  static void InitializeForGPU();
50
51  static OzonePlatform* GetInstance();
52
53  // Factory getters to override in subclasses. The returned objects will be
54  // injected into the appropriate layer at startup. Subclasses should not
55  // inject these objects themselves. Ownership is retained by OzonePlatform.
56  virtual ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() = 0;
57  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() = 0;
58  virtual ui::GpuPlatformSupport* GetGpuPlatformSupport() = 0;
59  virtual ui::GpuPlatformSupportHost* GetGpuPlatformSupportHost() = 0;
60  virtual scoped_ptr<PlatformWindow> CreatePlatformWindow(
61      PlatformWindowDelegate* delegate,
62      const gfx::Rect& bounds) = 0;
63#if defined(OS_CHROMEOS)
64  virtual scoped_ptr<ui::NativeDisplayDelegate>
65      CreateNativeDisplayDelegate() = 0;
66#endif
67
68 private:
69  virtual void InitializeUI() = 0;
70  virtual void InitializeGPU() = 0;
71
72  static void CreateInstance();
73
74  static OzonePlatform* instance_;
75
76  DISALLOW_COPY_AND_ASSIGN(OzonePlatform);
77};
78
79}  // namespace ui
80
81#endif  // UI_OZONE_PUBLIC_OZONE_PLATFORM_H_
82