Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
468 Lrz 1
; SEE YOU File FAQ.txt and HISTORY. Good Like!
461 Lrz 2
;;;;;;;;;;;;;;;;;;
3
include 'editbox.mac'    ;макрос который должен облегчить жизнь :) специально для editbox
4
;;;;;;;;;;;;;;;;;;
483 Lrz 5
macro use_edit_box procinfo,scr_h,scr_w
234 Lrz 6
{
7
edit_box:
461 Lrz 8
ed_width        equ [edi]               ;ширина компонента
9
ed_left         equ [edi+4]             ;положение по оси х
10
ed_top          equ [edi+8]             ;положение по оси у
11
ed_color        equ [edi+12]            ;цвет фона компонента
468 Lrz 12
shift_color     equ [edi+16]            ;=0x6a9480
461 Lrz 13
ed_focus_border_color   equ [edi+20]    ;цвет рамки компонента
14
ed_blur_border_color    equ [edi+24]    ;цвет не активного компонента
15
ed_text_color   equ [edi+28]            ;цвет текста
16
ed_max          equ [edi+32]                    ;кол-во символов которые можно максимально ввести
17
ed_text         equ [edi+36]                    ;указатель на буфер
18
ed_flags        equ [edi+40]            ;флаги
19
ed_size equ [edi+42]                    ;кол-во символов
20
ed_pos  equ [edi+46]                    ;позиция курсора
21
ed_offset       equ [edi+50]            ;смещение
22
cl_curs_x       equ [edi+54]            ;предыдущее координата курсора по х
23
cl_curs_y       equ [edi+58]            ;предыдущее координата курсора по у
24
ed_shift_pos    equ [edi+62]            ;положение курсора
25
ed_shift_pos_old equ [edi+66]           ;старое положение курсора
234 Lrz 26
;==========================================================
27
;=== процедура прорисовки =================================
28
;==========================================================
29
.draw:
30
pusha
31
;--- рисуем рамку ---
461 Lrz 32
        call    .draw_border            ; Функция стабильна
234 Lrz 33
.draw_bg_cursor_text:
34
;--- изменяем смещение, если надо ---
461 Lrz 35
        call    .check_offset           ;вычисление позиции курсора стабильна
234 Lrz 36
;--- рисуем внутреннюю область ---
461 Lrz 37
        call    .draw_bg                ;нарисовать прямоугольник рабочей области
402 Lrz 38
;---- рисуем выделение, по shift если есть
461 Lrz 39
        call    .draw_shift
234 Lrz 40
.draw_cursor_text:
41
;--- рисуем курсор ---
461 Lrz 42
        ;--- может его не надо рисовать ----
43
        test    word ed_flags,ed_focus
44
        je     @f
45
        call    .draw_cursor
234 Lrz 46
@@:
461 Lrz 47
        call    .draw_text
48
edit_ex
295 Lrz 49
;==========================================================
50
;=== обработка клавиатуры =================================
51
;==========================================================
52
.key:
53
pusha
461 Lrz 54
        test    word ed_flags,ed_focus ; если не в фокусе, выходим
483 Lrz 55
        je      .no_figure
56
;Проверка нажат shift ?
461 Lrz 57
        call    .check_shift
234 Lrz 58
;----------------------------------------------------------
59
;--- проверяем, что нажато --------------------------------
60
;----------------------------------------------------------
483 Lrz 61
use_key_process  backspase,delete,left,right,home,end,insert
234 Lrz 62
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
483 Lrz 63
;Заглушка на обработку клавиш вверх и вниз т.е. при обнаружении этих кодов происходит выход из обработчика
461 Lrz 64
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
483 Lrz 65
use_key_no_process   up,down,esc
234 Lrz 66
;--- нажата другая клавиша ---
483 Lrz 67
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68
;Проверка установлен ли флаг при котором нужно выводить только цифры в нужном боксе если такойнеобходимости нет нужно закоментировать макрос
69
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70
use_key_figures_only
292 Lrz 71
;проверка на shift
461 Lrz 72
@@:     test    word ed_flags,ed_shift_on
73
        je      @f
74
        ;Входные данные edx=ed_size;ecx=ed_pos
75
        push    eax
76
        mov     edx,ed_size
77
        mov     ecx,ed_pos
78
        pusha
343 Lrz 79
;clear
483 Lrz 80
;        mov     ebp,edx ;ed_size
81
;        call    .clear_bg
461 Lrz 82
        mov     ebp,ed_color
83
        mov     ebx,dword       ed_shift_pos
84
        call    .sh_cl_
350 Lrz 85
 
391 Lrz 86
.sh_nxt:popa
461 Lrz 87
        call    .del_char
292 Lrz 88
;;;;
461 Lrz 89
        mov     eax,dword ed_shift_pos
90
        mov     ebx,ed_size
91
        sub     ebx,eax
92
        mov     ed_size,ebx
93
        pop     eax
292 Lrz 94
        ; проверяем, находится ли курсор в конце
461 Lrz 95
@@:     mov     ecx,ed_size
96
        mov     edx, ed_max
97
        test    word ed_flags,ed_insert
98
        jne     @f
99
        cmp     ecx,edx
100
        jae     .no_figure
101
@@:     mov     ebx, ed_pos
102
        cmp     ebx,edx
103
        jl      @f ; если меньше или равно
234 Lrz 104
.no_figure:
461 Lrz 105
edit_ex
106
.insert: test   word ed_flags,ed_insert ;not    word ed_insert
292 Lrz 107
         je     .insert_1
461 Lrz 108
         and    word ed_flags,ed_insert_cl
109
        jmp     .no_figure
292 Lrz 110
.insert_1:
461 Lrz 111
        or      word ed_flags,ed_insert
112
        jmp     .no_figure
292 Lrz 113
.ins_v:
461 Lrz 114
        dec     dword [ebp+42];ed_size    ;processing is insert
115
        sub     esi,ecx
116
        add     esi,ebx
117
        mov     edi,esi
343 Lrz 118
;clear
119
pusha
461 Lrz 120
        mov     edi,ebp
121
        mov     ebp,ed_pos
122
        call    .clear_bg
343 Lrz 123
popa
461 Lrz 124
        jmp     .In_k
234 Lrz 125
@@:     ; сдвигаем символы после курсора вправо
461 Lrz 126
        mov     ecx,ed_size
127
        push    edi eax
128
        mov     ebp,edi
129
        mov     esi,ed_text     ; Указатель на буфер
130
                                ;Будем работать со строкой
131
        add     esi,ecx         ;add ed_size добавим max size
132
        mov     edi,esi
234 Lrz 133
 
461 Lrz 134
        cmp     ecx,ebx         ;Если у нас позиция курсора = текущему размеру напечатанных символов т.е. курсор стоит в конце
135
        je      .In_k
234 Lrz 136
 
461 Lrz 137
        test    word [ebp+40],ed_insert ;IF insert is enable  т.к. edi изменен адресуем через ebp
138
        jne     .ins_v
343 Lrz 139
;clear
140
pusha
461 Lrz 141
        mov     edi,ebp
142
        mov     ebp,ed_size
143
        call    .clear_bg
343 Lrz 144
popa
461 Lrz 145
        sub     ecx,ebx         ;Найдем кол-во символов для передвижения.
146
        inc     edi             ;Сместим наши символы в право
147
        std
148
        inc     ecx
149
   @@:
150
        ;--------
151
        lodsb
152
        stosb
153
        ;--------
154
        loop    @b
155
.In_k:  cld
156
        pop eax
157
        mov al,ah
158
        stosb
159
        pop edi
234 Lrz 160
; вставляем код клавиши туда, где курсор
461 Lrz 161
        ; увеличиваем значение размера и позиции
162
        inc      dword ed_size
163
        inc      dword ed_pos
164
        call    .draw_all2
165
        jmp     .shift;.draw_cursor_text
166
.delete:
167
        mov     edx,ed_size
168
        mov     ecx,ed_pos
169
        cmp     edx,ecx
170
        jg      .bac_del
171
        test    word ed_flags,ed_shift_on
172
        jne     .del_bac
173
edit_ex
174
.bac_del:
175
        call    .del_char
176
        jmp     .draw_all
234 Lrz 177
 
178
;--- нажата клавиша backspace ---
179
.backspace:
461 Lrz 180
        ; проверяем, курсор у левого края ?
181
        mov     ecx,ed_pos
182
        test    ecx,ecx
183
        jnz     .del_bac
184
        test    word ed_flags,ed_shift_on
185
        jne     .bac_del
186
 
187
edit_ex
289 Lrz 188
.del_bac:
461 Lrz 189
        mov     edx,ed_size
190
        cmp     edx,ecx ;if ed_pos=ed_size
191
        je      @f
192
        dec     ecx
193
        call    .del_char
194
@@:     test    word ed_flags,ed_shift_on
195
        jne     .bac_del
196
        dec      dword ed_pos
234 Lrz 197
.draw_all:
461 Lrz 198
        push    .shift;.draw_cursor_text;eax
289 Lrz 199
 
461 Lrz 200
        test    word ed_flags,ed_shift_on
201
        je      @f
202
        mov     eax,dword ed_shift_pos
203
        mov     ebx,ed_size
204
        sub     ebx,eax
205
        mov     ed_size,ebx
289 Lrz 206
 
461 Lrz 207
        mov     ebp,ed_color
208
        call    .clear_cursor
209
        call    .check_offset
210
        call    .draw_bg
211
        ret
212
@@:     dec      dword ed_size
289 Lrz 213
 
234 Lrz 214
.draw_all2:
461 Lrz 215
        and    word ed_flags,ed_shift_cl
216
        mov     ebp,ed_color
217
        call    .clear_cursor
218
        call    .check_offset
219
        mov     ebp,ed_size
220
        call    .clear_bg
221
        ret
234 Lrz 222
;--- нажата клавиша left ---
461 Lrz 223
.left:  mov     ebx,ed_pos
224
        test    ebx,ebx
225
        jz      .sh_st_of
226
        or      word ed_flags,ed_left_fl
227
        call    .sh_first_sh
228
        dec      dword ed_pos
229
        call    .sh_enable
230
        jmp     .draw_cursor_text
234 Lrz 231
;--- нажата клавиша right ---
461 Lrz 232
.right: mov     ebx,ed_pos
233
        cmp     ebx,ed_size
234
        je      .sh_st_of
235
        and     word ed_flags,ed_right_fl
236
        call    .sh_first_sh
237
        inc     dword  ed_pos
238
        call    .sh_enable
239
        jmp     .draw_cursor_text
391 Lrz 240
.home:
461 Lrz 241
        mov     ebx,ed_pos
242
        test    ebx,ebx
243
        jz      .sh_st_of
244
        call    .sh_first_sh
245
        xor     eax,eax
246
        mov     ed_pos,eax
247
        call    .sh_home_end
248
        jmp     .draw_cursor_text
391 Lrz 249
.end:
461 Lrz 250
        mov     ebx,ed_pos
251
        cmp     ebx,dword ed_size
252
        je      .sh_st_of
253
        call    .sh_first_sh
254
        mov     eax,ed_size
255
        mov     ed_pos,eax
256
        call    .sh_home_end
257
        jmp     .draw_cursor_text
234 Lrz 258
;==========================================================
259
;=== обработка мыши =======================================
260
;==========================================================
261
.mouse:
262
pusha
461 Lrz 263
;debug
234 Lrz 264
;----------------------------------------------------------
265
;--- получаем состояние кнопок мыши -----------------------
461 Lrz 266
;----------------------------------------------------------
267
        mcall   37,2
234 Lrz 268
;----------------------------------------------------------
269
;--- проверяем состояние ----------------------------------
270
;----------------------------------------------------------
461 Lrz 271
        test    eax,1
272
        jnz     .mouse_left_button
273
        and     word ed_flags,ed_mouse_on_off
274
        xor     ebx,ebx
275
        mov     dword [mouse_flag],ebx
276
edit_ex
277
.mouse_left_button:
449 Lrz 278
;----------------------------------------------------------
461 Lrz 279
;--- блокировка от фокусировки в других боксах при попадании на них курсора
449 Lrz 280
;----------------------------------------------------------
461 Lrz 281
        mov     eax,dword [mouse_flag]
282
        test    eax,eax
283
        jz      @f
284
        cmp     eax,edi
285
        je      @f
286
        jmp     ._blur
234 Lrz 287
;----------------------------------------------------------
449 Lrz 288
;--- получаем координаты мыши относительно 0 т.е всей области экрана
289
;----------------------------------------------------------
468 Lrz 290
@@:     mcall   37,0
234 Lrz 291
;----------------------------------------------------------
449 Lrz 292
;--- А не удерживаем ли мы клавишу мышки, перемещая курсор, во все разные стороны?
293
;----------------------------------------------------------
483 Lrz 294
        mov     ecx,procinfo
461 Lrz 295
        test    word ed_flags,ed_mouse_on
296
        jne     .mouse_wigwag
449 Lrz 297
;----------------------------------------------------------
234 Lrz 298
;--- проверяем, попадает ли курсор в edit box -------------
299
;----------------------------------------------------------
461 Lrz 300
        mov     ebx,dword [ecx+38]
301
        add     ebx,ed_top
468 Lrz 302
if scr_h eq
303
else
304
        add     ebx,scr_h
305
end if
461 Lrz 306
        cmp     ax,bx
307
        jl      ._blur;.mouse_end_no_focus
234 Lrz 308
 
461 Lrz 309
        add     ebx,ed_height
310
        cmp     ax,bx
311
        jg      ._blur;.mouse_end_no_focus
234 Lrz 312
 
461 Lrz 313
        shr     eax,16
234 Lrz 314
 
461 Lrz 315
        mov     ebx,dword [ecx+34]
316
        add     ebx,ed_left
468 Lrz 317
if scr_w eq
318
else
319
        add     ebx,scr_w
320
end if
461 Lrz 321
        cmp     ax,bx
322
        jl      ._blur;.mouse_end_no_focus
234 Lrz 323
 
461 Lrz 324
        add     ebx,ed_width
325
        cmp     ax,bx
326
        jg      ._blur;.mouse_end_no_focus
234 Lrz 327
;--- изменяем позицию курсора ---
461 Lrz 328
        push    eax
329
        mov     ebp,ed_color
330
        call    .clear_cursor
331
        pop     eax
449 Lrz 332
._mvpos:
483 Lrz 333
        mov     ecx,procinfo
461 Lrz 334
        mov     ebx,dword [ecx+34]
335
        xor     edx,edx
336
        sub     eax,ed_left
337
        sub     eax,ebx
468 Lrz 338
if scr_w eq
339
else
340
        add     ebx,scr_w
341
        sub     eax,2
342
end if
461 Lrz 343
        mov     ebx,6
344
        div     bx
345
        add     eax,ed_offset
346
        cmp     eax,ed_size
347
        jna     ._mshift
348
        mov     eax,ed_size
449 Lrz 349
._mshift:
404 Lrz 350
;;;;;;;
351
;;Секция обработки shift и выделения по shift
352
;;;;;;;
353
        test    word ed_flags,ed_shift_bac
402 Lrz 354
        je      @f
461 Lrz 355
        mov     ebp,dword       ed_color
356
        mov     ebx,dword ed_shift_pos
357
        push    eax
358
        call    .sh_cl_
359
        and     word ed_flags,ed_shift_bac_cl
360
        pop     eax
439 Lrz 361
@@:
461 Lrz 362
        test    word ed_flags,ed_mouse_on
363
        jne     @f
439 Lrz 364
 
461 Lrz 365
        mov     dword ed_shift_pos,eax
366
        or      word  ed_flags,ed_mouse_on
367
        mov     dword ed_pos,eax
368
        mov     dword [mouse_flag],edi          ;установим идентификатор
369
        bts     word ed_flags,1                 ;установка фокуса
370
        jmp     .m_sh
371
@@:
372
        cmp     eax,dword ed_shift_pos  ;если позиции не изменились
373
        je      .mouse_ex
374
        mov     ed_pos,eax
375
        mov     ebp,dword shift_color
376
        mov     ebx,dword ed_shift_pos
377
        call    .sh_cl_
378
        or      word ed_flags,ed_mous_adn_b     ;установим бит что мы выделили +shift_on +
379
.m_sh:  call    .draw_text
380
        call    .draw_cursor
292 Lrz 381
;----------------------------------------------------------
382
;--- процедура установки фокуса ---------------------------
383
;----------------------------------------------------------
461 Lrz 384
        jmp     .drc
234 Lrz 385
._blur:
461 Lrz 386
        test    word ed_flags,ed_always_focus
387
        jne     .mouse_ex
388
        btr     word ed_flags,1 ; если не в фокусе, выходим
389
        jnc     .mouse_ex
402 Lrz 390
 
461 Lrz 391
        mov     ebp,ed_color
392
        call    .clear_cursor
393
.drc:   call    .draw_border
449 Lrz 394
.mouse_ex:
395
 
461 Lrz 396
edit_ex
483 Lrz 397
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
398
;Общие функции обработки
399
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
400
use_general_func
401
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
402
;Функции для работы с key
403
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
404
use_key_func
234 Lrz 405
;----------------------------------------------------------
406
;--- процедура размывания фокуса --------------------------
407
;----------------------------------------------------------
408
;.blur:
409
;pusha
410
;._blur:
461 Lrz 411
        ;btr     ed_flags,1
412
        ;jnc     @f
413
        ;call    .draw_border
414
        ;call    .clear_cursor
234 Lrz 415
;@@:
461 Lrz 416
;edit_ex
417
 
418
;----------------------------------------------------------
419
;--- Обработка .mouse_wigwag
420
;----------------------------------------------------------
421
.mouse_wigwag:
422
        shr     eax,16
463 Lrz 423
        or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
461 Lrz 424
;;;;;;;;;;;;;;;;;;
425
;;процедура обработки положения выделенного текста, когда происходит выход за пределы editbox
426
;;;;;;;;;;;;;;;;;;
483 Lrz 427
        mov     ecx,procinfo
461 Lrz 428
        mov     ebx,dword [ecx+34]
429
        add     ebx,ed_left
468 Lrz 430
if scr_w eq
431
else
432
        add     ebx,scr_w
433
end if
434
        cmp     eax,ebx
435
        jb      .mleft
461 Lrz 436
 
468 Lrz 437
        add     ebx,ed_width
438
        cmp     eax,ebx
439
        ja      .mright
461 Lrz 440
 
468 Lrz 441
        sub     ebx,ed_width
461 Lrz 442
 
443
        xor     edx,edx
444
        sub     eax,ebx ; вычтим из координат мышки по оси х координаты до editbox по оси х
445
        mov     ebx,6
446
        div     ebx
447
;;;;;;;;;;;;;;;;;;
448
;;процедура обработки положения выделенного текста, в пределах области editbox
449
;;;;;;;;;;;;;;;;;;
450
;Получили координаты в eax мышки, т.е. куда она переместилась
451
;Рисование закрашеных прямоугольников и очистка их
468 Lrz 452
        add     eax,ed_offset   ;добавим смещение
453
        cmp     eax,dword ed_size       ;если вышли за пределы, то ничего не делать
454
        ja      .mwigvag
461 Lrz 455
.mdraw:
456
        mov     dword   ed_pos,eax ;сохраним новое значение
457
;Рисование закрашеных прямоугольников и очистка их
468 Lrz 458
        mov     ecx,dword       ed_shift_pos
461 Lrz 459
        mov     ebx,dword       ed_shift_pos_old
460
        mov     dword   ed_shift_pos_old,eax    ;внесем новое значение старой позиции курсора
461
;проверка и рисование закрашеных областей
462
        cmp     ecx,ebx         ;выясняем куда было движение на один шаг назад
463
        je      .m1_shem        ;движения не было ранее
464
        jb      .msmaller       ;движение было ->
465
        cmp     ebx,eax         ;движение было до этого <- и тут мы проверяем сейчас куда движение происходит
466
        ja      .m1_shem        ;если было движение <- то нужно закрасить область
468 Lrz 467
        je      .mwigvag        ;если изменения не было, то ничего не делать
461 Lrz 468
        mov     ebp,ed_color    ;тут нужно очистить область c ed_pos ed_shift_pos_old
469
;входные параметры ebp=color ebx=ed_shift_pos
470
        call    .sh_cl_
471
        jmp     .mwigvag
472
.msmaller:
473
        cmp     ebx,eax
474
        jb      .m1_shem
475
        mov     ebp,ed_color
476
;входные параметры ebp=color ebx=ed_shift_pos
477
        call    .sh_cl_
478
        jmp     .mwigvag
479
;alike  =
480
.m1_shem:
481
        mov     ebp,shift_color
482
;входные параметры ebp=color ebx=ed_shift_pos
468 Lrz 483
        mov     ebx,ecx
461 Lrz 484
        call    .sh_cl_
485
        jmp     .mwigvag
486
.mwigvag:
487
        and     word ed_flags,ed_shift_mcl
468 Lrz 488
        jmp     .draw_cursor_text
461 Lrz 489
;       popa
490
;       ret
491
.mleft:
468 Lrz 492
        mov     eax,ed_pos
483 Lrz 493
        cmp     eax,0
468 Lrz 494
        jbe      .mwigvag
495
        dec     eax
496
        call    .check_offset
497
        push    eax
498
        mov     ebx,ed_shift_pos
499
        mov     ebp,shift_color
500
        call    .sh_cl_
501
        pop     eax
502
        jmp     .mdraw
461 Lrz 503
.mright:
468 Lrz 504
        mov     eax,ed_pos
505
        mov     ebx,ed_size
506
        cmp     eax,ebx
507
        jae     .mwigvag
508
        inc     eax
509
        call    .check_offset
510
        mov     ebx,ed_shift_pos
511
        mov     ebp,shift_color
512
        push    eax
513
        call    .sh_cl_
514
        pop     eax
515
        jmp     .mdraw
461 Lrz 516
 
234 Lrz 517
}
396 Lrz 518
ed_figure_only= 1000000000000000b   ;одни символы
391 Lrz 519
ed_always_focus= 100000000000000b
396 Lrz 520
ed_focus=                     10b   ;фокус приложения
391 Lrz 521
ed_shift_on=                1000b   ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
439 Lrz 522
ed_shift_on_off=1111111111110111b
391 Lrz 523
ed_shift=                    100b   ;включается при нажатии на shift т.е. если нажимаю
524
ed_shift_off=   1111111111111011b
525
ed_shift_bac=              10000b   ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
404 Lrz 526
ed_shift_bac_cl=1111111111101111b   ;очистка при удалении выделения
391 Lrz 527
ed_shift_cl=    1111111111100011b
463 Lrz 528
ed_shift_mcl=   1111111111111011b
391 Lrz 529
ed_left_fl=               100000b
530
ed_right_fl=    1111111111011111b
396 Lrz 531
ed_offset_fl=            1000000b
532
ed_offset_cl=   1111111110111111b
391 Lrz 533
ed_insert=              10000000b
534
ed_insert_cl=   1111111101111111b
439 Lrz 535
ed_mouse_on =          100000000b
446 Lrz 536
ed_mous_adn_b=         100011000b
439 Lrz 537
ed_mouse_on_off=1111111011111111b
391 Lrz 538
ed_height=14 ; высота
483 Lrz 539
macro draw_edit_boxes start,_end,use_f9,procinfo
234 Lrz 540
{
468 Lrz 541
if use_f9 eq
542
else
483 Lrz 543
        mcall   9,procinfo,-1
468 Lrz 544
end if
461 Lrz 545
        mov     edi,start
468 Lrz 546
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 547
@@:
461 Lrz 548
        call    edit_box.draw
549
        add     edi,ed_struc_size
550
        loop    @b
234 Lrz 551
}
552
 
