Subversion Repositories Kolibri OS

Rev

Rev 259 | Rev 824 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
178 heavyiron 1
virtual at ebp
2
  tbox TBOX
3
end virtual
4
 
5
tb.pos.x	db ?
6
tb.sel.x	db ?
7
tb.sel.selected db ?
8
 
9
func textbox.get_width
10
	push	ebx edx
297 mikedld 11
	movzx	eax,[tbox.width]
178 heavyiron 12
	add	eax,-6
13
	xor	edx,edx
14
	mov	ebx,6
15
	div	ebx
16
	movzx	ebx,[tbox.length]
17
	cmp	eax,ebx
18
	jle	@f
19
	mov	eax,ebx
20
    @@: pop	edx ebx
21
	ret
22
endf
23
 
24
func textbox.delete_selection
25
	cmp	[tb.sel.selected],0
26
	je	.exit.2
27
	pushad
28
	movzx	ecx,[tbox.length]
29
	sub	cl,[tb.sel.x]
30
	lea	eax,[tbox.text]
31
	movzx	esi,[tb.pos.x]
32
	movzx	edi,[tb.sel.x]
33
	add	esi,eax
34
	add	edi,eax
35
	mov	eax,esi
36
	sub	eax,edi
37
	sub	[tbox.length],al
38
	cld
39
	rep	movsb
40
 
41
  .exit:
42
	mov	al,[tb.sel.x]
43
	mov	[tbox.pos.x],al
44
	mov	[tbox.sel.x],al
45
	popad
46
	clc
47
	ret
48
 
49
  .exit.2:
50
	stc
51
	ret
52
endf
53
 
54
func textbox.draw ; TBOX* ebp
55
	call	textbox.get_width
56
	movzx	ebx,[tbox.pos.x]
57
	sub	bl,[tbox.ofs.x]
58
	sub	ebx,eax
59
	jle	@f
60
	mov	bl,[tbox.pos.x]
61
	sub	bl,al
62
	mov	[tbox.ofs.x],bl
63
    @@:
64
	mov	[tb.sel.selected],0
65
	mov	al,[tbox.pos.x]
66
	mov	ah,[tbox.sel.x]
67
	cmp	al,ah
68
	je	@f
69
	inc	[tb.sel.selected]
70
	ja	@f
71
	xchg	al,ah
72
    @@: mov	[tb.pos.x],al
73
	mov	[tb.sel.x],ah
74
 
297 mikedld 75
	mcall	13,dword[tbox.width],dword[tbox.height],[color_tbl.back]
259 mikedld 76
	mov	edx,[cl_3d_inset]
178 heavyiron 77
	call	draw_framerect
78
 
79
	call	textbox.get_width
80
	mov	esi,eax
81
	mov	edi,eax
82
 
83
	cmp	ebp,[focused_tb]
84
	je	@f
297 mikedld 85
	mov	ebx,dword[tbox.x-2]
86
	mov	bx,[tbox.y]
87
	movzx	eax,[tbox.height]
178 heavyiron 88
	shr	eax,1
89
	add	eax,4*65536-4
90
	add	ebx,eax
91
	lea	edx,[tbox.text]
297 mikedld 92
	mcall	4,,[color_tbl.text]
178 heavyiron 93
	ret
94
 
95
    @@: movzx	eax,[tb.pos.x]
96
	cmp	al,[tb.sel.x]
97
	je	@f
98
	sub	al,[tbox.ofs.x]
99
	jz	@f
100
	movzx	ebx,[tb.sel.x]
101
	sub	bl,[tbox.ofs.x]
102
	jge	.lp1
103
	xor	ebx,ebx
104
  .lp1: push	eax ebx
105
	sub	eax,ebx
106
	mov	ecx,edi
107
	sub	ecx,ebx
108
	cmp	eax,ecx
109
	jbe	.lp2
110
	mov	eax,ecx
111
  .lp2: imul	eax,6
112
	imul	ebx,6
297 mikedld 113
	movzx	ecx,[tbox.x]
178 heavyiron 114
	add	ecx,3
115
	add	ebx,ecx
116
	shl	ebx,16
117
	add	ebx,eax
297 mikedld 118
	movzx	ecx,[tbox.height]
