;------------------------------------------------------------------------------	
align 4
draw_appl_button:
; in:
; ebx = [x]*65536 + [size x]
; ecx = [y]*65536 + [size y]
; edx = internal color 0xRRGGBB
; esi = external color 0xRRGGBB
; edi = 0 up or 1 down
COLOR_CHANGE_MAGNITUDE_0 = 0x080808
COLOR_CHANGE_MAGNITUDE = 0x101010
COLOR_CHANGE_MAGNITUDE_1 = 0x202020
COLOR_CHANGE_MAGNITUDE_2 = 0x404040
	pusha
	add	ebx,2 shl 16
	sub	bx,4
	add	ecx,2 shl 16
	sub	cx,4
	mcall	13
;------------------------------------------------------------------------------	
;	mov	edx,esi
	test	edi,edi
	jnz	@f

	mov	eax,COLOR_CHANGE_MAGNITUDE
	call	add_color_change_magnitude
	jmp	.1
;--------------------------------------
align 4
@@:
	mov	eax,COLOR_CHANGE_MAGNITUDE
	call	subtract_color_change_magnitude
;--------------------------------------
align 4
.1:
	call	draw_four_extreme_lines
;------------------------------------------------------------------------------	
	mov	edx,esi
	mov	eax,COLOR_CHANGE_MAGNITUDE_2
	call	subtract_color_change_magnitude
	sub	ecx,1 shl 16
	add	ecx,2
	sub	ebx,1 shl 16
	add	ebx,2
	call	draw_four_extreme_lines
;------------------------------------------------------------------------------
	popa
	ret
;------------------------------------------------------------------------------
align 4
draw_four_extreme_lines:
; top left point
	push	ebx ecx
	shr	ebx,16
	shr	ecx,16
	mcall	1
	pop	ecx ebx
; bottom right point
	push	ebx ecx
	movzx	eax,bx
	shr	ebx,16
	add	ebx,eax
	dec	ebx
	movzx	eax,cx
	shr	ecx,16
	add	ecx,eax
	dec	ecx
	mcall	1
	pop	ecx ebx
;--------------------------------------
; bottom left point
	push	ebx ecx
	shr	ebx,16
	movzx	eax,cx
	shr	ecx,16
	add	ecx,eax
	dec	ecx
	mcall	1
	pop	ecx ebx
;--------------------------------------
; top right point
	push	ebx ecx
	movzx	eax,bx
	shr	ebx,16
	add	ebx,eax
	dec	ebx
	shr	ecx,16
	mcall	1
	pop	ecx ebx
;--------------------------------------	
; top line
	push	ecx
	sub	ecx,1 shl 16
	mov	cx,1
	mcall	13
	pop	ecx
; bottom line 
	push	ecx
	mov	ax,cx
	shl	eax,16
	add	ecx,eax
	mov	cx,1
	mcall	13
	pop	ecx
; left line
	push	ebx
	sub	ebx,1 shl 16
	mov	bx,1
	mcall	13
	pop	ebx
; right line
	push	ebx
	mov	ax,bx
	shl	eax,16
	add	ebx,eax
	mov	bx,1
	mcall	13
	pop	ebx
	
	ret
;------------------------------------------------------------------------------
align 4
subtract_color_change_magnitude:
; in:
; edx = original color
; eax = magnitude
; out:
; edx = processed color
	sub	dl,al
	jae	@f

	xor	dl,dl
;--------------------------------------
align 4
@@:
	ror	edx,8
	ror	eax,8
	sub	dl,al
	jae	@f

	xor	dl,dl
;--------------------------------------
align 4
@@:
	ror	edx,8
	ror	eax,8
	sub	dl,al
	jae	@f

	xor	dl,dl
;--------------------------------------
align 4
@@:
	rol	edx,16
	ret
;------------------------------------------------------------------------------
align 4
add_color_change_magnitude:
; in:
; edx = original color
; eax = magnitude
; out:
; edx = processed color
	add	dl,al
	jae	@f

	mov	dl,0xff
;--------------------------------------
align 4
@@:
	ror	edx,8
	ror	eax,8
	add	dl,al
	jae	@f

	mov	dl,0xff
;--------------------------------------
align 4
@@:
	ror	edx,8
	ror	eax,8
	add	dl,al
	jae	@f

	mov	dl,0xff
;--------------------------------------
align 4
@@:
	rol	edx,16
	ret
;------------------------------------------------------------------------------
align 4
calculate_button_y_coordinate_and_size:
	mov	ecx,[button_top_offset]
	shl	ecx,16
	add	ecx,[height]
	sub	ecx,[button_top_offset]
	sub	ecx,[button_bottom_offset]
	ret
;------------------------------------------------------------------------------