Subversion Repositories Kolibri OS

Rev

Rev 483 | 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
;----------------------------------------------------------
461 Lrz 294
        test    word ed_flags,ed_mouse_on
295
        jne     .mouse_wigwag
449 Lrz 296
;----------------------------------------------------------
234 Lrz 297
;--- проверяем, попадает ли курсор в edit box -------------
298
;----------------------------------------------------------
491 Lrz 299
        mov     ebx,[procinfo.box.top]
461 Lrz 300
        add     ebx,ed_top
468 Lrz 301
if scr_h eq
302
else
303
        add     ebx,scr_h
304
end if
461 Lrz 305
        cmp     ax,bx
306
        jl      ._blur;.mouse_end_no_focus
234 Lrz 307
 
461 Lrz 308
        add     ebx,ed_height
309
        cmp     ax,bx
310
        jg      ._blur;.mouse_end_no_focus
234 Lrz 311
 
461 Lrz 312
        shr     eax,16
234 Lrz 313
 
491 Lrz 314
        mov     ebx,[procinfo.box.left]
461 Lrz 315
        add     ebx,ed_left
468 Lrz 316
if scr_w eq
317
else
318
        add     ebx,scr_w
319
end if
461 Lrz 320
        cmp     ax,bx
321
        jl      ._blur;.mouse_end_no_focus
234 Lrz 322
 
461 Lrz 323
        add     ebx,ed_width
324
        cmp     ax,bx
325
        jg      ._blur;.mouse_end_no_focus
234 Lrz 326
;--- изменяем позицию курсора ---
461 Lrz 327
        push    eax
328
        mov     ebp,ed_color
329
        call    .clear_cursor
330
        pop     eax
449 Lrz 331
._mvpos:
491 Lrz 332
        mov     ebx,dword [procinfo.box.left]
461 Lrz 333
        xor     edx,edx
334
        sub     eax,ed_left
335
        sub     eax,ebx
468 Lrz 336
if scr_w eq
337
else
338
        add     ebx,scr_w
339
        sub     eax,2
340
end if
461 Lrz 341
        mov     ebx,6
342
        div     bx
343
        add     eax,ed_offset
344
        cmp     eax,ed_size
345
        jna     ._mshift
346
        mov     eax,ed_size
449 Lrz 347
._mshift:
404 Lrz 348
;;;;;;;
349
;;Секция обработки shift и выделения по shift
350
;;;;;;;
351
        test    word ed_flags,ed_shift_bac
402 Lrz 352
        je      @f
461 Lrz 353
        mov     ebp,dword       ed_color
354
        mov     ebx,dword ed_shift_pos
355
        push    eax
356
        call    .sh_cl_
357
        and     word ed_flags,ed_shift_bac_cl
358
        pop     eax
439 Lrz 359
@@:
461 Lrz 360
        test    word ed_flags,ed_mouse_on
361
        jne     @f
439 Lrz 362
 
461 Lrz 363
        mov     dword ed_shift_pos,eax
364
        or      word  ed_flags,ed_mouse_on
365
        mov     dword ed_pos,eax
366
        mov     dword [mouse_flag],edi          ;установим идентификатор
367
        bts     word ed_flags,1                 ;установка фокуса
368
        jmp     .m_sh
369
@@:
370
        cmp     eax,dword ed_shift_pos  ;если позиции не изменились
371
        je      .mouse_ex
372
        mov     ed_pos,eax
373
        mov     ebp,dword shift_color
374
        mov     ebx,dword ed_shift_pos
375
        call    .sh_cl_
376
        or      word ed_flags,ed_mous_adn_b     ;установим бит что мы выделили +shift_on +
377
.m_sh:  call    .draw_text
378
        call    .draw_cursor
292 Lrz 379
;----------------------------------------------------------
380
;--- процедура установки фокуса ---------------------------
381
;----------------------------------------------------------
461 Lrz 382
        jmp     .drc
234 Lrz 383
._blur:
461 Lrz 384
        test    word ed_flags,ed_always_focus
385
        jne     .mouse_ex
386
        btr     word ed_flags,1 ; если не в фокусе, выходим
387
        jnc     .mouse_ex
402 Lrz 388
 
461 Lrz 389
        mov     ebp,ed_color
390
        call    .clear_cursor
391
.drc:   call    .draw_border
449 Lrz 392
.mouse_ex:
393
 
461 Lrz 394
edit_ex
483 Lrz 395
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
396
;Общие функции обработки
397
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
398
use_general_func
399
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
400
;Функции для работы с key
401
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
402
use_key_func
234 Lrz 403
;----------------------------------------------------------
404
;--- процедура размывания фокуса --------------------------
405
;----------------------------------------------------------
406
;.blur:
407
;pusha
408
;._blur:
461 Lrz 409
        ;btr     ed_flags,1
410
        ;jnc     @f
411
        ;call    .draw_border
412
        ;call    .clear_cursor
234 Lrz 413
;@@:
461 Lrz 414
;edit_ex
415
 