468 Lrz 553
macro mouse_edit_boxes start,_end
234 Lrz 554
{
461 Lrz 555
        mov     edi,start
468 Lrz 556
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 557
@@:
461 Lrz 558
        call    edit_box.mouse
559
        add     edi,ed_struc_size
560
        loop    @b
234 Lrz 561
}
562
 
563
macro key_edit_boxes start,end
564
{
461 Lrz 565
        mov     edi,start
566
        mov     ecx,((end-start)/ed_struc_size)
234 Lrz 567
@@:
461 Lrz 568
        call    edit_box.key
569
        add     edi,ed_struc_size
570
        loop    @b
234 Lrz 571
}
461 Lrz 572
ed_struc_size=70
573
struc  edit_box width,left,top,color,shift_color,focus_border_color,\
574
       blur_border_color,text_color,max,text,flags,size,pos
234 Lrz 575
{
576
.width dd width
577
.left dd left
578
.top dd top
579
.color dd color
461 Lrz 580
.shift_color dd shift_color
234 Lrz 581
.focus_border_color dd focus_border_color
582
.blur_border_color dd blur_border_color
583
.text_color dd text_color
584
.max dd max
282 Lrz 585
.text dd text
586
.flags dw flags+0
403 Lrz 587
.size dd size+0
461 Lrz 588
.pos dd pos+0
234 Lrz 589
.offset dd 0
590
.cl_curs_x dd 0
591
.cl_curs_y dd 0
391 Lrz 592
.shift   dd 0
593
.shift_old   dd 0
234 Lrz 594
}
595
 