178 heavyiron 119
	shr	ecx,1
297 mikedld 120
	add	cx,[tbox.y]
178 heavyiron 121
	shl	ecx,16
122
	add	ecx,-5*65536+10
297 mikedld 123
	mcall	13,,,[color_tbl.back.sel]
178 heavyiron 124
 
125
	mov	esi,[esp]
126
	lea	edx,[tbox.text]
127
	movzx	eax,[tbox.ofs.x]
128
	add	edx,eax
297 mikedld 129
	mov	ebx,dword[tbox.x-2]
130
	mov	bx,[tbox.y]
131
	movzx	eax,[tbox.height]
178 heavyiron 132
	shr	eax,1
133
	add	eax,4*65536-4
134
	add	ebx,eax
135
	mov	eax,4
136
	or	esi,esi
137
	jz	.lp3
297 mikedld 138
	mcall	,,[color_tbl.text]
178 heavyiron 139
  .lp3: sub	edi,esi
140
	jnz	.lp4
141
	add	esp,8
142
	jmp	.exit
143
  .lp4:
144
	add	edx,esi
145
	imul	esi,6*65536
146
	add	ebx,esi
147
	pop	ecx esi
148
	sub	esi,ecx
149
	cmp	esi,edi
150
	jbe	.lp5
151
	mov	esi,edi
152
  .lp5:
297 mikedld 153
	mcall	,,[color_tbl.text.sel]
178 heavyiron 154
	sub	edi,esi
155
	jz	.exit
156
	add	edx,esi
157
	imul	esi,6*65536
158
	add	ebx,esi
159
	lea	ecx,[tbox.text]
297 mikedld 160
	mcall	,,[color_tbl.text],,edi
178 heavyiron 161
	jmp	.exit
162
 
163
    @@: lea	edx,[tbox.text]
164
	movzx	eax,[tbox.ofs.x]
165
	add	edx,eax
297 mikedld 166
	mov	ebx,dword[tbox.x-2]
167
	mov	bx,[tbox.y]
168
	movzx	eax,[tbox.height]
178 heavyiron 169
	shr	eax,1
170
	add	eax,4*65536-4
171
	add	ebx,eax
172
	movzx	eax,[tbox.ofs.x]
173
	call	textbox.get_width
174
	mov	esi,eax
297 mikedld 175
	mcall	4,,[color_tbl.text]
178 heavyiron 176
 
177
  .exit:
178
	movzx	ebx,[tbox.pos.x]
179
	movzx	eax,[tbox.ofs.x]
180
	sub	ebx,eax
181
	imul	ebx,6
297 mikedld 182
	movzx	eax,[tbox.x]
178 heavyiron 183
	add	eax,3
184
	add	ebx,eax
185
	push	bx
186
	shl	ebx,16
187
	pop	bx
297 mikedld 188
	movzx	ecx,[tbox.height]
178 heavyiron 189
	shr	ecx,1
297 mikedld 190
	add	cx,[tbox.y]
178 heavyiron 191
	push	cx
192
	shl	ecx,16
193
	pop	cx
194
	add	ecx,-5*65536+4
195
	mcall	38,,,0x01000000
196
	add	ebx,0x00010001
197
	mcall
198
	ret
199
endf
200
 
201
func textbox.key
202
	mov	ebp,[focused_tb]
203
	mov	esi,accel_table_textbox
204
  .acc: cmp	ebx,[esi]
205
	jne	@f
206
	call	dword[esi+4]
207
	jmp	.exit.2
208
    @@: add	esi,8
209
	cmp	byte[esi],0
210
	jne	.acc
211
 
212
	test	byte[shi+2],0x06
213
	jnz	.exit
214
	cmp	[tbox.length],255
215
	je	.exit
216
 
217
	movzx	eax,[chr]
218
	movzx	eax,[eax+key0]
219
	or	al,al
220
	jz	.exit
221
	mov	al,[eax+key1]
222
	cmp	[tb_casesen],0
223
	je	@f
224
	cmp	al,$60
225
	jle	@f
226
	add	al,[add_table-$60+eax]
227
    @@:
228
	call	textbox.delete_selection
229
 
230
	mov	ecx,255
231
	sub	cl,[tbox.pos.x]
232
	lea	edi,[tbox.text]
