Subversion Repositories Kolibri OS

Rev

Rev 2244 | Rev 2341 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2244 Rev 2288
Line 4... Line 4...
4
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa      ;;
4
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa      ;;
5
;; Distributed under terms of the GNU General Public License    ;;
5
;; Distributed under terms of the GNU General Public License    ;;
6
;;                                                              ;;
6
;;                                                              ;;
7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 8... Line 8...
8
 
8
 
Line 9... Line 9...
9
$Revision: 2244 $
9
$Revision: 2288 $
10
 
10
 
11
;==============================================================================
11
;==============================================================================
Line 54... Line 54...
54
 
54
 
55
        ; type I - original style
55
        ; type I - original style
56
        call    drawwindow_I
56
        call    drawwindow_I
Line -... Line 57...
-
 
57
        jmp     window._.draw_window_caption.2
57
        jmp     window._.draw_window_caption.2
58
 
58
 
59
    @@:
Line 59... Line 60...
59
    @@: dec     al
60
        dec     al
60
        jnz     @f
61
        jnz     @f
61
 
62
 
62
        ; type II - only reserve area, no draw
63
        ; type II - only reserve area, no draw
63
        call    sys_window_mouse
64
        call    sys_window_mouse
Line -... Line 65...
-
 
65
        dec     [mouse_pause]
64
        dec     [mouse_pause]
66
        call    [draw_pointer]
65
        call    [draw_pointer]
67
        jmp     .exit
Line 66... Line 68...
66
        jmp     .exit
68
 
67
 
69
    @@:
68
    @@: dec     al
70
        dec     al
Line 69... Line 71...
69
        jnz     @f
71
        jnz     @f
-
 
72
 
70
 
73
        ; type III  - new style
71
        ; type III  - new style
74
        call    drawwindow_III
72
        call    drawwindow_III
75
        jmp     window._.draw_window_caption.2
73
        jmp     window._.draw_window_caption.2
76
 
74
 
77
        ; type IV & V - skinned window (resizable & not)
75
        ; type IV & V - skinned window (resizable & not)
78
    @@:
Line 131... Line 134...
131
;> eax = FS error code
134
;> eax = FS error code
132
;------------------------------------------------------------------------------
135
;------------------------------------------------------------------------------
133
        cmp     ebx, .sizeof.ftable / 4
136
        cmp     ebx, .sizeof.ftable / 4
134
        ja      @f
137
        ja      @f
135
        jmp     [.ftable + ebx * 4]
138
        jmp     [.ftable + ebx * 4]
-
 
139
    @@:
136
    @@: ret
140
        ret
Line 137... Line 141...
137
 
141
 
138
 
142
 
139
align 4
143
align 4
Line 208... Line 212...
208
        jge     .check_horizontal
212
        jge     .check_horizontal
209
        inc     esi
213
        inc     esi
210
        or      eax, eax
214
        or      eax, eax
211
        jge     @f
215
        jge     @f
212
        xor     eax, eax
216
        xor     eax, eax
-
 
217
    @@:
213
    @@: mov     [screen_workarea.left], eax
218
        mov     [screen_workarea.left], eax
214
        cmp     ebx, edi
219
        cmp     ebx, edi
215
        jle     @f
220
        jle     @f
216
        mov     ebx, edi
221
        mov     ebx, edi
-
 
222
    @@:
217
    @@: mov     [screen_workarea.right], ebx
223
        mov     [screen_workarea.right], ebx
Line 218... Line 224...
218
 
224
 
219
  .check_horizontal:
225
  .check_horizontal:
220
        mov     edi, [Screen_Max_Y]
226
        mov     edi, [Screen_Max_Y]
221
        mov     eax, edx
227
        mov     eax, edx
Line 225... Line 231...
225
        jge     .check_if_redraw_needed
231
        jge     .check_if_redraw_needed
226
        inc     esi
232
        inc     esi
227
        or      eax, eax
233
        or      eax, eax
228
        jge     @f
234
        jge     @f
229
        xor     eax, eax
235
        xor     eax, eax
-
 
236
    @@:
230
    @@: mov     [screen_workarea.top], eax
237
        mov     [screen_workarea.top], eax
