home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / vlc-1.1.2-win32.exe / sdk / include / vlc / plugins / vlc_vout_window.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-07-30  |  4.4 KB  |  163 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: 84d78eebcf3841ccc5f0b8913d34a303d36ca256 $
  7.  *
  8.  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 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 General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, 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. };
  47.  
  48. /**
  49.  * Control query for vout_window_t
  50.  */
  51. enum {
  52.     VOUT_WINDOW_SET_STATE, /* unsigned state */
  53.     VOUT_WINDOW_SET_SIZE,   /* unsigned i_width, unsigned i_height */
  54.     VOUT_WINDOW_SET_FULLSCREEN, /* int b_fullscreen */
  55. };
  56.  
  57. typedef struct {
  58.     /* If true, a standalone window is requested */
  59.     bool is_standalone;
  60.  
  61.     /* Window handle type */
  62.     int type;
  63.  
  64.     /* Window position hint */
  65.     int x;
  66.     int y;
  67.  
  68.     /* Windows size hint */
  69.     unsigned width;
  70.     unsigned height;
  71.  
  72. } vout_window_cfg_t;
  73.  
  74. /**
  75.  * FIXME do we need an event system in the window too ?
  76.  * or the window user will take care of it ?
  77.  */
  78. struct vout_window_t {
  79.     VLC_COMMON_MEMBERS
  80.  
  81.     /* Initial state (reserved).
  82.      * Once the open function is called, it will be set to NULL
  83.      */
  84.     const vout_window_cfg_t *cfg;
  85.  
  86.     /* window handle (mandatory)
  87.      *
  88.      * It must be filled in the open function.
  89.      */
  90.     union {
  91.         void     *hwnd;   /* Win32 window handle */
  92.         uint32_t xid;     /* X11 windows ID */
  93.     } handle;
  94.  
  95.     /* display server (mandatory) */
  96.     union {
  97.         char     *x11; /* X11 display (NULL = use default) */
  98.     } display;
  99.  
  100.     /* Control on the module (mandatory)
  101.      *
  102.      * Do not use it directly; use vout_window_Control instead.
  103.      */
  104.     int (*control)(vout_window_t *, int query, va_list);
  105.  
  106.     /* Private place holder for the vout_window_t module (optional)
  107.      *
  108.      * A module is free to use it as it wishes.
  109.      */
  110.     vout_window_sys_t *sys;
  111. };
  112.  
  113. /** 
  114.  * It creates a new window.
  115.  * 
  116.  * @note If you are inside a "vout display", you must use
  117.  * vout_display_New/DeleteWindow when possible to allow window recycling.
  118.  */
  119. VLC_EXPORT( vout_window_t *, vout_window_New, (vlc_object_t *, const char *module, const vout_window_cfg_t *) );
  120.  
  121. /**
  122.  * It deletes a window created by vout_window_New().
  123.  *
  124.  * @note See vout_window_New() about window recycling.
  125.  */
  126. VLC_EXPORT( void, vout_window_Delete, (vout_window_t *) );
  127.  
  128. /**
  129.  * It allows configuring a window.
  130.  *
  131.  * @warning The caller must own the window, as vout_window_t is not thread safe.
  132.  * You should use it the vout_window_* wrappers instead of this function.
  133.  */
  134. VLC_EXPORT( int, vout_window_Control, (vout_window_t *, int query, ...) );
  135.  
  136. /**
  137.  * Configure the window management state of a windows.
  138.  */
  139. static inline int vout_window_SetState(vout_window_t *window, unsigned state)
  140. {
  141.     return vout_window_Control(window, VOUT_WINDOW_SET_STATE, state);
  142. }
  143.  
  144. /**
  145.  * Configure the windows display size.
  146.  */
  147. static inline int vout_window_SetSize(vout_window_t *window,
  148.                                       unsigned width, unsigned height)
  149. {
  150.     return vout_window_Control(window, VOUT_WINDOW_SET_SIZE, width, height);
  151. }
  152.  
  153. /**
  154.  * Configure the windows fullscreen mode.
  155.  */
  156. static inline int vout_window_SetFullScreen(vout_window_t *window, bool full)
  157. {
  158.     return vout_window_Control(window, VOUT_WINDOW_SET_FULLSCREEN, full);
  159. }
  160.  
  161. #endif /* VLC_VOUT_WINDOW_H */
  162.  
  163.