From a86930f3da9c8bc1cd29ea7a4c5f47e5ec9e48ea Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Sat, 18 Feb 2012 23:28:34 +0000 Subject: [PATCH] Box_Lib - Scrollbar type 2 git-svn-id: svn://kolibrios.org@2354 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../libraries/box_lib/trunk/scrollbar.mac | 2165 +++++++++-------- programs/fs/opendial/opendial.asm | 2 +- programs/media/zsea/data.inc | 4 +- 3 files changed, 1187 insertions(+), 984 deletions(-) diff --git a/programs/develop/libraries/box_lib/trunk/scrollbar.mac b/programs/develop/libraries/box_lib/trunk/scrollbar.mac index 0550830562..7e46295e8a 100644 --- a/programs/develop/libraries/box_lib/trunk/scrollbar.mac +++ b/programs/develop/libraries/box_lib/trunk/scrollbar.mac @@ -1,18 +1,18 @@ ;************************************************************** ; ScrollBar Macro for Kolibri OS -; Copyright (c) 2009, Marat Zakiyanov aka Mario79, aka Mario +; Copyright (c) 2009-2012, Marat Zakiyanov aka Mario79, aka Mario ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: ; * Redistributions of source code must retain the above copyright -; notice, this list of conditions and the following disclaimer. +; notice, this list of conditions and the following disclaimer. ; * Redistributions in binary form must reproduce the above copyright -; notice, this list of conditions and the following disclaimer in the -; documentation and/or other materials provided with the distribution. +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. ; * Neither the name of the nor the -; names of its contributors may be used to endorse or promote products -; derived from this software without specific prior written permission. +; names of its contributors may be used to endorse or promote products +; derived from this software without specific prior written permission. ; ; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED @@ -25,6 +25,8 @@ ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;***************************************************************************** +; 15.11.2011 add scroll type 1 by IgorA +;***************************************************************************** macro scroll_bar_exit { popa @@ -33,251 +35,399 @@ ret 4 ;***************************************************************************** macro draw_up_arrow_vertical { - push ebx + push ebx - xor eax,eax - mov ax,sb_size_x - shr eax,1 - shl eax,16 - add ebx,eax + xor eax,eax + mov ax,sb_size_x + shr eax,1 + shl eax,16 + add ebx,eax - xor eax,eax - mov ax,sb_btn_high - shr eax,1 - shl eax,16 - add ecx,eax + xor eax,eax + mov ax,sb_btn_high + shr eax,1 + shl eax,16 + add ecx,eax - mov edx,sb_line_col - sub ebx,4 shl 16 - mov bx,7 - mov cx,1 - mov eax,13 - int 0x40 - sub ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,5 - int 0x40 - sub ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,3 - int 0x40 - sub ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,1 - int 0x40 - pop ebx + mov edx,sb_line_col + sub ebx,4 shl 16 + mov bx,7 + mov cx,1 + mov eax,13 + int 0x40 + sub ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,5 + int 0x40 + sub ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,3 + int 0x40 + sub ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,1 + int 0x40 + pop ebx +} +;***************************************************************************** +macro draw_up_arrow_vertical_type2 +{ + push ebx + + mov bx,sb_size_x + shr bx,1 + add bx,sb_start_x + + mov cx,sb_btn_high + shr cx,1 + add cx,sb_start_y + + mov ax,bx + shl eax,16 + mov ax,cx + + sub cx,2 + + shl ebx,16 + shl ecx,16 + + mov cx,ax + shr eax,16 + mov bx,ax + + add cx,1 + sub bx,3 + + mcall 38,,,sb_line_col + + add bx,6 + + mcall + pop ebx } ;***************************************************************************** macro draw_down_arrow_vertical { - push ebx + push ebx - xor eax,eax - mov ax,sb_size_x - shr eax,1 - shl eax,16 - add ebx,eax + xor eax,eax + mov ax,sb_size_x + shr eax,1 + shl eax,16 + add ebx,eax - xor eax,eax - mov ax,sb_btn_high - shr eax,1 - shl eax,16 - add ecx,eax + xor eax,eax + mov ax,sb_btn_high + shr eax,1 + shl eax,16 + add ecx,eax - mov edx,sb_line_col - sub ebx,4 shl 16 - mov bx,7 - sub ecx,2 shl 16 - mov cx,1 - mov eax,13 - int 0x40 - add ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,5 - int 0x40 - add ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,3 - int 0x40 - add ecx,1 shl 16 - add ebx,1 shl 16 - mov bx,1 - int 0x40 - pop ebx + mov edx,sb_line_col + sub ebx,4 shl 16 + mov bx,7 + sub ecx,2 shl 16 + mov cx,1 + mov eax,13 + int 0x40 + add ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,5 + int 0x40 + add ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,3 + int 0x40 + add ecx,1 shl 16 + add ebx,1 shl 16 + mov bx,1 + int 0x40 + pop ebx +} +;***************************************************************************** +macro draw_down_arrow_vertical_type2 +{ + push ebx + + mov bx,sb_size_x + shr bx,1 + add bx,sb_start_x + + mov ax,sb_btn_high + shr ax,1 + mov cx,sb_start_y + add cx,sb_size_y + sub cx,ax + + mov ax,bx + shl eax,16 + mov ax,cx + + add cx,1 + + shl ebx,16 + shl ecx,16 + + mov cx,ax + shr eax,16 + mov bx,ax + + sub cx,2 + sub bx,3 + + mcall 38,,,sb_line_col + + add bx,6 + + mcall + pop ebx } ;***************************************************************************** macro draw_runner_center_vertical { - push ebx - push ecx + push ebx + push ecx - xor eax,eax - mov ax,sb_size_x - shr eax,1 - shl eax,16 - add ebx,eax + xor eax,eax + mov ax,sb_size_x + shr eax,1 + shl eax,16 + add ebx,eax - mov edx,sb_run_size - shr edx,1 - shl edx,16 - add ecx,edx - mov edx,sb_line_col - sub ecx,8 shl 16 - sub ebx,5 shl 16 - mov bx,10 - add ecx,4 shl 16 - mov cx,1 - mov eax,13 - int 0x40 - add ecx,3 shl 16 - sub ebx,1 shl 16 - mov bx,12 - int 0x40 - add ebx,1 shl 16 - mov bx,10 - add ecx,3 shl 16 - int 0x40 - pop ecx - pop ebx + mov edx,sb_run_size + shr edx,1 + shl edx,16 + add ecx,edx + mov edx,sb_line_col + sub ecx,8 shl 16 + sub ebx,5 shl 16 + mov bx,10 + add ecx,4 shl 16 + mov cx,1 + mov eax,13 + int 0x40 + add ecx,3 shl 16 + sub ebx,1 shl 16 + mov bx,12 + int 0x40 + add ebx,1 shl 16 + mov bx,10 + add ecx,3 shl 16 + int 0x40 + pop ecx + pop ebx } ;***************************************************************************** macro draw_up_arrow_horizontal { - push ecx + push ecx - xor eax,eax - mov ax,sb_btn_high - shr eax,1 - shl eax,16 - add ebx,eax + xor eax,eax + mov ax,sb_btn_high + shr eax,1 + shl eax,16 + add ebx,eax - xor eax,eax - mov ax,sb_size_y - shr eax,1 - shl eax,16 - add ecx,eax + xor eax,eax + mov ax,sb_size_y + shr eax,1 + shl eax,16 + add ecx,eax - mov edx,sb_line_col - sub ecx,4 shl 16 - mov cx,7 - mov bx,1 + mov edx,sb_line_col + sub ecx,4 shl 16 + mov cx,7 + mov bx,1 - mov eax,13 - int 0x40 - sub ebx,1 shl 16 - add ecx,1 shl 16 - mov cx,5 - int 0x40 - sub ebx,1 shl 16 - add ecx,1 shl 16 - mov cx,3 - int 0x40 - sub ebx,1 shl 16 - add ecx,1 shl 16 - mov cx,1 - int 0x40 - pop ecx + mov eax,13 + int 0x40 + sub ebx,1 shl 16 + add ecx,1 shl 16 + mov cx,5 + int 0x40 + sub ebx,1 shl 16 + add ecx,1 shl 16 + mov cx,3 + int 0x40 + sub ebx,1 shl 16 + add ecx,1 shl 16 + mov cx,1 + int 0x40 + pop ecx +} +;***************************************************************************** +macro draw_up_arrow_horizontal_type2 +{ + push ebx ecx + + mov bx,sb_btn_high + shr bx,1 + add bx,sb_start_x + + mov cx,sb_size_y + shr cx,1 + add cx,sb_start_y + + mov ax,bx + shl eax,16 + mov ax,cx + + sub bx,2 + + shl ebx,16 + shl ecx,16 + + mov cx,ax + shr eax,16 + mov bx,ax + + add bx,1 + sub cx,3 + + mcall 38,,,sb_line_col + + add cx,6 + + mcall + pop ecx ebx } ;***************************************************************************** macro draw_down_arrow_horizontal { - push ecx + push ecx - xor eax,eax - mov ax,sb_btn_high - shr eax,1 - shl eax,16 - add ebx,eax + xor eax,eax + mov ax,sb_btn_high + shr eax,1 + shl eax,16 + add ebx,eax - xor eax,eax - mov ax,sb_size_y - shr eax,1 - shl eax,16 - add ecx,eax + xor eax,eax + mov ax,sb_size_y + shr eax,1 + shl eax,16 + add ecx,eax - mov edx,sb_line_col - sub ecx,4 shl 16 - mov cx,7 - sub ebx,2 shl 16 - mov bx,1 - mov eax,13 - int 0x40 - add ebx,1 shl 16 - add ecx,1 shl 16 - mov cx,5 - int 0x40 - add ebx,1 shl 16 - add ecx,1 shl 16 - mov cx,3 - int 0x40 - add ecx,1 shl 16 - add ebx,1 shl 16 - mov cx,1 - int 0x40 - pop ecx + mov edx,sb_line_col + sub ecx,4 shl 16 + mov cx,7 + sub ebx,2 shl 16 + mov bx,1 + mov eax,13 + int 0x40 + add ebx,1 shl 16 + add ecx,1 shl 16 + mov cx,5 + int 0x40 + add ebx,1 shl 16 + add ecx,1 shl 16 + mov cx,3 + int 0x40 + add ecx,1 shl 16 + add ebx,1 shl 16 + mov cx,1 + int 0x40 + pop ecx +} +;***************************************************************************** +macro draw_down_arrow_horizontal_type2 +{ + push ebx ecx + + mov ax,sb_btn_high + shr ax,1 + mov bx,sb_start_x + add bx,sb_size_x + sub bx,ax + + mov cx,sb_size_y + shr cx,1 + add cx,sb_start_y + + mov ax,bx + shl eax,16 + mov ax,cx + + add cx,1 + + shl ebx,16 + shl ecx,16 + + mov cx,ax + shr eax,16 + mov bx,ax + + sub cx,2 + sub bx,3 + + mcall 38,,,sb_line_col + + add cx,6 + + mcall + pop ecx ebx } ;***************************************************************************** macro draw_runner_center_horizontal { - push ebx - push ecx + push ebx + push ecx - xor eax,eax - mov ax,sb_size_y - shr eax,1 - shl eax,16 - add ecx,eax + xor eax,eax + mov ax,sb_size_y + shr eax,1 + shl eax,16 + add ecx,eax - mov edx,sb_run_size - shr edx,1 - shl edx,16 - add ebx,edx - mov edx,sb_line_col - sub ebx,8 shl 16 - sub ecx,5 shl 16 - mov cx,10 - add ebx,4 shl 16 - mov bx,1 - mov eax,13 - int 0x40 - add ebx,3 shl 16 - sub ecx,1 shl 16 - mov cx,12 - int 0x40 - add ecx,1 shl 16 - mov cx,10 - add ebx,3 shl 16 - int 0x40 - pop ecx - pop ebx + mov edx,sb_run_size + shr edx,1 + shl edx,16 + add ebx,edx + mov edx,sb_line_col + sub ebx,8 shl 16 + sub ecx,5 shl 16 + mov cx,10 + add ebx,4 shl 16 + mov bx,1 + mov eax,13 + int 0x40 + add ebx,3 shl 16 + sub ecx,1 shl 16 + mov cx,12 + int 0x40 + add ecx,1 shl 16 + mov cx,10 + add ebx,3 shl 16 + int 0x40 + pop ecx + pop ebx } ;***************************************************************************** macro use_scroll_bar { scroll_bar: -sb_size_x equ [edi] -sb_start_x equ [edi+2] -sb_size_y equ [edi+4] -sb_start_y equ [edi+6] -sb_btn_high equ [edi+8] -sb_type equ [edi+12] -sb_max_area equ [edi+16] -sb_cur_area equ [edi+20] -sb_position equ [edi+24] -sb_bckg_col equ [edi+28] -sb_frnt_col equ [edi+32] -sb_line_col equ [edi+36] -sb_redraw equ [edi+40] -sb_delta equ [edi+44] -sb_delta2 equ [edi+46] -sb_r_size_x equ [edi+48] +sb_size_x equ [edi] +sb_start_x equ [edi+2] +sb_size_y equ [edi+4] +sb_start_y equ [edi+6] +sb_btn_high equ [edi+8] +sb_type equ [edi+12] +sb_max_area equ [edi+16] +sb_cur_area equ [edi+20] +sb_position equ [edi+24] +sb_bckg_col equ [edi+28] +sb_frnt_col equ [edi+32] +sb_line_col equ [edi+36] +sb_redraw equ [edi+40] +sb_delta equ [edi+44] +sb_delta2 equ [edi+46] +sb_r_size_x equ [edi+48] sb_r_start_x equ [edi+50] -sb_r_size_y equ [edi+52] +sb_r_size_y equ [edi+52] sb_r_start_y equ [edi+54] -sb_m_pos equ [edi+56] -sb_m_pos_2 equ [edi+60] -sb_m_keys equ [edi+64] -sb_run_size equ [edi+68] +sb_m_pos equ [edi+56] +sb_m_pos_2 equ [edi+60] +sb_m_keys equ [edi+64] +sb_run_size equ [edi+68] sb_position2 equ [edi+72] sb_work_size equ [edi+76] sb_all_redraw equ [edi+80] @@ -293,244 +443,271 @@ macro use_scroll_bar_vertical scroll_bar_vertical: .draw: pusha - mov edi,dword [esp+36] - mov sb_delta,word 0 - call .draw_1 - mov sb_all_redraw,dword 0 + mov edi,dword [esp+36] + mov sb_delta,word 0 + call .draw_1 + mov sb_all_redraw,dword 0 scroll_bar_exit .draw_1: pusha ;********************************* - xor eax,eax - mov ax,sb_size_y - mov edx,sb_btn_high - shl edx,1 - sub eax,edx - mov sb_work_size,eax + xor eax,eax + mov ax,sb_size_y + mov edx,sb_btn_high + shl edx,1 + sub eax,edx + mov sb_work_size,eax ;********************************* - mov eax,sb_work_size - mov ebx,sb_max_area - cmp ebx,sb_cur_area + mov eax,sb_work_size + mov ebx,sb_max_area + cmp ebx,sb_cur_area ja @f - - jmp .no_size + jmp .no_size @@: - imul eax,sb_cur_area - xor edx,edx - div ebx - cmp eax,10 - jae @f - mov eax,10 + imul eax,sb_cur_area + xor edx,edx + div ebx + cmp eax,10 + jae @f + mov eax,10 @@: .no_size: - mov sb_run_size,eax + mov sb_run_size,eax ;********************************* - cmp word sb_delta,1 + cmp word sb_delta,1 je .@@_3 - mov eax,sb_work_size - sub eax,sb_run_size - mov ebx,sb_max_area - cmp ebx,sb_cur_area + mov eax,sb_work_size + sub eax,sb_run_size + mov ebx,sb_max_area + cmp ebx,sb_cur_area ja @f - xor eax,eax - jmp .@@_1 + xor eax,eax + jmp .@@_1 @@: - sub ebx,sb_cur_area - imul eax,sb_position - xor edx,edx - div ebx + sub ebx,sb_cur_area + imul eax,sb_position + xor edx,edx + div ebx .@@_1: - mov sb_position2,eax - xor edx,edx - mov dx,sb_size_y - sub edx,sb_btn_high - sub edx,sb_btn_high - sub edx,sb_run_size - cmp sb_position2,edx - jbe .@@_3 - mov sb_position2,edx + mov sb_position2,eax + xor edx,edx + mov dx,sb_size_y + sub edx,sb_btn_high + sub edx,sb_btn_high + sub edx,sb_run_size + cmp sb_position2,edx + jbe .@@_3 + mov sb_position2,edx .@@_3: ;********************************* - mov ebx,sb_start_x - shl ebx,16 - inc ebx - mov ecx,sb_size_y - mov edx,sb_line_col - mov eax,13 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; left extreme line + mov ebx,sb_start_x + shl ebx,16 + inc ebx + mov ecx,sb_size_y + mov edx,sb_line_col + mov eax,13 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; left extreme line @@: - push ebx - ror ebx,16 - add bx,sb_size_x - rol ebx,16 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; right extreme line + push ebx + ror ebx,16 + add bx,sb_size_x + rol ebx,16 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; right extreme line @@: - pop ebx + pop ebx - push ecx + push ecx - add ebx,1 shl 16 - mov bx,sb_size_x - dec ebx - mov cx,1 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; top button - extreme line + add ebx,1 shl 16 + mov bx,sb_size_x + dec ebx + mov cx,1 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; top button - extreme line @@: - push ecx - add ecx,1 shl 16 - add ecx,sb_btn_high - sub ecx,2 - mov edx,sb_frnt_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; top button filling -;********************************* + push ecx + add ecx,1 shl 16 + add ecx,sb_btn_high + sub ecx,2 + mov edx,sb_frnt_col + cmp dword sb_all_redraw,0 + je .no_draw_top_button + int 0x40 ; top button filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + jne .no_type2 +;********************************* +draw_up_arrow_vertical_type2 +;********************************* + jmp .no_draw_top_button +.no_type2: +;********************************* draw_up_arrow_vertical -;********************************* -@@: - pop ecx +;********************************* +.no_draw_top_button: + pop ecx - ror ecx,16 - add ecx,sb_btn_high ;14 shl 16 - rol ecx,16 - mov edx,sb_line_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; top button - bottom line + ror ecx,16 + add ecx,sb_btn_high ;14 shl 16 + rol ecx,16 + mov edx,sb_line_col + cmp dword sb_all_redraw,0 + je @f + mcall 13 ; top button - bottom line @@: - pop ecx + pop ecx ;********************************* - ror ecx,16 - add ecx,sb_btn_high ;15 shl 16 - inc ecx - rol ecx,16 - sub ecx,sb_btn_high ;30 - sub ecx,sb_btn_high - push ecx - mov cx,0 - add ecx,sb_position2 - dec cx - mov eax,13 - test cx,0x8000 - jnz @f - mov edx,sb_bckg_col - int 0x40 ; top interval + ror ecx,16 + add ecx,sb_btn_high ;15 shl 16 + inc ecx + rol ecx,16 + sub ecx,sb_btn_high ;30 + sub ecx,sb_btn_high + push ecx + mov cx,0 + add ecx,sb_position2 + dec cx + mov eax,13 + test cx,0x8000 + jnz @f + mov edx,sb_bckg_col + int 0x40 ; top interval @@: ;********************************* - shr ecx,16 - add ecx,sb_position2 - dec ecx - shl ecx,16 - inc ecx - mov edx,sb_line_col - int 0x40 ; runner - top extreme line + shr ecx,16 + add ecx,sb_position2 + dec ecx + shl ecx,16 + inc ecx + mov edx,sb_line_col + int 0x40 ; runner - top extreme line - add ecx,1 shl 16 - mov cx,0 - add ecx,sb_run_size - mov sb_r_size_x,ebx - mov sb_r_size_y,ecx - sub ecx,2 - mov edx,sb_frnt_col - int 0x40 ; runner filling -;********************************* + add ecx,1 shl 16 + mov cx,0 + add ecx,sb_run_size + mov sb_r_size_x,ebx + mov sb_r_size_y,ecx + sub ecx,2 + mov edx,sb_frnt_col + int 0x40 ; runner filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + je @f +;********************************* draw_runner_center_vertical ;********************************* - cmp word sb_type,1 - jne @f - push eax ebx ecx edx - movzx eax,word sb_start_x - xor ebx,ebx - add bx,sb_r_start_y - dec ebx - movzx ecx,word sb_size_x - mov edx,sb_run_size - dec edx - ;рисование стильной рамки на ползунке - stdcall draw_edge, eax,ebx,ecx,edx, sb_bckg_col, sb_frnt_col, sb_line_col - pop edx ecx ebx eax - @@: - shr ecx,16 - add ecx,sb_run_size - sub ecx,2 - shl ecx,16 - inc ecx - mov edx,sb_line_col - int 0x40 ; runner - bottom extreme line - - add ecx,1 shl 16 - mov cx,sb_start_y - add cx,sb_size_y - sub ecx,sb_btn_high - dec ecx - mov eax,ecx - shr eax,16 - sub cx,ax - test cx,0x8000 - jnz @f - mov edx,sb_bckg_col - mov eax,13 - int 0x40 ; bottom interval -@@: - pop ecx -;********************************* - mov ax,cx - shr ecx,16 - add cx,ax - sub ecx,2 - shl ecx,16 - inc ecx - mov edx,sb_line_col - mov eax,13 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button - top line @@: - push ecx - add ecx,1 shl 16 - add cx,sb_btn_high - sub ecx,2 - mov edx,sb_frnt_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button filling +;----------------------------------------------------------------------------- +; scrollbar type 1 - stylish frame + cmp word sb_type,1 + jne @f + push eax ebx ecx edx + movzx eax,word sb_start_x + xor ebx,ebx + add bx,sb_r_start_y + dec ebx + movzx ecx,word sb_size_x + mov edx,sb_run_size + dec edx + ; drawing a stylish frame on the slider + stdcall draw_edge,eax,ebx,ecx,edx,sb_bckg_col,sb_frnt_col,sb_line_col + pop edx ecx ebx eax +@@: +;----------------------------------------------------------------------------- + shr ecx,16 + add ecx,sb_run_size + sub ecx,2 + shl ecx,16 + inc ecx + mov edx,sb_line_col + int 0x40 ; runner - bottom extreme line + + add ecx,1 shl 16 + mov cx,sb_start_y + add cx,sb_size_y + sub ecx,sb_btn_high + dec ecx + mov eax,ecx + shr eax,16 + sub cx,ax + test cx,0x8000 + jnz @f + mov edx,sb_bckg_col + mov eax,13 + int 0x40 ; bottom interval +@@: + pop ecx +;********************************* + mov ax,cx + shr ecx,16 + add cx,ax + sub ecx,2 + shl ecx,16 + inc ecx + mov edx,sb_line_col + mov eax,13 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; bottom button - top line +@@: + push ecx + add ecx,1 shl 16 + add cx,sb_btn_high + sub ecx,2 + mov edx,sb_frnt_col + cmp dword sb_all_redraw,0 + je .no_draw_bottom_button + int 0x40 ; bottom button filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + jne .no_type2_1 +;********************************* +draw_down_arrow_vertical_type2 +;********************************* + jmp .no_draw_bottom_button +.no_type2_1: ;********************************* draw_down_arrow_vertical ;********************************* -@@: - pop ecx +.no_draw_bottom_button: + pop ecx - ror ecx,16 - add ecx,sb_btn_high - rol ecx,16 + ror ecx,16 + add ecx,sb_btn_high + rol ecx,16 - mov edx,sb_line_col - mov cx,1 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button - extreme line - cmp word sb_type,1 - jne @f - movzx eax,word sb_start_x - movzx ebx,word sb_start_y - movzx ecx,word sb_size_x - ;рисование стильной рамки на верхней кнопке - stdcall draw_edge, eax,ebx,ecx,sb_btn_high,\ - sb_bckg_col, sb_frnt_col, sb_line_col - - add bx,sb_size_y - sub ebx,sb_btn_high - dec ebx - ;рисование стильной рамки на нижней кнопке - stdcall draw_edge, eax,ebx,ecx,sb_btn_high,\ - sb_bckg_col, sb_frnt_col, sb_line_col + mov edx,sb_line_col + mov cx,1 + cmp dword sb_all_redraw,0 + je @f + mcall 13 ; bottom button - extreme line +;----------------------------------------------------------------------------- +; scrollbar type 1 - stylish frame + cmp word sb_type,1 + jne @f + movzx eax,word sb_start_x + movzx ebx,word sb_start_y + movzx ecx,word sb_size_x + ; drawing a stylish frame on the top button + stdcall draw_edge,eax,ebx,ecx,sb_btn_high,\ + sb_bckg_col,sb_frnt_col,sb_line_col + add bx,sb_size_y + sub ebx,sb_btn_high + dec ebx + ; drawing a stylish frame on the bottom button + stdcall draw_edge,eax,ebx,ecx,sb_btn_high,\ + sb_bckg_col,sb_frnt_col,sb_line_col @@: +;----------------------------------------------------------------------------- popa ret ;***************************************************************************** @@ -540,298 +717,295 @@ draw_down_arrow_vertical ;***************************************************************************** .mouse: pusha - mov edi,dword [esp+36] - mcall 37,1 - mov sb_m_pos,eax - cmp dword sb_m_pos_2,0 - jne @f + mov edi,dword [esp+36] + mcall 37,1 + mov sb_m_pos,eax + cmp dword sb_m_pos_2,0 + jne @f - mov sb_m_pos_2,eax + mov sb_m_pos_2,eax @@: - mcall 37,2 - mov sb_m_keys,eax + mcall 37,2 + mov sb_m_keys,eax - cmp sb_m_keys,eax - je @f - - mov sb_m_keys,eax - - mov sb_delta,dword 0 - - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .continue_2 + cmp sb_m_keys,eax + je @f + mov sb_m_keys,eax + mov sb_delta,dword 0 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .continue_2 @@: - cmp dword sb_m_keys,0 + cmp dword sb_m_keys,0 jne @f - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .correct_1 ;.exit_sb + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .correct_1 ;.exit_sb @@: - mov sb_delta,word 1 + mov sb_delta,word 1 .continue_2: - mov eax,sb_m_pos - test eax,0x80000000 - jnz .exit_sb + mov eax,sb_m_pos + test eax,0x80000000 + jnz .exit_sb - test eax,0x8000 - jnz .exit_sb + test eax,0x8000 + jnz .exit_sb - mov ebx,eax - shr ebx,16 ; x position - shl eax,16 - shr eax,16 ; y position + mov ebx,eax + shr ebx,16 ; x position + shl eax,16 + shr eax,16 ; y position - mov cx,sb_start_y - cmp ax,cx + mov cx,sb_start_y + cmp ax,cx jb .exit_sb - cmp word sb_delta2,0 + cmp word sb_delta2,0 je @f - push ecx - add cx,sb_btn_high - cmp ax,cx - pop ecx + push ecx + add cx,sb_btn_high + cmp ax,cx + pop ecx jb .exit_sb @@: - add cx,sb_size_y - cmp ax,cx + add cx,sb_size_y + cmp ax,cx ja .exit_sb - cmp word sb_delta2,0 + cmp word sb_delta2,0 je @f - sub cx,sb_btn_high - cmp ax,cx + sub cx,sb_btn_high + cmp ax,cx ja .exit_sb @@: - cmp word sb_delta2,1 + cmp word sb_delta2,1 je @f - cmp dword sb_m_keys,0 + cmp dword sb_m_keys,0 je .exit_sb - mov cx,sb_start_x - cmp bx,cx + mov cx,sb_start_x + cmp bx,cx jb .exit_sb - add cx,sb_size_x - cmp bx,cx + add cx,sb_size_x + cmp bx,cx ja .exit_sb - mov cx,sb_r_start_y - cmp ax,cx + mov cx,sb_r_start_y + cmp ax,cx jb .no_runner - add cx,sb_r_size_y - cmp ax,cx + add cx,sb_r_size_y + cmp ax,cx ja .no_runner - mov sb_delta2,word 1 + mov sb_delta2,word 1 @@: - push eax - mov ax,sb_m_pos - cmp ax,sb_m_pos_2 + push eax + mov ax,sb_m_pos + cmp ax,sb_m_pos_2 je .correct - shl eax,16 - shr eax,16 - mov ebx,sb_m_pos_2 - shl ebx,16 - shr ebx,16 - cmp eax,ebx - jb .sub + shl eax,16 + shr eax,16 + mov ebx,sb_m_pos_2 + shl ebx,16 + shr ebx,16 + cmp eax,ebx + jb .sub - sub eax,ebx - mov ebx,eax - add sb_position2,ebx - xor eax,eax - mov ax,sb_size_y - sub eax,sb_btn_high - sub eax,sb_btn_high - sub eax,sb_run_size - cmp sb_position2,eax - jbe @f + sub eax,ebx + mov ebx,eax + add sb_position2,ebx + xor eax,eax + mov ax,sb_size_y + sub eax,sb_btn_high + sub eax,sb_btn_high + sub eax,sb_run_size + cmp sb_position2,eax + jbe @f - mov sb_position2,eax + mov sb_position2,eax @@: - mov eax,sb_m_pos - mov sb_m_pos_2,eax - pop eax - call .draw_1 - jmp .no_runner_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + pop eax + call .draw_1 + jmp .no_runner_1 .correct: - pop eax - jmp .exit_sb + pop eax + jmp .exit_sb .correct_1: - mov sb_delta,dword 0 - jmp .exit_sb + mov sb_delta,dword 0 + jmp .exit_sb .sub: - sub ebx,eax - sub sb_position2,ebx - test sb_position2,dword 0x80000000 - jz @f + sub ebx,eax + sub sb_position2,ebx + test sb_position2,dword 0x80000000 + jz @f - mov sb_position2,dword 0 + mov sb_position2,dword 0 @@: - mov eax,sb_m_pos - mov sb_m_pos_2,eax - pop eax - call .draw_1 - jmp .no_runner_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + pop eax + call .draw_1 + jmp .no_runner_1 ;***************************************************************************** .no_runner: - mov sb_delta,dword 0 + mov sb_delta,dword 0 .no_runner_1: - xor ecx,ecx - mov cx,sb_start_y - add cx,sb_btn_high ;15 - cmp word sb_delta,1 + xor ecx,ecx + mov cx,sb_start_y + add cx,sb_btn_high ;15 + cmp word sb_delta,1 je .scroll_sb - cmp ax,cx + cmp ax,cx ja .scroll_sb - cmp dword sb_m_keys,0 - je .exit_sb + cmp dword sb_m_keys,0 + je .exit_sb - mov eax,sb_ar_offset - cmp sb_position,eax ;dword 0 - jbe @f + mov eax,sb_ar_offset + cmp sb_position,eax ;dword 0 + jbe @f - sub sb_position,eax - jmp .all_sb + sub sb_position,eax + jmp .all_sb @@: - xor eax,eax - mov sb_position,eax ;dword 0 - mov sb_position2,eax ;dword 0 - jmp .all_sb + xor eax,eax + mov sb_position,eax ;dword 0 + mov sb_position2,eax ;dword 0 + jmp .all_sb ;***************************************************************************** .scroll_sb: - add cx,sb_size_y - sub cx,sb_btn_high - sub cx,sb_btn_high - cmp word sb_delta,1 + add cx,sb_size_y + sub cx,sb_btn_high + sub cx,sb_btn_high + cmp word sb_delta,1 je @f - cmp ax,cx + cmp ax,cx ja .down_sb @@: - mov ebx,sb_btn_high ;16 ;15 - add bx,sb_start_y - sub cx,bx - sub ax,bx + mov ebx,sb_btn_high ;16 ;15 + add bx,sb_start_y + sub cx,bx + sub ax,bx .scroll_sb_1: - mov ebx,sb_run_size + mov ebx,sb_run_size ;***************************************************************************** - cmp word sb_delta,1 + cmp word sb_delta,1 je .continue @@: - mov edx,eax - push ebx - shr ebx,1 - sub edx,ebx - pop ebx - mov sb_position2,edx - test sb_position2,dword 0x80000000 - jz .test_1 + mov edx,eax + push ebx + shr ebx,1 + sub edx,ebx + pop ebx + mov sb_position2,edx + test sb_position2,dword 0x80000000 + jz .test_1 - mov sb_position2,dword 0 - jmp .continue + mov sb_position2,dword 0 + jmp .continue .test_1: - xor edx,edx - mov dx,sb_size_y - sub edx,sb_btn_high - sub edx,sb_btn_high - sub edx,sb_run_size - cmp sb_position2,edx - jbe .continue + xor edx,edx + mov dx,sb_size_y + sub edx,sb_btn_high + sub edx,sb_btn_high + sub edx,sb_run_size + cmp sb_position2,edx + jbe .continue - mov sb_position2,edx + mov sb_position2,edx -.continue: - mov eax,sb_position2 - sub ecx,ebx +.continue: + mov eax,sb_position2 + sub ecx,ebx .continue_1: ;***************************************************************************** - mov ebx,eax + mov ebx,eax - mov eax,sb_max_area - cmp eax,sb_cur_area + mov eax,sb_max_area + cmp eax,sb_cur_area ja @f - xor eax,eax - inc eax - mov sb_position2,eax - jmp .all_sb + xor eax,eax + inc eax + mov sb_position2,eax + jmp .all_sb @@: - sub eax,sb_cur_area - inc eax - shl eax,10 - xor edx,edx - div ecx - shl edx,1 - cmp edx,ecx + sub eax,sb_cur_area + inc eax + shl eax,10 + xor edx,edx + div ecx + shl edx,1 + cmp edx,ecx jb @f - inc eax + inc eax @@: - imul eax,ebx - shr eax,10 + imul eax,ebx + shr eax,10 - cmp sb_position,eax + cmp sb_position,eax je .exit_sb - cmp eax,0 + cmp eax,0 ja @f - xor eax,eax + xor eax,eax @@: .store_position: - mov sb_position,eax + mov sb_position,eax .all_sb: - mov sb_redraw,dword 1 - call .draw_1 - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .exit_sb + mov sb_redraw,dword 1 + call .draw_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .exit_sb ;***************************************************************************** .down_sb: - cmp dword sb_m_keys,0 - je .exit_sb + cmp dword sb_m_keys,0 + je .exit_sb - mov eax,sb_max_area - mov ebx,sb_ar_offset - sub eax,sb_cur_area - push eax - sub eax,ebx - cmp sb_position,eax - pop eax - jae @f + mov eax,sb_max_area + mov ebx,sb_ar_offset + sub eax,sb_cur_area + push eax + sub eax,ebx + cmp sb_position,eax + pop eax + jae @f - add sb_position,ebx - jmp .all_sb + add sb_position,ebx + jmp .all_sb @@: - mov sb_position,eax - xor eax,eax - mov ax,sb_size_y - sub eax,sb_btn_high - sub eax,sb_btn_high - sub eax,sb_run_size - mov sb_position2,eax - jmp .all_sb + mov sb_position,eax + xor eax,eax + mov ax,sb_size_y + sub eax,sb_btn_high + sub eax,sb_btn_high + sub eax,sb_run_size + mov sb_position2,eax + jmp .all_sb .exit_sb: scroll_bar_exit } @@ -846,247 +1020,275 @@ macro use_scroll_bar_horizontal scroll_bar_horizontal: .draw: pusha - mov edi,dword [esp+36] - mov sb_delta,word 0 - call .draw_1 - mov sb_all_redraw,dword 0 + mov edi,dword [esp+36] + mov sb_delta,word 0 + call .draw_1 + mov sb_all_redraw,dword 0 scroll_bar_exit .draw_1: pusha ;********************************* - xor eax,eax - mov ax,sb_size_x ;sb_size_y - mov edx,sb_btn_high - shl edx,1 - sub eax,edx - mov sb_work_size,eax + xor eax,eax + mov ax,sb_size_x ;sb_size_y + mov edx,sb_btn_high + shl edx,1 + sub eax,edx + mov sb_work_size,eax ;********************************* - mov eax,sb_work_size ;sb_max_area - mov ebx,sb_max_area - cmp ebx,sb_cur_area + mov eax,sb_work_size ;sb_max_area + mov ebx,sb_max_area + cmp ebx,sb_cur_area ja @f - jmp .no_size + jmp .no_size @@: - imul eax,sb_cur_area - xor edx,edx - div ebx - cmp eax,10 - jae @f - mov eax,10 + imul eax,sb_cur_area + xor edx,edx + div ebx + cmp eax,10 + jae @f + mov eax,10 @@: .no_size: - mov sb_run_size,eax + mov sb_run_size,eax ;********************************* - cmp word sb_delta,1 + cmp word sb_delta,1 je .@@_3 - mov eax,sb_work_size - sub eax,sb_run_size - mov ebx,sb_max_area - cmp ebx,sb_cur_area + mov eax,sb_work_size + sub eax,sb_run_size + mov ebx,sb_max_area + cmp ebx,sb_cur_area ja @f - xor eax,eax - jmp .@@_1 + xor eax,eax + jmp .@@_1 @@: - sub ebx,sb_cur_area - imul eax,sb_position - xor edx,edx - div ebx + sub ebx,sb_cur_area + imul eax,sb_position + xor edx,edx + div ebx .@@_1: - mov sb_position2,eax - xor edx,edx - mov dx,sb_size_x - sub edx,sb_btn_high - sub edx,sb_btn_high - sub edx,sb_run_size - cmp sb_position2,edx - jbe .@@_3 - mov sb_position2,edx + mov sb_position2,eax + xor edx,edx + mov dx,sb_size_x + sub edx,sb_btn_high + sub edx,sb_btn_high + sub edx,sb_run_size + cmp sb_position2,edx + jbe .@@_3 + mov sb_position2,edx .@@_3: ;********************************* - mov ebx,sb_size_x - mov ecx,sb_start_y - shl ecx,16 - inc ecx - mov edx,sb_line_col - mov eax,13 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; top extreme line + mov ebx,sb_size_x + mov ecx,sb_start_y + shl ecx,16 + inc ecx + mov edx,sb_line_col + mov eax,13 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; top extreme line @@: - push ecx - ror ecx,16 - add cx,sb_size_y - rol ecx,16 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom extreme line + push ecx + ror ecx,16 + add cx,sb_size_y + rol ecx,16 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; bottom extreme line @@: - pop ecx + pop ecx - push ebx + push ebx - add ecx,1 shl 16 - mov cx,sb_size_y - dec ecx - mov bx,1 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; left button - extreme line + add ecx,1 shl 16 + mov cx,sb_size_y + dec ecx + mov bx,1 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; left button - extreme line @@: - push ebx - add ebx,1 shl 16 - add ebx,sb_btn_high - sub ebx,2 - mov edx,sb_frnt_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; left button filling + push ebx + add ebx,1 shl 16 + add ebx,sb_btn_high + sub ebx,2 + mov edx,sb_frnt_col + cmp dword sb_all_redraw,0 + je .no_draw_top_button + int 0x40 ; left button filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + jne .no_type2 +;********************************* +draw_up_arrow_horizontal_type2 +;********************************* + jmp .no_draw_top_button +.no_type2: ;********************************* draw_up_arrow_horizontal ;********************************* -@@: - pop ebx +.no_draw_top_button: + pop ebx - ror ebx,16 - add ebx,sb_btn_high ;14 shl 16 - rol ebx,16 - mov edx,sb_line_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; left button - right line + ror ebx,16 + add ebx,sb_btn_high ;14 shl 16 + rol ebx,16 + mov edx,sb_line_col + cmp dword sb_all_redraw,0 + je @f + mcall 13 ; left button - right line @@: - pop ebx + pop ebx ;********************************* - ror ebx,16 - add ebx,sb_btn_high ;15 shl 16 - inc ebx - rol ebx,16 - sub ebx,sb_btn_high ;30 - sub ebx,sb_btn_high - push ebx - mov bx,0 - add ebx,sb_position2 - dec bx - mov eax,13 - test bx,0x8000 - jnz @f - mov edx,sb_bckg_col - int 0x40 ; left interval + ror ebx,16 + add ebx,sb_btn_high ;15 shl 16 + inc ebx + rol ebx,16 + sub ebx,sb_btn_high ;30 + sub ebx,sb_btn_high + push ebx + mov bx,0 + add ebx,sb_position2 + dec bx + mov eax,13 + test bx,0x8000 + jnz @f + mov edx,sb_bckg_col + int 0x40 ; left interval @@: ;********************************* - shr ebx,16 - add ebx,sb_position2 - dec ebx - shl ebx,16 - inc ebx - mov edx,sb_line_col - int 0x40 ; runner - left extreme line + shr ebx,16 + add ebx,sb_position2 + dec ebx + shl ebx,16 + inc ebx + mov edx,sb_line_col + int 0x40 ; runner - left extreme line - add ebx,1 shl 16 - mov bx,0 - add ebx,sb_run_size - mov sb_r_size_x,ebx - mov sb_r_size_y,ecx - sub ebx,2 - mov edx,sb_frnt_col - int 0x40 ; runner filling -;********************************* + add ebx,1 shl 16 + mov bx,0 + add ebx,sb_run_size + mov sb_r_size_x,ebx + mov sb_r_size_y,ecx + sub ebx,2 + mov edx,sb_frnt_col + int 0x40 ; runner filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + je @f +;********************************* draw_runner_center_horizontal ;********************************* - cmp word sb_type,1 - jne @f - push eax ebx ecx edx - xor eax,eax - add ax,sb_r_start_x - dec eax - movzx ebx,word sb_start_y - mov ecx,sb_run_size - dec ecx - movzx edx,word sb_size_y - ;рисование стильной рамки на ползунке - stdcall draw_edge, eax,ebx,ecx,edx,\ - sb_bckg_col, sb_frnt_col, sb_line_col - pop edx ecx ebx eax - @@: - - shr ebx,16 - add ebx,sb_run_size - sub ebx,2 - shl ebx,16 - inc ebx - mov edx,sb_line_col - int 0x40 ; runner - bottom extreme line +@@: +;----------------------------------------------------------------------------- +; scrollbar type 1 - stylish frame + cmp word sb_type,1 + jne @f + push eax ebx ecx edx + xor eax,eax + add ax,sb_r_start_x + dec eax + movzx ebx,word sb_start_y + mov ecx,sb_run_size + dec ecx + movzx edx,word sb_size_y + ; drawing a stylish frame on the slider + stdcall draw_edge,eax,ebx,ecx,edx,\ + sb_bckg_col,sb_frnt_col,sb_line_col + pop edx ecx ebx eax +@@: +;----------------------------------------------------------------------------- + shr ebx,16 + add ebx,sb_run_size + sub ebx,2 + shl ebx,16 + inc ebx + mov edx,sb_line_col + int 0x40 ; runner - bottom extreme line - add ebx,1 shl 16 - mov bx,sb_start_x - add bx,sb_size_x - sub ebx,sb_btn_high - dec ebx - mov eax,ebx - shr eax,16 - sub bx,ax - test bx,0x8000 - jnz @f - mov edx,sb_bckg_col - mov eax,13 - int 0x40 ; bottom interval + add ebx,1 shl 16 + mov bx,sb_start_x + add bx,sb_size_x + sub ebx,sb_btn_high + dec ebx + mov eax,ebx + shr eax,16 + sub bx,ax + test bx,0x8000 + jnz @f + mov edx,sb_bckg_col + mov eax,13 + int 0x40 ; bottom interval @@: - pop ebx + pop ebx ;********************************* - mov ax,bx - shr ebx,16 - add bx,ax - sub ebx,2 - shl ebx,16 - inc ebx - mov edx,sb_line_col - mov eax,13 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button - top line + mov ax,bx + shr ebx,16 + add bx,ax + sub ebx,2 + shl ebx,16 + inc ebx + mov edx,sb_line_col + mov eax,13 + cmp dword sb_all_redraw,0 + je @f + int 0x40 ; bottom button - top line @@: - push ebx - add ebx,1 shl 16 - add bx,sb_btn_high - sub ebx,2 - mov edx,sb_frnt_col - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button filling + push ebx + add ebx,1 shl 16 + add bx,sb_btn_high + sub ebx,2 + mov edx,sb_frnt_col + cmp dword sb_all_redraw,0 + je .no_draw_bottom_button + int 0x40 ; bottom button filling +;----------------------------------------------------------------------------- +; scrollbar type 2 + cmp word sb_type,2 + jne .no_type2_1 +;********************************* +draw_down_arrow_horizontal_type2 +;********************************* + jmp .no_draw_bottom_button +.no_type2_1: ;********************************* draw_down_arrow_horizontal ;********************************* -@@: - pop ebx +.no_draw_bottom_button: + pop ebx - ror ebx,16 - add ebx,sb_btn_high ;14 shl 16 - rol ebx,16 + ror ebx,16 + add ebx,sb_btn_high ;14 shl 16 + rol ebx,16 - mov edx,sb_line_col - mov bx,1 - cmp dword sb_all_redraw,0 - je @f - int 0x40 ; bottom button - extreme line - cmp word sb_type,1 - jne @f - ;рисование стильной рамки на левой кнопке - movzx eax,word sb_start_x - movzx ebx,word sb_start_y - movzx edx,word sb_size_y - stdcall draw_edge, eax,ebx,sb_btn_high,edx,\ - sb_bckg_col, sb_frnt_col, sb_line_col - - movzx eax,word sb_start_x - add ax,sb_size_x - sub eax,sb_btn_high - dec eax - ;рисование стильной рамки на правой кнопке - stdcall draw_edge, eax,ebx,sb_btn_high,edx,\ - sb_bckg_col, sb_frnt_col, sb_line_col + mov edx,sb_line_col + mov bx,1 + cmp dword sb_all_redraw,0 + je @f + mcall 13 ; bottom button - extreme line +;----------------------------------------------------------------------------- +; scrollbar type 1 - stylish frame + cmp word sb_type,1 + jne @f + ; drawing a stylish frame on the left button + movzx eax,word sb_start_x + movzx ebx,word sb_start_y + movzx edx,word sb_size_y + stdcall draw_edge,eax,ebx,sb_btn_high,edx,\ + sb_bckg_col,sb_frnt_col,sb_line_col + + movzx eax,word sb_start_x + add ax,sb_size_x + sub eax,sb_btn_high + dec eax + ; drawing a stylish frame on the right button + stdcall draw_edge,eax,ebx,sb_btn_high,edx,\ + sb_bckg_col,sb_frnt_col,sb_line_col @@: +;----------------------------------------------------------------------------- popa ret ;***************************************************************************** @@ -1095,301 +1297,302 @@ draw_down_arrow_horizontal .mouse: pusha mov edi,dword [esp+36] - mcall 37,1 - mov sb_m_pos,eax - cmp dword sb_m_pos_2,0 - jne @f + mcall 37,1 + mov sb_m_pos,eax + cmp dword sb_m_pos_2,0 + jne @f - mov sb_m_pos_2,eax + mov sb_m_pos_2,eax @@: - mcall 37,2 - mov sb_m_keys,eax + mcall 37,2 + mov sb_m_keys,eax - cmp sb_m_keys,eax - je @f + cmp sb_m_keys,eax + je @f - mov sb_m_keys,eax + mov sb_m_keys,eax - mov sb_delta,dword 0 + mov sb_delta,dword 0 - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .continue_2 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .continue_2 @@: - cmp dword sb_m_keys,0 + cmp dword sb_m_keys,0 jne @f - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .correct_1 ;.exit_sb + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .correct_1 ;.exit_sb @@: - mov sb_delta,word 1 + mov sb_delta,word 1 .continue_2: - mov eax,sb_m_pos - test eax,0x80000000 - jnz .exit_sb + mov eax,sb_m_pos + test eax,0x80000000 + jnz .exit_sb - test eax,0x8000 - jnz .exit_sb + test eax,0x8000 + jnz .exit_sb - mov ebx,eax - shr eax,16 ; x position - shl ebx,16 - shr ebx,16 ; y position + mov ebx,eax + shr eax,16 ; x position + shl ebx,16 + shr ebx,16 ; y position - mov cx,sb_start_x ;y - cmp ax,cx + mov cx,sb_start_x ;y + cmp ax,cx jb .exit_sb - cmp word sb_delta2,0 + cmp word sb_delta2,0 je @f - push ecx - add cx,sb_btn_high - cmp ax,cx - pop ecx + push ecx + add cx,sb_btn_high + cmp ax,cx + pop ecx jb .exit_sb @@: - add cx,sb_size_x ;y - cmp ax,cx + add cx,sb_size_x ;y + cmp ax,cx ja .exit_sb - cmp word sb_delta2,0 + cmp word sb_delta2,0 je @f - sub cx,sb_btn_high - cmp ax,cx + sub cx,sb_btn_high + cmp ax,cx ja .exit_sb @@: - cmp word sb_delta2,1 + cmp word sb_delta2,1 je @f - cmp dword sb_m_keys,0 + cmp dword sb_m_keys,0 je .exit_sb - mov cx,sb_start_y ;x - cmp bx,cx + mov cx,sb_start_y ;x + cmp bx,cx jb .exit_sb - add cx,sb_size_y ;x - cmp bx,cx + add cx,sb_size_y ;x + cmp bx,cx ja .exit_sb - mov cx,sb_r_start_x - cmp ax,cx + mov cx,sb_r_start_x + cmp ax,cx jb .no_runner - add cx,sb_r_size_x - cmp ax,cx + add cx,sb_r_size_x + cmp ax,cx ja .no_runner - mov sb_delta2,word 1 + mov sb_delta2,word 1 @@: - push eax - mov eax,sb_m_pos - mov ebx,sb_m_pos_2 - shr eax,16 - shr ebx,16 - cmp eax,ebx + push eax + mov eax,sb_m_pos + mov ebx,sb_m_pos_2 + shr eax,16 + shr ebx,16 + cmp eax,ebx je .correct -; shl eax,16 -; shr eax,16 -; mov ebx,sb_m_pos_2 -; shl ebx,16 -; shr ebx,16 -; cmp eax,ebx - jb .sub +; shl eax,16 +; shr eax,16 +; mov ebx,sb_m_pos_2 +; shl ebx,16 +; shr ebx,16 +; cmp eax,ebx + jb .sub - sub eax,ebx - mov ebx,eax - add sb_position2,ebx - xor eax,eax - mov ax,sb_size_x ;y - sub eax,sb_btn_high - sub eax,sb_btn_high - sub eax,sb_run_size - cmp sb_position2,eax - jbe @f + sub eax,ebx + mov ebx,eax + add sb_position2,ebx + xor eax,eax + mov ax,sb_size_x ;y + sub eax,sb_btn_high + sub eax,sb_btn_high + sub eax,sb_run_size + cmp sb_position2,eax + jbe @f - mov sb_position2,eax + mov sb_position2,eax @@: - mov eax,sb_m_pos - mov sb_m_pos_2,eax - pop eax - call .draw_1 - jmp .no_runner_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + pop eax + call .draw_1 + jmp .no_runner_1 .correct: - pop eax - jmp .exit_sb + pop eax + jmp .exit_sb .correct_1: - mov sb_delta,dword 0 - jmp .exit_sb + mov sb_delta,dword 0 + jmp .exit_sb .sub: - sub ebx,eax - sub sb_position2,ebx - test sb_position2,dword 0x80000000 - jz @f + sub ebx,eax + sub sb_position2,ebx + test sb_position2,dword 0x80000000 + jz @f - mov sb_position2,dword 0 + mov sb_position2,dword 0 @@: - mov eax,sb_m_pos - mov sb_m_pos_2,eax - pop eax - call .draw_1 - jmp .no_runner_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + pop eax + call .draw_1 + jmp .no_runner_1 ;***************************************************************************** .no_runner: - mov sb_delta,dword 0 + mov sb_delta,dword 0 .no_runner_1: - xor ecx,ecx - mov cx,sb_start_x ;y - add cx,sb_btn_high ;15 - cmp word sb_delta,1 + xor ecx,ecx + mov cx,sb_start_x ;y + add cx,sb_btn_high ;15 + cmp word sb_delta,1 je .scroll_sb - cmp ax,cx + cmp ax,cx ja .scroll_sb - cmp dword sb_m_keys,0 - je .exit_sb + cmp dword sb_m_keys,0 + je .exit_sb - mov eax,sb_ar_offset - cmp sb_position,eax ;dword 0 - jbe @f + mov eax,sb_ar_offset + cmp sb_position,eax ;dword 0 + jbe @f - sub sb_position,eax - jmp .all_sb + sub sb_position,eax + jmp .all_sb @@: - xor eax,eax - mov sb_position,eax ;dword 0 - mov sb_position2,eax ;dword 0 - jmp .all_sb + xor eax,eax + mov sb_position,eax ;dword 0 + mov sb_position2,eax ;dword 0 + jmp .all_sb ;***************************************************************************** .scroll_sb: - add cx,sb_size_x ;y - sub cx,sb_btn_high - sub cx,sb_btn_high - cmp word sb_delta,1 + add cx,sb_size_x ;y + sub cx,sb_btn_high + sub cx,sb_btn_high + cmp word sb_delta,1 je @f - cmp ax,cx + cmp ax,cx ja .down_sb @@: - mov ebx,sb_btn_high ;16 ;15 - add bx,sb_start_x ;y - sub cx,bx - sub ax,bx + mov ebx,sb_btn_high ;16 ;15 + add bx,sb_start_x ;y + sub cx,bx + sub ax,bx .scroll_sb_1: - mov ebx,sb_run_size + mov ebx,sb_run_size ;***************************************************************************** - cmp word sb_delta,1 + cmp word sb_delta,1 je .continue @@: - mov edx,eax + mov edx,eax - push ebx - shr ebx,1 - sub edx,ebx - pop ebx - mov sb_position2,edx - test sb_position2,dword 0x80000000 + push ebx + shr ebx,1 + sub edx,ebx + pop ebx + mov sb_position2,edx + test sb_position2,dword 0x80000000 jz .test_1 - mov sb_position2,dword 0 - jmp .continue + mov sb_position2,dword 0 + jmp .continue .test_1: - xor edx,edx - mov dx,sb_size_x ;y - sub edx,sb_btn_high - sub edx,sb_btn_high - sub edx,sb_run_size - cmp sb_position2,edx - jbe .continue + xor edx,edx + mov dx,sb_size_x ;y + sub edx,sb_btn_high + sub edx,sb_btn_high + sub edx,sb_run_size + cmp sb_position2,edx + jbe .continue - mov sb_position2,edx + mov sb_position2,edx -.continue: - mov eax,sb_position2 - sub ecx,ebx +.continue: + mov eax,sb_position2 + sub ecx,ebx .continue_1: ;***************************************************************************** - mov ebx,eax + mov ebx,eax - mov eax,sb_max_area - cmp eax,sb_cur_area + mov eax,sb_max_area + cmp eax,sb_cur_area ja @f - xor eax,eax - inc eax - mov sb_position2,eax - jmp .all_sb + xor eax,eax + inc eax + mov sb_position2,eax + jmp .all_sb @@: - sub eax,sb_cur_area - inc eax - shl eax,10 - xor edx,edx - div ecx - shl edx,1 - cmp edx,ecx + sub eax,sb_cur_area + inc eax + shl eax,10 + xor edx,edx + div ecx + shl edx,1 + cmp edx,ecx jb @f - inc eax + inc eax @@: imul eax,ebx - shr eax,10 + shr eax,10 - cmp sb_position,eax + cmp sb_position,eax je .exit_sb - cmp eax,0 + cmp eax,0 ja @f - xor eax,eax + xor eax,eax @@: .store_position: - mov sb_position,eax + mov sb_position,eax .all_sb: - mov sb_redraw,dword 1 - call .draw_1 - mov eax,sb_m_pos - mov sb_m_pos_2,eax - jmp .exit_sb + mov sb_redraw,dword 1 + call .draw_1 + mov eax,sb_m_pos + mov sb_m_pos_2,eax + jmp .exit_sb ;***************************************************************************** .down_sb: - cmp dword sb_m_keys,0 - je .exit_sb + cmp dword sb_m_keys,0 + je .exit_sb - mov eax,sb_max_area - mov ebx,sb_ar_offset - sub eax,sb_cur_area - push eax - sub eax,ebx - cmp sb_position,eax - pop eax - jae @f + mov eax,sb_max_area + mov ebx,sb_ar_offset + sub eax,sb_cur_area + push eax + sub eax,ebx + cmp sb_position,eax + pop eax + jae @f - add sb_position,ebx - jmp .all_sb + add sb_position,ebx + jmp .all_sb @@: - mov sb_position,eax - xor eax,eax - mov ax,sb_size_x - sub eax,sb_btn_high - sub eax,sb_btn_high - sub eax,sb_run_size - mov sb_position2,eax - jmp .all_sb + mov sb_position,eax + xor eax,eax + mov ax,sb_size_x + sub eax,sb_btn_high + sub eax,sb_btn_high + sub eax,sb_run_size + mov sb_position2,eax + jmp .all_sb +;***************************************************************************** .exit_sb: scroll_bar_exit } diff --git a/programs/fs/opendial/opendial.asm b/programs/fs/opendial/opendial.asm index 9af763da4f..8323862898 100644 --- a/programs/fs/opendial/opendial.asm +++ b/programs/fs/opendial/opendial.asm @@ -2803,7 +2803,7 @@ scroll_bar_data_vertical: .size_y dw 300 ;+4 .start_y dw 45 ;+6 .btn_high dd 15 ;+8 -.type dd 1 ;+12 +.type dd 0 ;+12 .max_area dd 10 ;+16 .cur_area dd 2 ;+20 .position dd 0 ;+24 diff --git a/programs/media/zsea/data.inc b/programs/media/zsea/data.inc index c45c52ba18..a7d6bcada5 100644 --- a/programs/media/zsea/data.inc +++ b/programs/media/zsea/data.inc @@ -974,7 +974,7 @@ scroll_bar_data_vertical: .size_y dw 300 ;+4 .start_y dw 30 ;+6 .btn_high dd 15 ;+8 -.type dd 1 ;+12 +.type dd 2 ;+12 .max_area dd 10 ;+16 .cur_area dd 2 ;+20 .position dd 0 ;+24 @@ -1008,7 +1008,7 @@ scroll_bar_data_horizontal: .size_y dw 15 ;0 ;+4 .start_y dw 300 ;0 ;+6 .btn_high dd 15 ;+8 -.type dd 1 ;+12 +.type dd 2 ;+12 .max_area dd 10 ;+16 .cur_area dd 2 ;+20 .position dd 0 ;+24