231
        cmp     ebx, edi
238
        cmp     ebx, edi
232
        jle     @f
239
        jle     @f
233
        mov     ebx, edi
240
        mov     ebx, edi
-
 
241
    @@:
234
    @@: mov     [screen_workarea.bottom], ebx
242
        mov     [screen_workarea.bottom], ebx
Line 235... Line 243...
235
 
243
 
236
  .check_if_redraw_needed:
244
  .check_if_redraw_needed:
237
        or      esi, esi
245
        or      esi, esi
Line 326... Line 334...
326
        jnz     .exit
334
        jnz     .exit
Line 327... Line 335...
327
 
335
 
328
        cmp     ebx, -1
336
        cmp     ebx, -1
329
        jne     @f
337
        jne     @f
-
 
338
        mov     ebx, [edi + WDATA.box.left]
330
        mov     ebx, [edi + WDATA.box.left]
339
    @@:
331
    @@: cmp     ecx, -1
340
        cmp     ecx, -1
332
        jne     @f
341
        jne     @f
-
 
342
        mov     ecx, [edi + WDATA.box.top]
333
        mov     ecx, [edi + WDATA.box.top]
343
    @@:
334
    @@: cmp     edx, -1
344
        cmp     edx, -1
335
        jne     @f
345
        jne     @f
-
 
346
        mov     edx, [edi + WDATA.box.width]
336
        mov     edx, [edi + WDATA.box.width]
347
    @@:
337
    @@: cmp     esi, -1
348
        cmp     esi, -1
338
        jne     @f
349
        jne     @f
Line -... Line 350...
-
 
350
        mov     esi, [edi + WDATA.box.height]
339
        mov     esi, [edi + WDATA.box.height]
351
 
340
 
352
    @@:
341
    @@: push    esi edx ecx ebx
353
        push    esi edx ecx ebx
342
        mov     eax, esp
354
        mov     eax, esp
343
        mov     bl, [edi + WDATA.fl_wstate]
355
        mov     bl, [edi + WDATA.fl_wstate]
Line 397... Line 409...
397
;------------------------------------------------------------------------------
409
;------------------------------------------------------------------------------
398
        mov     byte [window_data + 0x20 + WDATA.cl_titlebar + 3], 1 ; desktop is not movable
410
        mov     byte [window_data + 0x20 + WDATA.cl_titlebar + 3], 1 ; desktop is not movable
399
        push    eax ecx
411
        push    eax ecx
400
        xor     eax, eax
412
        xor     eax, eax
401
        mov     ecx, WIN_STACK
413
        mov     ecx, WIN_STACK
-
 
414
    @@:
402
    @@: inc     eax
415
        inc     eax
403
        add     ecx, 2
416
        add     ecx, 2
404
        ; process no
417
        ; process no
405
        mov     [ecx + 0x000], ax
418
        mov     [ecx + 0x000], ax
406
        ; positions in stack
419
        ; positions in stack
407
        mov     [ecx + 0x400], ax
420
        mov     [ecx + 0x400], ax
Line 464... Line 477...
464
        jl      .skip_window
477
        jl      .skip_window
Line 465... Line 478...
465
 
478
 
466
        cmp     eax, [esp + RECT.left]
479
        cmp     eax, [esp + RECT.left]
467
        jae     @f
480
        jae     @f
-
 
481
        mov     eax, [esp + RECT.left]
468
        mov     eax, [esp + RECT.left]
482
    @@:
469
    @@: cmp     ebx, [esp + RECT.top]
483
        cmp     ebx, [esp + RECT.top]
470
        jae     @f
484
        jae     @f
-
 
485
        mov     ebx, [esp + RECT.top]
471
        mov     ebx, [esp + RECT.top]
486
    @@:
472
    @@: cmp     ecx, [esp + RECT.right]
487
        cmp     ecx, [esp + RECT.right]
473
        jbe     @f
488
        jbe     @f
-
 
489
        mov     ecx, [esp + RECT.right]
474
        mov     ecx, [esp + RECT.right]
490
    @@:
475
    @@: cmp     edx, [esp + RECT.bottom]
491
        cmp     edx, [esp + RECT.bottom]
