author | nemo |
Fri, 03 Apr 2015 16:46:14 -0400 | |
changeset 10891 | a4c454ef80a6 |
parent 10868 | acb03a9712c3 |
child 10919 | 8aed2bfc43c5 |
permissions | -rw-r--r-- |
942 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
9998 | 3 |
* Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> |
942 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10104
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
942 | 17 |
*) |
18 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
942 | 21 |
unit uChat; |
22 |
||
23 |
interface |
|
24 |
||
3038 | 25 |
procedure initModule; |
26 |
procedure freeModule; |
|
6379 | 27 |
procedure ReloadLines; |
8738 | 28 |
procedure CleanupInput; |
942 | 29 |
procedure AddChatString(s: shortstring); |
30 |
procedure DrawChat; |
|
10836 | 31 |
procedure KeyPressChat(Key, Sym: Longword; Modifier: Word); |
9669 | 32 |
procedure SendHogSpeech(s: shortstring); |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
33 |
procedure CopyToClipboard(var newContent: shortstring); |
942 | 34 |
|
35 |
implementation |
|
10737 | 36 |
uses SDLh, uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript, uRenderUtils; |
942 | 37 |
|
990
dfa6a6fe1542
Implement history for chat (27 entries), no key binding yet
unc0rr
parents:
988
diff
changeset
|
38 |
const MaxStrIndex = 27; |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
39 |
MaxInputStrLen = 240; |
942 | 40 |
|
946 | 41 |
type TChatLine = record |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
42 |
Tex: PTexture; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
43 |
Time: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
44 |
Width: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
45 |
s: shortstring; |
10303 | 46 |
Color: TSDL_Color; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
47 |
end; |
9954 | 48 |
TChatCmd = (ccQuit, ccPause, ccFinish, ccShowHistory, ccFullScreen); |
942 | 49 |
|
10835
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
50 |
type TInputStrL = array[0..260] of byte; |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
51 |
|
946 | 52 |
var Strs: array[0 .. MaxStrIndex] of TChatLine; |
3539 | 53 |
MStrs: array[0 .. MaxStrIndex] of shortstring; |
8740
3eb1891f81ef
use a local storage for chat history which prevents mix ups in netgame and simplifies code
koda
parents:
8739
diff
changeset
|
54 |
LocalStrs: array[0 .. MaxStrIndex] of shortstring; |
10835
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
55 |
LocalStrsL: array[0 .. MaxStrIndex] of TInputStrL; |
3539 | 56 |
missedCount: LongWord; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
57 |
lastStr: LongWord; |
9145 | 58 |
localLastStr: LongInt; |
59 |
history: LongInt; |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
60 |
visibleCount: LongWord; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
61 |
InputStr: TChatLine; |
10835
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
62 |
InputStrL: TInputStrL; // for full str + 4-byte utf-8 char |
4814
e19791f08443
smaller rearrangement of (non stereo related) variables
koda
parents:
4467
diff
changeset
|
63 |
ChatReady: boolean; |
e19791f08443
smaller rearrangement of (non stereo related) variables
koda
parents:
4467
diff
changeset
|
64 |
showAll: boolean; |
10312 | 65 |
liveLua: boolean; |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
66 |
ChatHidden: boolean; |
10842
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
67 |
firstDraw: boolean; |
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
68 |
InputLinePrefix: TChatLine; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
69 |
// cursor |
10836 | 70 |
cursorPos, cursorX, selectedPos, selectionDx: LongInt; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
71 |
LastKeyPressTick: LongWord; |
942 | 72 |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
73 |
|
8152 | 74 |
const |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
75 |
InputStrLNoPred: byte = 255; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
76 |
|
8152 | 77 |
colors: array[#0..#6] of TSDL_Color = ( |
9311
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
78 |
(r:$FF; g:$FF; b:$FF; a:$FF), // unused, feel free to take it for anything |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
79 |
(r:$FF; g:$FF; b:$FF; a:$FF), // chat message [White] |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
80 |
(r:$FF; g:$00; b:$FF; a:$FF), // action message [Purple] |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
81 |
(r:$90; g:$FF; b:$90; a:$FF), // join/leave message [Lime] |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
82 |
(r:$FF; g:$FF; b:$A0; a:$FF), // team message [Light Yellow] |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
83 |
(r:$FF; g:$00; b:$00; a:$FF), // error messages [Red] |
5baf10a52f43
engine uses final (?) SDL 2 APIs, new events and types added. Touch input broke by the way, and system events should be handled differently
koda
parents:
9145
diff
changeset
|
84 |
(r:$00; g:$FF; b:$FF; a:$FF) // input line [Light Blue] |
8152 | 85 |
); |
86 |
ChatCommandz: array [TChatCmd] of record |
|
87 |
ChatCmd: string[31]; |
|
88 |
ProcedureCallChatCmd: string[31]; |
|
89 |
end = ( |
|
90 |
(ChatCmd: '/quit'; ProcedureCallChatCmd: 'halt'), |
|
91 |
(ChatCmd: '/pause'; ProcedureCallChatCmd: 'pause'), |
|
92 |
(ChatCmd: '/finish'; ProcedureCallChatCmd: 'finish'), |
|
9569 | 93 |
(ChatCmd: '/history'; ProcedureCallChatCmd: 'history'), |
8152 | 94 |
(ChatCmd: '/fullscreen'; ProcedureCallChatCmd: 'fullscr') |
95 |
); |
|
2396 | 96 |
|
10303 | 97 |
|
98 |
const Padding = 2; |
|
99 |
ClHeight = 2 * Padding + 16; // font height |
|
100 |
||
10866 | 101 |
function charIsForHogSpeech(c: char): boolean; |
102 |
begin |
|
103 |
exit((c = '"') or (c = '''') or (c = '-')); |
|
104 |
end; |
|
105 |
||
10836 | 106 |
procedure ResetSelection(); |
107 |
begin |
|
108 |
selectedPos:= -1; |
|
109 |
end; |
|
110 |
||
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
111 |
procedure UpdateCursorCoords(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
112 |
var font: THWFont; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
113 |
str : shortstring; |
10836 | 114 |
coff, soff: LongInt; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
115 |
begin |
10836 | 116 |
if cursorPos = selectedPos then |
117 |
ResetSelection(); |
|
118 |
||
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
119 |
// calculate cursor offset |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
120 |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
121 |
str:= InputStr.s; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
122 |
font:= CheckCJKFont(ansistring(str), fnt16); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
123 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
124 |
// get only substring before cursor to determine length |
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
125 |
// SetLength(str, cursorPos); // makes pas2c unhappy |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
126 |
str[0]:= char(cursorPos); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
127 |
// get render size of text |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
128 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), @coff, nil); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
129 |
|
10842
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
130 |
cursorX:= 2 + coff; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
131 |
|
10836 | 132 |
// calculate selection width on screen |
133 |
if selectedPos >= 0 then |
|
134 |
begin |
|
135 |
if selectedPos > cursorPos then |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
136 |
str:= InputStr.s; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
137 |
// SetLength(str, selectedPos); // makes pas2c unhappy |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
138 |
str[0]:= char(selectedPos); |
10836 | 139 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), @soff, nil); |
140 |
selectionDx:= soff - coff; |
|
141 |
end |
|
142 |
else |
|
143 |
selectionDx:= 0; |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
144 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
145 |
|
10836 | 146 |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
147 |
procedure ResetCursor(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
148 |
begin |
10836 | 149 |
ResetSelection(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
150 |
cursorPos:= 0; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
151 |
UpdateCursorCoords(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
152 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
153 |
|
10303 | 154 |
procedure RenderChatLineTex(var cl: TChatLine; var str: shortstring); |
155 |
var strSurface, |
|
156 |
resSurface: PSDL_Surface; |
|
157 |
dstrect : TSDL_Rect; // destination rectangle for blitting |
|
158 |
font : THWFont; |
|
159 |
const |
|
160 |
shadowint = $80 shl AShift; |
|
161 |
begin |
|
162 |
||
163 |
font:= CheckCJKFont(ansistring(str), fnt16); |
|
164 |
||
165 |
// get render size of text |
|
166 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), @cl.Width, nil); |
|
167 |
||
168 |
// calculate and save size |
|
169 |
cl.Width := cl.Width + 2 * Padding; |
|
170 |
||
171 |
// create surface to draw on |
|
172 |
resSurface:= SDL_CreateRGBSurface( |
|
173 |
0, toPowerOf2(cl.Width), toPowerOf2(ClHeight), |
|
174 |
32, RMask, GMask, BMask, AMask); |
|
175 |
||
176 |
// define area we want to draw in |
|
177 |
dstrect.x:= 0; |
|
178 |
dstrect.y:= 0; |
|
179 |
dstrect.w:= cl.Width; |
|
180 |
dstrect.h:= ClHeight; |
|
181 |
||
182 |
// draw background |
|
183 |
SDL_FillRect(resSurface, @dstrect, shadowint); |
|
184 |
||
185 |
// create and blit text |
|
10370 | 186 |
strSurface:= TTF_RenderUTF8_Blended(Fontz[font].Handle, Str2PChar(str), cl.color); |
10737 | 187 |
//SDL_UpperBlit(strSurface, nil, resSurface, @dstrect); |
188 |
if strSurface <> nil then copyTOXY(strSurface, resSurface, Padding, Padding); |
|
10303 | 189 |
SDL_FreeSurface(strSurface); |
190 |
||
191 |
cl.Tex:= Surface2Tex(resSurface, false); |
|
192 |
||
193 |
SDL_FreeSurface(resSurface) |
|
194 |
end; |
|
195 |
||
196 |
const ClDisplayDuration = 12500; |
|
197 |
||
990
dfa6a6fe1542
Implement history for chat (27 entries), no key binding yet
unc0rr
parents:
988
diff
changeset
|
198 |
procedure SetLine(var cl: TChatLine; str: shortstring; isInput: boolean); |
10303 | 199 |
var color : TSDL_Color; |
942 | 200 |
begin |
4925 | 201 |
if cl.Tex <> nil then |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10588
diff
changeset
|
202 |
FreeAndNilTexture(cl.Tex); |
2396 | 203 |
|
204 |
if isInput then |
|
6379 | 205 |
begin |
10303 | 206 |
cl.s:= str; |
5392 | 207 |
color:= colors[#6]; |
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
208 |
str:= str + ' '; |
6379 | 209 |
end |
2664
949c189ba568
powerpc and gameserver compilation disabled temporarily
koda
parents:
2630
diff
changeset
|
210 |
else |
6379 | 211 |
begin |
10863
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
212 |
if str[1] <= High(colors) then |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
213 |
begin |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
214 |
color:= colors[str[1]]; |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
215 |
delete(str, 1, 1); |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
216 |
end |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
217 |
// fallback if invalid color |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
218 |
else |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
219 |
color:= colors[Low(colors)]; |
9d3e1123bd43
fallback to first color in colors array if there is no valid color specified
sheepluva
parents:
10853
diff
changeset
|
220 |
|
10303 | 221 |
cl.s:= str; |
6379 | 222 |
end; |
2396 | 223 |
|
10303 | 224 |
cl.color:= color; |
945
4ead9cde4e14
- Start chat implementation: chat strings are on the screen
unc0rr
parents:
942
diff
changeset
|
225 |
|
10303 | 226 |
// set texture, note: variables cl.s and str will be different here if isInput |
227 |
RenderChatLineTex(cl, str); |
|
1118 | 228 |
|
10303 | 229 |
cl.Time:= RealTicks + ClDisplayDuration; |
946 | 230 |
end; |
231 |
||
6379 | 232 |
// For uStore texture recreation |
233 |
procedure ReloadLines; |
|
6381 | 234 |
var i, t: LongWord; |
6379 | 235 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
236 |
if InputStr.s <> '' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
237 |
SetLine(InputStr, InputStr.s, true); |
6381 | 238 |
for i:= 0 to MaxStrIndex do |
239 |
if Strs[i].s <> '' then |
|
240 |
begin |
|
241 |
t:= Strs[i].Time; |
|
242 |
SetLine(Strs[i], Strs[i].s, false); |
|
243 |
Strs[i].Time:= t |
|
244 |
end; |
|
6379 | 245 |
end; |
246 |
||
946 | 247 |
procedure AddChatString(s: shortstring); |
248 |
begin |
|
3539 | 249 |
if not ChatReady then |
250 |
begin |
|
251 |
if MissedCount < MaxStrIndex - 1 then |
|
252 |
MStrs[MissedCount]:= s |
|
253 |
else if MissedCount < MaxStrIndex then |
|
254 |
MStrs[MissedCount]:= #5 + '[...]'; |
|
255 |
inc(MissedCount); |
|
256 |
exit |
|
257 |
end; |
|
258 |
||
946 | 259 |
lastStr:= (lastStr + 1) mod (MaxStrIndex + 1); |
260 |
||
990
dfa6a6fe1542
Implement history for chat (27 entries), no key binding yet
unc0rr
parents:
988
diff
changeset
|
261 |
SetLine(Strs[lastStr], s, false); |
945
4ead9cde4e14
- Start chat implementation: chat strings are on the screen
unc0rr
parents:
942
diff
changeset
|
262 |
|
4ead9cde4e14
- Start chat implementation: chat strings are on the screen
unc0rr
parents:
942
diff
changeset
|
263 |
inc(visibleCount) |
942 | 264 |
end; |
265 |
||
10850
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
266 |
procedure CheckPasteBuffer(); forward; |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
267 |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
268 |
procedure UpdateInputLinePrefix(); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
269 |
begin |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
270 |
if liveLua then |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
271 |
begin |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
272 |
InputLinePrefix.color:= colors[#1]; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
273 |
InputLinePrefix.s:= '[Lua] >'; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
274 |
end |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
275 |
else |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
276 |
begin |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
277 |
InputLinePrefix.color:= colors[#6]; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
278 |
InputLinePrefix.s:= UserNick + '>'; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
279 |
end; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
280 |
|
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
281 |
FreeAndNilTexture(InputLinePrefix.Tex); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
282 |
end; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
283 |
|
942 | 284 |
procedure DrawChat; |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
285 |
var i, t, left, top, cnt: LongInt; |
10836 | 286 |
selRect: TSDL_Rect; |
10866 | 287 |
c: char; |
942 | 288 |
begin |
3539 | 289 |
ChatReady:= true; // maybe move to somewhere else? |
1431 | 290 |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
291 |
if ChatHidden and (not showAll) then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
292 |
visibleCount:= 0; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
293 |
|
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
294 |
// draw chat lines with some distance from screen border |
10303 | 295 |
left:= 4 - cScreenWidth div 2; |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
296 |
top := 10 + visibleCount * ClHeight; // we start with input line (if any) |
1431 | 297 |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
298 |
// draw chat input line first and under all other lines |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
299 |
if (GameState = gsChat) and (InputStr.Tex <> nil) then |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
300 |
begin |
10850
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
301 |
CheckPasteBuffer(); |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
302 |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
303 |
if InputLinePrefix.Tex = nil then |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
304 |
RenderChatLineTex(InputLinePrefix, InputLinePrefix.s); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
305 |
|
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
306 |
DrawTexture(left, top, InputLinePrefix.Tex); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
307 |
inc(left, InputLinePrefix.Width); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
308 |
DrawTexture(left, top, InputStr.Tex); |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
309 |
|
10842
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
310 |
if firstDraw then |
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
311 |
begin |
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
312 |
UpdateCursorCoords(); |
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
313 |
firstDraw:= false; |
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
314 |
end; |
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
315 |
|
10836 | 316 |
if selectedPos < 0 then |
317 |
begin |
|
318 |
// draw cursor |
|
319 |
if ((RealTicks - LastKeyPressTick) and 512) < 256 then |
|
10839
aa0ceb47da1d
make sure cursor drawing position does not get messed up by screen resize
sheepluva
parents:
10837
diff
changeset
|
320 |
DrawLineOnScreen(left + cursorX, top + 2, left + cursorX, top + ClHeight - 2, 2.0, $00, $FF, $FF, $FF); |
10836 | 321 |
end |
322 |
else // draw selection |
|
323 |
begin |
|
324 |
selRect.y:= top + 2; |
|
325 |
selRect.h:= clHeight - 4; |
|
326 |
if selectionDx < 0 then |
|
327 |
begin |
|
10839
aa0ceb47da1d
make sure cursor drawing position does not get messed up by screen resize
sheepluva
parents:
10837
diff
changeset
|
328 |
selRect.x:= left + cursorX + selectionDx; |
10836 | 329 |
selRect.w:= -selectionDx; |
330 |
end |
|
331 |
else |
|
332 |
begin |
|
10839
aa0ceb47da1d
make sure cursor drawing position does not get messed up by screen resize
sheepluva
parents:
10837
diff
changeset
|
333 |
selRect.x:= left + cursorX; |
10836 | 334 |
selRect.w:= selectionDx; |
335 |
end; |
|
336 |
||
337 |
DrawRect(selRect, $FF, $FF, $FF, $40, true); |
|
338 |
end; |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
339 |
|
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
340 |
dec(left, InputLinePrefix.Width); |
10866 | 341 |
|
342 |
||
343 |
if (Length(InputStr.s) > 0) and ((CursorPos = 1) or (CursorPos = 2)) then |
|
344 |
begin |
|
345 |
c:= InputStr.s[1]; |
|
346 |
if charIsForHogSpeech(c) then |
|
347 |
begin |
|
10868
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
348 |
SpeechHogNumber:= 0; |
10866 | 349 |
if Length(InputStr.s) > 1 then |
350 |
begin |
|
351 |
c:= InputStr.s[2]; |
|
352 |
if (c > '0') and (c < '9') then |
|
353 |
SpeechHogNumber:= byte(c) - 48; |
|
354 |
end; |
|
10868
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
355 |
// default to current hedgehog (if own) or first hedgehog |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
356 |
if SpeechHogNumber = 0 then |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
357 |
begin |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
358 |
if not CurrentTeam^.ExtDriven then |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
359 |
SpeechHogNumber:= CurrentTeam^.CurrHedgehog + 1 |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
360 |
else |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
361 |
SpeechHogNumber:= 1; |
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
362 |
end; |
10866 | 363 |
end; |
364 |
end |
|
365 |
else |
|
10868
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
366 |
SpeechHogNumber:= -1; |
10866 | 367 |
end |
368 |
else |
|
10868
acb03a9712c3
show correct default if current team is local team
sheepluva
parents:
10866
diff
changeset
|
369 |
SpeechHogNumber:= -1; |
1431 | 370 |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
371 |
// draw chat lines |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
372 |
if ((not ChatHidden) or showAll) and (UIDisplay <> uiNone) then |
10375 | 373 |
begin |
374 |
if MissedCount <> 0 then // there are chat strings we missed, so print them now |
|
375 |
begin |
|
376 |
for i:= 0 to MissedCount - 1 do |
|
377 |
AddChatString(MStrs[i]); |
|
378 |
MissedCount:= 0; |
|
379 |
end; |
|
380 |
i:= lastStr; |
|
10303 | 381 |
|
10375 | 382 |
cnt:= 0; // count of lines displayed |
383 |
t := 1; // # of current line processed |
|
2376 | 384 |
|
10375 | 385 |
// draw lines in reverse order |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
386 |
while (((t < 7) and (Strs[i].Time > RealTicks)) or ((t <= MaxStrIndex + 1) and showAll)) |
10375 | 387 |
and (Strs[i].Tex <> nil) do |
388 |
begin |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
389 |
top:= top - ClHeight; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
390 |
// draw chatline only if not offscreen |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
391 |
if top > 0 then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
392 |
DrawTexture(left, top, Strs[i].Tex); |
8745 | 393 |
|
10375 | 394 |
if i = 0 then |
395 |
i:= MaxStrIndex |
|
396 |
else |
|
397 |
dec(i); |
|
398 |
||
399 |
inc(cnt); |
|
400 |
inc(t) |
|
401 |
end; |
|
402 |
||
403 |
visibleCount:= cnt; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
404 |
end; |
942 | 405 |
end; |
406 |
||
4467 | 407 |
procedure SendHogSpeech(s: shortstring); |
408 |
begin |
|
409 |
SendIPC('h' + s); |
|
410 |
ParseCommand('/hogsay '+s, true) |
|
411 |
end; |
|
412 |
||
10392 | 413 |
procedure SendConsoleCommand(s: shortstring); |
414 |
begin |
|
415 |
Delete(s, 1, 1); |
|
416 |
SendIPC('~' + s) |
|
417 |
end; |
|
418 |
||
1033 | 419 |
procedure AcceptChatString(s: shortstring); |
1035 | 420 |
var i: TWave; |
8152 | 421 |
j: TChatCmd; |
4465
743673c67d0c
Allow hog speech when not your turn. Currently is set to 40% opacity (could be fainter) and drawn behind the hogs instead of in front. Also allows hog targetting using a number.
nemo
parents:
4404
diff
changeset
|
422 |
c, t: LongInt; |
4467 | 423 |
x: byte; |
1033 | 424 |
begin |
10513
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
425 |
if s <> LocalStrs[localLastStr] then |
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
426 |
begin |
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
427 |
// put in input history |
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
428 |
localLastStr:= (localLastStr + 1) mod MaxStrIndex; |
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
429 |
LocalStrs[localLastStr]:= s; |
10835
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
430 |
LocalStrsL[localLastStr]:= InputStrL; |
10513
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
431 |
end; |
58fa783e0cfd
fixes to chat input history: remember all inputs, don not remember duplicates
sheepluva
parents:
10396
diff
changeset
|
432 |
|
4465
743673c67d0c
Allow hog speech when not your turn. Currently is set to 40% opacity (could be fainter) and drawn behind the hogs instead of in front. Also allows hog targetting using a number.
nemo
parents:
4404
diff
changeset
|
433 |
t:= LocalTeam; |
4467 | 434 |
x:= 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
435 |
if (s[1] = '"') and (s[Length(s)] = '"') |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
436 |
then x:= 1 |
8745 | 437 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
438 |
else if (s[1] = '''') and (s[Length(s)] = '''') then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
439 |
x:= 2 |
8745 | 440 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
441 |
else if (s[1] = '-') and (s[Length(s)] = '-') then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
442 |
x:= 3; |
8745 | 443 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7722
diff
changeset
|
444 |
if (not CurrentTeam^.ExtDriven) and (x <> 0) then |
4465
743673c67d0c
Allow hog speech when not your turn. Currently is set to 40% opacity (could be fainter) and drawn behind the hogs instead of in front. Also allows hog targetting using a number.
nemo
parents:
4404
diff
changeset
|
445 |
for c:= 0 to Pred(TeamsCount) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
446 |
if (TeamsArray[c] = CurrentTeam) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
447 |
t:= c; |
4467 | 448 |
|
449 |
if x <> 0 then |
|
2017 | 450 |
begin |
4465
743673c67d0c
Allow hog speech when not your turn. Currently is set to 40% opacity (could be fainter) and drawn behind the hogs instead of in front. Also allows hog targetting using a number.
nemo
parents:
4404
diff
changeset
|
451 |
if t = -1 then |
2111 | 452 |
ParseCommand('/say ' + copy(s, 2, Length(s)-2), true) |
453 |
else |
|
4467 | 454 |
SendHogSpeech(char(x) + char(t) + copy(s, 2, Length(s)-2)); |
2017 | 455 |
exit |
456 |
end; |
|
4467 | 457 |
|
9669 | 458 |
if (s[1] = '/') then |
2017 | 459 |
begin |
9676 | 460 |
// These 3 are same as above, only are to make the hedgehog say it on next attack |
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
461 |
if (copy(s, 2, 4) = 'hsa ') then |
9669 | 462 |
begin |
463 |
if CurrentTeam^.ExtDriven then |
|
464 |
ParseCommand('/say ' + copy(s, 6, Length(s)-5), true) |
|
465 |
else |
|
466 |
SendHogSpeech(#4 + copy(s, 6, Length(s)-5)); |
|
467 |
exit |
|
468 |
end; |
|
469 |
||
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
470 |
if (copy(s, 2, 4) = 'hta ') then |
9669 | 471 |
begin |
472 |
if CurrentTeam^.ExtDriven then |
|
473 |
ParseCommand('/say ' + copy(s, 6, Length(s)-5), true) |
|
474 |
else |
|
475 |
SendHogSpeech(#5 + copy(s, 6, Length(s)-5)); |
|
476 |
exit |
|
477 |
end; |
|
478 |
||
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
479 |
if (copy(s, 2, 4) = 'hya ') then |
9669 | 480 |
begin |
481 |
if CurrentTeam^.ExtDriven then |
|
482 |
ParseCommand('/say ' + copy(s, 6, Length(s)-5), true) |
|
483 |
else |
|
484 |
SendHogSpeech(#6 + copy(s, 6, Length(s)-5)); |
|
485 |
exit |
|
486 |
end; |
|
2111 | 487 |
|
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
488 |
if (copy(s, 2, 5) = 'team ') and (length(s) > 6) then |
9669 | 489 |
begin |
490 |
ParseCommand(s, true); |
|
491 |
exit |
|
492 |
end; |
|
493 |
||
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
494 |
if (copy(s, 2, 3) = 'me ') then |
9669 | 495 |
begin |
9680 | 496 |
ParseCommand('/say ' + s, true); |
497 |
exit |
|
498 |
end; |
|
2376 | 499 |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
500 |
if (copy(s, 2, 10) = 'togglechat') then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
501 |
begin |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
502 |
ChatHidden:= (not ChatHidden); |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
503 |
if ChatHidden then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
504 |
showAll:= false; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
505 |
exit |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
506 |
end; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
507 |
|
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
508 |
// debugging commands |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
509 |
if (copy(s, 2, 7) = 'debugvl') then |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
510 |
begin |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
511 |
cViewLimitsDebug:= (not cViewLimitsDebug); |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
512 |
UpdateViewLimits(); |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
513 |
exit |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
514 |
end; |
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10303
diff
changeset
|
515 |
|
10312 | 516 |
if (copy(s, 2, 3) = 'lua') then |
517 |
begin |
|
518 |
AddFileLog('/lua issued'); |
|
519 |
if gameType <> gmtNet then |
|
520 |
begin |
|
521 |
liveLua:= (not liveLua); |
|
522 |
if liveLua then |
|
523 |
begin |
|
524 |
AddFileLog('[Lua] chat input string parsing enabled'); |
|
525 |
AddChatString(#3 + 'Lua parsing: ON'); |
|
526 |
end |
|
527 |
else |
|
528 |
begin |
|
529 |
AddFileLog('[Lua] chat input string parsing disabled'); |
|
530 |
AddChatString(#3 + 'Lua parsing: OFF'); |
|
531 |
end; |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
532 |
UpdateInputLinePrefix(); |
10312 | 533 |
end; |
534 |
exit |
|
535 |
end; |
|
536 |
||
537 |
// hedghog animations/taunts and engine commands |
|
9680 | 538 |
if (not CurrentTeam^.ExtDriven) and (CurrentTeam^.Hedgehogs[0].BotLevel = 0) then |
539 |
begin |
|
9669 | 540 |
for i:= Low(TWave) to High(TWave) do |
541 |
if (s = Wavez[i].cmd) then |
|
542 |
begin |
|
543 |
ParseCommand('/taunt ' + char(i), true); |
|
544 |
exit |
|
545 |
end; |
|
10588
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
546 |
end; |
8152 | 547 |
|
10588
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
548 |
for j:= Low(TChatCmd) to High(TChatCmd) do |
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
549 |
if (s = ChatCommandz[j].ChatCmd) then |
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
550 |
begin |
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
551 |
ParseCommand(ChatCommandz[j].ProcedureCallChatCmd, true); |
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
552 |
exit |
6189bb1c903d
don't forbid running regular chat commands during turns of other teams. that was probably only meant for emotes to begin with
sheepluva
parents:
10514
diff
changeset
|
553 |
end; |
10392 | 554 |
|
555 |
if (gameType = gmtNet) then |
|
556 |
SendConsoleCommand(s) |
|
10308 | 557 |
end |
10312 | 558 |
else |
559 |
begin |
|
560 |
if liveLua then |
|
561 |
LuaParseString(s) |
|
9676 | 562 |
else |
563 |
ParseCommand('/say ' + s, true); |
|
10312 | 564 |
end; |
1033 | 565 |
end; |
566 |
||
8738 | 567 |
procedure CleanupInput; |
568 |
begin |
|
569 |
FreezeEnterKey; |
|
570 |
history:= 0; |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset
|
571 |
{$IFNDEF SDL2} |
8738 | 572 |
SDL_EnableKeyRepeat(0,0); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset
|
573 |
{$ENDIF} |
8738 | 574 |
GameState:= gsGame; |
575 |
ResetKbd; |
|
576 |
end; |
|
577 |
||
10836 | 578 |
procedure DelBytesFromInputStrBack(endIdx: integer; count: byte); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
579 |
var i, startIdx: integer; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
580 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
581 |
// nothing to do if count is 0 |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
582 |
if count = 0 then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
583 |
exit; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
584 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
585 |
// first byte to delete |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
586 |
startIdx:= endIdx - (count - 1); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
587 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
588 |
// delete bytes from string |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
589 |
Delete(InputStr.s, startIdx, count); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
590 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
591 |
// wipe utf8 info for deleted char |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
592 |
InputStrL[endIdx]:= InputStrLNoPred; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
593 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
594 |
// shift utf8 char info to reflect new string |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
595 |
for i:= endIdx + 1 to Length(InputStr.s) + count do |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
596 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
597 |
if InputStrL[i] <> InputStrLNoPred then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
598 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
599 |
InputStrL[i-count]:= InputStrL[i] - count; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
600 |
InputStrL[i]:= InputStrLNoPred; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
601 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
602 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
603 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
604 |
SetLine(InputStr, InputStr.s, true); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
605 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
606 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
607 |
// returns count of removed bytes |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
608 |
function DelCharFromInputStr(idx: integer): integer; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
609 |
var btw: byte; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
610 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
611 |
// note: idx is always at last byte of utf8 chars. cuz relevant for InputStrL |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
612 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
613 |
if (Length(InputStr.s) < 1) or (idx < 1) or (idx > Length(InputStr.s)) then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
614 |
exit(0); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
615 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
616 |
btw:= byte(idx) - InputStrL[idx]; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
617 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
618 |
DelCharFromInputStr:= btw; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
619 |
|
10836 | 620 |
DelBytesFromInputStrBack(idx, btw); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
621 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
622 |
|
10836 | 623 |
// unchecked |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
624 |
procedure DoCursorStepForward(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
625 |
begin |
10836 | 626 |
// go to end of next utf8-char |
627 |
repeat |
|
628 |
inc(cursorPos); |
|
629 |
until InputStrL[cursorPos] <> InputStrLNoPred; |
|
630 |
end; |
|
631 |
||
632 |
procedure DeleteSelected(); |
|
633 |
begin |
|
634 |
if (selectedPos >= 0) and (cursorPos <> selectedPos) then |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
635 |
begin |
10836 | 636 |
DelBytesFromInputStrBack(max(cursorPos, selectedPos), abs(selectedPos-cursorPos)); |
637 |
cursorPos:= min(cursorPos, selectedPos); |
|
638 |
ResetSelection(); |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
639 |
end; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
640 |
UpdateCursorCoords(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
641 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
642 |
|
10836 | 643 |
procedure HandleSelection(enabled: boolean); |
644 |
begin |
|
645 |
if enabled then |
|
646 |
begin |
|
647 |
if selectedPos < 0 then |
|
648 |
selectedPos:= cursorPos; |
|
649 |
end |
|
650 |
else |
|
651 |
ResetSelection(); |
|
652 |
end; |
|
653 |
||
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
654 |
type TCharSkip = ( none, wspace, numalpha, special ); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
655 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
656 |
function GetInputCharSkipClass(index: LongInt): TCharSkip; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
657 |
var c: char; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
658 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
659 |
// multi-byte chars counts as letter |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
660 |
if (index > 1) and (InputStrL[index] <> index - 1) then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
661 |
exit(numalpha); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
662 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
663 |
c:= InputStr.s[index]; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
664 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
665 |
// non-ascii counts as letter |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
666 |
if c > #127 then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
667 |
exit(numalpha); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
668 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
669 |
// low-ascii whitespaces and DEL |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
670 |
if (c < #33) or (c = #127) then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
671 |
exit(wspace); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
672 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
673 |
// low-ascii special chars |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
674 |
if c < #48 then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
675 |
exit(special); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
676 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
677 |
// digits |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
678 |
if c < #58 then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
679 |
exit(numalpha); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
680 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
681 |
// make c upper-case |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
682 |
if c > #96 then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
683 |
c:= char(byte(c) - 32); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
684 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
685 |
// letters |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
686 |
if (c > #64) and (c < #90) then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
687 |
exit(numalpha); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
688 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
689 |
// remaining ascii are special chars |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
690 |
exit(special); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
691 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
692 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
693 |
// skip from word to word, similar to Qt |
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
694 |
procedure SkipInputChars(skip: TCharSkip; backwards: boolean); |
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
695 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
696 |
if backwards then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
697 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
698 |
// skip trailing whitespace, similar to Qt |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
699 |
while (skip = wspace) and (cursorPos > 0) do |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
700 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
701 |
skip:= GetInputCharSkipClass(cursorPos); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
702 |
if skip = wspace then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
703 |
cursorPos:= InputStrL[cursorPos]; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
704 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
705 |
// skip same-type chars |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
706 |
while (cursorPos > 0) and (GetInputCharSkipClass(cursorPos) = skip) do |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
707 |
cursorPos:= InputStrL[cursorPos]; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
708 |
end |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
709 |
else |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
710 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
711 |
// skip same-type chars |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
712 |
while cursorPos < Length(InputStr.s) do |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
713 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
714 |
DoCursorStepForward(); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
715 |
if (GetInputCharSkipClass(cursorPos) <> skip) then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
716 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
717 |
// go back 1 char |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
718 |
cursorPos:= InputStrL[cursorPos]; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
719 |
break; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
720 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
721 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
722 |
// skip trailing whitespace, similar to Qt |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
723 |
while cursorPos < Length(InputStr.s) do |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
724 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
725 |
DoCursorStepForward(); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
726 |
if (GetInputCharSkipClass(cursorPos) <> wspace) then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
727 |
begin |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
728 |
// go back 1 char |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
729 |
cursorPos:= InputStrL[cursorPos]; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
730 |
break; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
731 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
732 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
733 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
734 |
end; |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
735 |
|
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
736 |
procedure CopyToClipboard(var newContent: shortstring); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
737 |
begin |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
738 |
SendIPC(_S'y' + copy(newContent, 1, 253) + #0); |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
739 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
740 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
741 |
procedure CopySelectionToClipboard(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
742 |
var selection: shortstring; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
743 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
744 |
if selectedPos >= 0 then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
745 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
746 |
selection:= copy(InputStr.s, min(CursorPos, selectedPos) + 1, abs(CursorPos - selectedPos)); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
747 |
CopyToClipboard(selection); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
748 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
749 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
750 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
751 |
// TODO: honor utf8, don't break utf8 chars when shifting chars beyond limit |
10853 | 752 |
procedure InsertIntoInputStr(s: shortstring); |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
753 |
var i, l, il, lastc: integer; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
754 |
begin |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
755 |
// safe length for string |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
756 |
l:= min(MaxInputStrLen-cursorPos, Length(s)); |
10853 | 757 |
s:= copy(s,1,l); |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
758 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
759 |
// if we insert rather than append, shift info in InputStrL accordingly |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
760 |
if cursorPos < Length(InputStr.s) then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
761 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
762 |
for i:= Length(InputStr.s) downto cursorPos + 1 do |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
763 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
764 |
if InputStrL[i] <> InputStrLNoPred then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
765 |
begin |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
766 |
il:= i + l; |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
767 |
// only shift if not overflowing |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
768 |
if il <= MaxInputStrLen then |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
769 |
InputStrL[il]:= InputStrL[i] + l; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
770 |
InputStrL[i]:= InputStrLNoPred; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
771 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
772 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
773 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
774 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
775 |
InputStrL[cursorPos + l]:= cursorPos; |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
776 |
// insert string truncated to safe length |
10853 | 777 |
Insert(s, InputStr.s, cursorPos + 1); |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
778 |
if Length(InputStr.s) > MaxInputStrLen then |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
779 |
InputStr.s[0]:= char(MaxInputStrLen); |
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
780 |
|
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
781 |
SetLine(InputStr, InputStr.s, true); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
782 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
783 |
// move cursor to end of inserted string |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
784 |
lastc:= MaxInputStrLen; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
785 |
cursorPos:= min(lastc, cursorPos + l); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
786 |
UpdateCursorCoords(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
787 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
788 |
|
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
789 |
procedure PasteFromClipboard(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
790 |
begin |
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
791 |
SendIPC(_S'Y'); |
10850
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
792 |
end; |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
793 |
|
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
794 |
procedure CheckPasteBuffer(); |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
795 |
begin |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
796 |
if Length(ChatPasteBuffer) > 0 then |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
797 |
begin |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
798 |
InsertIntoInputStr(ChatPasteBuffer); |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
799 |
ChatPasteBuffer:= ''; |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
800 |
end; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
801 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
802 |
|
10836 | 803 |
procedure KeyPressChat(Key, Sym: Longword; Modifier: Word); |
6893 | 804 |
const firstByteMark: array[0..3] of byte = (0, $C0, $E0, $F0); |
8737
0d56265dd60a
implement up and down keys to navigate in the chat history, needs testing over network
koda
parents:
8736
diff
changeset
|
805 |
var i, btw, index: integer; |
8740
3eb1891f81ef
use a local storage for chat history which prevents mix ups in netgame and simplifies code
koda
parents:
8739
diff
changeset
|
806 |
utf8: shortstring; |
10836 | 807 |
action, selMode, ctrl: boolean; |
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
808 |
skip: TCharSkip; |
946 | 809 |
begin |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
810 |
LastKeyPressTick:= RealTicks; |
8745 | 811 |
action:= true; |
10836 | 812 |
|
10850
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
813 |
CheckPasteBuffer(); |
c76ea22ea249
copy to/paste from system clipboard (via frontend)
sheepluva
parents:
10849
diff
changeset
|
814 |
|
10836 | 815 |
selMode:= (modifier and (KMOD_LSHIFT or KMOD_RSHIFT)) <> 0; |
816 |
ctrl:= (modifier and (KMOD_LCTRL or KMOD_RCTRL)) <> 0; |
|
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
817 |
skip:= none; |
10836 | 818 |
|
8743 | 819 |
case Sym of |
820 |
SDLK_BACKSPACE: |
|
821 |
begin |
|
10836 | 822 |
if selectedPos < 0 then |
823 |
begin |
|
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
824 |
if ctrl then |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
825 |
skip:= GetInputCharSkipClass(cursorPos); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
826 |
|
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
827 |
// remove char before cursor |
10836 | 828 |
dec(cursorPos, DelCharFromInputStr(cursorPos)); |
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
829 |
|
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
830 |
// delete more if ctrl is held |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
831 |
if ctrl and (selectedPos < 0) then |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
832 |
begin |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
833 |
HandleSelection(true); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
834 |
SkipInputChars(skip, true); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
835 |
DeleteSelected(); |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
836 |
end |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
837 |
else |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
838 |
UpdateCursorCoords(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
839 |
|
10836 | 840 |
end |
841 |
else |
|
842 |
DeleteSelected(); |
|
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
843 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
844 |
SDLK_DELETE: |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
845 |
begin |
10836 | 846 |
if selectedPos < 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
847 |
begin |
10836 | 848 |
// remove char after cursor |
849 |
if cursorPos < Length(InputStr.s) then |
|
850 |
begin |
|
851 |
DoCursorStepForward(); |
|
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
852 |
if ctrl then |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
853 |
skip:= GetInputCharSkipClass(cursorPos); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
854 |
|
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
855 |
// delete char |
10836 | 856 |
dec(cursorPos, DelCharFromInputStr(cursorPos)); |
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
857 |
|
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
858 |
// delete more if ctrl is held |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
859 |
if ctrl and (cursorPos < Length(InputStr.s)) then |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
860 |
begin |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
861 |
HandleSelection(true); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
862 |
SkipInputChars(skip, false); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
863 |
DeleteSelected(); |
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
864 |
end; |
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
865 |
end |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
866 |
else |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
867 |
UpdateCursorCoords(); |
10836 | 868 |
end |
869 |
else |
|
870 |
DeleteSelected(); |
|
8743 | 871 |
end; |
8745 | 872 |
SDLK_ESCAPE: |
8743 | 873 |
begin |
8745 | 874 |
if Length(InputStr.s) > 0 then |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
875 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
876 |
SetLine(InputStr, '', true); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
877 |
FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
878 |
ResetCursor(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
879 |
end |
8743 | 880 |
else CleanupInput |
881 |
end; |
|
9319
492a0ad67e33
allow to send chat messages with numpad enter key too (regression?)
koda
parents:
9317
diff
changeset
|
882 |
SDLK_RETURN, SDLK_KP_ENTER: |
8743 | 883 |
begin |
884 |
if Length(InputStr.s) > 0 then |
|
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
885 |
begin |
8743 | 886 |
AcceptChatString(InputStr.s); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
887 |
SetLine(InputStr, '', false); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
888 |
FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
889 |
ResetCursor(); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
890 |
end; |
8743 | 891 |
CleanupInput |
892 |
end; |
|
893 |
SDLK_UP, SDLK_DOWN: |
|
894 |
begin |
|
895 |
if (Sym = SDLK_UP) and (history < localLastStr) then inc(history); |
|
896 |
if (Sym = SDLK_DOWN) and (history > 0) then dec(history); |
|
897 |
index:= localLastStr - history + 1; |
|
898 |
if (index > localLastStr) then |
|
10835
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
899 |
begin |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
900 |
SetLine(InputStr, '', true); |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
901 |
FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred); |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
902 |
end |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
903 |
else |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
904 |
begin |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
905 |
SetLine(InputStr, LocalStrs[index], true); |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
906 |
InputStrL:= LocalStrsL[index]; |
8ac09cd322b7
fix chat input history not restoring utf8-related info
sheepluva
parents:
10834
diff
changeset
|
907 |
end; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
908 |
cursorPos:= Length(InputStr.s); |
10836 | 909 |
ResetSelection(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
910 |
UpdateCursorCoords(); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
911 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
912 |
SDLK_HOME: |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
913 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
914 |
if cursorPos > 0 then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
915 |
begin |
10836 | 916 |
HandleSelection(selMode); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
917 |
cursorPos:= 0; |
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
918 |
end |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
919 |
else if (not selMode) then |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
920 |
ResetSelection(); |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
921 |
|
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
922 |
UpdateCursorCoords(); |
8745 | 923 |
end; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
924 |
SDLK_END: |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
925 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
926 |
i:= Length(InputStr.s); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
927 |
if cursorPos < i then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
928 |
begin |
10836 | 929 |
HandleSelection(selMode); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
930 |
cursorPos:= i; |
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
931 |
end |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
932 |
else if (not selMode) then |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
933 |
ResetSelection(); |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
934 |
|
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
935 |
UpdateCursorCoords(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
936 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
937 |
SDLK_LEFT: |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
938 |
begin |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
939 |
if cursorPos > 0 then |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
940 |
begin |
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
941 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
942 |
if ctrl then |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
943 |
skip:= GetInputCharSkipClass(cursorPos); |
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
944 |
|
10836 | 945 |
if selMode or (selectedPos < 0) then |
946 |
begin |
|
947 |
HandleSelection(selMode); |
|
948 |
// go to end of previous utf8-char |
|
949 |
cursorPos:= InputStrL[cursorPos]; |
|
950 |
end |
|
951 |
else // if we're leaving selection mode, jump to its left end |
|
952 |
begin |
|
953 |
cursorPos:= min(cursorPos, selectedPos); |
|
954 |
ResetSelection(); |
|
955 |
end; |
|
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
956 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
957 |
if ctrl then |
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
958 |
SkipInputChars(skip, true); |
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
959 |
|
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
960 |
end |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
961 |
else if (not selMode) then |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
962 |
ResetSelection(); |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
963 |
|
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
964 |
UpdateCursorCoords(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
965 |
end; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
966 |
SDLK_RIGHT: |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
967 |
begin |
10836 | 968 |
if cursorPos < Length(InputStr.s) then |
969 |
begin |
|
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
970 |
|
10836 | 971 |
if selMode or (selectedPos < 0) then |
972 |
begin |
|
973 |
HandleSelection(selMode); |
|
974 |
DoCursorStepForward(); |
|
975 |
end |
|
976 |
else // if we're leaving selection mode, jump to its right end |
|
977 |
begin |
|
978 |
cursorPos:= max(cursorPos, selectedPos); |
|
979 |
ResetSelection(); |
|
980 |
end; |
|
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
981 |
|
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
982 |
if ctrl then |
10845
1dbd50690951
quick word deletion while holding ctrl (qt style)
sheepluva
parents:
10844
diff
changeset
|
983 |
SkipInputChars(GetInputCharSkipClass(cursorPos), false); |
10844
953d85b7d529
holding ctrl will now make cursor skip words/etc in a fashion similar to Qt
sheepluva
parents:
10843
diff
changeset
|
984 |
|
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
985 |
end |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
986 |
else if (not selMode) then |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
987 |
ResetSelection(); |
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
988 |
|
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
989 |
UpdateCursorCoords(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
990 |
end; |
8745 | 991 |
SDLK_PAGEUP, SDLK_PAGEDOWN: |
992 |
begin |
|
993 |
// ignore me!!! |
|
994 |
end; |
|
10836 | 995 |
SDLK_a: |
996 |
begin |
|
997 |
// select all |
|
998 |
if ctrl then |
|
999 |
begin |
|
1000 |
ResetSelection(); |
|
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
1001 |
cursorPos:= 0; |
10836 | 1002 |
HandleSelection(true); |
10846
c76fd416eff6
attempt to move cursor now removes selection even if cursor cannot actually move in the specified direction
sheepluva
parents:
10845
diff
changeset
|
1003 |
cursorPos:= Length(InputStr.s); |
10836 | 1004 |
UpdateCursorCoords(); |
1005 |
end |
|
1006 |
else |
|
1007 |
action:= false; |
|
1008 |
end; |
|
10849
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1009 |
SDLK_c: |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1010 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1011 |
// copy |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1012 |
if ctrl then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1013 |
CopySelectionToClipboard() |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1014 |
else |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1015 |
action:= false; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1016 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1017 |
SDLK_v: |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1018 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1019 |
// paste |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1020 |
if ctrl then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1021 |
PasteFromClipboard() |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1022 |
else |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1023 |
action:= false; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1024 |
end; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1025 |
SDLK_x: |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1026 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1027 |
// cut |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1028 |
if ctrl then |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1029 |
begin |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1030 |
CopySelectionToClipboard(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1031 |
DeleteSelected(); |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1032 |
end |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1033 |
else |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1034 |
action:= false; |
a772d342066a
copy&paste (wip), currently using only a local clipboard
sheepluva
parents:
10846
diff
changeset
|
1035 |
end; |
8745 | 1036 |
else |
1037 |
action:= false; |
|
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1038 |
end; |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1039 |
if not action and (Key <> 0) then |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1040 |
begin |
10836 | 1041 |
DeleteSelected(); |
1042 |
||
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1043 |
if (Key < $80) then |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1044 |
btw:= 1 |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1045 |
else if (Key < $800) then |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1046 |
btw:= 2 |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1047 |
else if (Key < $10000) then |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1048 |
btw:= 3 |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1049 |
else |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1050 |
btw:= 4; |
8737
0d56265dd60a
implement up and down keys to navigate in the chat history, needs testing over network
koda
parents:
8736
diff
changeset
|
1051 |
|
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1052 |
utf8:= ''; |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1053 |
|
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1054 |
for i:= btw downto 2 do |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1055 |
begin |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1056 |
utf8:= char((Key or $80) and $BF) + utf8; |
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1057 |
Key:= Key shr 6 |
8737
0d56265dd60a
implement up and down keys to navigate in the chat history, needs testing over network
koda
parents:
8736
diff
changeset
|
1058 |
end; |
2376 | 1059 |
|
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1060 |
utf8:= char(Key or firstByteMark[Pred(btw)]) + utf8; |
946 | 1061 |
|
10851
f25dad9c3136
chat/copypaste: some adjustments and sanity checks
sheepluva
parents:
10850
diff
changeset
|
1062 |
if Length(InputStr.s) + btw > MaxInputStrLen then |
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8741
diff
changeset
|
1063 |
exit; |
2376 | 1064 |
|
10866 | 1065 |
if (Length(InputStr.s) = 0) and (Length(utf8) = 1) and (charIsForHogSpeech(utf8[1])) then |
1066 |
begin |
|
1067 |
InsertIntoInputStr(utf8); |
|
1068 |
InsertIntoInputStr(utf8); |
|
1069 |
cursorPos:= 1; |
|
1070 |
UpdateCursorCoords(); |
|
1071 |
end |
|
1072 |
else |
|
1073 |
InsertIntoInputStr(utf8); |
|
8735 | 1074 |
end |
946 | 1075 |
end; |
1076 |
||
4404 | 1077 |
procedure chChatMessage(var s: shortstring); |
1078 |
begin |
|
1079 |
AddChatString(s) |
|
1080 |
end; |
|
1081 |
||
4402 | 1082 |
procedure chSay(var s: shortstring); |
1083 |
begin |
|
1084 |
SendIPC('s' + s); |
|
1085 |
||
1086 |
if copy(s, 1, 4) = '/me ' then |
|
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6381
diff
changeset
|
1087 |
s:= #2 + '* ' + UserNick + ' ' + copy(s, 5, Length(s) - 4) |
4402 | 1088 |
else |
1089 |
s:= #1 + UserNick + ': ' + s; |
|
1090 |
||
1091 |
AddChatString(s) |
|
1092 |
end; |
|
1093 |
||
1094 |
procedure chTeamSay(var s: shortstring); |
|
1095 |
begin |
|
1096 |
SendIPC('b' + s); |
|
1097 |
||
1098 |
s:= #4 + '[Team] ' + UserNick + ': ' + s; |
|
1099 |
||
1100 |
AddChatString(s) |
|
1101 |
end; |
|
1102 |
||
1103 |
procedure chHistory(var s: shortstring); |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1104 |
var i: LongInt; |
4402 | 1105 |
begin |
1106 |
s:= s; // avoid compiler hint |
|
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1107 |
showAll:= not showAll; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1108 |
// immediatly recount |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1109 |
visibleCount:= 0; |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1110 |
if showAll or (not ChatHidden) then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1111 |
for i:= 0 to MaxStrIndex do |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1112 |
begin |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1113 |
if (Strs[i].Tex <> nil) and (showAll or (Strs[i].Time > RealTicks)) then |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1114 |
inc(visibleCount); |
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1115 |
end; |
4402 | 1116 |
end; |
1117 |
||
1118 |
procedure chChat(var s: shortstring); |
|
1119 |
begin |
|
1120 |
s:= s; // avoid compiler hint |
|
1121 |
GameState:= gsChat; |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset
|
1122 |
{$IFNDEF SDL2} |
5099
ce1a761d3c1e
enable keyrepeat while chatting so you can keep backspace pressed to delete a line (fix issue 111)
koda
parents:
4976
diff
changeset
|
1123 |
SDL_EnableKeyRepeat(200,45); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset
|
1124 |
{$ENDIF} |
4402 | 1125 |
if length(s) = 0 then |
5100 | 1126 |
SetLine(InputStr, '', true) |
4402 | 1127 |
else |
10841 | 1128 |
begin |
10843 | 1129 |
SetLine(InputStr, '/team ', true); |
10841 | 1130 |
// update InputStrL and cursor accordingly |
1131 |
// this allows cursor-jumping over '/team ' as if it was a single char |
|
1132 |
InputStrL[6]:= 0; |
|
1133 |
cursorPos:= 6; |
|
1134 |
UpdateCursorCoords(); |
|
1135 |
end; |
|
4402 | 1136 |
end; |
1137 |
||
3038 | 1138 |
procedure initModule; |
4925 | 1139 |
var i: ShortInt; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1140 |
begin |
6898 | 1141 |
RegisterVariable('chatmsg', @chChatMessage, true); |
1142 |
RegisterVariable('say', @chSay, true); |
|
1143 |
RegisterVariable('team', @chTeamSay, true); |
|
1144 |
RegisterVariable('history', @chHistory, true ); |
|
1145 |
RegisterVariable('chat', @chChat, true ); |
|
4402 | 1146 |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1147 |
lastStr:= 0; |
8740
3eb1891f81ef
use a local storage for chat history which prevents mix ups in netgame and simplifies code
koda
parents:
8739
diff
changeset
|
1148 |
localLastStr:= 0; |
8737
0d56265dd60a
implement up and down keys to navigate in the chat history, needs testing over network
koda
parents:
8736
diff
changeset
|
1149 |
history:= 0; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1150 |
visibleCount:= 0; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1151 |
showAll:= false; |
3539 | 1152 |
ChatReady:= false; |
1153 |
missedCount:= 0; |
|
10312 | 1154 |
liveLua:= false; |
10514
a1423588a4e4
chat: fix some glitches, add /togglechat command for changing chat visibility
sheepluva
parents:
10513
diff
changeset
|
1155 |
ChatHidden:= false; |
10842
a039464cbb4a
since fonts can be loaded in late, update cursor position before first chat display
sheepluva
parents:
10841
diff
changeset
|
1156 |
firstDraw:= true; |
4925 | 1157 |
|
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
1158 |
InputLinePrefix.Tex:= nil; |
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
1159 |
UpdateInputLinePrefix(); |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1160 |
inputStr.s:= ''; |
4925 | 1161 |
inputStr.Tex := nil; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
1162 |
for i:= 0 to MaxStrIndex do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
1163 |
Strs[i].Tex := nil; |
10834
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1164 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1165 |
FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred); |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1166 |
|
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1167 |
LastKeyPressTick:= 0; |
2e83f33dfe5b
engine: moveable chat cursor. note: discovered bug that utf8 char info is lost/corrupted when input history is used
sheepluva
parents:
10737
diff
changeset
|
1168 |
ResetCursor(); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1169 |
end; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1170 |
|
3038 | 1171 |
procedure freeModule; |
4901 | 1172 |
var i: ShortInt; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1173 |
begin |
10852
9e5763cb805e
render input prefix independent of inputstr so that e.g. a username will not lead to weirdnesses
sheepluva
parents:
10851
diff
changeset
|
1174 |
FreeAndNilTexture(InputLinePrefix.Tex); |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10588
diff
changeset
|
1175 |
FreeAndNilTexture(InputStr.Tex); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6453
diff
changeset
|
1176 |
for i:= 0 to MaxStrIndex do |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10588
diff
changeset
|
1177 |
FreeAndNilTexture(Strs[i].Tex); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2699
diff
changeset
|
1178 |
end; |
946 | 1179 |
|
942 | 1180 |
end. |