optimization mouse code and delete 9 function and not use it now

git-svn-id: svn://kolibrios.org@830 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2008-07-23 12:35:26 +00:00
parent a4d9a318f2
commit 4533639793
14 changed files with 69 additions and 126 deletions

View File

@ -3,7 +3,7 @@
#pragma option A
#codesize
#include "..\..\lib\kolibri.h--"
#include "..\lib\kolibri.h--"
#include "use_library.h--"
//////////////////////////////////////////////////////////////////
//Bit mask from editbox
@ -62,7 +62,7 @@ byte id;
}
edit_box_mouse stdcall (dword 0,0,#edit1);
edit_box_mouse stdcall (#edit1);
}

View File

@ -30,12 +30,7 @@ cl_curs_y equ [edi+60] ;
ed_shift_pos equ [edi+64] ;¯®«®¦¥­¨¥ ªãàá®à 
ed_shift_pos_old equ [edi+68] ;áâ à®¥ ¯®«®¦¥­¨¥ ªãàá®à 
.draw:
pusha
mov eax,9
push procinfo
pop ebx
or ecx,-1
mcall
pushad
;--- à¨á㥬 à ¬ªã ---
mov edi,dword [esp+36]
call .draw_border ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
@ -59,14 +54,14 @@ ed_shift_pos_old equ [edi+68] ;
;<3B>¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å ä㭪権 ¨ ¯®áâ ®¡à ¡®â稪®¢
;;;;;;;;;;;;;;;;;;;;;;;;;;
.editbox_exit:
popa
popad
ret 4
;==========================================================
;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
;==========================================================
edit_box_key:
pusha
pushad
mov edi,dword [esp+36]
test word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je edit_box.editbox_exit
@ -106,18 +101,7 @@ use_work_key
;==========================================================
;save for stdcall ebx,esi,edi,ebp
edit_box_mouse:
pop eax ;opint to back
pop edx ;scr_w
pop ecx ;ebp ;scr_h
push eax
; pop eax
; pop edx ;scr_w
; pop ecx ;scr_h
; push eax ;pointer to back
pusha
mov ebp,ecx
pushad
mov edi,dword [esp+36]
;debug
;----------------------------------------------------------
@ -146,7 +130,7 @@ pusha
;----------------------------------------------------------
;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
;----------------------------------------------------------
@@: mcall 37,0
@@: mcall 37,1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”ã­ªæ¨ï ®¡à ¡®âª¨ ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -162,7 +146,7 @@ use_key_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”㭪樨 ¤«ï à ¡®âë á mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_mouse_func ;scr_w
use_mouse_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -548,4 +532,3 @@ szVersion_op db 'version_op',0
;;;;;;;;;;;
align 16
mouse_flag dd 0x0
procinfo process_information

View File

@ -154,7 +154,7 @@ ret
; ¢ ®¡é¥© ¡¨â®¢®© ¬ àà¨æ¥ á®áâ®ï­¨ï ª®¬¯®­¥­â®¢ word ed_flags
;----------------------------------------------------------
edit_box.check_offset:
pusha
pushad
mov ecx,ed_pos
mov ebx,ed_offset
cmp ebx,ecx
@ -830,11 +830,10 @@ edit_box_mouse.mouse_wigwag:
;;;;;;;;;;;;;;;;;;
;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
;;;;;;;;;;;;;;;;;;
mov ebx,[procinfo.box.left]
add ebx,ed_left
add ebx,dword [esp+20];scr_w
test ax,0x8000
jnz edit_box_mouse.mleft
mov ebx,ed_left
cmp eax,ebx
jb edit_box_mouse.mleft
@ -920,8 +919,6 @@ edit_box_mouse.mright:
}
macro use_work_mouse
; pop edx ;scr_h
; pop ebp ;scr_w
;----------------------------------------------------------
;--- € ­¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §­ë¥ áâ®à®­ë?
;----------------------------------------------------------
@ -931,9 +928,7 @@ macro use_work_mouse
;----------------------------------------------------------
;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
;----------------------------------------------------------
mov ebx,[procinfo.box.top]
add ebx,ed_top
add ebx,dword [esp+24] ;ecx scr_h
mov ebx,ed_top
cmp ax,bx
jl edit_box_mouse._blur;.mouse_end_no_focus
@ -943,36 +938,31 @@ macro use_work_mouse
shr eax,16
mov ebx,[procinfo.box.left]
add ebx,ed_left
add ebx,dword [esp+20] ;edx scr_w
mov ebx,ed_left
cmp ax,bx
jl edit_box_mouse._blur;.mouse_end_no_focus
add ebx,ed_width
cmp ax,bx
jg edit_box_mouse._blur;.mouse_end_no_focus
;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
push eax
mov ebp,ed_color
call edit_box.clear_cursor
pop eax
edit_box_mouse._mvpos:
mov ebx,dword [procinfo.box.left]
xor edx,edx
sub eax,ed_left
sub eax,ebx
;
add ebx,dword [esp+20] ; scr_w
sub eax,2
;
mov ebx,6
div bx
add eax,ed_offset
cmp eax,ed_size
jna edit_box_mouse._mshift
mov eax,ed_size
edit_box_mouse._mshift:
;;;;;;;
;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥­¨ï ¯® shift
@ -1025,7 +1015,7 @@ edit_box_mouse.drc: call edit_box.draw_border
; Œ ªà®á ¢ë室 
macro edit_ex
{
popa
popad
ret
}
macro debug