476
        jbe     @f
492
        jbe     @f
Line -... Line 493...
-
 
493
        mov     edx, [esp + RECT.bottom]
477
        mov     edx, [esp + RECT.bottom]
494
 
478
 
495
    @@:
479
    @@: push    esi
496
        push    esi
480
        movzx   esi, word[WIN_POS + esi * 2]
497
        movzx   esi, word[WIN_POS + esi * 2]
Line 481... Line 498...
481
        call    window._.set_screen
498
        call    window._.set_screen
Line 518... Line 535...
518
        jle     .fix_vertical
535
        jle     .fix_vertical
519
        mov     eax, [edi + WDATA.box.width]
536
        mov     eax, [edi + WDATA.box.width]
520
        sub     eax, ebx
537
        sub     eax, ebx
521
        jle     @f
538
        jle     @f
522
        mov     [edi + WDATA.box.width], ebx
539
        mov     [edi + WDATA.box.width], ebx
-
 
540
    @@:
523
    @@: sub     ebx, [edi + WDATA.box.width]
541
        sub     ebx, [edi + WDATA.box.width]
524
        mov     [edi + WDATA.box.left], ebx
542
        mov     [edi + WDATA.box.left], ebx
Line 525... Line 543...
525
 
543
 
526
  .fix_vertical:
544
  .fix_vertical:
527
        mov     eax, [edi + WDATA.box.top]
545
        mov     eax, [edi + WDATA.box.top]
Line 531... Line 549...
531
        jle     .fix_client_box
549
        jle     .fix_client_box
532
        mov     eax, [edi + WDATA.box.height]
550
        mov     eax, [edi + WDATA.box.height]
533
        sub     eax, ebx
551
        sub     eax, ebx
534
        jle     @f
552
        jle     @f
535
        mov     [edi + WDATA.box.height], ebx
553
        mov     [edi + WDATA.box.height], ebx
-
 
554
    @@:
536
    @@: sub     ebx, [edi + WDATA.box.height]
555
        sub     ebx, [edi + WDATA.box.height]
537
        mov     [edi + WDATA.box.top], ebx
556
        mov     [edi + WDATA.box.top], ebx
538
        jmp     .fix_client_box
557
        jmp     .fix_client_box
Line 539... Line 558...
539
 
558
 
540
  .fix_maximized:
559
  .fix_maximized:
Line 653... Line 672...
653
        add     eax, [esi + WDATA.box.height]
672
        add     eax, [esi + WDATA.box.height]
Line 654... Line 673...
654
 
673
 
655
        cmp     ebx, eax
674
        cmp     ebx, eax
656
        jbe     @f
675
        jbe     @f
-
 
676
        mov     ebx, eax
657
        mov     ebx, eax
677
    @@:
Line 658... Line 678...
658
    @@: push    ebx
678
        push    ebx
Line 659... Line 679...
659
 
679
 
660
        xor     edi, edi
680
        xor     edi, edi
Line 672... Line 692...
672
        mov     ecx, [esi + WDATA.cl_titlebar]
692
        mov     ecx, [esi + WDATA.cl_titlebar]
673
        test    ecx, 0x80000000
693
        test    ecx, 0x80000000
674
        jz      @f
694
        jz      @f
675
        sub     ecx, 0x00040404
695
        sub     ecx, 0x00040404
676
        mov     [esi + WDATA.cl_titlebar], ecx
696
        mov     [esi + WDATA.cl_titlebar], ecx
-
 
697
    @@:
677
    @@: and     ecx, 0x00ffffff
698
        and     ecx, 0x00ffffff
678
        call    [draw_line]
699
        call    [draw_line]
679
        inc     edx
700
        inc     edx
680
        cmp     edx, [esp]
701
        cmp     edx, [esp]
681
        jb      .next_line
702
        jb      .next_line
Line 751... Line 772...
751
        add     eax, [esi + WDATA.box.height]
772
        add     eax, [esi + WDATA.box.height]
Line 752... Line 773...
752
 
773
 
753
        cmp     ebx, eax
774
        cmp     ebx, eax
754
        jb      @f
775
        jb      @f
-
 
