]> git.sesse.net Git - vlc/blobdiff - modules/video_output/ggi.c
misc/objects.c: Don't rely on vlc_object_destroy() to destroy objects, but expects...
[vlc] / modules / video_output / ggi.c
index 2e9b4f75ded1ce501b1b88fcd81c3e73fa534b14..0d697d284ea8abec6f6a9e3a9f1f2f795058922e 100644 (file)
@@ -1,17 +1,17 @@
 /*****************************************************************************
  * ggi.c : GGI plugin for vlc
  *****************************************************************************
- * Copyright (C) 2000, 2001 VideoLAN
- * $Id: ggi.c,v 1.1 2002/08/13 11:59:36 sam Exp $
+ * Copyright (C) 2000, 2001 the VideoLAN team
+ * $Id$
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
- *      
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program 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
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <stdlib.h>                                      /* malloc(), free() */
-#include <string.h>
 #include <errno.h>                                                 /* ENOMEM */
 
 #include <ggi/ggi.h>
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/vlc.h>
-#include <vlc/intf.h>
-#include <vlc/vout.h>
+#include <vlc_interface.h>
+#include <vlc_vout.h>
 
 /*****************************************************************************
  * Local prototypes
@@ -42,25 +44,25 @@ static int  Create    ( vlc_object_t * );
 static void Destroy   ( vlc_object_t * );
 
 static int  Init      ( vout_thread_t * );
-static void End       ( vout_thread_t * );                         
-static int  Manage    ( vout_thread_t * );               
-static void Display   ( vout_thread_t *, picture_t * );            
+static void End       ( vout_thread_t * );
+static int  Manage    ( vout_thread_t * );
+static void Display   ( vout_thread_t *, picture_t * );
 
 static int  OpenDisplay    ( vout_thread_t * );
 static void CloseDisplay   ( vout_thread_t * );
-static void SetPalette     ( vout_thread_t *, u16 *, u16 *, u16 * );
+static void SetPalette     ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * );
 
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
-#define DISPLAY_TEXT N_("X11 display name")
-#define DISPLAY_LONGTEXT N_("Specify the X11 hardware display you want to use."\
-                           "\nBy default vlc will use the value of the DISPLAY"\
-                           " environment variable.")
-
-vlc_module_begin();                                
-    add_category_hint( N_("Miscellaneous"), NULL );
-    add_string( "ggi-display", NULL, NULL, DISPLAY_TEXT, DISPLAY_LONGTEXT );
+#define DISPLAY_TEXT N_("X11 display")
+#define DISPLAY_LONGTEXT N_( \
+            "X11 hardware display to use.\n" \
+            "By default, VLC will use the value of the DISPLAY " \
+            "environment variable.")
+
+vlc_module_begin();
+    add_string( "ggi-display", NULL, NULL, DISPLAY_TEXT, DISPLAY_LONGTEXT, VLC_TRUE );
     set_description( "General Graphics Interface video output" );
     set_capability( "video output", 30 );
     set_callbacks( Create, Destroy );
@@ -74,7 +76,7 @@ vlc_module_end();
  *****************************************************************************/
 struct vout_sys_t
 {
-    /* GGI system informations */
+    /* GGI system information */
     ggi_visual_t        p_display;                         /* display device */
 
     ggi_mode            mode;                             /* mode descriptor */
@@ -190,6 +192,7 @@ static int Init( vout_thread_t *p_vout )
     p_pic->p->p_pixels = p_b[ 0 ]->write;
     p_pic->p->i_pixel_pitch = p_b[ 0 ]->buffer.plb.pixelformat->size / 8;
     p_pic->p->i_lines = p_vout->p_sys->mode.visible.y;
+    p_pic->p->i_visible_lines = p_vout->p_sys->mode.visible.y;
 
     p_pic->p->i_pitch = p_b[ 0 ]->buffer.plb.stride;
 
@@ -254,9 +257,9 @@ static void End( vout_thread_t *p_vout )
  * Terminate an output method created by Create
  *****************************************************************************/
 static void Destroy( vlc_object_t *p_this )
-{   
-    vout_thread_t *p_vout = (vout_thread_t *)p_this; 
-    
+{
+    vout_thread_t *p_vout = (vout_thread_t *)p_this;
+
     CloseDisplay( p_vout );
 
     free( p_vout->p_sys );
@@ -266,18 +269,19 @@ static void Destroy( vlc_object_t *p_this )
  * Manage: handle GGI events
  *****************************************************************************
  * This function should be called regularly by video output thread. It returns
- * a non null value if an error occured.
+ * a non null value if an error occurred.
  *****************************************************************************/
 static int Manage( vout_thread_t *p_vout )
 {
     struct timeval tv = { 0, 1000 };                        /* 1 millisecond */
     gii_event_mask mask;
     gii_event      event;
+    vlc_value_t    val;
 
     mask = emKeyboard | emPtrButtonPress | emPtrButtonRelease;
 
     ggiEventPoll( p_vout->p_sys->p_display, mask, &tv );
-    
+
     while( ggiEventsQueued( p_vout->p_sys->p_display, mask) )
     {
         ggiEventRead( p_vout->p_sys->p_display, &event, mask);
@@ -291,8 +295,7 @@ static int Manage( vout_thread_t *p_vout )
                     case 'q':
                     case 'Q':
                     case GIIUC_Escape:
-                        /* FIXME pass message ! */
-                        p_vout->p_vlc->b_die = 1;
+                        vlc_object_kill( p_vout->p_libvlc );
                         break;
 
                     default:
@@ -304,6 +307,11 @@ static int Manage( vout_thread_t *p_vout )
 
                 switch( event.pbutton.button )
                 {
+                    case GII_PBUTTON_LEFT:
+                        val.b_bool = VLC_TRUE;
+                        var_Set( p_vout, "mouse-clicked", val );
+                        break;
+
                     case GII_PBUTTON_RIGHT:
                         {
                             intf_thread_t *p_intf;
@@ -506,11 +514,12 @@ static void CloseDisplay( vout_thread_t *p_vout )
 /*****************************************************************************
  * SetPalette: sets an 8 bpp palette
  *****************************************************************************/
-static void SetPalette( vout_thread_t *p_vout, u16 *red, u16 *green, u16 *blue )
+static void SetPalette( vout_thread_t *p_vout,
+                        uint16_t *red, uint16_t *green, uint16_t *blue )
 {
     ggi_color colors[256];
     int i;
-  
+
     /* Fill colors with color information */
     for( i = 0; i < 256; i++ )
     {
@@ -523,7 +532,7 @@ static void SetPalette( vout_thread_t *p_vout, u16 *red, u16 *green, u16 *blue )
     /* Set palette */
     if( ggiSetPalette( p_vout->p_sys->p_display, 0, 256, colors ) < 0 )
     {
-        msg_Err( p_vout, "failed setting palette" );
+        msg_Err( p_vout, "failed to set palette" );
     }
 }