Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. draw_window:
  2.  
  3.         pusha
  4.  
  5.         mcall   9, thread_info, -1              ; get current window size
  6.         mov     eax, dword[thread_info+42]      ; window xsize
  7.         mov     ebx, dword[thread_info+46]      ; ysize
  8.         mov     edx, dword[thread_info+62]      ; work area xsize
  9.         mov     esi, dword[thread_info+66]      ; ysize
  10.         sub     eax, edx
  11.         sub     ebx, esi
  12.  
  13.         cmp     edx, WIN_MIN_X
  14.         jae     .x_ok
  15.         mov     edx, WIN_MIN_X
  16.   .x_ok:
  17.         mov     [xsize], edx
  18.         add     edx, eax
  19.  
  20.         cmp     esi, WIN_MIN_Y
  21.         jae     .y_ok
  22.         mov     esi, WIN_MIN_Y
  23.   .y_ok:
  24.         mov     [ysize], esi
  25.         add     esi, ebx
  26.         mcall   67, -1, -1                      ; set the new sizes
  27.  
  28.         mcall   12, 1
  29.         xor     eax, eax                        ; draw window
  30.         mov     ebx, WIN_MIN_X
  31.         mov     ecx, WIN_MIN_Y
  32.         mov     edx, [colors.work]
  33.         add     edx, 0x33000000
  34.         mov     edi, str_programname
  35.         mcall
  36.  
  37.         mov     ebx, [xsize]
  38.         mov     ecx, [ysize]
  39.         sub     cx, 35
  40.         push    cx
  41.         shl     ecx, 16
  42.         pop     cx
  43.         mov     edx, [colors.work_graph]
  44.         mcall   38                              ; draw line
  45.  
  46.         mov     ecx, TOP_Y SHL 16 + TOP_Y
  47.         mcall
  48.  
  49.         mov     edi, [window_open]
  50.         cmp     [edi + window.type], WINDOWTYPE_CHANNEL
  51.         jne     .not_channel
  52.  
  53.         mov     ebx, [xsize]
  54.         sub     ebx, 100
  55.         push    bx
  56.         shl     ebx, 16
  57.         pop     bx
  58.         mov     ecx, [ysize]
  59.         add     ecx, TOP_Y SHL 16 -(15+20)
  60.         mcall
  61.  
  62.         call    print_channel_list
  63.  
  64.   .not_channel:
  65.  
  66.         mov     edx, [edi + window.data_ptr]
  67.         add     edx, window_data.text
  68.         call    draw_channel_text
  69.  
  70. ; editbox
  71.  
  72.         mov     eax, [ysize]
  73.         sub     eax, 30 ;;;;;;
  74.         mov     [edit1.top], eax
  75.  
  76.         mov     eax, [xsize]
  77.         sub     eax, 10 ;;;;;;
  78.         mov     [edit1.width], eax
  79.  
  80.         push    dword edit1
  81.         call    [edit_box_draw]
  82.  
  83. ; scrollbar
  84.  
  85.         mov     eax, [ysize]
  86.         sub     eax, TOP_Y + 35 ;;;;
  87.         mov     [scroll1.y_size], ax
  88.  
  89.         mov     eax, [xsize]
  90.         sub     eax, SCROLLBAR_WIDTH
  91.         mov     [scroll1.x_pos], ax
  92.  
  93.         mov     [scroll1.all_redraw], 1
  94.  
  95.         push    dword scroll1
  96.         call    [scrollbar_v_draw]
  97.  
  98.         call    draw_windownames
  99.  
  100.         mcall   12, 2
  101.         popa
  102.         ret
  103.  
  104.  
  105.  
  106. print_channel_list:
  107.  
  108.         pusha
  109.  
  110.         mov     eax, 13                 ; draw rectangle (clear list)
  111.  
  112.         mov     ebx, [xsize]
  113.         sub     ebx, 95
  114.         shl     ebx, 16
  115.         push    ebx
  116.         mov     bx,  90                         ; x size ;;; FIXME
  117.         mov     ecx, TEXT_Y shl 16 + 12*10      ; y size ;;; FIXME
  118.         mov     edx, [colors.work]
  119.         mcall
  120.  
  121.         mov     eax, 4                  ; draw text
  122.         pop     ebx
  123.         mov     bx, TEXT_Y
  124.         mov     ecx, [colors.work_text]
  125.         or      ecx, 0x80000000         ; ASCIIZ string
  126.         mov     edx, [window_open]
  127.         mov     edx, [edx + window.data_ptr]
  128.         add     edx, window_data.names
  129.         mov     edi, MAX_CHANNELS
  130.   .loop:
  131.         mcall
  132.  
  133.         add     edx, MAX_NICK_LEN       ; next name
  134.         add     ebx, 10                 ; height distance between lines
  135.         dec     edi
  136.         jnz     .loop
  137.  
  138.         popa
  139.  
  140.         ret
  141.  
  142.  
  143.  
  144.  
  145. draw_channel_text:
  146.  
  147.         pusha
  148.  
  149.         mov     eax, 4                  ; draw text
  150.         mov     ebx, TEXT_X shl 16 + TEXT_Y
  151.         mov     ecx, 12                 ; 12 lines max ?
  152.         mov     esi, [textbox_width]
  153.  
  154.   .dct:
  155.         pusha
  156.         mov     cx, bx
  157.         shl     ecx, 16
  158.         mov     cx, 9                   ; character height
  159.         mov     eax, 13                 ; draw rectangle
  160.         mov     ebx, TEXT_X shl 16
  161.         mov     bx, word[textbox_width]
  162.         imul    bx, 6                   ; character width
  163.         mov     edx, [colors.work]
  164.         mcall
  165.         popa
  166.  
  167.         push    ecx
  168.         mov     ecx, [colors.work_text]
  169.         cmp     word[edx], '* '
  170.         jne     .no_red
  171.         mov     ecx, 0x00aa0000
  172.         jmp     .draw
  173.   .no_red:
  174.  
  175.         cmp     word[edx], '**'
  176.         jne     .no_light_blue
  177.         cmp     byte[edx+2], '*'
  178.         jne     .no_light_blue
  179.         mov     ecx, 0x000000aa
  180.         jmp     .draw
  181.   .no_light_blue:
  182.  
  183.         cmp     byte[edx], '#'
  184.         jne     .no_blue
  185.         mov     ecx, 0x0000aa00
  186. ;        jmp     .draw
  187.   .no_blue:
  188.  
  189.   .draw:
  190.         mcall
  191.         add     edx, [textbox_width]
  192.         add     ebx, 10                 ; height distance between lines
  193.  
  194.         pop     ecx
  195.         loop    .dct
  196.  
  197.         popa
  198.         ret
  199.  
  200.  
  201.  
  202. draw_windownames:
  203.  
  204.         mov     eax, 8
  205.         mov     ebx, 5 shl 16 + 120
  206.         mov     ecx, 12 shl 16 + 12
  207.         mov     edx, WINDOW_BTN_START
  208.         mov     edi, windows
  209.   .more_btn:
  210.         mov     esi, [colors.work_button]
  211.         cmp     [window_open], edi
  212.         jne     @f
  213.         not     esi
  214.         and     esi, 0x00ffffff
  215.       @@:
  216.         mcall
  217.         inc     edx
  218.         add     ebx, 125 shl 16
  219.         add     edi, sizeof.window
  220.         cmp     [edi + + window.data_ptr], 0
  221.         jne     .more_btn
  222.  
  223.         mov     eax, 4
  224.         mov     ebx, 10 shl 16 + 15
  225.         mov     ecx, [colors.work_button_text]
  226.         or      ecx, 0x80000000         ; ASCIIZ string
  227.         lea     edx, [windows + window.name]
  228.         mov     esi, MAX_WINDOWS
  229.   .more:
  230.         mcall
  231.         add     edx, sizeof.window
  232.         cmp     byte[edx], 0
  233.         je      .enough
  234.         add     ebx, 125 shl 16
  235.         dec     esi
  236.         jnz     .more
  237.   .enough:
  238.  
  239.         ret
  240.  
  241.  
  242.