View File

@ -111,13 +111,9 @@ still: ;
jz button
push dword edit1
push 22
push 5
call [edit_box_mouse]
push dword edit2
push 22
push 5
call [edit_box_mouse]
push dword check1

View File

@ -1,4 +1,4 @@
..\FASM\fasm.exe box_lib.asm
..\FASM\fasm.exe editbox_ex.asm editbox_ex.kex
@fasm.exe box_lib.asm
@fasm.exe editbox_ex.asm editbox_ex.kex
REM ..\FASM\kpack.exe editbox_ex
..\emul\klbrinwin.exe editbox_ex.kex
@klbrinwin.exe editbox_ex.kex

View File

@ -2,7 +2,7 @@
;;;;;;;;;;;;;;;;;;
include 'editbox.mac' ;¬ ªà®á ª®â®àë© ¤®«¦¥­ ®¡«¥£ç¨âì ¦¨§­ì :) ᯥ樠«ì­® ¤«ï editbox
;;;;;;;;;;;;;;;;;;
macro use_edit_box procinfo,scr_h,scr_w
macro use_edit_box
{
edit_box:
ed_width equ [edi] ;è¨à¨­  ª®¬¯®­¥­â 
@ -16,18 +16,18 @@ ed_text_color equ [edi+28] ;梥
ed_max equ [edi+32] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦­® ¬ ªá¨¬ «ì­® ¢¢¥áâ¨
ed_text equ [edi+36] ;㪠§ â¥«ì ­  ¡ãä¥à
ed_flags equ [edi+40] ;ä« £¨
ed_size equ [edi+42] ;ª®«-¢® ᨬ¢®«®¢
ed_pos equ [edi+46] ;¯®§¨æ¨ï ªãàá®à 
ed_offset equ [edi+50] ;ᬥ饭¨¥
cl_curs_x equ [edi+54] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
cl_curs_y equ [edi+58] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
ed_shift_pos equ [edi+62] ;¯®«®¦¥­¨¥ ªãàá®à 
ed_shift_pos_old equ [edi+66] ;áâ à®¥ ¯®«®¦¥­¨¥ ªãàá®à 
ed_size equ [edi+44] ;ª®«-¢® ᨬ¢®«®¢
ed_pos equ [edi+48] ;¯®§¨æ¨ï ªãàá®à 
ed_offset equ [edi+52] ;ᬥ饭¨¥
cl_curs_x equ [edi+56] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
cl_curs_y equ [edi+60] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
ed_shift_pos equ [edi+64] ;¯®«®¦¥­¨¥ ªãàá®à 
ed_shift_pos_old equ [edi+68] ;áâ à®¥ ¯®«®¦¥­¨¥ ªãàá®à 
;==========================================================
;=== ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ =================================
;==========================================================
.draw:
pusha
pushad
;--- à¨á㥬 à ¬ªã ---
call .draw_border ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
.draw_bg_cursor_text:
@ -54,7 +54,7 @@ edit_ex
;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
;==========================================================
.key:
pusha
pushad
test word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je .editbox_exit
test word ed_flags,ed_mouse_on
@ -91,7 +91,7 @@ use_work_key
;=== ®¡à ¡®âª  ¬ëè¨ =======================================
;==========================================================
.mouse:
pusha
pushad
;debug
;----------------------------------------------------------
;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
@ -117,13 +117,14 @@ pusha
je @f
jmp ._blur
;----------------------------------------------------------
;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
;----------------------------------------------------------
@@: mcall 37,0
@@: mcall 37,1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”ã­ªæ¨ï ®¡à ¡®âª¨ ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_work_mause scr_h,scr_w
use_work_mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -135,7 +136,7 @@ use_key_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”㭪樨 ¤«ï à ¡®âë á mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_mouse_func scr_w
use_mouse_func
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox
@ -161,12 +162,8 @@ ed_mouse_on = 100000000b
ed_mous_adn_b= 100011000b
ed_mouse_on_off=1111111011111111b
ed_height=14 ; ¢ëá®â 
macro draw_edit_boxes start,_end,use_f9,procinfo
macro draw_edit_boxes start,_end
{
if use_f9 eq
else
mcall 9,procinfo,-1
end if
mov edi,start
mov ecx,((_end-start)/ed_struc_size)
@@:
@ -194,7 +191,7 @@ macro key_edit_boxes start,end
add edi,ed_struc_size
loop @b
}
ed_struc_size=70
ed_struc_size=72
struc edit_box width,left,top,color,shift_color,focus_border_color,\
blur_border_color,text_color,max,text,flags,size,pos
{
@ -208,7 +205,7 @@ struc edit_box width,left,top,color,shift_color,focus_border_color,\
.text_color dd text_color
.max dd max
.text dd text
.flags dw flags+0
.flags dd flags+0
.size dd size+0
.pos dd pos+0
.offset dd 0
@ -245,12 +242,8 @@ macro edit_boxes_set_sys_color start,end,color_table
loop @b
}
macro draw_edit_box ed_ptr,use_f9,procinfo
macro draw_edit_box ed_ptr
{
if use_f9 eq
else
mcall 9,procinfo,-1
end if
mov edi,ed_ptr
call edit_box.draw
}

View File

@ -84,23 +84,17 @@ draw_edit_boxes -
Передаваемые параметры
editboxes - указатель на информационную структуру боксов
editboxes_end - конец информационной структуры боксов
use_f9 и procinfo - при передаче этого параметра - при перерисовки боксов будет исползована фунция
mcall 9,procinfo,-1
которая получает данные о окне и складывает параметры по адресу procinfo- его то же обязательно нужно передавать!!!!
Если в программе уже используется эта функция, то не нужно указывать данные параметр!!!!
Как под вариант существует макрос
draw_edit_box - он используется если выводится один бокс
Передаваемый параметр
editboxes - указатель на информационную структуру боксов
use_f9 и procinfo - при передаче этого параметра - при перерисовки боксов будет использована функция
mcall 9,procinfo,-1
которая получает данные о окне и складывает параметры по адресу procinfo- его то же обязательно нужно передавать!!!!
Если в программе уже используется эта функция, то не нужно указывать данные параметр!!!!
Больше никаких параметров передавать не нужно.
**********
default_box - макрос который приводит основные данные макроса по дефолту т.е. Снимает битовую матрицу выделения
Специально для KFM :)) Нужно добавить этот код при обработчике yes or no при копировании. Если будет вести себя неадекватно - необходимо раскомментировать строки в данном макросе
так за все время и не был использован в KFM
@ -128,7 +122,7 @@ struc edit_box width,left,top,color,focus_border_color,blur_border_color,text_co
.text_color dd text_color
.max dd max
.text dd text
.flags dw flags+0
.flags dd flags+0
.size dd size+0
.pos dd 0 - где будет находиться курсор
.offset dd 0

