forked from KolibriOS/kolibrios
242 lines
5.8 KiB
PHP
242 lines
5.8 KiB
PHP
|
draw_window:
|
||
|
|
||
|
pusha
|
||
|
|
||
|
mcall 9, thread_info, -1 ; get current window size
|
||
|
mov eax, dword[thread_info+42] ; window xsize
|
||
|
mov ebx, dword[thread_info+46] ; ysize
|
||
|
mov edx, dword[thread_info+62] ; work area xsize
|
||
|
mov esi, dword[thread_info+66] ; ysize
|
||
|
sub eax, edx
|
||
|
sub ebx, esi
|
||
|
|
||
|
cmp edx, WIN_MIN_X
|
||
|
jae .x_ok
|
||
|
mov edx, WIN_MIN_X
|
||
|
.x_ok:
|
||
|
mov [xsize], edx
|
||
|
add edx, eax
|
||
|
|
||
|
cmp esi, WIN_MIN_Y
|
||
|
jae .y_ok
|
||
|
mov esi, WIN_MIN_Y
|
||
|
.y_ok:
|
||
|
mov [ysize], esi
|
||
|
add esi, ebx
|
||
|
mcall 67, -1, -1 ; set the new sizes
|
||
|
|
||
|
mcall 12, 1
|
||
|
xor eax, eax ; draw window
|
||
|
mov ebx, WIN_MIN_X
|
||
|
mov ecx, WIN_MIN_Y
|
||
|
mov edx, [colors.work]
|
||
|
add edx, 0x33000000
|
||
|
mov edi, str_programname
|
||
|
mcall
|
||
|
|
||
|
mov ebx, [xsize]
|
||
|
mov ecx, [ysize]
|
||
|
sub cx, 35
|
||
|
push cx
|
||
|
shl ecx, 16
|
||
|
pop cx
|
||
|
mov edx, [colors.work_graph]
|
||
|
mcall 38 ; draw line
|
||
|
|
||
|
mov ecx, TOP_Y SHL 16 + TOP_Y
|
||
|
mcall
|
||
|
|
||
|
mov edi, [window_open]
|
||
|
cmp [edi + window.type], WINDOWTYPE_CHANNEL
|
||
|
jne .not_channel
|
||
|
|
||
|
mov ebx, [xsize]
|
||
|
sub ebx, 100
|
||
|
push bx
|
||
|
shl ebx, 16
|
||
|
pop bx
|
||
|
mov ecx, [ysize]
|
||
|
add ecx, TOP_Y SHL 16 -(15+20)
|
||
|
mcall
|
||
|
|
||
|
call print_channel_list
|
||
|
|
||
|
.not_channel:
|
||
|
|
||
|
mov edx, [edi + window.data_ptr]
|
||
|
add edx, window_data.text
|
||
|
call draw_channel_text
|
||
|
|
||
|
; editbox
|
||
|
|
||
|
mov eax, [ysize]
|
||
|
sub eax, 30 ;;;;;;
|
||
|
mov [edit1.top], eax
|
||
|
|
||
|
mov eax, [xsize]
|
||
|
sub eax, 10 ;;;;;;
|
||
|
mov [edit1.width], eax
|
||
|
|
||
|
push dword edit1
|
||
|
call [edit_box_draw]
|
||
|
|
||
|
; scrollbar
|
||
|
|
||
|
mov eax, [ysize]
|
||
|
sub eax, TOP_Y + 35 ;;;;
|
||
|
mov [scroll1.y_size], ax
|
||
|
|
||
|
mov eax, [xsize]
|
||
|
sub eax, SCROLLBAR_WIDTH
|
||
|
mov [scroll1.x_pos], ax
|
||
|
|
||
|
mov [scroll1.all_redraw], 1
|
||
|
|
||
|
push dword scroll1
|
||
|
call [scrollbar_v_draw]
|
||
|
|
||
|
call draw_windownames
|
||
|
|
||
|
mcall 12, 2
|
||
|
popa
|
||
|
ret
|
||
|
|
||
|
|
||
|
|
||
|
print_channel_list:
|
||
|
|
||
|
pusha
|
||
|
|
||
|
mov eax, 13 ; draw rectangle (clear list)
|
||
|
|
||
|
mov ebx, [xsize]
|
||
|
sub ebx, 95
|
||
|
shl ebx, 16
|
||
|
push ebx
|
||
|
mov bx, 90 ; x size ;;; FIXME
|
||
|
mov ecx, TEXT_Y shl 16 + 12*10 ; y size ;;; FIXME
|
||
|
mov edx, [colors.work]
|
||
|
mcall
|
||
|
|
||
|
mov eax, 4 ; draw text
|
||
|
pop ebx
|
||
|
mov bx, TEXT_Y
|
||
|
mov ecx, [colors.work_text]
|
||
|
or ecx, 0x80000000 ; ASCIIZ string
|
||
|
mov edx, [window_open]
|
||
|
mov edx, [edx + window.data_ptr]
|
||
|
add edx, window_data.names
|
||
|
mov edi, MAX_CHANNELS
|
||
|
.loop:
|
||
|
mcall
|
||
|
|
||
|
add edx, MAX_NICK_LEN ; next name
|
||
|
add ebx, 10 ; height distance between lines
|
||
|
dec edi
|
||
|
jnz .loop
|
||
|
|
||
|
popa
|
||
|
|
||
|
ret
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
draw_channel_text:
|
||
|
|
||
|
pusha
|
||
|
|
||
|
mov eax, 4 ; draw text
|
||
|
mov ebx, TEXT_X shl 16 + TEXT_Y
|
||
|
mov ecx, 12 ; 12 lines max ?
|
||
|
mov esi, [textbox_width]
|
||
|
|
||
|
.dct:
|
||
|
pusha
|
||
|
mov cx, bx
|
||
|
shl ecx, 16
|
||
|
mov cx, 9 ; character height
|
||
|
mov eax, 13 ; draw rectangle
|
||
|
mov ebx, TEXT_X shl 16
|
||
|
mov bx, word[textbox_width]
|
||
|
imul bx, 6 ; character width
|
||
|
mov edx, [colors.work]
|
||
|
mcall
|
||
|
popa
|
||
|
|
||
|
push ecx
|
||
|
mov ecx, [colors.work_text]
|
||
|
cmp word[edx], '* '
|
||
|
jne .no_red
|
||
|
mov ecx, 0x00aa0000
|
||
|
jmp .draw
|
||
|
.no_red:
|
||
|
|
||
|
cmp word[edx], '**'
|
||
|
jne .no_light_blue
|
||
|
cmp byte[edx+2], '*'
|
||
|
jne .no_light_blue
|
||
|
mov ecx, 0x000000aa
|
||
|
jmp .draw
|
||
|
.no_light_blue:
|
||
|
|
||
|
cmp byte[edx], '#'
|
||
|
jne .no_blue
|
||
|
mov ecx, 0x0000aa00
|
||
|
; jmp .draw
|
||
|
.no_blue:
|
||
|
|
||
|
.draw:
|
||
|
mcall
|
||
|
add edx, [textbox_width]
|
||
|
add ebx, 10 ; height distance between lines
|
||
|
|
||
|
pop ecx
|
||
|
loop .dct
|
||
|
|
||
|
popa
|
||
|
ret
|
||
|
|
||
|
|
||
|
|
||
|
draw_windownames:
|
||
|
|
||
|
mov eax, 8
|
||
|
mov ebx, 5 shl 16 + 120
|
||
|
mov ecx, 12 shl 16 + 12
|
||
|
mov edx, WINDOW_BTN_START
|
||
|
mov edi, windows
|
||
|
.more_btn:
|
||
|
mov esi, [colors.work_button]
|
||
|
cmp [window_open], edi
|
||
|
jne @f
|
||
|
not esi
|
||
|
and esi, 0x00ffffff
|
||
|
@@:
|
||
|
mcall
|
||
|
inc edx
|
||
|
add ebx, 125 shl 16
|
||
|
add edi, sizeof.window
|
||
|
cmp [edi + + window.data_ptr], 0
|
||
|
jne .more_btn
|
||
|
|
||
|
mov eax, 4
|
||
|
mov ebx, 10 shl 16 + 15
|
||
|
mov ecx, [colors.work_button_text]
|
||
|
or ecx, 0x80000000 ; ASCIIZ string
|
||
|
lea edx, [windows + window.name]
|
||
|
mov esi, MAX_WINDOWS
|
||
|
.more:
|
||
|
mcall
|
||
|
add edx, sizeof.window
|
||
|
cmp byte[edx], 0
|
||
|
je .enough
|
||
|
add ebx, 125 shl 16
|
||
|
dec esi
|
||
|
jnz .more
|
||
|
.enough:
|
||
|
|
||
|
ret
|
||
|
|
||
|
|