| Index: chromecast/ozone/surface_factory_cast.h
|
| diff --git a/chromecast/ozone/surface_factory_cast.h b/chromecast/ozone/surface_factory_cast.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cd39b5561776c2ccbd3a07636c66f1f8e1713613
|
| --- /dev/null
|
| +++ b/chromecast/ozone/surface_factory_cast.h
|
| @@ -0,0 +1,74 @@
|
| +// 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.
|
| +
|
| +#ifndef CHROMECAST_OZONE_SURFACE_FACTORY_CAST_H_
|
| +#define CHROMECAST_OZONE_SURFACE_FACTORY_CAST_H_
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "ui/gfx/geometry/size.h"
|
| +#include "ui/ozone/public/surface_factory_ozone.h"
|
| +
|
| +namespace chromecast {
|
| +namespace ozone {
|
| +
|
| +class CastEglPlatform;
|
| +
|
| +// SurfaceFactoryOzone implementation for OzonePlatformCast.
|
| +class SurfaceFactoryCast : public ui::SurfaceFactoryOzone {
|
| + public:
|
| + explicit SurfaceFactoryCast(scoped_ptr<CastEglPlatform> egl_platform);
|
| + ~SurfaceFactoryCast() override;
|
| +
|
| + // ui::SurfaceFactoryOzone implementation:
|
| + intptr_t GetNativeDisplay() override;
|
| + scoped_ptr<ui::SurfaceOzoneEGL> CreateEGLSurfaceForWidget(
|
| + gfx::AcceleratedWidget widget) override;
|
| + const int32* GetEGLSurfaceProperties(const int32* desired_list) override;
|
| + bool LoadEGLGLES2Bindings(
|
| + AddGLLibraryCallback add_gl_library,
|
| + SetGLGetProcAddressProcCallback set_gl_get_proc_address) override;
|
| +
|
| + void SetToRelinquishDisplay(const base::Closure& callback);
|
| + intptr_t GetNativeWindow();
|
| + bool ResizeDisplay(gfx::Size viewport_size);
|
| + void ChildDestroyed();
|
| + void SendRelinquishResponse();
|
| +
|
| + private:
|
| + enum HardwareState { kUninitialized, kInitialized, kFailed };
|
| +
|
| + // Window is destroyed if both SetToDestroyEGLDisplay()
|
| + // and destructor are called (in either order) before the next
|
| + // SurfaceOzoneEglCast is created in order to preserve the
|
| + // window across surface creation whenever possible.
|
| + enum DestroyWindowPendingState {
|
| + kNoDestroyPending = 0, // Surface does not exist
|
| + kSurfaceExists, // surface and window both exist
|
| + kWindowDestroyPending, // Relinquish before surface Destroy
|
| + kSurfaceDestroyedRecently, // surface Destroy before Relinquish
|
| + };
|
| +
|
| + void CreateDisplayTypeAndWindowIfNeeded();
|
| + void DestroyDisplayTypeAndWindow();
|
| + void InitializeHardware();
|
| + void ShutdownHardware();
|
| +
|
| + HardwareState state_;
|
| + DestroyWindowPendingState destroy_window_pending_state_;
|
| + base::Closure relinquish_display_callback_;
|
| + intptr_t display_type_;
|
| + intptr_t window_;
|
| + const gfx::Size default_display_size_;
|
| + gfx::Size display_size_;
|
| + gfx::Size new_display_size_;
|
| + scoped_ptr<CastEglPlatform> egl_platform_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SurfaceFactoryCast);
|
| +};
|
| +
|
| +} // namespace ozone
|
| +} // namespace chromecast
|
| +
|
| +#endif // CHROMECAST_OZONE_SURFACE_FACTORY_CAST_H_
|
|
|