416
;----------------------------------------------------------
417
;--- Обработка .mouse_wigwag
418
;----------------------------------------------------------
419
.mouse_wigwag:
420
        shr     eax,16
463 Lrz 421
        or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
461 Lrz 422
;;;;;;;;;;;;;;;;;;
423
;;процедура обработки положения выделенного текста, когда происходит выход за пределы editbox
424
;;;;;;;;;;;;;;;;;;
491 Lrz 425
        mov     ebx,[procinfo.box.left]
461 Lrz 426
        add     ebx,ed_left
468 Lrz 427
if scr_w eq
428
else
429
        add     ebx,scr_w
430
end if
431
        cmp     eax,ebx
432
        jb      .mleft
461 Lrz 433
 
468 Lrz 434
        add     ebx,ed_width
435
        cmp     eax,ebx
436
        ja      .mright
461 Lrz 437
 
468 Lrz 438
        sub     ebx,ed_width
461 Lrz 439
 
440
        xor     edx,edx
441
        sub     eax,ebx ; вычтим из координат мышки по оси х координаты до editbox по оси х
442
        mov     ebx,6
443
        div     ebx
444
;;;;;;;;;;;;;;;;;;
445
;;процедура обработки положения выделенного текста, в пределах области editbox
446
;;;;;;;;;;;;;;;;;;
447
;Получили координаты в eax мышки, т.е. куда она переместилась
448
;Рисование закрашеных прямоугольников и очистка их
468 Lrz 449
        add     eax,ed_offset   ;добавим смещение
450
        cmp     eax,dword ed_size       ;если вышли за пределы, то ничего не делать
451
        ja      .mwigvag
461 Lrz 452
.mdraw:
453
        mov     dword   ed_pos,eax ;сохраним новое значение
454
;Рисование закрашеных прямоугольников и очистка их
468 Lrz 455
        mov     ecx,dword       ed_shift_pos
461 Lrz 456
        mov     ebx,dword       ed_shift_pos_old
457
        mov     dword   ed_shift_pos_old,eax    ;внесем новое значение старой позиции курсора
458
;проверка и рисование закрашеных областей
459
        cmp     ecx,ebx         ;выясняем куда было движение на один шаг назад
460
        je      .m1_shem        ;движения не было ранее
461
        jb      .msmaller       ;движение было ->
462
        cmp     ebx,eax         ;движение было до этого <- и тут мы проверяем сейчас куда движение происходит
463
        ja      .m1_shem        ;если было движение <- то нужно закрасить область
468 Lrz 464
        je      .mwigvag        ;если изменения не было, то ничего не делать
461 Lrz 465
        mov     ebp,ed_color    ;тут нужно очистить область c ed_pos ed_shift_pos_old
466
;входные параметры ebp=color ebx=ed_shift_pos
467
        call    .sh_cl_
468
        jmp     .mwigvag
469
.msmaller:
470
        cmp     ebx,eax
471
        jb      .m1_shem
472
        mov     ebp,ed_color
473
;входные параметры ebp=color ebx=ed_shift_pos
474
        call    .sh_cl_
475
        jmp     .mwigvag
476
;alike  =
477
.m1_shem:
478
        mov     ebp,shift_color
479
;входные параметры ebp=color ebx=ed_shift_pos
468 Lrz 480
        mov     ebx,ecx
461 Lrz 481
        call    .sh_cl_
482
        jmp     .mwigvag
483
.mwigvag:
484
        and     word ed_flags,ed_shift_mcl
468 Lrz 485
        jmp     .draw_cursor_text
461 Lrz 486
;       popa
487
;       ret
488
.mleft:
468 Lrz 489
        mov     eax,ed_pos
483 Lrz 490
        cmp     eax,0
468 Lrz 491
        jbe      .mwigvag
492
        dec     eax
493
        call    .check_offset
494
        push    eax
495
        mov     ebx,ed_shift_pos
496
        mov     ebp,shift_color
497
        call    .sh_cl_
498
        pop     eax
499
        jmp     .mdraw
461 Lrz 500
.mright:
468 Lrz 501
        mov     eax,ed_pos
502
        mov     ebx,ed_size
503
        cmp     eax,ebx
504
        jae     .mwigvag
505
        inc     eax
506
        call    .check_offset
507
        mov     ebx,ed_shift_pos
508
        mov     ebp,shift_color
509
        push    eax
510
        call    .sh_cl_
511
        pop     eax
512
        jmp     .mdraw
461 Lrz 513
 