233
	add	edi,255
234
	lea	esi,[edi-1]
235
	std
236
	rep	movsb
237
	stosb
238
	cld
239
	inc	[tbox.length]
240
	call	key.tb.right
241
 
242
  .exit.2:
243
	call	textbox.draw
244
  .exit:
245
	ret
246
endf
247
 
248
textbox.mouse:
249
	ret
250
 
251
func key.tb.bkspace
252
	call	textbox.delete_selection
253
	jnc	@f
254
 
255
	cmp	[tbox.pos.x],0
256
	je	@f
257
	call	key.tb.left
258
	jmp	key.tb.del.direct
259
 
260
    @@: ret
261
endf
262
 
263
func key.tb.home
264
	xor	al,al
265
	mov	[tbox.pos.x],al
266
	mov	[tbox.sel.x],al
267
	mov	[tbox.ofs.x],al
268
	ret
269
endf
270
 
271
func key.tb.left
272
	mov	al,[tbox.pos.x]
273
	mov	[tbox.sel.x],al
274
	dec	al
275
	js	@f
276
	mov	[tbox.pos.x],al
277
	mov	[tbox.sel.x],al
278
	cmp	[tbox.ofs.x],al
279
	jl	@f
280
	sub	[tbox.ofs.x],8
281
	jge	@f
282
	mov	[tbox.ofs.x],0
283
    @@: ret
284
endf
285
 
286
func key.tb.right
287
	call	textbox.get_width
288
	mov	bl,[tbox.pos.x]
289
	mov	[tbox.sel.x],bl
290
	inc	bl
291
	cmp	bl,[tbox.length]
292
	ja	@f
293
	mov	[tbox.pos.x],bl
294
	mov	[tbox.sel.x],bl
295
	sub	bl,[tbox.ofs.x]
296
	cmp	bl,al
297
	jbe	@f
298
	inc	[tbox.ofs.x]
299
    @@: ret
300
endf
301
 
302
func key.tb.end
303
	call	textbox.get_width
304
	movzx	ebx,[tbox.length]
305
	mov	[tbox.pos.x],bl
306
	mov	[tbox.sel.x],bl
307
	sub	ebx,eax
308
	jge	@f
309
	xor	bl,bl
310
    @@: mov	[tbox.ofs.x],bl
311
	ret
312
endf
313
 
314
func key.tb.del
315
	call	textbox.delete_selection
316
	jnc	@f
317
  .direct:
318
	movzx	ecx,[tbox.length]
319
	sub	cl,[tbox.pos.x]
320
	jz	@f
321
	lea	eax,[tbox.text]
322
	movzx	edi,[tbox.pos.x]
323
	add	edi,eax
324
	lea	esi,[edi+1]
325
	dec	[tbox.length]
326
	cld
327
	rep	movsb
328
 
329
    @@: ret
330
endf
331
 
332
func key.tb.shift_home
333
	xor	al,al
334
	mov	[tbox.pos.x],al
335
	mov	[tbox.ofs.x],al
336
	ret
337
endf
338
 
339
func key.tb.shift_left
340
	mov	al,[tbox.pos.x]
341
	dec	al
342
	js	@f
343
	mov	[tbox.pos.x],al
344
	cmp	[tbox.ofs.x],al
345
	jl	@f
346
	sub	[tbox.ofs.x],8
347
	jge	@f
348
	mov	[tbox.ofs.x],0
349
    @@: ret
350
endf
351
 
352
func key.tb.shift_right
353
	call	textbox.get_width
354
	mov	bl,[tbox.pos.x]
355
	inc	bl
356
	cmp	bl,[tbox.length]
357
	ja	@f
358
	mov	[tbox.pos.x],bl
359
	sub	bl,[tbox.ofs.x]
360
	cmp	bl,al
361
	jbe	@f
362
	inc	[tbox.ofs.x]
363
    @@: ret
364
endf
365
 
366
func key.tb.shift_end
367
	call	textbox.get_width
368
	movzx	ebx,[tbox.length]
369
	mov	[tbox.pos.x],bl
370
	sub	ebx,eax
371
	jge	@f
372
	xor	bl,bl
373
    @@: mov	[tbox.ofs.x],bl
374
	ret
375
endf