776
        mov     ebx, eax
755
        mov     ebx, eax
777
    @@:
Line 756... Line 778...
756
    @@: push    ebx
778
        push    ebx
Line 757... Line 779...
757
 
779
 
758
        xor     edi, edi
780
        xor     edi, edi
Line 768... Line 790...
768
        add     eax, 4 * 65536 - 4
790
        add     eax, 4 * 65536 - 4
769
        mov     ecx, [esi + WDATA.cl_titlebar]
791
        mov     ecx, [esi + WDATA.cl_titlebar]
770
        test    ecx, 0x40000000
792
        test    ecx, 0x40000000
771
        jz      @f
793
        jz      @f
772
        add     ecx, 0x00040404
794
        add     ecx, 0x00040404
-
 
795
    @@:
773
    @@: test    ecx, 0x80000000
796
        test    ecx, 0x80000000
774
        jz      @f
797
        jz      @f
775
        sub     ecx, 0x00040404
798
        sub     ecx, 0x00040404
-
 
799
    @@:
776
    @@: mov     [esi + WDATA.cl_titlebar], ecx
800
        mov     [esi + WDATA.cl_titlebar], ecx
777
        and     ecx, 0x00ffffff
801
        and     ecx, 0x00ffffff
778
        call    [draw_line]
802
        call    [draw_line]
779
        inc     edx
803
        inc     edx
780
        cmp     edx, [esp]
804
        cmp     edx, [esp]
781
        jb      .next_line
805
        jb      .next_line
Line 985... Line 1009...
985
        and     [edi + WDATA.fl_wstate], not WSTATE_MINIMIZED
1009
        and     [edi + WDATA.fl_wstate], not WSTATE_MINIMIZED
986
        mov     ebp, window._.set_screen
1010
        mov     ebp, window._.set_screen
987
        cmp     eax, [TASK_COUNT]
1011
        cmp     eax, [TASK_COUNT]
988
        jz      @f
1012
        jz      @f
989
        mov     ebp, calculatescreen
1013
        mov     ebp, calculatescreen
-
 
1014
    @@:
990
    @@: mov     eax, [edi + WDATA.box.left]
1015
        mov     eax, [edi + WDATA.box.left]
991
        mov     ebx, [edi + WDATA.box.top]
1016
        mov     ebx, [edi + WDATA.box.top]
992
        mov     ecx, [edi + WDATA.box.width]
1017
        mov     ecx, [edi + WDATA.box.width]
993
        mov     edx, [edi + WDATA.box.height]
1018
        mov     edx, [edi + WDATA.box.height]
994
        add     ecx, eax
1019
        add     ecx, eax
995
        add     edx, ebx
1020
        add     edx, ebx
Line 1020... Line 1045...
1020
        dec     bl
1045
        dec     bl
1021
        jnz     @f
1046
        jnz     @f
1022
        call    minimize_window
1047
        call    minimize_window
1023
        jmp     .exit
1048
        jmp     .exit
Line -... Line 1049...
-
 
1049
 
1024
 
1050
    @@:
Line 1025... Line 1051...
1025
    @@: call    restore_minimized_window
1051
        call    restore_minimized_window
1026
 
1052
 
Line 1027... Line 1053...
1027
  .exit:
1053
  .exit:
Line 1081... Line 1107...
1081
        xchg    eax, ecx
1107
        xchg    eax, ecx
1082
        call    window._.get_rolledup_height
1108
        call    window._.get_rolledup_height
1083
        mov     [ecx + BOX.height], eax
1109
        mov     [ecx + BOX.height], eax
1084
        xchg    eax, ecx
1110
        xchg    eax, ecx
Line -... Line 1111...
-
 
1111
 
1085
 
1112
    @@:
1086
    @@: call    window._.set_window_box
1113
        call    window._.set_window_box
Line 1087... Line 1114...
1087
        add     esp, BOX.sizeof
1114
        add     esp, BOX.sizeof
1088
 
1115
 
Line 1122... Line 1149...
1122
        jnz     @f
1149
        jnz     @f
1123
        add     esp, -BOX.sizeof
1150
        add     esp, -BOX.sizeof
1124
        lea     eax, [edx + APPDATA.saved_box]