234 Lrz 514
}
396 Lrz 515
ed_figure_only= 1000000000000000b   ;одни символы
391 Lrz 516
ed_always_focus= 100000000000000b
396 Lrz 517
ed_focus=                     10b   ;фокус приложения
391 Lrz 518
ed_shift_on=                1000b   ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
439 Lrz 519
ed_shift_on_off=1111111111110111b
391 Lrz 520
ed_shift=                    100b   ;включается при нажатии на shift т.е. если нажимаю
521
ed_shift_off=   1111111111111011b
522
ed_shift_bac=              10000b   ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
404 Lrz 523
ed_shift_bac_cl=1111111111101111b   ;очистка при удалении выделения
391 Lrz 524
ed_shift_cl=    1111111111100011b
463 Lrz 525
ed_shift_mcl=   1111111111111011b
391 Lrz 526
ed_left_fl=               100000b
527
ed_right_fl=    1111111111011111b
396 Lrz 528
ed_offset_fl=            1000000b
529
ed_offset_cl=   1111111110111111b
391 Lrz 530
ed_insert=              10000000b
531
ed_insert_cl=   1111111101111111b
439 Lrz 532
ed_mouse_on =          100000000b
446 Lrz 533
ed_mous_adn_b=         100011000b
439 Lrz 534
ed_mouse_on_off=1111111011111111b
391 Lrz 535
ed_height=14 ; высота
483 Lrz 536
macro draw_edit_boxes start,_end,use_f9,procinfo
234 Lrz 537
{
468 Lrz 538
if use_f9 eq
539
else
483 Lrz 540
        mcall   9,procinfo,-1
468 Lrz 541
end if
461 Lrz 542
        mov     edi,start
468 Lrz 543
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 544
@@:
461 Lrz 545
        call    edit_box.draw
546
        add     edi,ed_struc_size
547
        loop    @b
234 Lrz 548
}
549
 
468 Lrz 550
macro mouse_edit_boxes start,_end
234 Lrz 551
{
461 Lrz 552
        mov     edi,start
468 Lrz 553
        mov     ecx,((_end-start)/ed_struc_size)
234 Lrz 554
@@:
461 Lrz 555
        call    edit_box.mouse
556
        add     edi,ed_struc_size
557
        loop    @b
234 Lrz 558
}
559
 
560
macro key_edit_boxes start,end
561
{
461 Lrz 562
        mov     edi,start
563
        mov     ecx,((end-start)/ed_struc_size)
234 Lrz 564
@@:
461 Lrz 565
        call    edit_box.key
566
        add     edi,ed_struc_size
567
        loop    @b
234 Lrz 568
}
461 Lrz 569
ed_struc_size=70
570
struc  edit_box width,left,top,color,shift_color,focus_border_color,\
571
       blur_border_color,text_color,max,text,flags,size,pos
234 Lrz 572
{
573
.width dd width
574
.left dd left
575
.top dd top
576
.color dd color
461 Lrz 577
.shift_color dd shift_color
234 Lrz 578
.focus_border_color dd focus_border_color
579
.blur_border_color dd blur_border_color
580
.text_color dd text_color
581
.max dd max
282 Lrz 582
.text dd text
583
.flags dw flags+0
403 Lrz 584
.size dd size+0
461 Lrz 585
.pos dd pos+0
234 Lrz 586
.offset dd 0
587
.cl_curs_x dd 0
588
.cl_curs_y dd 0
391 Lrz 589
.shift   dd 0
590
.shift_old   dd 0
234 Lrz 591
}
592
 
402 Lrz 593
 
234 Lrz 594
macro edit_boxes_set_sys_color start,end,color_table
595
{
461 Lrz 596
        mov     edi,start
597
        mov     ecx,((end-start)/ed_struc_size)
598
        mov     esi,color_table
234 Lrz 599
@@:
461 Lrz 600
        mov     eax,[esi+36]
601
        mov     ebx,[esi+20]
602
        mov     ed_focus_border_color,eax
603
        shr     bh,1
604
        shr     bl,1
605
        shr     ah,1
606
        shr     al,1
607
        add     ah,bh
608
        add     al,bl
609
        ror     eax,16
610
        ror     ebx,16
611
        shr     bl,1
612
        shr     al,1
613
        add     al,bl
614
        ror     eax,16
615
        mov     ed_blur_border_color,eax
616
        add     edi,ed_struc_size
617
        loop    @b
306 Lrz 618
}
619
 
483 Lrz 620
macro draw_edit_box ed_ptr,use_f9,procinfo
306 Lrz 621
{
468 Lrz 622
if use_f9 eq
623
else
483 Lrz 624
        mcall   9,procinfo,-1
468 Lrz 625
end if
306 Lrz 626
        mov     edi,ed_ptr
627
        call    edit_box.draw
628
}
629
 
630
macro mouse_edit_box ed_ptr
631
{
632
        mov     edi,ed_ptr
633
        call    edit_box.mouse
634
}
635
 
636
macro key_edit_box ed_ptr
637
{
638
        mov     edi,ed_ptr
639
        call    edit_box.key
468 Lrz 640
}
641
macro default_box ed_ptr
642
{
643
pusha
483 Lrz 644
;       xor     eax,eax
645
;       mov     ed_shift_pos,eax
646
;       mov     ed_shift_pos_old,eax
647
        and     word ed_flags,ed_shift_cl
648
;       mov     ed_offset,eax
468 Lrz 649
popa
234 Lrz 650
}