DEADSOFTWARE

gl: fix text fields
[d2df-sdl.git] / src / game / renders / opengl / r_gui.pas
index 7016db9b17456ed6c7ee0f8587b6b5e257a76b2a..3e35ac9e01e6d75689a8d4add79f34ff28652507 100644 (file)
@@ -42,12 +42,6 @@ implementation
   const
     EDIT_CURSORLEN = 10;
 
-  type
-    THereTexture = record
-      name: AnsiString;
-      id: TGLTexture;
-    end;
-
   var
     Box: Array [0..8] of TGLTexture;
     MarkerID: array [Boolean] of TGLTexture;
@@ -63,51 +57,37 @@ implementation
     Background: THereTexture;
     ImageControl: THereTexture;
 
-  procedure r_GUI_FreeThis (var here: THereTexture);
-  begin
-    here.name := '';
-    if here.id <> nil then
-      here.id.Free;
-    here.id := nil;
-  end;
-
-  function r_GUI_LoadThis (const name: AnsiString; var here: THereTexture): Boolean;
-  begin
-    r_GUI_FreeThis(here);
-    if (name <> '') and (here.name <> name) then
-      here.id := r_Textures_LoadFromFile(name);
-    result := here.id <> nil;
-  end;
-
   procedure r_GUI_Load;
     var i: Integer;
   begin
     Font[FALSE] := smallfont;
     Font[TRUE] := menufont;
 
-    MarkerID[FALSE] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/MARKER1');
-    MarkerID[TRUE] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/MARKER2');
+    r_Common_SetLoading('GUI', 2 + 9 + 14);
+
+    MarkerID[FALSE] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/MARKER1', [TGLHints.txNoRepeat]);
+    MarkerID[TRUE] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/MARKER2', [TGLHints.txNoRepeat]);
 
     for i := 0 to 8 do
-      Box[i] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/BOX' + IntToStr(i + 1));
+      Box[i] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/BOX' + IntToStr(i + 1), []); // !!!
 
-    ScrollLeft := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SLEFT');
-    ScrollRight := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SRIGHT');
-    ScrollMiddle := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SMIDDLE');
-    ScrollMarker := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SMARKER');
+    ScrollLeft := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SLEFT', [TGLHints.txNoRepeat]);
+    ScrollRight := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SRIGHT', [TGLHints.txNoRepeat]);
+    ScrollMiddle := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SMIDDLE', []);
+    ScrollMarker := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SMARKER', [TGLHints.txNoRepeat]);
 
-    EditLeft := r_Textures_LoadFromFile(GameWad + ':TEXTURES/ELEFT');
-    EditRight := r_Textures_LoadFromFile(GameWad + ':TEXTURES/ERIGHT');
-    EditMiddle := r_Textures_LoadFromFile(GameWad + ':TEXTURES/EMIDDLE');
+    EditLeft := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/ELEFT', [TGLHints.txNoRepeat]);
+    EditRight := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/ERIGHT', [TGLHints.txNoRepeat]);
+    EditMiddle := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/EMIDDLE', []);
 
-    BScrollUp[true] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SCROLLUPA');
-    BScrollUp[false] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SCROLLUPU');
-    BScrollDown[true] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SCROLLDOWNA');
-    BScrollDown[false] := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SCROLLDOWNU');
-    BScrollMiddle := r_Textures_LoadFromFile(GameWad + ':TEXTURES/SCROLLMIDDLE');
+    BScrollUp[true] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SCROLLUPA', [TGLHints.txNoRepeat]);
+    BScrollUp[false] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SCROLLUPU', [TGLHints.txNoRepeat]);
+    BScrollDown[true] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SCROLLDOWNA', [TGLHints.txNoRepeat]);
+    BScrollDown[false] := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SCROLLDOWNU', [TGLHints.txNoRepeat]);
+    BScrollMiddle := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/SCROLLMIDDLE', []);
 
-    LogoTex := r_Textures_LoadFromFile(GameWad + ':TEXTURES/MAINLOGO');
-    nopic := r_Textures_LoadFromFile(GameWad + ':TEXTURES/NOPIC');
+    LogoTex := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/MAINLOGO', [TGLHints.txNoRepeat]);
+    nopic := r_Common_LoadTextureFromFile(GameWad + ':TEXTURES/NOPIC', [TGLHints.txNoRepeat]);
   end;
 
   procedure r_GUI_Free;
