Remove unused MP_Fallback from menu.c.
authorblack <black@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 6 Dec 2007 13:52:53 +0000 (13:52 +0000)
committerblack <black@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 6 Dec 2007 13:52:53 +0000 (13:52 +0000)
Add DP_GECKO_SUPPORT to the menu's extension string.
Automatically destroy gecko instances on restart.
Change the gecko builtins to take the full texture path always.

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7769 d7cf8633-e32d-0410-b094-e92efae38249

cl_dyntexture.c
cl_gecko.c
cl_gecko.h
cl_video.h
csprogs.c
menu.c
mvm_cmds.c
progsvm.h
prvm_cmds.c

index 8ee4946..722c722 100644 (file)
@@ -60,6 +60,10 @@ void CL_LinkDynTexture( const char *name, rtexture_t *texture ) {
        skinframe_t *skinframe;\r
 \r
        dyntexture = cl_finddyntexture( name );\r
+       if( !dyntexture ) {\r
+               Con_Printf( "CL_LinkDynTexture: internal error in cl_finddyntexture!\n" );\r
+               return;\r
+       }\r
        // TODO: assert dyntexture != NULL!\r
        if( dyntexture->texture != texture ) {\r
                dyntexture->texture = texture;\r
index 47614ed..7442e76 100644 (file)
@@ -94,7 +94,7 @@ clgecko_t * CL_Gecko_CreateBrowser( const char *name ) {
                osgk_release( options );\r
                \r
                if( cl_geckoembedding == NULL ) {\r
-                       Con_Printf( "CL_Gecko_Init: Couldn't retrieve gecko embedding object!\n" );\r
+                       Con_Printf( "CL_Gecko_CreateBrowser: Couldn't retrieve gecko embedding object!\n" );\r
                        return NULL;\r
                }\r
        }\r
index 11c0290..c5bb63d 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef CL_GECKO_H\r
 #define CL_GECKO_H\r
 \r
+#include "cl_dyntexture.h"\r
+\r
 #define DEFAULT_GECKO_WIDTH    512\r
 #define DEFAULT_GECKO_HEIGHT   DEFAULT_GECKO_WIDTH\r
 \r
index d5b1a84..05bf4a1 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef CL_VIDEO_H
 #define CL_VIDEO_H
 
+#include "cl_dyntexture.h"
+
 #define MAXCLVIDEOS            64 + 1 // 1 video is reserved for the cinematic mode
 // yields DYNAMIC_TEXTURE_PATH_PREFIX CLVIDEOPREFIX video name for a path
 #define CLVIDEOPREFIX  CLDYNTEXTUREPREFIX "video/"
index 5b80327..c8a2120 100644 (file)
--- a/csprogs.c
+++ b/csprogs.c
@@ -718,6 +718,7 @@ void CL_VM_Init (void)
        prog->limit_edicts = CL_MAX_EDICTS;
        prog->reserved_edicts = 0;
        prog->edictprivate_size = sizeof(edict_engineprivate_t);
+       // TODO: add a shared extension string #define and add real support for csqc extension strings [12/5/2007 Black]
        prog->extensionstring = vm_sv_extensions;
        prog->builtins = vm_cl_builtins;
        prog->numbuiltins = vm_cl_numbuiltins;
diff --git a/menu.c b/menu.c
index fb55bd7..59418bd 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -5104,16 +5104,6 @@ void MP_Shutdown (void)
        PRVM_End;
 }
 
-void MP_Fallback (void)
-{
-       MP_Shutdown();
-
-       key_dest = key_game;
-
-       // init the normal menu now -> this will also correct the menu router pointers
-       MR_SetRouting (TRUE);
-}
-
 void MP_Init (void)
 {
        PRVM_Begin;
index 834e838..c4b194a 100644 (file)
@@ -19,6 +19,10 @@ char *vm_m_extensions =
 "DP_QC_CMD "
 "DP_QC_STRREPLACE "
 "DP_FONT_VARIABLEWIDTH "
+// FIXME: rename this extension maybe? [12/5/2007 Black]
+#ifdef SUPPORT_GECKO
+"DP_GECKO_SUPPORT "
+#endif
 ;
 
 /*
index 9ec8768..6c78093 100644 (file)
--- a/progsvm.h
+++ b/progsvm.h
@@ -33,6 +33,11 @@ The code uses void pointers instead.
 #include "progdefs.h"                  // generated by program cdefs
 #include "clprogdefs.h"                        // generated by program cdefs
 
+#ifdef SUPPORT_GECKO
+// forward declaration of clgecko_t
+typedef struct clgecko_s clgecko_t;
+#endif
+
 typedef struct prvm_stack_s
 {
        int                             s;
@@ -114,6 +119,9 @@ typedef struct prvm_edict_s
 
 #define PRVM_MAX_OPENFILES 256
 #define PRVM_MAX_OPENSEARCHES 128
+#ifdef SUPPORT_GECKO
+#define PRVM_MAX_GECKOINSTANCES 32
+#endif
 
 typedef void (*prvm_builtin_t) (void);
 
@@ -345,6 +353,9 @@ typedef struct prvm_prog_s
 
        qfile_t                         *openfiles[PRVM_MAX_OPENFILES];
        fssearch_t                      *opensearches[PRVM_MAX_OPENSEARCHES];
+#ifdef SUPPORT_GECKO
+       clgecko_t                       *opengeckoinstances[PRVM_MAX_GECKOINSTANCES];
+#endif
 
        // copies of some vars that were former read from sv
        int                                     num_edicts;
index 543fd23..04f0860 100644 (file)
@@ -3101,9 +3101,30 @@ void VM_cin_restart( void )
 }
 
 #ifdef SUPPORT_GECKO
-static const char *vm_gecko_getfullname( const char *name ) {
-       // FIXME: assert that PRVM_NAME is not empty.. [12/3/2007 Black]
-       return va( "%s/%s", PRVM_NAME, name );
+/*
+========================
+VM_Gecko_Init
+========================
+*/
+void VM_Gecko_Init( void ) {
+       // the prog struct is memset to 0 by Initprog? [12/6/2007 Black]
+       // FIXME: remove the other _Init functions then, too? [12/6/2007 Black]
+}
+
+/*
+========================
+VM_Gecko_Destroy
+========================
+*/
+void VM_Gecko_Destroy( void ) {
+       int i;
+       for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) {
+               clgecko_t **instance = &prog->opengeckoinstances[ i ];
+               if( *instance ) {
+                       CL_Gecko_DestroyBrowser( *instance );
+               }
+               *instance = NULL;
+       }
 }
 
 /*
@@ -3115,13 +3136,28 @@ float[bool] gecko_create( string name )
 */
 void VM_gecko_create( void ) {
        const char *name;
-       
+       int i;
+       clgecko_t *instance;
+       
        VM_SAFEPARMCOUNT( 1, VM_gecko_create );
 
        name = PRVM_G_STRING( OFS_PARM0 );
        VM_CheckEmptyString( name );
 
-       if( !CL_Gecko_CreateBrowser( vm_gecko_getfullname( name ) ) ) {
+       // find an empty slot for this gecko browser..
+       for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) {
+               if( prog->opengeckoinstances[ i ] == NULL ) {
+                       break;
+               }
+       }
+       if( i == PRVM_MAX_GECKOINSTANCES ) {
+                       VM_Warning("VM_gecko_create: %s ran out of gecko handles (%i)\n", PRVM_NAME, PRVM_MAX_GECKOINSTANCES);
+                       PRVM_G_FLOAT( OFS_RETURN ) = 0;
+                       return;
+       }
+
+       instance = prog->opengeckoinstances[ i ] = CL_Gecko_CreateBrowser( name );
+   if( !instance ) {
                // TODO: error handling [12/3/2007 Black]
                PRVM_G_FLOAT( OFS_RETURN ) = 0;
                return;
@@ -3144,7 +3180,7 @@ void VM_gecko_destroy( void ) {
 
        name = PRVM_G_STRING( OFS_PARM0 );
        VM_CheckEmptyString( name );
-       instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+       instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                return;
        }
@@ -3170,7 +3206,7 @@ void VM_gecko_navigate( void ) {
        VM_CheckEmptyString( name );
        VM_CheckEmptyString( URI );
 
-   instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+   instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                return;
        }
@@ -3214,7 +3250,7 @@ void VM_gecko_keyevent( void ) {
                return;
        }
 
-       instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+       instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                PRVM_G_FLOAT( OFS_RETURN ) = 0;
                return;
@@ -3242,7 +3278,7 @@ void VM_gecko_movemouse( void ) {
        x = PRVM_G_FLOAT( OFS_PARM1 );
        y = PRVM_G_FLOAT( OFS_PARM2 );
        
-       instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+       instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                return;
        }
@@ -4461,6 +4497,9 @@ void VM_Cmd_Init(void)
        // only init the stuff for the current prog
        VM_Files_Init();
        VM_Search_Init();
+#ifdef SUPPORT_GECKO
+       VM_Gecko_Init();
+#endif
 //     VM_BufStr_Init();
 }
 
@@ -4469,6 +4508,9 @@ void VM_Cmd_Reset(void)
        CL_PurgeOwner( MENUOWNER );
        VM_Search_Reset();
        VM_Files_CloseAll();
+#ifdef SUPPORT_GECKO
+       VM_Gecko_Destroy();
+#endif
 //     VM_BufStr_ShutDown();
 }