Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1323 → Rev 1324

/kernel/trunk/gui/window.inc
314,128 → 314,137
ret
 
 
iglobal
align 4
f48call:
dd display_settings.00
dd display_settings.01
dd display_settings.02
dd display_settings.03
dd display_settings.04
dd display_settings.05
dd display_settings.06
dd display_settings.07
dd display_settings.08
endg
 
display_settings:
 
; eax = 0 ; DISPLAY redraw
; ebx = 0 ; DISPLAY redraw
; ebx = 0 ; all
;
; eax = 1 ; BUTTON type
; ebx = 1 ; BUTTON type
; ebx = 0 ; flat
; ebx = 1 ; 3D
; eax = 2 ; set WINDOW colours
; ebx = 2 ; set WINDOW colours
; ebx = pointer to table
; ecx = number of bytes define
; eax = 3 ; get WINDOW colours
; ebx = 3 ; get WINDOW colours
; ebx = pointer to table
; ecx = number of bytes wanted
; eax = 4 ; get skin height
; ebx = 4 ; get skin height
; input : nothing
; output : eax = skin height in pixel
; eax = 5 ; get screen workarea
; ebx = 5 ; get screen workarea
; input : nothing
; output : eax = [left]*65536+[right]
; ebx = [top]*65536+[bottom]
; eax = 6 ; set screen workarea
; ebx = 6 ; set screen workarea
; input : ecx = [left]*65536+[right]
; edx = [top]*65536+[bottom]
; output : nothing
; eax = 7 ; get skin margins
; ebx = 7 ; get skin margins
; input : nothing
; output : eax = [left]*65536+[right]
; ebx = [top]*65536+[bottom]
; eax = 8 ; set window skin
; ebx = 8 ; set window skin
; input : ecx = pointer to file info block
; output : eax = FS error code
cmp ebx,8
ja .fail
jmp dword [f48call+ebx*4]
.00:
 
 
pushad
 
test eax, eax ; redraw display
jnz dspl0
test ebx, ebx
jnz dspl0
cmp [windowtypechanged],dword 1
jne dspl00
mov [windowtypechanged],dword 0
redraw_screen_direct:
mov [dlx],dword 0
mov [dly],dword 0
; redraw display
test ecx, ecx
jnz .01
inc ecx
cmp [windowtypechanged],dword ecx ;ebx=1
jne .fail
mov [windowtypechanged],dword ebx ;eax=0
.redraw_screen_direct:
xor eax,eax
mov [dlx],dword eax
mov [dly],dword eax
mov eax,[Screen_Max_X]
mov [dlxe],eax
mov eax,[Screen_Max_Y]
mov [dlye],eax
mov eax,window_data
call redrawscreen
dspl00:
popad
;maybe use jmp?
; call redrawscreen
jmp redrawscreen
.fail:
ret
dspl0:
 
cmp eax,1 ; button type
jne dspl1
and ebx,1
cmp ebx,[buttontype]
je dspl9
mov [buttontype],ebx
mov [windowtypechanged],dword 1
dspl9:
popad
.01:
; button type
and ecx,1
cmp ecx,[buttontype]
je .01_ex
mov [buttontype],ecx
mov [windowtypechanged],dword ebx ;eax=1
.01_ex:
ret
dspl1:
 
cmp eax,2 ; set common window colours
jne no_com_colours
mov [windowtypechanged],dword 1
.02:
; set common window colours
dec ebx
mov [windowtypechanged],dword ebx ;eax=1
mov esi,[TASK_BASE]
add esi,TASKDATA.mem_start
add ebx,[esi]
mov esi,ebx
add ecx,[esi]
mov esi,ecx
and edx,127
mov edi,common_colours
and ecx,127
cld
mov ecx,edx
; cld not need because cld is set previous call
rep movsb
popad
ret
no_com_colours:
 
cmp eax,3 ; get common window colours
jne no_get_com
.03:
; get common window colours
mov esi,[TASK_BASE]
add esi,TASKDATA.mem_start
add ebx,[esi]
mov edi,ebx
add ecx,[esi]
mov edi,ecx
and edx,127
mov esi,common_colours
and ecx,127
cld
mov ecx,edx
; cld not need because cld is set previous call
rep movsb
popad
ret
no_get_com:
 
cmp eax,4 ; get skin height
jne no_skin_height
popad
.04:
; get skin height
mov eax,[_skinh]
mov [esp+36],eax
mov [esp+32],eax
ret
no_skin_height:
 
cmp eax,5 ; get screen workarea
jne no_get_workarea
popad
.05:
; get screen workarea
mov eax,[screen_workarea.left-2]
mov ax,word[screen_workarea.right]
mov [esp+36],eax
mov [esp+32],eax
mov eax,[screen_workarea.top-2]
mov ax,word[screen_workarea.bottom]
mov [esp+24],eax
mov [esp+20],eax
ret
no_get_workarea:
 
cmp eax,6 ; set screen workarea
jne no_set_workarea
movsx eax,word[esp+16+2]
movsx ebx,word[esp+16]
.06:
; set screen workarea
; pushad
movsx eax,word[esp+16+2+12] ;ecx in the stack
movsx ebx,word[esp+16+12]
cmp eax,ebx
jge .lp1
or eax,eax;[Screen_Max_X]
444,7 → 453,7
@@: cmp ebx,[Screen_Max_X]
jg .lp1
mov [screen_workarea.right],ebx
.lp1: movsx eax,word[esp+24+2]
.lp1: movsx eax,word[esp+24+2] ;edx in the stack
movsx ebx,word[esp+24]
cmp eax,ebx
jge .lp2
455,31 → 464,31
jg .lp2
mov [screen_workarea.bottom],ebx
.lp2: call repos_windows
mov eax, 0
mov ebx, 0
xor eax, eax
xor ebx, ebx
mov ecx, [Screen_Max_X]
mov edx, [Screen_Max_Y]
call calculatescreen
; call calculatescreen
jmp calculatescreen
; jmp redraw_screen_direct
.exit:
popad
ret
no_set_workarea:
; .exit:
; popad
; ret
 
cmp eax,7 ; get skin margins
jne no_get_skinmargins
popad
.07:
; get skin margins
mov eax,dword[_skinmargins+0]
mov [esp+36],eax
mov [esp+32],eax
mov eax,dword[_skinmargins+4]
mov [esp+24],eax
mov [esp+20],eax
ret
no_get_skinmargins:
 
cmp eax,8 ; set window skin
jne no_set_skin
.08:
; set window skin
mov ebx, ecx
call read_skin_file
mov [esp+32+36], eax
 
mov [esp+32], eax
test eax, eax
jnz .ret
xor eax, eax
487,16 → 496,11
mov ecx, [Screen_Max_X]
mov edx, [Screen_Max_Y]
call calculatescreen
jmp redraw_screen_direct
jmp .redraw_screen_direct
.ret:
popad
ret
no_set_skin:
 
popad
ret
 
 
repos_windows:
mov ecx,[TASK_COUNT]
mov edi, window_data+0x20*2