DEADSOFTWARE

Default window size and position setted according with display resolution
[d2df-sdl.git] / src / game / g_options.pas
index dc7305f9baecaa97b32195ce45391184986f8d38..60b067ed281de1689a980d541789c94f0d371c23 100644 (file)
@@ -134,47 +134,45 @@ var
 implementation
 
 uses
-{$IFDEF USE_NANOGL}
-  nanoGL,
-{$ELSE}
-  GL, GLExt,
-{$ENDIF}
+  {$INCLUDE ../nogl/noGLuses.inc}
   e_log, e_input, g_window, g_sound, g_gfx, g_player, Math,
   g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_texture,
   g_items, wadreader, e_graphics, g_touch, SDL2;
 
 procedure g_Options_SetDefaultVideo;
-{$IF DEFINED(ANDROID)}
 var
-  display: PSDL_DisplayMode;
-{$ENDIF}
+  target, closest, display: TSDL_DisplayMode;
 begin
+  (* Display 0 = Primary display *)
+  SDL_GetDesktopDisplayMode(0, @display);
   {$IF DEFINED(ANDROID)}
-    (* On android set max screen size *)
-    SDL_GetCurrentDisplayMode(0, display);
     gScreenWidth := display.w;
     gScreenHeight := display.h;
-    gWinRealPosX := 0;
-    gWinRealPosY := 0;
-    gWinMaximized := False;
-    gFullScreen := False; (* if True then rotation not allowed *)
+    //gBPP := SDL_BITSPERPIXEL(dispaly.format);
     gBPP := 32;
-    gVSync := True;
-    gTextureFilter := True;
-    glLegacyNPOT := False;
+    gFullScreen := True; (* rotation not allowed? *)
   {$ELSE}
-    (* On other systems use default 800x600 *)
-    gScreenWidth := 800;
-    gScreenHeight := 600;
-    gWinRealPosX := 0;
-    gWinRealPosY := 0;
-    gWinMaximized := False;
-    gFullScreen := False;
+    (* Window must be smaller than display *)
+    target.w := display.w * 75 div 100;
+    target.h := display.h * 75 div 100;
+    target.format := 0; (* didn't care *)
+    target.refresh_rate := 0; (* didn't care *)
+    target.driverdata := nil; (* init *)
+    SDL_GetClosestDisplayMode(0, @target, @closest);
+    gScreenWidth := closest.w;
+    gScreenHeight := closest.h;
+    //gBPP := SDL_BITSPERPIXEL(closest.format); (* Resolution list didn't work for some reason *)
     gBPP := 32;
-    gVSync := True;
-    gTextureFilter := True;
-    glLegacyNPOT := False;
+    gFullScreen := False;
   {$ENDIF}
+  (* Must be positioned on primary display *)
+  gWinRealPosX := SDL_WINDOWPOS_CENTERED;
+  gWinRealPosY := SDL_WINDOWPOS_CENTERED;
+  gWinMaximized := False;
+  gVSync := True;
+  gTextureFilter := True;
+  glLegacyNPOT := False;
+  e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gScreenWidth) + ' h = ' + IntToStr(gScreenHeight));
 end;
 
 procedure g_Options_SetDefault();
@@ -199,7 +197,7 @@ begin
   with gGameControls.GameControls do
   begin
     TakeScreenshot := SDL_SCANCODE_F12;
-    Stat := SDL_SCANCODE_L;
+    Stat := SDL_SCANCODE_TAB;
     Chat := SDL_SCANCODE_T;
     TeamChat := SDL_SCANCODE_Y;
   end;
@@ -213,8 +211,8 @@ begin
     KeyDown := SDL_SCANCODE_KP_5;
     KeyFire := SDL_SCANCODE_SLASH;
     KeyJump := SDL_SCANCODE_RCTRL;
-    KeyNextWeapon := SDL_SCANCODE_KP_7;
-    KeyPrevWeapon := SDL_SCANCODE_KP_9;
+    KeyNextWeapon := SDL_SCANCODE_KP_9;
+    KeyPrevWeapon := SDL_SCANCODE_KP_7;
     KeyOpen := SDL_SCANCODE_RSHIFT;
     KeyStrafe := SDL_SCANCODE_PERIOD;
 
@@ -401,11 +399,6 @@ var
     v := Max(Min(config.ReadInt(section, param, v), maxv), minv)
   end;
 
-  procedure ReadInteger (VAR v: Single; param: String; minv: Integer = Low(Integer); maxv: Integer = High(Integer)); overload;
-  begin
-    v := Max(Min(config.ReadInt(section, param, Integer(v)), maxv), minv)
-  end;
-
   procedure ReadInteger (VAR v: LongWord; param: String; minv: LongWord = Low(LongWord); maxv: LongWord = High(LongWord)); overload;
   begin
     v := Max(Min(config.ReadInt(section, param, v), maxv), minv)
@@ -584,9 +577,9 @@ begin
   end;
 
   section := 'Touch';
-  ReadInteger(g_touch_size, 'Size', 0); g_touch_size := g_touch_size / 10;
+  i := Trunc(g_touch_size * 10); ReadInteger(i, 'Size', 0); g_touch_size := i / 10;
   ReadBoolean(g_touch_fire, 'Fire');
-  ReadInteger(g_touch_offset, 'Offset', 0, 100);
+  i := Round(g_touch_offset); ReadInteger(i, 'Offset', 0, 100); g_touch_offset := i;
   ReadBoolean(g_touch_alt, 'Alt');
 
   section := 'Game';
@@ -602,7 +595,7 @@ begin
     3: gGibsCount := 32;
     else gGibsCount := 48;
   end;
-  ReadInteger(ITEM_RESPAWNTIME, 'ItemRespawnTime', 0); ITEM_RESPAWNTIME := ITEM_RESPAWNTIME * 36;
+  i := ITEM_RESPAWNTIME div 36; ReadInteger(i, 'ItemRespawnTime', 0); ITEM_RESPAWNTIME := i * 36;
   ReadInteger(gBloodCount, 'BloodCount', 0, 4);
   ReadBoolean(gAdvBlood, 'AdvancesBlood');
   ReadBoolean(gAdvCorpses, 'AdvancesCorpses');
@@ -617,7 +610,7 @@ begin
   ReadBoolean(e_FastScreenshots, 'FastScreenshots');
   ReadString(gDefaultMegawadStart, 'DefaultMegawadStart');
   ReadBoolean(gBerserkAutoswitch, 'BerserkAutoswitching');
-  ReadInteger(g_dbg_scale, 'Scale', 1); g_dbg_scale := g_dbg_scale / 100;
+  i := Trunc(g_dbg_scale * 100); ReadInteger(i, 'Scale', 100); g_dbg_scale := i / 100;
   ReadString(gLanguage, 'Language');
   if (gLanguage = LANGUAGE_RUSSIAN) or (gLanguage = LANGUAGE_ENGLISH) then
     gAskLanguage := False