View File

@ -6,6 +6,7 @@ You bunny wrote .....
Это не много фольклера, связанное, с тем, что написание программ длинные и муторный процесс, и он не обходиться без выражений подобного содержания, но не попадающего в коментарии и основной код.....
Теплов Алексей Юрьевич aka <Lrz>
; <Lrz> 23.07.2008 Переписана обработка мышки без использования 9-ой функции, уменьшил примерно на 50 байт код.
; <Lrz> 20.07.2007 Косметические улучшения в коде программы, исправлен один несущественный баг.
; <Lrz> 18.05.2007 Улучшение понимания работы программы за счет вынеса основных функций в отдельные макросы
; <Lrz> 14.05.2007 Использование макросов,удобочитаемось программы использование макроса mcall для вызова сис. функций

View File

@ -1,3 +1,3 @@
@fasm editbox.asm editbox
@fasm editbox.asm editbox.kex
REM @kpack editbox
@pause

View File

@ -7,7 +7,7 @@
include 'editbox.inc'
meos_app_start
align 4
use_edit_box procinfo,22,5
use_edit_box
;Ž¡« áâì ª®¤ 
code ;’®çª  ¢å®¤  ¢ ¯à®£à ¬¬ã
mcall 40,0x27 ;ãáâ ­®¢¨âì ¬ áªã ¤«ï ®¦¨¤ ¥¬ëå ᮡë⨩
@ -41,7 +41,7 @@ align 4
draw_window: ;à¨á®¢ ­¨¥ ®ª­  ¯à¨«®¦¥­¨ï
mcall 12,1
mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
draw_edit_boxes editboxes,editboxes_end,use_f9,procinfo ;à¨á®¢ ­¨¥ edit box'®¢
draw_edit_boxes editboxes,editboxes_end ;à¨á®¢ ­¨¥ edit box'®¢
mcall 12,2
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@ -54,7 +54,7 @@ edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only
editboxes_end:
data_of_code dd 0
mouse_flag dd 0x0
hed db 'EDITBOX optimization and retype <Lrz> date 20.07.2007',0
hed db 'EDITBOX optimization and retype <Lrz> date 23.07.2008',0
rb 256
ed_buffer:
;.1: rb 514;256
@ -64,6 +64,5 @@ ed_buffer:
;¤¢  § ¯ á­ëå ¡ ©â  ­¥®¡å®¤¨¬ë ¤«ï ⮣® çâ® ¡ë ­¥ ¯¥¯¥à¥¯¨á âì á«¥¤ãî騥© ¡ ©âë, ¢ ª®­æ¥ ¡ãä¥à  0
buffer_end:
align 16
procinfo process_information
meos_app_end
udata

