home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_vout_window.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  5KB  |  169 lines

  1. /*****************************************************************************
  2.  * vlc_vout_window.h: vout_window_t definitions
  3.  *****************************************************************************
  4.  * Copyright (C) 2008 R├⌐mi Denis-Courmont
  5.  * Copyright (C) 2009 Laurent Aimar
  6.  * $Id: ea5e82188fd5f5153ba7860d9e70e932c307c861 $
  7.  *
  8.  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify it
  11.  * under the terms of the GNU Lesser General Public License as published by
  12.  * the Free Software Foundation; either version 2.1 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18.  * GNU Lesser General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU Lesser General Public License
  21.  * along with this program; if not, write to the Free Software Foundation,
  22.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24.  
  25. #ifndef VLC_VOUT_WINDOW_H
  26. #define VLC_VOUT_WINDOW_H 1
  27.  
  28. /**
  29.  * \file
  30.  * This file defines vout windows structures and functions in vlc
  31.  */
  32.  
  33. #include <vlc_common.h>
  34.  
  35. /* */
  36. typedef struct vout_window_t vout_window_t;
  37. typedef struct vout_window_sys_t vout_window_sys_t;
  38.  
  39.  
  40. /**
  41.  * Window handle type
  42.  */
  43. enum {
  44.     VOUT_WINDOW_TYPE_XID,
  45.     VOUT_WINDOW_TYPE_HWND,
  46.     VOUT_WINDOW_TYPE_NSOBJECT,
  47. };
  48.  
  49. #if defined (WIN32) || defined (__OS2__)
  50. # define VOUT_WINDOW_TYPE_NATIVE VOUT_WINDOW_TYPE_HWND
  51. #elif defined (__unix__)
  52. # define VOUT_WINDOW_TYPE_NATIVE VOUT_WINDOW_TYPE_XID
  53. #endif
  54.  
  55. /**
  56.  * Control query for vout_window_t
  57.  */
  58. enum {
  59.     VOUT_WINDOW_SET_STATE, /* unsigned state */
  60.     VOUT_WINDOW_SET_SIZE,   /* unsigned i_width, unsigned i_height */
  61.     VOUT_WINDOW_SET_FULLSCREEN, /* int b_fullscreen */
  62. };
  63.  
  64. typedef struct {
  65.     /* If true, a standalone window is requested */
  66.     bool is_standalone;
  67.  
  68.     /* Window handle type */
  69.     int type;
  70.  
  71.     /* Window position hint */
  72.     int x;
  73.     int y;
  74.  
  75.     /* Windows size hint */
  76.     unsigned width;
  77.     unsigned height;
  78.  
  79. } vout_window_cfg_t;
  80.  
  81. /**
  82.  * FIXME do we need an event system in the window too ?
  83.  * or the window user will take care of it ?
  84.  */
  85. struct vout_window_t {
  86.     VLC_COMMON_MEMBERS
  87.  
  88.     /* window handle (mandatory)
  89.      *
  90.      * It must be filled in the open function.
  91.      */
  92.     union {
  93.         void     *hwnd;     /* Win32 window handle */
  94.         uint32_t xid;       /* X11 windows ID */
  95.         void     *nsobject; /* Mac OSX view object */
  96.     } handle;
  97.  
  98.     /* display server (mandatory) */
  99.     union {
  100.         char     *x11; /* X11 display (NULL = use default) */
  101.     } display;
  102.  
  103.     /* Control on the module (mandatory)
  104.      *
  105.      * Do not use it directly; use vout_window_Control instead.
  106.      */
  107.     int (*control)(vout_window_t *, int query, va_list);
  108.  
  109.     /* Private place holder for the vout_window_t module (optional)
  110.      *
  111.      * A module is free to use it as it wishes.
  112.      */
  113.     vout_window_sys_t *sys;
  114. };
  115.  
  116. /**
  117.  * Creates a new window.
  118.  *
  119.  * @param module plugin name (usually "$window")
  120.  * @note If you are inside a "vout display", you must use
  121.  / vout_display_NewWindow() and vout_display_DeleteWindow() instead.
  122.  * This enables recycling windows.
  123.  */
  124. VLC_API vout_window_t * vout_window_New(vlc_object_t *, const char *module, const vout_window_cfg_t *);
  125.  
  126. /**
  127.  * Deletes a window created by vout_window_New().
  128.  *
  129.  * @note See vout_window_New() about window recycling.
  130.  */
  131. VLC_API void vout_window_Delete(vout_window_t *);
  132.  
  133.  
  134. /**
  135.  * Reconfigures a window.
  136.  *
  137.  * @note The vout_window_* wrappers should be used instead of this function.
  138.  *
  139.  * @warning The caller must own the window, as vout_window_t is not thread safe.
  140.  */
  141. VLC_API int vout_window_Control(vout_window_t *, int query, ...);
  142.  
  143. /**
  144.  * Configures the window manager state for this window.
  145.  */
  146. static inline int vout_window_SetState(vout_window_t *window, unsigned state)
  147. {
  148.     return vout_window_Control(window, VOUT_WINDOW_SET_STATE, state);
  149. }
  150.  
  151. /**
  152.  * Configures the window display (i.e. inner/useful) size.
  153.  */
  154. static inline int vout_window_SetSize(vout_window_t *window,
  155.                                       unsigned width, unsigned height)
  156. {
  157.     return vout_window_Control(window, VOUT_WINDOW_SET_SIZE, width, height);
  158. }
  159.  
  160. /**
  161.  * Sets fullscreen mode.
  162.  */
  163. static inline int vout_window_SetFullScreen(vout_window_t *window, bool full)
  164. {
  165.     return vout_window_Control(window, VOUT_WINDOW_SET_FULLSCREEN, full);
  166. }
  167.  
  168. #endif /* VLC_VOUT_WINDOW_H */
  169.