diff --git a/src/game/g_gui.pas b/src/game/g_gui.pas
index 9b44f6f8a7b8a4e572c1e4b31216598c57b4ec6d..67f3b8a6ebd8f5e4fbfb4e2893229b7db0e94afd 100644 (file)
--- a/src/game/g_gui.pas
+++ b/src/game/g_gui.pas
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
private
FButtons: array of TGUITextButton;
FHeader: TGUILabel;
private
FButtons: array of TGUITextButton;
FHeader: TGUILabel;
+ FLogo: DWord;
FIndex: Integer;
FFontID: DWORD;
FCounter: Byte;
FMarkerID1: DWORD;
FMarkerID2: DWORD;
public
FIndex: Integer;
FFontID: DWORD;
FCounter: Byte;
FMarkerID1: DWORD;
FMarkerID2: DWORD;
public
- constructor Create(FontID: DWORD; Header: string);
+ constructor Create(FontID: DWORD; Logo, Header: string);
destructor Destroy; override;
procedure OnMessage(var Msg: TMessage); override;
function AddButton(fProc: Pointer; Caption: string; ShowWindow: string = ''): TGUITextButton;
destructor Destroy; override;
procedure OnMessage(var Msg: TMessage); override;
function AddButton(fProc: Pointer; Caption: string; ShowWindow: string = ''): TGUITextButton;
var
g_GUIWindows: array of TGUIWindow;
g_ActiveWindow: TGUIWindow = nil;
var
g_GUIWindows: array of TGUIWindow;
g_ActiveWindow: TGUIWindow = nil;
+ g_GUIGrabInput: Boolean = False;
procedure g_GUI_Init();
function g_GUI_AddWindow(Window: TGUIWindow): TGUIWindow;
procedure g_GUI_Init();
function g_GUI_AddWindow(Window: TGUIWindow): TGUIWindow;
var
i: Integer;
ID: DWORD;
var
i: Integer;
ID: DWORD;
+ tw, th: Word;
begin
begin
- if FBackTexture <> '' then
+ if FBackTexture <> '' then // Here goes code duplication from g_game.pas:DrawMenuBackground()
if g_Texture_Get(FBackTexture, ID) then
if g_Texture_Get(FBackTexture, ID) then
- e_DrawSize(ID, 0, 0, 0, False, False, gScreenWidth, gScreenHeight)
+ begin
+ e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+ e_GetTextureSize(ID, @tw, @th);
+ if tw = th then
+ tw := round(tw * 1.333 * (gScreenHeight / th))
+ else
+ tw := trunc(tw * (gScreenHeight / th));
+ e_DrawSize(ID, (gScreenWidth - tw) div 2, 0, 0, False, False, tw, gScreenHeight);
+ end
else
e_Clear(GL_COLOR_BUFFER_BIT, 0.5, 0.5, 0.5);
else
e_Clear(GL_COLOR_BUFFER_BIT, 0.5, 0.5, 0.5);
@@ -1024,6 +1034,7 @@ function TGUIMainMenu.AddButton(fProc: Pointer; Caption: string; ShowWindow: str
var
a, _x: Integer;
h, hh: Word;
var
a, _x: Integer;
h, hh: Word;
+ lh: Word = 0;
begin
FIndex := 0;
begin
FIndex := 0;
if FButtons[a] <> nil then
_x := Min(_x, (gScreenWidth div 2)-(FButtons[a].GetWidth div 2));
if FButtons[a] <> nil then
_x := Min(_x, (gScreenWidth div 2)-(FButtons[a].GetWidth div 2));
- hh := FHeader.GetHeight;
+ if FLogo <> 0 then e_GetTextureSize(FLogo, nil, @lh);
+ hh := FButtons[High(FButtons)].GetHeight;
- h := hh*(2+Length(FButtons))+MAINMENU_SPACE*(Length(FButtons)-1);
- h := (gScreenHeight div 2)-(h div 2);
+ if FLogo <> 0 then h := lh + hh * (1 + Length(FButtons)) + MAINMENU_SPACE * (Length(FButtons) - 1)
+ else h := hh * (2 + Length(FButtons)) + MAINMENU_SPACE * (Length(FButtons) - 1);
+ h := (gScreenHeight div 2) - (h div 2);
- with FHeader do
+ if FHeader <> nil then with FHeader do
begin
FX := _x;
FY := h;
end;
begin
FX := _x;
FY := h;
end;
- Inc(h, hh*2);
+ if FLogo <> 0 then Inc(h, lh)
+ else Inc(h, hh*2);
for a := 0 to High(FButtons) do
begin
for a := 0 to High(FButtons) do
begin
FButtons[High(FButtons)] := nil;
end;
FButtons[High(FButtons)] := nil;
end;
-constructor TGUIMainMenu.Create(FontID: DWORD; Header: string);
+constructor TGUIMainMenu.Create(FontID: DWORD; Logo, Header: string);
begin
inherited Create();
begin
inherited Create();
g_Texture_Get(MAINMENU_MARKER1, FMarkerID1);
g_Texture_Get(MAINMENU_MARKER2, FMarkerID2);
g_Texture_Get(MAINMENU_MARKER1, FMarkerID1);
g_Texture_Get(MAINMENU_MARKER2, FMarkerID2);
- FHeader := TGUILabel.Create(Header, FFontID);
- with FHeader do
+ if not g_Texture_Get(Logo, FLogo) then
begin
begin
- FColor := MAINMENU_HEADER_COLOR;
- FX := (gScreenWidth div 2)-(GetWidth div 2);
- FY := (gScreenHeight div 2)-(GetHeight div 2);
+ FHeader := TGUILabel.Create(Header, FFontID);
+ with FHeader do
+ begin
+ FColor := MAINMENU_HEADER_COLOR;
+ FX := (gScreenWidth div 2)-(GetWidth div 2);
+ FY := (gScreenHeight div 2)-(GetHeight div 2);
+ end;
end;
end;
end;
end;
procedure TGUIMainMenu.Draw;
var
a: Integer;
procedure TGUIMainMenu.Draw;
var
a: Integer;
+ w, h: Word;
+
begin
inherited;
begin
inherited;
- FHeader.Draw;
+ if FHeader <> nil then FHeader.Draw
+ else begin
+ e_GetTextureSize(FLogo, @w, @h);
+ e_Draw(FLogo, ((gScreenWidth div 2) - (w div 2)), FButtons[0].FY - FButtons[0].GetHeight - h, 0, True, False);
+ end;
if FButtons <> nil then
begin
if FButtons <> nil then
begin
end;
end;
end;
end;
- g_Touch_ShowKeyboard(FWindow.FActiveControl = Self);
+ g_GUIGrabInput := (@FOnEnterEvent = nil) and (FWindow.FActiveControl = Self);
+ g_Touch_ShowKeyboard(g_GUIGrabInput)
end;
procedure TGUIEdit.SetText(Text: string);
end;
procedure TGUIEdit.SetText(Text: string);
else if FIsQuery then
begin
case wParam of
else if FIsQuery then
begin
case wParam of
- IK_ENTER, IK_KPRETURN, VK_FIRSTKEY..VK_LASTKEY, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK: // Not <Enter
+ IK_ENTER, IK_KPRETURN, VK_FIRSTKEY..VK_LASTKEY (*, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK*): // Not <Enter
else
if e_KeyNames[wParam] <> '' then
FKey := wParam;
else
if e_KeyNames[wParam] <> '' then
FKey := wParam;
end;
end;
end;
end;
end;
end;
+
+ g_GUIGrabInput := FIsQuery
end;
{ TGUIKeyRead2 }
end;
{ TGUIKeyRead2 }
else if FIsQuery then
begin
case wParam of
else if FIsQuery then
begin
case wParam of
- IK_ENTER, IK_KPRETURN, VK_FIRSTKEY..VK_LASTKEY, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK: // Not <Enter
+ IK_ENTER, IK_KPRETURN, VK_FIRSTKEY..VK_LASTKEY (*, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK*): // Not <Enter
else
if e_KeyNames[wParam] <> '' then
begin
else
if e_KeyNames[wParam] <> '' then
begin
end;
end;
end;
end;
end;
end;
+
+ g_GUIGrabInput := FIsQuery
end;
end;
procedure TGUIFileListBox.OnMessage(var Msg: TMessage);
var
procedure TGUIFileListBox.OnMessage(var Msg: TMessage);
var
- a: Integer;
+ a, b: Integer;
begin
if not FEnabled then
Exit;
begin
if not FEnabled then
Exit;
end;
WM_CHAR:
end;
WM_CHAR:
- for a := 0 to High(FItems) do
+ for b := FIndex + 1 to High(FItems) + FIndex do
+ begin
+ a := b mod Length(FItems);
if ( (Length(FItems[a]) > 0) and
(LowerCase(FItems[a][1]) = LowerCase(Chr(wParam))) ) or
( (Length(FItems[a]) > 1) and
if ( (Length(FItems[a]) > 0) and
(LowerCase(FItems[a][1]) = LowerCase(Chr(wParam))) ) or
( (Length(FItems[a]) > 1) and
FOnChangeEvent(Self);
Break;
end;
FOnChangeEvent(Self);
Break;
end;
+ end;
end;
end;
end;
end;