root/ui/gfx/ozone/surface_ozone.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright 2014 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_GFX_OZONE_SURFACE_OZONE_H_
#define UI_GFX_OZONE_SURFACE_OZONE_H_

#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "skia/ext/refptr.h"
#include "ui/gfx/gfx_export.h"

class SkCanvas;

namespace gfx {

class Size;
class VSyncProvider;

// The platform-specific part of an EGL surface or software output.
//
// This class owns any bits that the ozone implementation needs freed when
// the software output or EGL surface is destroyed.
//
// If you want to paint on a window with ozone, you need to create a
// SurfaceOzone for that window.
//
// The platform can support software, EGL, or both for painting on the
// window. The initializer for unsupported modes should return false.
class GFX_EXPORT SurfaceOzone {
 public:
  virtual ~SurfaceOzone() {}

  // Initialize the surface for output using EGL/GLES2. Returns true if
  // initialization was successful.
  virtual bool InitializeEGL() = 0;

  // Returns the EGL native window for rendering onto this surface.
  // This can be used to to create a GLSurface.
  virtual intptr_t /* EGLNativeWindowType */ GetEGLNativeWindow() = 0;

  // Initialize canvas for software output. Returns true if initialization
  // was successful.
  virtual bool InitializeCanvas() = 0;

  // Returns an SkCanvas for drawing on the window. The canvas is intended
  // for use when no EGL/GLES2 acceleration is possible.
  virtual skia::RefPtr<SkCanvas> GetCanvas() = 0;

  // Attempts to resize the canvas to match the viewport size. Returns true if
  // resizing was successful, otherwise false (platforms may require a fixed
  // size canvas). After resizing, the compositor must call GetCanvas() to get
  // the next canvas.
  virtual bool ResizeCanvas(const gfx::Size& viewport_size) = 0;

  // Present the current canvas. After presenting, the compositor must call
  // GetCanvas() to get the next canvas.
  virtual bool PresentCanvas() = 0;

  // Returns a gfx::VsyncProvider for this surface. Note that this may be
  // called after we have entered the sandbox so if there are operations (e.g.
  // opening a file descriptor providing vsync events) that must be done
  // outside of the sandbox, they must have been completed in
  // InitializeHardware. Returns an empty scoped_ptr on error.
  virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() = 0;
};

}  // namespace gfx

#endif  // UI_GFX_OZONE_SURFACE_OZONE_H_

/* [<][>][^][v][top][bottom][index][help] */