]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
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 8ee494640e73c355db0801e22f066e518642e27b..722c72277d2a60bcbe43de43dc9fbf0a4734a8dd 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
        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
        // TODO: assert dyntexture != NULL!\r
        if( dyntexture->texture != texture ) {\r
                dyntexture->texture = texture;\r
index 47614ed887f4c67298685dd183f8bedacf69e373..7442e768b2bc64c872592dfeef2671b1a84b4f64 100644 (file)
@@ -94,7 +94,7 @@ clgecko_t * CL_Gecko_CreateBrowser( const char *name ) {
                osgk_release( options );\r
                \r
                if( cl_geckoembedding == NULL ) {\r
                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
                        return NULL;\r
                }\r
        }\r
index 11c02902440773da8ef4ff9f0a6e275e4095c245..c5bb63d230ec9e3dcf0fd8b084708881aa4900b4 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef CL_GECKO_H\r
 #define CL_GECKO_H\r
 \r
 #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
 #define DEFAULT_GECKO_WIDTH    512\r
 #define DEFAULT_GECKO_HEIGHT   DEFAULT_GECKO_WIDTH\r
 \r
index d5b1a84faabeeb6560596914f9233fbde5a40e06..05bf4a160cbca5f8fd5d64a73db3132cbe0be753 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef CL_VIDEO_H
 #define CL_VIDEO_H
 
 #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/"
 #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 5b8032769c5db889c2d01bdbf62f274dbd67fa93..c8a2120d2bc9a5c9d3863301e3031675e46a7bdc 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);
        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;
        prog->extensionstring = vm_sv_extensions;
        prog->builtins = vm_cl_builtins;
        prog->numbuiltins = vm_cl_numbuiltins;
diff --git a/menu.c b/menu.c
index fb55bd75b00e7404812b70eb97a5d9d603a31593..59418bd567b19d8e8a8aefc13aa79a8368a210a4 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -5104,16 +5104,6 @@ void MP_Shutdown (void)
        PRVM_End;
 }
 
        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;
 void MP_Init (void)
 {
        PRVM_Begin;
index 834e838360e3cf13c7623c6f1c1c839c670c9a65..c4b194a9bd2744b1cad144677ecba08e1a9c61f7 100644 (file)
@@ -19,6 +19,10 @@ char *vm_m_extensions =
 "DP_QC_CMD "
 "DP_QC_STRREPLACE "
 "DP_FONT_VARIABLEWIDTH "
 "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 9ec87682397ec7c1630b375ef0f96c54a463d7fc..6c78093642603a9b0211f567a620523d913cc91a 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
 
 #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;
 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
 
 #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);
 
 
 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];
 
        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;
 
        // copies of some vars that were former read from sv
        int                                     num_edicts;
index 543fd23c4fd13b698b2c6309b8695164b9d10ad0..04f0860dc3411fd966506a661e3a1ce232c0bd04 100644 (file)
@@ -3101,9 +3101,30 @@ void VM_cin_restart( void )
 }
 
 #ifdef SUPPORT_GECKO
 }
 
 #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;
 */
 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 );
 
        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;
                // 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 );
 
        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;
        }
        if( !instance ) {
                return;
        }
@@ -3170,7 +3206,7 @@ void VM_gecko_navigate( void ) {
        VM_CheckEmptyString( name );
        VM_CheckEmptyString( URI );
 
        VM_CheckEmptyString( name );
        VM_CheckEmptyString( URI );
 
-   instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+   instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                return;
        }
        if( !instance ) {
                return;
        }
@@ -3214,7 +3250,7 @@ void VM_gecko_keyevent( void ) {
                return;
        }
 
                return;
        }
 
-       instance = CL_Gecko_FindBrowser( vm_gecko_getfullname( name ) );
+       instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                PRVM_G_FLOAT( OFS_RETURN ) = 0;
                return;
        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 );
        
        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;
        }
        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();
        // only init the stuff for the current prog
        VM_Files_Init();
        VM_Search_Init();
+#ifdef SUPPORT_GECKO
+       VM_Gecko_Init();
+#endif
 //     VM_BufStr_Init();
 }
 
 //     VM_BufStr_Init();
 }
 
@@ -4469,6 +4508,9 @@ void VM_Cmd_Reset(void)
        CL_PurgeOwner( MENUOWNER );
        VM_Search_Reset();
        VM_Files_CloseAll();
        CL_PurgeOwner( MENUOWNER );
        VM_Search_Reset();
        VM_Files_CloseAll();
+#ifdef SUPPORT_GECKO
+       VM_Gecko_Destroy();
+#endif
 //     VM_BufStr_ShutDown();
 }
 
 //     VM_BufStr_ShutDown();
 }