]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_gecko.c
At O.Sezer's recommendation filematch.c has been changed to use
[xonotic/darkplaces.git] / cl_gecko.c
index 43ba96e1327b815bd0c5dde08490ec5c7a335770..90d25a04b241a997f496166cae0d2e40bf4c52c6 100644 (file)
@@ -436,7 +436,7 @@ clgecko_t * CL_Gecko_FindBrowser( const char *name ) {
 }
 
 static void cl_gecko_updatecallback( rtexture_t *texture, void* callbackData ) {
-       clgecko_t *instance = callbackData;
+       clgecko_t *instance = (clgecko_t *) callbackData;
        const unsigned char *data;
        if( instance->browser ) {
                // TODO: OSGK only supports BGRA right now
@@ -514,7 +514,7 @@ static OSGK_ScriptResult dpGlobal_query (void* objTag, void* methTag,
                                         OSGK_ScriptVariant** params,
                                         OSGK_ScriptVariant** returnVal)
 {
-  clgecko_t *instance = objTag;
+  clgecko_t *instance = (clgecko_t *) objTag;
   OSGK_ScriptVariant* strVal;
   OSGK_ScriptResult result = srFailed;
   prvm_prog_t * saveProg;
@@ -536,7 +536,8 @@ static OSGK_ScriptResult dpGlobal_query (void* objTag, void* methTag,
     OSGK_String* paramStr, *resultStr;
 
     if (!osgk_variant_get_string (strVal, &paramStr)) return srFailed;
-    *((string_t*)&prog->globals.generic[OFS_PARM0]) = PRVM_SetTempString (osgk_string_get (paramStr));
+        PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString (instance->name);
+        PRVM_G_INT(OFS_PARM1) = PRVM_SetTempString (osgk_string_get (paramStr));
     PRVM_ExecuteProgram(prog->funcoffsets.Gecko_Query,"Gecko_Query() required");
     resultStr = osgk_string_create (PRVM_G_STRING (OFS_RETURN));
     *returnVal = osgk_variant_create_string (cl_geckoembedding, resultStr);
@@ -715,8 +716,7 @@ static void cl_gecko_create_f( void ) {
                return;
        }
 
-       // TODO: use snprintf instead
-       sprintf(name, CLGECKOPREFIX "%s", Cmd_Argv(1));
+       dpsnprintf(name, sizeof(name), CLGECKOPREFIX "%s", Cmd_Argv(1));
        CL_Gecko_CreateBrowser( name, -1 );
 }
 
@@ -729,8 +729,7 @@ static void cl_gecko_destroy_f( void ) {
                return;
        }
 
-       // TODO: use snprintf instead
-       sprintf(name, CLGECKOPREFIX "%s", Cmd_Argv(1));
+       dpsnprintf(name, sizeof(name), CLGECKOPREFIX "%s", Cmd_Argv(1));
        CL_Gecko_DestroyBrowser( CL_Gecko_FindBrowser( name ) );
 }
 
@@ -744,8 +743,7 @@ static void cl_gecko_navigate_f( void ) {
                return;
        }
 
-       // TODO: use snprintf instead
-       sprintf(name, CLGECKOPREFIX "%s", Cmd_Argv(1));
+       dpsnprintf(name, sizeof(name), CLGECKOPREFIX "%s", Cmd_Argv(1));
        URI = Cmd_Argv( 2 );
        CL_Gecko_NavigateToURI( CL_Gecko_FindBrowser( name ), URI );
 }
@@ -762,8 +760,7 @@ static void cl_gecko_injecttext_f( void ) {
                return;
        }
 
-       // TODO: use snprintf instead
-       sprintf(name, CLGECKOPREFIX "%s", Cmd_Argv(1));
+       dpsnprintf(name, sizeof(name), CLGECKOPREFIX "%s", Cmd_Argv(1));
        instance = CL_Gecko_FindBrowser( name );
        if( !instance ) {
                Con_Printf( "cl_gecko_injecttext_f: gecko instance '%s' couldn't be found!\n", name );
@@ -792,7 +789,7 @@ static void cl_gecko_injecttext_f( void ) {
                                break;
                }
 
-               CL_Gecko_Event_Key( instance, key, CLG_BET_PRESS );
+               CL_Gecko_Event_Key( instance, (keynum_t) key, CLG_BET_PRESS );
        }
 }
 
@@ -806,8 +803,7 @@ static void gl_gecko_movecursor_f( void ) {
                return;
        }
 
-       // TODO: use snprintf instead
-       sprintf(name, CLGECKOPREFIX "%s", Cmd_Argv(1));
+       dpsnprintf(name, sizeof(name), CLGECKOPREFIX "%s", Cmd_Argv(1));
        x = atof( Cmd_Argv( 2 ) );
        y = atof( Cmd_Argv( 3 ) );
 
@@ -848,29 +844,36 @@ static const dllfunction_t osgkFuncs[] =
        {NULL, NULL}
 };
 
-void CL_Gecko_Init( void )
+qboolean CL_Gecko_OpenLibrary (void)
 {
-       const char* dllnames [] =
+       const char* dllnames_gecko [] =
        {
-       #if defined(WIN64)
+#if defined(WIN64)
                "OffscreenGecko64.dll",
-       #elif defined(WIN32)
+#elif defined(WIN32)
                "OffscreenGecko.dll",
-       #elif defined(MACOSX)
+#elif defined(MACOSX)
                "OffscreenGecko.dylib",
-       #else
+#else
                "libOffscreenGecko.so",
-       #endif
+#endif
                NULL
        };
-       
-       if (!osgk_dll)
-       {
-               if (! Sys_LoadLibrary (dllnames, &osgk_dll, osgkFuncs))
-               {
-                       Con_Printf ("Could not load OffscreenGecko, Gecko support unavailable\n");
-               }
-       }
+
+       // Already loaded?
+       if (osgk_dll)
+               return true;
+
+// COMMANDLINEOPTION: Sound: -nogecko disables gecko support (web browser support for menu and computer terminals)
+       if (COM_CheckParm("-nogecko"))
+               return false;
+
+       return Sys_LoadLibrary (dllnames_gecko, &osgk_dll, osgkFuncs);
+}
+
+void CL_Gecko_Init( void )
+{
+       CL_Gecko_OpenLibrary();
 
        Cmd_AddCommand( "gecko_create", cl_gecko_create_f, "Create a gecko browser instance" );
        Cmd_AddCommand( "gecko_destroy", cl_gecko_destroy_f, "Destroy a gecko browser instance" );
@@ -899,8 +902,8 @@ void CL_Gecko_Event_CursorMove( clgecko_t *instance, float x, float y ) {
                return;
        }
 
-       mappedx = x * instance->width;
-       mappedy = y * instance->height;
+       mappedx = (int) (x * instance->width);
+       mappedy = (int) (y * instance->height);
        osgk_browser_event_mouse_move( instance->browser, mappedx, mappedy );
 }