Add warning when disabling secure.enable_security (#9943)
[oweals/minetest.git] / src / client / clientlauncher.cpp
index 2f85911795fa4a27741e77720f0a985beeb5fc6d..f18915a55e2f9b0ee77e8f63fdcd84770cad35e3 100644 (file)
@@ -38,6 +38,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #if USE_SOUND
        #include "sound_openal.h"
 #endif
+#ifdef __ANDROID__
+       #include "porting.h"
+#endif
 
 /* mainmenumanager.h
  */
@@ -64,6 +67,10 @@ ClientLauncher::~ClientLauncher()
        delete g_gamecallback;
 
        delete RenderingEngine::get_instance();
+
+#if USE_SOUND
+       g_sound_manager_singleton.reset();
+#endif
 }
 
 
@@ -92,14 +99,12 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
                return true;
        }
 
-       video::IVideoDriver *video_driver = RenderingEngine::get_video_driver();
-       if (video_driver == NULL) {
+       if (RenderingEngine::get_video_driver() == NULL) {
                errorstream << "Could not initialize video driver." << std::endl;
                return false;
        }
 
-       RenderingEngine::setXorgClassHint(video_driver->getExposedVideoData(), PROJECT_NAME_C);
-       RenderingEngine::get_instance()->setWindowIcon();
+       RenderingEngine::get_instance()->setupTopLevelWindow(PROJECT_NAME_C);
 
        /*
                This changes the minimum allowed number of vertices in a VBO.
@@ -125,7 +130,30 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
        skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0));
        skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50));
        skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255));
-
+#ifdef __ANDROID__
+       float density = porting::getDisplayDensity();
+       skin->setSize(gui::EGDS_CHECK_BOX_WIDTH, (s32)(17.0f * density));
+       skin->setSize(gui::EGDS_SCROLLBAR_SIZE, (s32)(14.0f * density));
+       skin->setSize(gui::EGDS_WINDOW_BUTTON_WIDTH, (s32)(15.0f * density));
+       if (density > 1.5f) {
+               std::string sprite_path = porting::path_user + "/textures/base/pack/";
+               if (density > 3.5f)
+                       sprite_path.append("checkbox_64.png");
+               else if (density > 2.0f)
+                       sprite_path.append("checkbox_32.png");
+               else
+                       sprite_path.append("checkbox_16.png");
+               // Texture dimensions should be a power of 2
+               gui::IGUISpriteBank *sprites = skin->getSpriteBank();
+               video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+               video::ITexture *sprite_texture = driver->getTexture(sprite_path.c_str());
+               if (sprite_texture) {
+                       s32 sprite_id = sprites->addTextureAsSprite(sprite_texture);
+                       if (sprite_id != -1)
+                               skin->setIcon(gui::EGDI_CHECK_BOX_CHECKED, sprite_id);
+               }
+       }
+#endif
        g_fontengine = new FontEngine(g_settings, guienv);
        FATAL_ERROR_IF(g_fontengine == NULL, "Font engine creation failed.");
 
@@ -141,7 +169,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
        if (!g_menuclouds)
                g_menuclouds = new Clouds(g_menucloudsmgr, -1, rand());
        g_menuclouds->setHeight(100.0f);
-       g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 200, 200, 255));
+       g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255));
        scene::ICameraSceneNode* camera;
        camera = g_menucloudsmgr->addCameraSceneNode(NULL, v3f(0, 0, 0), v3f(0, 60, 100));
        camera->setFarValue(10000);
@@ -364,6 +392,20 @@ bool ClientLauncher::launch_game(std::string &error_message,
        if (cmd_args.exists("password"))
                menudata.password = cmd_args.get("password");
 
+
+       if (cmd_args.exists("password-file")) {
+               std::ifstream passfile(cmd_args.get("password-file"));
+               if (passfile.good()) {
+                       getline(passfile, menudata.password);
+               } else {
+                       error_message = gettext("Provided password file "
+                                       "failed to open: ")
+                                       + cmd_args.get("password-file");
+                       errorstream << error_message << std::endl;
+                       return false;
+               }
+       }
+
        // If a world was commanded, append and select it
        if (!game_params.world_path.empty()) {
                worldspec.gameid = getWorldGameId(game_params.world_path, true);