1151
        lea     eax, [edx + APPDATA.saved_box]
1125
        jmp     .set_box
1152
        jmp     .set_box
Line -... Line 1153...
-
 
1153
 
1126
 
1154
    @@:
1127
    @@: mov     eax, [screen_workarea.top]
1155
        mov     eax, [screen_workarea.top]
1128
        push    [screen_workarea.bottom] \
1156
        push    [screen_workarea.bottom] \
1129
                [edi + WDATA.box.width] \
1157
                [edi + WDATA.box.width] \
1130
                eax \
1158
                eax \
1131
                [edi + WDATA.box.left]
1159
                [edi + WDATA.box.left]
Line 1230... Line 1258...
1230
        mov     ecx, [eax + BOX.left]
1258
        mov     ecx, [eax + BOX.left]
1231
        mov     edx, [ebx + BOX.left]
1259
        mov     edx, [ebx + BOX.left]
1232
        cmp     ecx, edx
1260
        cmp     ecx, edx
1233
        jle     @f
1261
        jle     @f
1234
        mov     ecx, edx
1262
        mov     ecx, edx
-
 
1263
    @@:
1235
    @@: mov     [draw_limits.left], ecx
1264
        mov     [draw_limits.left], ecx
1236
        mov     ecx, [eax + BOX.left]
1265
        mov     ecx, [eax + BOX.left]
1237
        add     ecx, [eax + BOX.width]
1266
        add     ecx, [eax + BOX.width]
1238
        add     edx, [ebx + BOX.width]
1267
        add     edx, [ebx + BOX.width]
1239
        cmp     ecx, edx
1268
        cmp     ecx, edx
1240
        jae     @f
1269
        jae     @f
1241
        mov     ecx, edx
1270
        mov     ecx, edx
-
 
1271
    @@:
1242
    @@: mov     [draw_limits.right], ecx
1272
        mov     [draw_limits.right], ecx
1243
        mov     ecx, [eax + BOX.top]
1273
        mov     ecx, [eax + BOX.top]
1244
        mov     edx, [ebx + BOX.top]
1274
        mov     edx, [ebx + BOX.top]
1245
        cmp     ecx, edx
1275
        cmp     ecx, edx
1246
        jle     @f
1276
        jle     @f
1247
        mov     ecx, edx
1277
        mov     ecx, edx
-
 
1278
    @@:
1248
    @@: mov     [draw_limits.top], ecx
1279
        mov     [draw_limits.top], ecx
1249
        mov     ecx, [eax + BOX.top]
1280
        mov     ecx, [eax + BOX.top]
1250
        add     ecx, [eax + BOX.height]
1281
        add     ecx, [eax + BOX.height]
1251
        add     edx, [ebx + BOX.height]
1282
        add     edx, [ebx + BOX.height]
1252
        cmp     ecx, edx
1283
        cmp     ecx, edx
1253
        jae     @f
1284
        jae     @f
1254
        mov     ecx, edx
1285
        mov     ecx, edx
-
 
1286
    @@:
1255
    @@: mov     [draw_limits.bottom], ecx
1287
        mov     [draw_limits.bottom], ecx
Line 1256... Line 1288...
1256
 
1288
 
1257
        ; recalculate screen buffer at old position
1289
        ; recalculate screen buffer at old position
1258
        push    ebx
1290
        push    ebx
1259
        mov     edx, [eax + BOX.height]
1291
        mov     edx, [eax + BOX.height]
Line 1475... Line 1507...
1475
        cmp     cl, 4
1507
        cmp     cl, 4
1476
        je      @f
1508
        je      @f
Line 1477... Line 1509...
1477
 
1509
 
Line -... Line 1510...
-
 
1510
        xor     eax, eax
1478
        xor     eax, eax
1511
 
Line 1479... Line 1512...
1479
 
1512
    @@:
1480
    @@: mov     [edi + APPDATA.wnd_caption], eax
1513
        mov     [edi + APPDATA.wnd_caption], eax
1481
 
1514
 
1482
        mov     esi, [esp]
1515
        mov     esi, [esp]
Line 1599... Line 1632...
1599
        and     al, 0x0f
