X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fbeos%2Fintf_beos.cpp;h=b1d0ca78a3a380db46e8629b0ad5237b15ddd004;hb=e4f6c3c47813518c9a9c1d54a10ff74721b183ac;hp=7647d0ef54c392a430f4b313b31e9f3fad850e6c;hpb=0b5a98ad92c709457b3c00a358e4824cd7f86195;p=vlc diff --git a/plugins/beos/intf_beos.cpp b/plugins/beos/intf_beos.cpp index 7647d0ef54..b1d0ca78a3 100644 --- a/plugins/beos/intf_beos.cpp +++ b/plugins/beos/intf_beos.cpp @@ -1,16 +1,19 @@ /***************************************************************************** * intf_beos.cpp: beos interface ***************************************************************************** - * Copyright (C) 1999, 2000 VideoLAN + * Copyright (C) 1999, 2000, 2001 VideoLAN + * $Id: intf_beos.cpp,v 1.38 2002/02/15 13:32:52 sam Exp $ * - * Authors: - * Jean-Marc Dressler + * Authors: Jean-Marc Dressler + * Samuel Hocevar + * Tony Castley + * Richard Shepherd * * 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 @@ -24,40 +27,22 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include "defs.h" - #include #include /* malloc(), free() */ -#include /* on BSD, uio.h needs types.h */ -#include /* "input.h" */ -#include -#include -#include -#include -#include -#include -#include +#include #include extern "C" { -#include "config.h" -#include "common.h" -#include "threads.h" -#include "mtime.h" -#include "plugins.h" +#include -#include "input.h" -#include "video.h" -#include "video_output.h" +#include "stream_control.h" -#include "intf_msg.h" #include "interface.h" - -#include "main.h" +#include "input_ext-intf.h" } -#include "beos_window.h" +#include "InterfaceWindow.h" /***************************************************************************** * intf_sys_t: description and status of FB interface @@ -68,123 +53,73 @@ typedef struct intf_sys_s char i_key; } intf_sys_t; -/***************************************************************************** - * InterfaceWindow - *****************************************************************************/ - -InterfaceWindow::InterfaceWindow( BRect frame, const char *name , intf_thread_t *p_intf ) - : BWindow(frame, name, B_TITLED_WINDOW, B_NOT_RESIZABLE|B_NOT_ZOOMABLE) -{ - p_interface = p_intf; - SetName( "interface" ); - - BView * p_view; - - p_view = new BView( Bounds(), "", B_FOLLOW_ALL, B_WILL_DRAW ); - AddChild( p_view ); - - Show(); -} -InterfaceWindow::~InterfaceWindow() +extern "C" { -} /***************************************************************************** - * InterfaceWindow::MessageReceived + * Local prototypes. *****************************************************************************/ - -void InterfaceWindow::MessageReceived( BMessage * p_message ) -{ - char * psz_key; - - switch( p_message->what ) - { - case B_KEY_DOWN: - p_message->FindString( "bytes", (const char **)&psz_key ); - p_interface->p_sys->i_key = psz_key[0]; - break; - - default: - BWindow::MessageReceived( p_message ); - break; - } -} +static int intf_Open ( intf_thread_t *p_intf ); +static void intf_Close ( intf_thread_t *p_intf ); +static void intf_Run ( intf_thread_t *p_intf ); /***************************************************************************** - * InterfaceWindow::QuitRequested + * Functions exported as capabilities. They are declared as static so that + * we don't pollute the namespace too much. *****************************************************************************/ - -bool InterfaceWindow::QuitRequested() +void _M( intf_getfunctions )( function_list_t * p_function_list ) { - return( false ); + p_function_list->functions.intf.pf_open = intf_Open; + p_function_list->functions.intf.pf_close = intf_Close; + p_function_list->functions.intf.pf_run = intf_Run; } - -extern "C" -{ - /***************************************************************************** - * intf_BeCreate: initialize dummy interface + * intf_Open: initialize interface *****************************************************************************/ -int intf_BeCreate( intf_thread_t *p_intf ) +static int intf_Open( intf_thread_t *p_intf ) { + BScreen *screen; + screen = new BScreen(); + BRect rect = screen->Frame(); + rect.top = rect.bottom-100; + rect.bottom -= 50; + rect.left += 50; + rect.right = rect.left + 350; + delete screen; + /* Allocate instance and initialize some members */ p_intf->p_sys = (intf_sys_t*) malloc( sizeof( intf_sys_t ) ); if( p_intf->p_sys == NULL ) { - intf_ErrMsg("error: %s\n", strerror(ENOMEM)); + intf_ErrMsg("error: %s", strerror(ENOMEM)); return( 1 ); } p_intf->p_sys->i_key = -1; - + /* Create the interface window */ p_intf->p_sys->p_window = - new InterfaceWindow( BRect( 100, 100, 200, 200 ), "Interface :)", p_intf ); + new InterfaceWindow( rect, + VOUT_TITLE " (BeOS interface)", p_intf ); if( p_intf->p_sys->p_window == 0 ) { free( p_intf->p_sys ); - intf_ErrMsg( "error: cannot allocate memory for InterfaceWindow\n" ); + intf_ErrMsg( "error: cannot allocate memory for InterfaceWindow" ); return( 1 ); } - - /* Spawn video output thread */ - if( p_main->b_video ) - { - p_intf->p_vout = vout_CreateThread( NULL, 0, 0, 0, NULL, 0, NULL ); - if( p_intf->p_vout == NULL ) /* error */ - { - intf_ErrMsg("intf error: can't create output thread\n" ); - return( 1 ); - } - } - - /* Bind normal keys. */ - intf_AssignNormalKeys( p_intf ); return( 0 ); } /***************************************************************************** - * intf_BeDestroy: destroy dummy interface + * intf_Close: destroy dummy interface *****************************************************************************/ -void intf_BeDestroy( intf_thread_t *p_intf ) +static void intf_Close( intf_thread_t *p_intf ) { - /* Close input thread, if any (blocking) */ - if( p_intf->p_input ) - { - input_DestroyThread( p_intf->p_input, NULL ); - } - - /* Close video output thread, if any (blocking) */ - if( p_intf->p_vout ) - { - vout_DestroyThread( p_intf->p_vout, NULL ); - } - /* Destroy the interface window */ p_intf->p_sys->p_window->Lock(); - p_intf->p_sys->p_window->Quit(); + p_intf->p_sys->p_window->Quit(); /* Destroy structure */ free( p_intf->p_sys ); @@ -192,15 +127,27 @@ void intf_BeDestroy( intf_thread_t *p_intf ) /***************************************************************************** - * intf_BeManage: event loop + * intf_Run: event loop *****************************************************************************/ -void intf_BeManage( intf_thread_t *p_intf ) +static void intf_Run( intf_thread_t *p_intf ) { - if( p_intf->p_sys->i_key != -1 ) + + while( !p_intf->b_die ) { - intf_ProcessKey( p_intf, p_intf->p_sys->i_key ); - p_intf->p_sys->i_key = -1; + /* Manage core vlc functions through the callback */ + p_intf->pf_manage( p_intf ); + + /* Manage the slider */ + if( p_input_bank->pp_input[0] != NULL + && p_intf->p_sys->p_window != NULL) + { + p_intf->p_sys->p_window->updateInterface(); + } + + /* Wait a bit */ + msleep( INTF_IDLE_SLEEP ); } } } /* extern "C" */ +