402 Lrz 596
 
234 Lrz 597
macro edit_boxes_set_sys_color start,end,color_table
598
{
461 Lrz 599
        mov     edi,start
600
        mov     ecx,((end-start)/ed_struc_size)
601
        mov     esi,color_table
234 Lrz 602
@@:
461 Lrz 603
        mov     eax,[esi+36]
604
        mov     ebx,[esi+20]
605
        mov     ed_focus_border_color,eax
606
        shr     bh,1
607
        shr     bl,1
608
        shr     ah,1
609
        shr     al,1
610
        add     ah,bh
611
        add     al,bl
612
        ror     eax,16
613
        ror     ebx,16
614
        shr     bl,1
615
        shr     al,1
616
        add     al,bl
617
        ror     eax,16
618
        mov     ed_blur_border_color,eax
619
        add     edi,ed_struc_size
620
        loop    @b
306 Lrz 621
}
622
 
483 Lrz 623
macro draw_edit_box ed_ptr,use_f9,procinfo
306 Lrz 624
{
468 Lrz 625
if use_f9 eq
626
else
483 Lrz 627
        mcall   9,procinfo,-1
468 Lrz 628
end if
306 Lrz 629
        mov     edi,ed_ptr
630
        call    edit_box.draw
631
}
632
 
633
macro mouse_edit_box ed_ptr
634
{
635
        mov     edi,ed_ptr
636
        call    edit_box.mouse
637
}
638
 
639
macro key_edit_box ed_ptr
640
{
641
        mov     edi,ed_ptr
642
        call    edit_box.key
468 Lrz 643
}
644
macro default_box ed_ptr
645
{
646
pusha
483 Lrz 647
;       xor     eax,eax
648
;       mov     ed_shift_pos,eax
649
;       mov     ed_shift_pos_old,eax
650
        and     word ed_flags,ed_shift_cl
651
;       mov     ed_offset,eax
468 Lrz 652
popa
234 Lrz 653
}