View File

@ -818,7 +818,7 @@ edit_ex
jmp .draw_cursor_text
}
macro use_mouse_func scr_w
macro use_mouse_func
{
;----------------------------------------------------------
;--- Ž¡à ¡®âª  .mouse_wigwag
@ -829,12 +829,10 @@ macro use_mouse_func scr_w
;;;;;;;;;;;;;;;;;;
;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
;;;;;;;;;;;;;;;;;;
mov ebx,dword [procinfo+34]
add ebx,ed_left
if scr_w eq
else
add ebx,dword scr_w
end if
test ax,0x8000
jnz .mleft
mov ebx,ed_left
cmp eax,ebx
jb .mleft
@ -893,6 +891,7 @@ end if
; popa
; ret
.mleft:
mov eax,ed_pos
cmp eax,0
jbe .mwigvag
@ -919,7 +918,7 @@ end if
jmp .mdraw
}
macro use_work_mause scr_h,scr_w
macro use_work_mouse
;----------------------------------------------------------
;--- € ­¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §­ë¥ áâ®à®­ë?
;----------------------------------------------------------
@ -929,12 +928,8 @@ macro use_work_mause scr_h,scr_w
;----------------------------------------------------------
;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
;----------------------------------------------------------
mov ebx,dword [procinfo + 38]
add ebx,ed_top
if scr_h eq
else
add ebx,scr_h
end if
mov ebx,ed_top
cmp ax,bx
jl ._blur;.mouse_end_no_focus
@ -944,33 +939,25 @@ end if
shr eax,16
mov ebx,dword [procinfo + 34]
add ebx,ed_left
if scr_w eq
else
add ebx,scr_w
end if
mov ebx,ed_left
cmp ax,bx
jl ._blur;.mouse_end_no_focus
add ebx,ed_width
cmp ax,bx
jg ._blur;.mouse_end_no_focus
;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
push eax
mov ebp,ed_color
call .clear_cursor
pop eax
._mvpos:
mov ebx,dword [procinfo+ 34]
xor edx,edx
sub eax,ed_left
sub eax,ebx
if scr_w eq
else
add ebx,scr_w
sub eax,2
end if
mov ebx,6
div bx
add eax,ed_offset
@ -1029,7 +1016,7 @@ end if
; Œ ªà®á ¢ë室 
macro edit_ex
{
popa
popad
ret
}
macro debug