@@ -116,32 +96,32 @@ implementation
     Font[FALSE] := nil;
     Font[TRUE] := nil;
 
-    MarkerID[FALSE].Free;
-    MarkerID[TRUE].Free;
+    r_Common_FreeAndNil(MarkerID[FALSE]);
+    r_Common_FreeAndNil(MarkerID[TRUE]);
 
     for i := 0 to 8 do
-      Box[i].Free;
+      r_Common_FreeAndNil(Box[i]);
 
-    ScrollLeft.Free;
-    ScrollRight.Free;
-    ScrollMiddle.Free;
-    ScrollMarker.Free;
+    r_Common_FreeAndNil(ScrollLeft);
+    r_Common_FreeAndNil(ScrollRight);
+    r_Common_FreeAndNil(ScrollMiddle);
+    r_Common_FreeAndNil(ScrollMarker);
 
-    EditLeft.Free;
-    EditRight.Free;
-    EditMiddle.Free;
+    r_Common_FreeAndNil(EditLeft);
+    r_Common_FreeAndNil(EditRight);
+    r_Common_FreeAndNil(EditMiddle);
 
-    BScrollUp[true].Free;
-    BScrollUp[false].Free;
-    BScrollDown[true].Free;
-    BScrollDown[false].Free;
-    BScrollMiddle.Free;
+    r_Common_FreeAndNil(BScrollUp[true]);
+    r_Common_FreeAndNil(BScrollUp[false]);
+    r_Common_FreeAndNil(BScrollDown[true]);
+    r_Common_FreeAndNil(BScrollDown[false]);
+    r_Common_FreeAndNil(BScrollMiddle);
 
-    LogoTex.Free;
-    nopic.Free;
+    r_Common_FreeAndNil(LogoTex);
+    r_Common_FreeAndNil(nopic);
 
-    r_GUI_FreeThis(Background);
-    r_GUI_FreeThis(ImageControl);
+    r_Common_FreeThis(Background);
+    r_Common_FreeThis(ImageControl);
   end;
 
   procedure r_GUI_GetMaxFontSize (BigFont: Boolean; out w, h: Integer);
@@ -278,7 +258,7 @@ implementation
     var w, h: Integer; r, g, b: Byte; f: TGLFont;
   begin
     r_Draw_Texture(EditLeft, ctrl.X, ctrl.Y, EditLeft.width, EditLeft.height, false, 255, 255, 255, 255, false);
-    r_Draw_TextureRepeat(EditMiddle, ctrl.X + 8, ctrl.Y, 8 + (ctrl.Width - 1) * 16, EditMiddle.height, false, 255, 255, 255, 255, false);
+    r_Draw_TextureRepeat(EditMiddle, ctrl.X + 8, ctrl.Y, 8 + ctrl.Width * 16, EditMiddle.height, false, 255, 255, 255, 255, false);
     r_Draw_Texture(EditRight, ctrl.X + 8 + ctrl.Width * 16, ctrl.Y, EditRight.width, EditRight.height, false, 255, 255, 255, 255, false);
     r := ctrl.Color.R;
     g := ctrl.Color.G;
@@ -412,7 +392,7 @@ implementation
   begin
     pic := nopic;
     if ctrl.ImageRes <> '' then
-      if r_GUI_LoadThis(ctrl.ImageRes, ImageControl) then
+      if r_Common_LoadThis(ctrl.ImageRes, ImageControl) then
         pic := ImageControl.id;
     if pic <> nil then
       r_Draw_Texture(pic, ctrl.x, ctrl.y, pic.width, pic.height, false, 255, 255, 255, 255, false);
@@ -573,7 +553,7 @@ implementation
   begin
     // Here goes code duplication from g_game.pas:DrawMenuBackground()
     if win.BackTexture <> '' then
-      if r_GUI_LoadThis(win.BackTexture, Background) then
+      if r_Common_LoadThis(win.BackTexture, Background) then
       begin
         r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, 255);
         tw := Background.id.width;