/*
 * GStreamer
 * Copyright (C) 2013 Matthew Waters <ystreet00@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#ifndef __GST_GL_DISPLAY_X11_H__
#define __GST_GL_DISPLAY_X11_H__

#include <gst/gst.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>

#include <gst/gl/gstgl_fwd.h>
#include <gst/gl/gstgldisplay.h>

G_BEGIN_DECLS

GType gst_gl_display_x11_get_type (void);

#define GST_TYPE_GL_DISPLAY_X11             (gst_gl_display_x11_get_type())
#define GST_GL_DISPLAY_X11(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DISPLAY_X11,GstGLDisplayX11))
#define GST_GL_DISPLAY_X11_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_GL_DISPLAY_X11,GstGLDisplayX11Class))
#define GST_IS_GL_DISPLAY_X11(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DISPLAY_X11))
#define GST_IS_GL_DISPLAY_X11_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GL_DISPLAY_X11))
#define GST_GL_DISPLAY_X11_CAST(obj)        ((GstGLDisplayX11*)(obj))

typedef struct _GstGLDisplayX11 GstGLDisplayX11;
typedef struct _GstGLDisplayX11Class GstGLDisplayX11Class;

/**
 * GstGLDisplayX11:
 *
 * the contents of a #GstGLDisplayX11 are private and should only be accessed
 * through the provided API
 */
struct _GstGLDisplayX11
{
  GstGLDisplay          parent;

  /* <private> */
  gchar *name;
  Display *display;
  gboolean foreign_display;
};

struct _GstGLDisplayX11Class
{
  GstGLDisplayClass object_class;
};

GstGLDisplayX11 *gst_gl_display_x11_new (const gchar * name);
GstGLDisplayX11 *gst_gl_display_x11_new_with_display (Display *display);

G_END_DECLS

#endif /* __GST_GL_DISPLAY_X11_H__ */