1632
        and     al, 0x0f
1600
        cmp     al, 0x03
1633
        cmp     al, 0x03
1601
        jne     @f
1634
        jne     @f
1602
        mov     eax, [_skinh]
1635
        mov     eax, [_skinh]
1603
        ret
1636
        ret
-
 
1637
    @@:
1604
    @@: mov     eax, 21
1638
        mov     eax, 21
1605
        ret
1639
        ret
Line 1606... Line 1640...
1606
 
1640
 
1607
align 4
1641
align 4
1608
;------------------------------------------------------------------------------
1642
;------------------------------------------------------------------------------
Line 1617... Line 1651...
1617
        cmp     al, 0x03
1651
        cmp     al, 0x03
1618
        jb      @f
1652
        jb      @f
1619
        mov     eax, [_skinh]
1653
        mov     eax, [_skinh]
1620
        add     eax, 3
1654
        add     eax, 3
1621
        ret
1655
        ret
-
 
1656
    @@:
1622
    @@: or      al, al
1657
        or      al, al
1623
        jnz     @f
1658
        jnz     @f
1624
        mov     eax, 21
1659
        mov     eax, 21
1625
        ret
1660
        ret
-
 
1661
    @@:
1626
    @@: mov     eax, 21 + 2
1662
        mov     eax, 21 + 2
1627
        ret
1663
        ret
Line 1628... Line 1664...
1628
 
1664
 
1629
align 4
1665
align 4
1630
;------------------------------------------------------------------------------
1666
;------------------------------------------------------------------------------
Line 1768... Line 1804...
1768
        test    al,al
1804
        test    al, al
1769
        jz      @f
1805
        jz      @f
1770
        mov     eax, esi
1806
        mov     eax, esi
1771
        mov     [ebp], al
1807
        mov     [ebp], al
1772
        ; -- end body --
1808
        ; -- end body --
-
 
1809
    @@:
1773
    @@: inc     ebp
1810
        inc     ebp
1774
        inc     edx
1811
        inc     edx
1775
        cmp     edx, [ff_xsz]
1812
        cmp     edx, [ff_xsz]
1776
        jb      .ff_new_x
1813
        jb      .ff_new_x
Line 1777... Line 1814...
1777
 
1814
 
Line 2012... Line 2049...
2012
        mov     edx, [TASK_COUNT]
2049
        mov     edx, [TASK_COUNT]
2013
        movzx   edx, word[WIN_POS + edx * 2]
2050
        movzx   edx, word[WIN_POS + edx * 2]
2014
        cmp     edx, [CURRENT_TASK]
2051
        cmp     edx, [CURRENT_TASK]
2015
        jne     @f
2052
        jne     @f
2016
        inc     eax
2053
        inc     eax
-
 
2054
    @@:
2017
    @@: mov     edx, [CURRENT_TASK]
2055
        mov     edx, [CURRENT_TASK]
2018
        shl     edx, 5
2056
        shl     edx, 5
2019
        add     edx, window_data
2057
        add     edx, window_data
2020
        movzx   ebx, [edx + WDATA.fl_wstyle]
2058
        movzx   ebx, [edx + WDATA.fl_wstyle]
2021
        and     bl, 0x0F
2059
        and     bl, 0x0F
2022
        cmp     bl, 3
2060
        cmp     bl, 3
Line 2043... Line 2081...
2043
        cmp     bl, 0
2081
        cmp     bl, 0
2044
        jne     .2
2082
        jne     .2
Line 2045... Line 2083...
2045
 
2083
 
Line -... Line 2084...
-
 
2084
        call    drawwindow_I_caption
2046
        call    drawwindow_I_caption
2085
 
2047
 
2086
  .2:
2048
  .2:   mov     edi, [CURRENT_TASK]
2087
        mov     edi, [CURRENT_TASK]
2049
        shl     edi, 5
2088
        shl     edi, 5
2050
        test    [edi + window_data + WDATA.fl_wstyle], WSTYLE_HASCAPTION
2089
        test    [edi + window_data + WDATA.fl_wstyle], WSTYLE_HASCAPTION
2051
        jz      .exit
2090
        jz      .exit