Subversion Repositories Kolibri OS

Rev

Rev 3191 | Go to most recent revision | 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, USERLIST_X + SCROLLBAR_WIDTH + 3
  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.         mov     [edit1.width], eax
  78.  
  79.         push    dword edit1
  80.         call    [edit_box_draw]
  81.  
  82. ; scrollbar
  83.  
  84.         mov     eax, [ysize]
  85.         sub     eax, TOP_Y + 35 ;;;;
  86.         mov     [scroll1.y_size], ax
  87.  
  88.         mov     eax, [xsize]
  89.         sub     eax, SCROLLBAR_WIDTH
  90.         mov     [scroll1.x_pos], ax
  91.  
  92.         mov     [scroll1.all_redraw], 1
  93.  
  94.         push    dword scroll1
  95.         call    [scrollbar_v_draw]
  96.  
  97.         call    draw_windownames
  98.  
  99.         mcall   12, 2
  100.         popa
  101.         ret
  102.  
  103.  
  104.  
  105. print_channel_list:
  106.  
  107.         pusha
  108.  
  109.         mov     eax, 13                         ; draw rectangle (clear list)
  110.  
  111.         mov     ebx, [xsize]
  112.         sub     ebx, USERLIST_X + SCROLLBAR_WIDTH
  113.         shl     ebx, 16
  114.         push    ebx
  115.         mov     bx, USERLIST_X
  116.         mov     ecx, [ysize]
  117.         add     ecx, TEXT_Y shl 16 - (TEXT_Y + 35 + 10 )        ;;;;;
  118.         mov     edx, [colors.work]
  119.         mcall
  120.  
  121.         mov     eax, [scroll1.position]
  122.         xor     edx, edx
  123.         mov     ecx, MAX_NICK_LEN
  124.         mul     ecx
  125.         mov     edx, eax
  126.         mov     eax, [window_open]
  127.         add     edx, [eax + window.data_ptr]
  128.         add     edx, window_data.names
  129.  
  130.         pop     ebx
  131.         mov     bx, TEXT_Y
  132.         mov     ecx, [colors.work_text]
  133.         or      ecx, 0x80000000                 ; ASCIIZ string
  134.         mov     eax, 4                          ; draw text
  135.  
  136.         mov     edi, [ysize]                    ; Calculate how many names will fit on screen
  137.         sub     edi, TEXT_Y + 35 + 10           ;;;;;
  138.   .loop:
  139.         ; TODO: check if name is selected and highlight background color if so
  140.         cmp     byte[edx], ' '                  ; end of list?
  141.         je      .done
  142.         mcall
  143.  
  144.         add     edx, MAX_NICK_LEN               ; next name
  145.         add     ebx, 10                         ; height distance between lines
  146.         sub     edi, 10
  147.         ja      .loop
  148.   .done:
  149.  
  150.         popa
  151.  
  152.         ret
  153.  
  154.  
  155.  
  156.  
  157. draw_channel_text:
  158.  
  159.         pusha
  160.  
  161.         mov     eax, 4                  ; draw text
  162.         mov     ebx, TEXT_X shl 16 + TEXT_Y
  163.         mov     ecx, 12                 ; 12 lines max ?
  164.         mov     esi, [textbox_width]
  165.  
  166.   .dct:
  167.         pusha
  168.         mov     cx, bx
  169.         shl     ecx, 16
  170.         mov     cx, 9                   ; character height
  171.         mov     eax, 13                 ; draw rectangle
  172.         mov     ebx, TEXT_X shl 16
  173.         mov     bx, word[textbox_width]
  174.         imul    bx, 6                   ; character width
  175.         mov     edx, [colors.work]
  176.         mcall
  177.         popa
  178.  
  179.         push    ecx
  180.         mov     ecx, [colors.work_text]
  181.         cmp     word[edx], '* '
  182.         jne     .no_red
  183.         mov     ecx, 0x00aa0000
  184.         jmp     .draw
  185.   .no_red:
  186.  
  187.         cmp     word[edx], '**'
  188.         jne     .no_light_blue
  189.         cmp     byte[edx+2], '*'
  190.         jne     .no_light_blue
  191.         mov     ecx, 0x000000aa
  192.         jmp     .draw
  193.   .no_light_blue:
  194.  
  195.         cmp     byte[edx], '#'
  196.         jne     .no_blue
  197.         mov     ecx, 0x0000aa00
  198. ;        jmp     .draw
  199.   .no_blue:
  200.  
  201.   .draw:
  202.         mcall
  203.         add     edx, [textbox_width]
  204.         add     ebx, 10                 ; height distance between lines
  205.  
  206.         pop     ecx
  207.         loop    .dct
  208.  
  209.         popa
  210.         ret
  211.  
  212.  
  213.  
  214. draw_windownames:
  215.  
  216.         mov     eax, 8
  217.         mov     ebx, 5 shl 16 + 120
  218.         mov     ecx, 12 shl 16 + 12
  219.         mov     edx, WINDOW_BTN_START
  220.         mov     edi, windows
  221.   .more_btn:
  222.         mov     esi, [colors.work_button]
  223.         cmp     [window_open], edi
  224.         jne     @f
  225.         not     esi
  226.         and     esi, 0x00ffffff
  227.       @@:
  228.         mcall
  229.         inc     edx
  230.         add     ebx, 125 shl 16
  231.         add     edi, sizeof.window
  232.         cmp     [edi + + window.data_ptr], 0
  233.         jne     .more_btn
  234.  
  235.         mov     eax, 4
  236.         mov     ebx, 10 shl 16 + 15
  237.         mov     ecx, [colors.work_button_text]
  238.         or      ecx, 0x80000000         ; ASCIIZ string
  239.         lea     edx, [windows + window.name]
  240.         mov     esi, MAX_WINDOWS
  241.   .more:
  242.         mcall
  243.         add     edx, sizeof.window
  244.         cmp     byte[edx], 0
  245.         je      .enough
  246.         add     ebx, 125 shl 16
  247.         dec     esi
  248.         jnz     .more
  249.   .enough:
  250.  
  251.         ret
  252.  
  253.  
  254.