📄 guimouse.inc
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.%ifdef __WIN32__EXTSYM MinimizeWindow%endifSECTION .bsslastmouseholded resb 1mousebuttonstat resw 1MouseMoveOkay resb 1LastHoldEnable resb 1SECTION .textProcessMouse: ; Process holds mov al,[GUIHold] cmp al,[LastHoldEnable] je near .noholdnecessary cmp byte[GUIHold],0 jne .noholda cmp byte[LastHoldEnable],7 ; ntsc sliders jne .norelease1 xor edx,edx mov dl,[ntscWhVar] mov cl,[ntscCurVar] cmp cl,[ntscLastVar+edx] je .norelease1%ifndef __MSDOS__ pushad call NTSCFilterInit popad%endif mov [ntscLastVar+edx],cl.norelease1 mov ecx,0 mov edx,255 call Set_MouseXMax mov ecx,0 mov edx,223 call Set_MouseYMax.noholda cmp byte[GUIHold],1 ; GUI Windows jne .nohold1 mov ecx,0 mov edx,255 call Set_MouseXMax mov ecx,16 mov edx,223 call Set_MouseYMax.nohold1 cmp byte[GUIHold],5 ; Sound Slider je .holdslider cmp byte[GUIHold],6 ; Speed Slider je .holdslider cmp byte[GUIHold],2 ; Colour Slider je .holdslider cmp byte[GUIHold],7 ; Video Slider jne .nohold2m.holdslider mov ecx,[GUIHoldXlimL] ; Sets min/max move range for mouse mov edx,[GUIHoldXlimR] ; once holding slider call Set_MouseXMax mov ecx,[GUIHoldYlim] ; Locks pointer on slider mov edx,[GUIHoldYlim] call Set_MouseYMax.nohold2m cmp byte[GUIHold],3 ; Scrollbars jne .nohold3m mov ecx,[GUIHoldXlimL] mov edx,[GUIHoldXlimR] call Set_MouseXMax mov ecx,[GUIHoldYlim] mov edx,[GUIHoldYlimR] call Set_MouseYMax.nohold3m mov al,[GUIHold] mov [LastHoldEnable],al.noholdnecessary mov byte[MouseMoveOkay],0 call Get_MouseData cmp byte[lhguimouse],1 jne .notlefthanded call SwapMouseButtons.notlefthanded mov [mousebuttonstat],bx cmp byte[lastmouseholded],0 je .noprevhold test bx,01h jnz .noprevhold mov byte[lastmouseholded],0 mov cx,[GUImouseposx] mov dx,[GUImouseposy] call Set_MousePosition.noprevhold cmp byte[mousewrap],1 je near ProcessMouseWrap call Get_MouseData cmp byte[lhguimouse],1 jne .notlefthanded2 call SwapMouseButtons.notlefthanded2 cmp word[GUImouseposx],cx je .zero2 mov byte[MouseMoveOkay],1.zero2 cmp word[GUImouseposy],dx je .zero3 mov byte[MouseMoveOkay],1.zero3 mov [GUImouseposx],cx test word[GUImouseposx],8000h jz .nowrapleft mov word[GUImouseposx],0.nowrapleft cmp word[GUImouseposx],255 jbe .nowrapright mov word[GUImouseposx],255.nowrapright mov [GUImouseposy],dx test word[GUImouseposy],8000h jz .nowrapup mov word[GUImouseposy],0.nowrapup cmp word[GUImouseposy],223 jbe .nowrapdown mov word[GUImouseposy],100.nowrapdown jmp ProcessMouseButtonsProcessMouseWrap: call Get_MousePositionDisplacement add word[GUImouseposx],cx.again test word[GUImouseposx],8000h jz .nowrapleft add word[GUImouseposx],256 jmp .again.nowrapleft cmp word[GUImouseposx],255 jbe .nowrapright sub word[GUImouseposx],256 jmp .again.nowrapright add word[GUImouseposy],dx.again2 test word[GUImouseposy],8000h jz .nowrapup add word[GUImouseposy],224 jmp .again2.nowrapup cmp word[GUImouseposy],223 jbe .nowrapdown cmp byte[GUIHold],1 jne .nohold sub word[GUImouseposy],224-16 jmp .again2.nohold sub word[GUImouseposy],224 jmp .again2.nowrapdown cmp dx,0 jne .nozero cmp cx,0 je .zero.nozero mov byte[MouseMoveOkay],1.zeroProcessMouseButtons: cmp byte[MouseMoveOkay],1 jne .zero mov byte[GUIOnMenuItm],0 mov ax,[GUImouseposx] cmp ax,[GUIMenuL] jbe .zero cmp ax,[GUIMenuR] jae .zero mov ax,[GUImouseposy] cmp ax,18 jbe .zero cmp ax,[GUIMenuD] jae .zero ; Mouse Menu xor dx,dx sub ax,18 mov bx,10 div bx and eax,0FFh mov ebx,[GUICYLocPtr] mov byte[GUIOnMenuItm],2 cmp byte[eax+ebx+1],0 je .zero mov [GUIcrowpos],al mov byte[GUIOnMenuItm],1.zero ; Check if mouse is clicked on menu mov bx,[mousebuttonstat] cmp byte[GUIRClick],1 jne .norclick2 test bx,02h jz .norclick cmp byte[romloadskip],0 jne .norclick2 cmp byte[MousePRClick],0 jne .norclick2 mov byte[GUIQuit],2.norclick mov byte[MousePRClick],0.norclick2 test bx,01h jz near .notclicked cmp byte[GUIpclicked],1 je near .noclick cmp byte[GUIOnMenuItm],2 je near .noclick cmp byte[GUIOnMenuItm],1 jne .nomenuitem call GUITryMenuItem jmp .noclick.nomenuitem cmp word[GUImouseposy],3 jb near .noclickedw cmp word[GUImouseposy],14 ja near .noclickedw cmp word[GUImouseposx],230 jb near .noclickedw cmp word[GUImouseposx],233 jb near .noclickedw cmp word[GUImouseposx],242 ja .notfound7%ifdef __UNIXSDL__ jmp .clickawn%endif cmp word[GUImouseposy],8 jb .clickawn cmp word[GUImouseposy],8 ja .clickawn2.clickawn mov byte[GUIcwinpress],1 jmp .noclick.clickawn2 mov byte[GUIcwinpress],3 jmp .noclick.notfound7 cmp word[GUImouseposx],244 jb near .noclickedw cmp word[GUImouseposx],253 ja .notfound8 mov byte[GUIcwinpress],2 jmp .noclick.notfound8.noclickedw cmp word[GUImouseposy],15 ja near .nomenu cmp word[GUImouseposy],3 jb near .noclicked cmp word[GUImouseposy],13 ja near .noclicked; GUIDMHelp 4,12,GUIMenuItem+6,1 cmp word[GUImouseposx],4 jb near .noclicked cmp word[GUImouseposx],12 ja .notfound mov byte[GUIcmenupos],1 mov byte[GUIcrowpos],0 jmp .noclick.notfound; GUIDMHelp 17,47,GUIMenuItem,2 cmp word[GUImouseposx],17 jb near .noclicked cmp word[GUImouseposx],47 ja .notfound2 mov byte[GUIcmenupos],2 mov byte[GUIcrowpos],0 jmp .noclick.notfound2; GUIDMHelp 52,94,GUIMenuItem+7,3 cmp word[GUImouseposx],52 jb near .noclicked cmp word[GUImouseposx],94 ja .notfound3 mov byte[GUIcmenupos],3 mov byte[GUIcrowpos],0 jmp .noclick.notfound3; GUIDMHelp 99,135,GUIMenuItem+14,4 cmp word[GUImouseposx],99 jb near .noclicked cmp word[GUImouseposx],135 ja .notfound4 mov byte[GUIcmenupos],4 mov byte[GUIcrowpos],0 jmp .noclick.notfound4; GUIDMHelp 140,188,GUIMenuItem+21,5 cmp word[GUImouseposx],140 jb near .noclicked cmp word[GUImouseposx],188 ja .notfound5 mov byte[GUIcmenupos],5 mov byte[GUIcrowpos],0 jmp .noclick.notfound5; GUIDMHelp 193,223,GUIMenuItem+29,6 cmp word[GUImouseposx],193 jb near .noclicked cmp word[GUImouseposx],223 ja .notfound6 mov byte[GUIcmenupos],6 mov byte[GUIcrowpos],0 jmp .noclick.notfound6 jmp .noclick.noclicked%ifdef __MSDOS__ jmp .noclick%else mov byte[GUIpclicked],1 mov byte[GUIHold],255 mov eax,[GUImouseposy] mov [GUIHoldYlim],eax mov eax,[GUImouseposx] mov [GUIHoldXlimL],eax call MouseWindow jmp .noclick%endif.nomenu cmp byte[GUIcmenupos],0 je near .checkmenuboxclick mov al,[GUIcmenupos] mov [GUIpmenupos],al mov byte[GUIcmenupos],0.noclick mov byte[GUIpclicked],1 xor eax,eax mov al,[GUIwinptr] dec eax xor ebx,ebx mov bl,[GUIwinorder+eax] cmp byte[GUIHold],2 je near .hold2 cmp byte[GUIHold],3 je near .hold3 cmp byte[GUIHold],4 je near .hold4 cmp byte[GUIHold],5 je near .hold5 cmp byte[GUIHold],6 je near .hold6 cmp byte[GUIHold],7 je near .hold7 cmp byte[GUIHold],1 je near .hold cmp byte[GUIHold],255 je .holded mov byte[GUICHold],0 ret.holded mov eax,[GUIHoldYlim] mov [GUImouseposy],eax mov eax,[GUIHoldXlimL] mov [GUImouseposx],eax mov cx,[GUIHoldXlimL] mov dx,[GUIHoldYlim] call Set_MousePosition ret.hold2 ; Colour Slide Bar Hold mov eax,[GUIHoldYlim] mov [GUImouseposy],eax mov ebx,[GUImouseposx] mov eax,[GUIHoldXlimL] cmp ebx,eax jnl .noless2 mov [GUImouseposx],eax.noless2 mov eax,[GUIHoldXlimR] cmp ebx,eax jng .nogreat2 mov [GUImouseposx],eax.nogreat2 mov byte[lastmouseholded],1 jmp DisplayGUIOptnsClick.hold3 ; Box Hold mov ebx,[GUIHoldYlim] cmp ebx,[GUImouseposy] jl .boxhold1 mov [GUImouseposy],ebx.boxhold1 mov ebx,[GUIHoldXlimL] cmp ebx,[GUImouseposx] jl .boxhold2 mov [GUImouseposx],ebx.boxhold2 mov ebx,[GUIHoldYlimR] cmp ebx,[GUImouseposy] jg .boxhold3 mov [GUImouseposy],ebx.boxhold3 mov ebx,[GUIHoldXlimR] cmp ebx,[GUImouseposx] jg .boxhold4 mov [GUImouseposx],ebx.boxhold4 mov byte[lastmouseholded],1 jmp GUIWindowMove.hold4 mov eax,[GUImouseposx] sub eax,[GUIwinposx+ebx*4] mov edx,[GUImouseposy] sub edx,[GUIwinposy+ebx*4] cmp eax,[GUIHoldXlimL] jl near .nobhold4 cmp edx,[GUIHoldYlim] jl near .nobhold4 cmp eax,[GUIHoldXlimR] jg near .nobhold4 cmp edx,[GUIHoldYlimR] jg near .nobhold4 mov al,[GUICBHold2] mov [GUICBHold],al ret.nobhold4 mov byte[GUICBHold],0 ret.hold5 ; Sound Slide Bar Hold mov eax,[GUIHoldYlim] mov [GUImouseposy],eax mov ebx,[GUImouseposx] mov eax,[GUIHoldXlimL] cmp ebx,eax jnl .noless5 mov [GUImouseposx],eax.noless5 mov eax,[GUIHoldXlimR] cmp ebx,eax jng .nogreat5 mov [GUImouseposx],eax.nogreat5 mov byte[lastmouseholded],1 jmp DisplayGUISoundClick.hold6 ; Speed Slide Bar Hold mov eax,[GUIHoldYlim] mov [GUImouseposy],eax mov ebx,[GUImouseposx] mov eax,[GUIHoldXlimL] cmp ebx,eax jnl .noless6 mov [GUImouseposx],eax.noless6 mov eax,[GUIHoldXlimR] cmp ebx,eax jng .nogreat6 mov [GUImouseposx],eax.nogreat6 mov byte[lastmouseholded],1 jmp DisplayGUISpeedClick.hold7 ; Video Slide Bar Hold mov eax,[GUIHoldYlim] mov [GUImouseposy],eax mov ebx,[GUImouseposx] mov eax,[GUIHoldXlimL] cmp ebx,eax jnl .noless7 mov [GUImouseposx],eax.noless7 mov eax,[GUIHoldXlimR] cmp ebx,eax jng .nogreat7 mov [GUImouseposx],eax.nogreat7 mov byte[lastmouseholded],1 jmp DisplayGUIVideoClick.hold cmp word[GUImouseposy],16 jge .noover test byte[mousewrap],1 jz .nomwrap add word[GUImouseposy],224-16 jmp .hold.nomwrap mov word[GUImouseposy],16.noover mov cx,[GUImouseposy] sub cx,[GUIHoldy] add cx,[GUIHoldym] movsx ecx,cx xor eax,eax mov al,[GUIwinptr] dec eax xor ebx,ebx mov bl,[GUIwinorder+eax] mov [GUIwinposy+ebx*4],ecx mov cx,[GUImouseposx] sub cx,[GUIHoldx] add cx,[GUIHoldxm] movsx ecx,cx mov [GUIwinposx+ebx*4],ecx ret.notclicked mov byte[GUICHold],0 mov byte[GUIpclicked],0 mov byte[GUIHold],0%ifdef __UNIXSDL__ cmp byte[GUIcwinpress],1 jne .notwinpressa mov byte[GUIcwinpress],0 cmp word[GUImouseposy],3 jb .notwinpressa cmp word[GUImouseposy],13 ja .notwinpressa cmp word[GUImouseposx],233 jb .notwinpressa cmp word[GUImouseposx],242 ja .notwinpressa call SwitchFullScreen ret%endif%ifdef __WIN32__ cmp byte[GUIcwinpress],1 jne .notwinpressa mov byte[GUIcwinpress],0 cmp word[GUImouseposy],3 jb .notwinpressa cmp word[GUImouseposy],7 ja .notwinpressa cmp word[GUImouseposx],233 jb .notwinpressa cmp word[GUImouseposx],242 ja .notwinpressa call SwitchFullScreen ret%endif.notwinpressa%ifndef __MSDOS__ cmp byte[GUIcwinpress],2 jne .notwinpressb mov byte[GUIcwinpress],0 cmp word[GUImouseposy],3 jb .notwinpressb cmp word[GUImouseposy],13 ja .notwinpressb cmp word[GUImouseposx],244 jb .notwinpressb cmp word[GUImouseposx],253 ja .notwinpressb mov byte[GUIQuit],1 ret.notwinpressb cmp byte[GUIcwinpress],3 jne .notwinpressc mov byte[GUIcwinpress],0 cmp word[GUImouseposy],9 jb .notwinpressc cmp word[GUImouseposy],13 ja .notwinpressc cmp word[GUImouseposx],233 jb .notwinpressc cmp word[GUImouseposx],242 ja .notwinpressc%endif%ifdef __WIN32__ pushad call MinimizeWindow popad%endif%ifndef __MSDOS__ ret%endif.notwinpressc ; ButtonProcess cmp byte[GUICBHold],1 je near GUILoadData cmp byte[GUICBHold],2 je near GUIProcReset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -