Update roadmap; new mode 3 for Hot Angles

git-svn-id: svn://kolibrios.org@7443 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
theonlymirage 2018-10-09 15:03:03 +00:00
parent f188191965
commit a623f90476
4 changed files with 426 additions and 64 deletions

View File

@ -2,7 +2,7 @@
; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.5: Oct 5, 2018
; Version 0.3.6: Oct 9, 2018
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
@ -45,11 +45,13 @@ include '../../macros.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;êîìïîíåíòû checkBox è editBox
;![
include '../../develop/libraries/box_lib/load_lib.mac' ;ìàêðîñ äëÿ çàãðóçêè áèáëèîòåê
include '../../develop/libraries/box_lib/load_lib.mac' ;ìàêðîñ äëÿ çàãðóçêè áèáëèîòåê
@use_library
;@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
;!]
KMENUITEM_NORMAL equ 0
KMENUITEM_SUBMENU equ 1
KMENUITEM_SEPARATOR equ 2
Otstup = 30
START:
@ -67,7 +69,7 @@ START:
or eax, eax
jnz exit
invoke init_checkbox, ch1
;invoke init_checkbox, ch1
mov eax,40 ;óñòàíîâèòü ìàñêó äëÿ îæèäàåìûõ ñîáûòèé
mov ebx,0x27 ;ñèñòåìà áóäåò ðåàãèðîâàòü òîëüêî íà ñîîáùåíèå î ïåðåðèñîâêå, íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
@ -77,6 +79,20 @@ START:
;mcall 48,3,sc,sizeof.system_colors ;ïîëó÷èòü ñèñòåìíûå öâåòà
stdcall [OpenDialog_Init],OpenDialog_data ;ïîäãîòîâêà äèàëîãà
;mode menu
stdcall [kmenu_init], sc ;kmenu initialisation
stdcall [ksubmenu_new]
mov [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu0, 110
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu1, 111
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu2, 112
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu3, 113
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, valueModeMenu1, [modeMenu]
call loadConfig ;çàãðóæàåì êîíôèãóðàöèþ èç ôàéëà, åñëè íåò - òî âûñòàâëÿåì ïàðàìåòðû ïî óìîë÷àíèþ
call draw_window ;îòðèñîâàòü îêíî ïðèëîæåíèÿ
@ -101,7 +117,8 @@ event_wait:
invoke edit_box_mouse, editLD
invoke edit_box_mouse, editRU
invoke edit_box_mouse, editRD
invoke check_box_mouse, ch1 ;ïðîâåðêà ÷åê áîêñà
;invoke check_box_mouse, ch1 ;ïðîâåðêà ÷åê áîêñà
;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;ïðîâåðêà ìûøè äëÿ êîìáîáîêñà
jmp event_wait
@ -158,6 +175,43 @@ noclose:
mov byte[editID], 7
call but_open_dlg
jmp event_wait
@@:
cmp ah, 8
jne @f
push eax ebx ecx
mcall 9, pi, -1 ;get window coord
mov eax, dword[pi+34]
add eax, buttonModeX ;+ 5
mov word[coordModeMenu.x], ax
mov eax, dword[pi+38]
add eax, buttonModeY + 17 ;20 ;42
mov word[coordModeMenu.y], ax
stdcall [ksubmenu_draw], [modeMenu], coordModeMenu
pop ecx ebx eax
jmp event_wait
@@:
cmp ah, 110
jne @f
mov byte[mode], 48 ;'0'
jmp event_wait
@@:
cmp ah, 111
jne @f
mov byte[mode], 49 ;'1'
jmp event_wait
@@:
cmp ah, 112
jne @f
mov byte[mode], 50 ;'2'
jmp event_wait
@@:
cmp ah, 113
jne @f
mov byte[mode], 51 ;'3'
jmp event_wait
@@:
butend:
jmp event_wait ;this is for ignored events, useful at development
@ -255,11 +309,17 @@ applyButton:
;jne @f
;@@:
;
mov byte[eax], 48;'0' ;110; 'n' ;ïî óìîë÷àíèþ ôëàã ñíÿò
cmp word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle ;âûñòàâëåí checkBox èëè íåò?
jne applyButton.no
mov byte[eax], 49;'1' ;121 ;èíà÷å êëàä¸ì 'y'
.no:
push ebx ;ñîõðàíÿåì âûáðàííûé ðåæèì
mov bl, byte[mode]
mov byte[eax], bl
pop ebx
;; mov byte[eax], 48;'0' ;110; 'n' ;ïî óìîë÷àíèþ ôëàã ñíÿò
;; cmp word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle ;âûñòàâëåí checkBox èëè íåò?
;; jne applyButton.no
;; mov byte[eax], 49;'1' ;121 ;èíà÷å êëàä¸ì 'y'
;;.no:
inc eax
call addPerenos
@ -414,17 +474,37 @@ loadConfig:
add edx, eax ;êëàä¸ì â edx - àäðåñ êîíöà êîíôèã.äàííûõ
.chStart:
cmp byte[eax], 49;'1' ;121 ;'y' ;âûñòàâëÿåì checkBox - ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ
jne @f ;loadConfig.no
.yes:
mov word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle
jmp loadConfig.chEnd
push ebx
mov bl, byte[eax]
cmp bl, 48 ; åñëè çíà÷åíèå âûõîäèò çà äîïóñòèìûå ïðåäåëû, òî ïðîâåðÿåì íà 'n' (äëÿ ñîâìåñòèìîñòè)
jb loadConfig.checkN
cmp bl, 51
ja loadConfig.checkN
mov byte[mode], bl ;èíà÷å óñòàíàâëèâàåì ýòîò ðåæèì êàê åñòü
jmp loadConfig.modeEnd ;è èä¸ì äàëüøå
.checkN:
cmp bl, 'n' ;åñëè n - òî ðåæèì "îòêëþ÷åíî"
jne @f
mov byte[mode], 48 ;'0'
jmp loadConfig.modeEnd
@@:
cmp byte[eax], 50;'2' ;âòîðîé ðåæèì àêòèâèðîâàí
je loadConfig.yes
.no:
mov word[ch1.flags], 100b ;ch_flag_middle
.chEnd:
mov byte[mode], 49 ;'1' èíà÷å ïî óìîë÷àíèþ âêëþ÷¸í êëàññè÷åñêèé ðåæèì ðàáîòû
.modeEnd:
pop ebx
;; cmp byte[eax], 49;'1' ;121 ;'y' ;âûñòàâëÿåì checkBox - ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ
;; jne @f ;loadConfig.no
;;.yes:
;; mov word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle
;; jmp loadConfig.chEnd
;;@@:
;; cmp byte[eax], 50;'2' ;âòîðîé ðåæèì àêòèâèðîâàí
;; je loadConfig.yes
;;.no:
;; mov word[ch1.flags], 100b ;ch_flag_middle
;;.chEnd:
;jmp loadConfig.end ;êîìàíäà äëÿ óäîáñòâà îòëàäêè è ïîèñêà îøèáîê
;êîïèðóåì ñîäåðæèìîå ñòðîê â áóôåð
@ -644,7 +724,7 @@ draw_window:
invoke edit_box_draw, editRU
invoke edit_box_draw, editRD
invoke check_box_draw, ch1 ;ðèñîâàíèå ÷åêáîêñîâ
;invoke check_box_draw, ch1 ;ðèñîâàíèå ÷åêáîêñîâ
;ðèñóåì êíîïêó
mov ebx, (WindowsWidth-80-Otstup)*65536 + 80 ;êîîðäèíàòà X, øèðèíà êíîïêè
@ -705,6 +785,28 @@ draw_window:
mcall 4
;delete mode button, if it exist
mov edx, 0x80000008
mcall 8
;draw button Mode
buttonModeX = 30 ;433
buttonModeY = 160 ;50
buttonModeWidth = 221
buttonModeHeight = 20
buttonModeTextXoffset = 5
mov ebx, buttonModeX*65536 + buttonModeWidth ;X + Width
mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
mov edx, 0x00000008 ;button id
mov esi, 0x00AABBCC ;color button
mcall 8
;draw text for button Mode
mov ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+6) ;(x, y)
mov ecx, 0xFFFFFF
call setTextModeMenu
mov esi, valueModeMenuSize
mcall 4
call draw_super_text
LineLength = 62
@ -728,6 +830,29 @@ draw_window:
ret
setTextModeMenu:
cmp byte[mode], 48
jne @f
mov edx, valueModeMenu0
ret
@@:
cmp byte[mode], 49
jne @f
mov edx, valueModeMenu1
ret
@@:
cmp byte[mode], 50
jne @f
mov edx, valueModeMenu2
ret
@@:
cmp byte[mode], 51
jne @f
mov edx, valueModeMenu3
ret
@@:
mov edx, valueModeMenu1
ret
align 16
@ -749,7 +874,7 @@ import box_lib,\
;DATA äàííûå check_box èñïîëüçóåò ñèñòåìíûå öâåòà
;êîîðäèíàòû (x,y) = (30, 160) ðàçìåð ÷åêáîêñà 12, öâåò òåêñòà 0x224466
ch1 check_box2 30 shl 16 + 12, 160 shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0x224466, ch_text, 110b ; ch_flag_en and ch_flag_middle
;ch1 check_box2 30 shl 16 + 12, 160 shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0x224466, ch_text, 110b ; ch_flag_en and ch_flag_middle
commonButtonText db '...', 0 ;òåêñò äëÿ êíîïîê âûçîâà OpenDial
commonButtonTextSize = 3
@ -774,6 +899,13 @@ superText:
.rd db 'Š®¬ ­¤  ¯à ¢®£® ­¨¦­¥£® 㣫 : ', 0
superTextSize = 30
valueModeMenuSize = 32
ModeMenu db '<27>¥¦¨¬ à ¡®âë:',0
valueModeMenu0 db '®âª«î祭® ',0
valueModeMenu1 db 'ª« áá¨ç¥áª¨© ०¨¬ ',0
valueModeMenu2 db '०¨¬ £®àï祩 ª« ¢¨è¨ ',0
valueModeMenu3 db '०¨¬ ¦¥áâ  ¯® ª« ¢¨è¥  ªâ¨¢ æ¨¨',0
else ;èíà÷å àíãëèéñêèé òåêñò
text db "This is a Hot Angles Configurator. "
@ -794,6 +926,13 @@ superText:
.rd db 'Right down angle command:', 0
superTextSize = 25
valueModeMenuSize = 32
ModeMenu db 'Mode:',0
valueModeMenu0 db 'disabled ',0
valueModeMenu1 db 'classic mode ',0
valueModeMenu2 db 'hot key mode ',0
valueModeMenu3 db 'activation key gesture mode ',0
end if
@ -821,6 +960,12 @@ draw_super_text:
mov esi, superTextSize
mcall 4
mov ebx, Otstup * 65536 + (buttonModeY-11)
or ecx, 0x80000000
mov edx, ModeMenu
mov esi, 3
mcall 4
pop esi edi edx ecx ebx eax
ret
@ -925,21 +1070,21 @@ OpenDialog_data:
.type dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
.procinfo dd procinfo
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.com_area dd 0 ;+12
.opendir_path dd plugin_path ;+16
.dir_default_path dd default_dir ;+20
.start_path dd file_name ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
.start_path dd file_name ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
.draw_window dd draw_window ;+28
.status dd 0 ;+32
.status dd 0 ;+32
.openfile_path dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
.filename_area dd filename_area ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 10 ;+50 ; Window X position
.x_start dw 10 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 10 ;+54 ; Window Y position
.y_start dw 10 ;+54 ; Window Y position
default_dir db '/rd/1',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
communication_area_name: db 'FFFFFFFF_open_dialog',0
@ -949,12 +1094,17 @@ communication_area_default_path: db '/rd/1/File managers/',0
Filter:
dd Filter.end - Filter.1
.1:
;db 'ASM',0
;db 'KEX',0
;db 'TXT',0
.end:
db 0
mode db 49 ;'1'
modeMenu dd 0
coordModeMenu:
.x dw 100
.y dw 200
align 4
proclib_import: ;îïèñàíèå ýêñïîðòèðóåìûõ ôóíêöèé
OpenDialog_Init dd aOpenDialog_Init
@ -967,28 +1117,20 @@ head_f_i:
head_f_l db 'Ñèñòåìíàÿ îøèáêà',0
err_message_found_lib0 db 'Íå íàéäåíà áèáëèîòåêà ',39,'proc_lib.obj',39,0
err_message_import0 db 'Îøèáêà ïðè èìïîðòå áèáëèîòåêè ',39,'proc_lib.obj',39,0
err_message_found_lib1 db 'Íå íàéäåíà áèáëèîòåêà ',39,'kmenu.obj',39,0 ;'<27>¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  '
err_message_import1 db 'Îøèáêà ïðè èìïîðòå áèáëèîòåêè ',39,'kmenu',39,0 ;'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ '
system_dir0 db '/sys/lib/'
lib0_name db 'proc_lib.obj',0
lib1_name db 'kmenu.obj',0
;library structures
l_libs_start:
lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i
lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i
lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i
load_lib_end:
;txt_open db 'Îòêðûòü',0
sys_path: rb 4096
file_name: rb 4096
plugin_path: rb 4096
openfile_path: rb 4096
filename_area: rb 256
rb 1024
procinfo process_information
;!]
edMaxSize = 510 ;òåïåðü ñ íîâûì êîìïîíåíòîì ìîæíî è 511 óêàçàòü
edMax = 0 ;max, size, pos
@ -998,9 +1140,45 @@ editLD edit_box 180-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBC
editRU edit_box 180-buttonW,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax
editRD edit_box 180-buttonW,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax
align 4
import_libkmenu:
kmenu_init dd akmenu_init
kmainmenu_draw dd akmainmenu_draw
kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
ksubmenu_new dd aksubmenu_new
ksubmenu_delete dd aksubmenu_delete
ksubmenu_draw dd aksubmenu_draw
ksubmenu_add dd aksubmenu_add
kmenuitem_new dd akmenuitem_new
kmenuitem_delete dd akmenuitem_delete
kmenuitem_draw dd akmenuitem_draw
dd 0,0
akmenu_init db 'kmenu_init',0
akmainmenu_draw db 'kmainmenu_draw',0
akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
aksubmenu_new db 'ksubmenu_new',0
aksubmenu_delete db 'ksubmenu_delete',0
aksubmenu_draw db 'ksubmenu_draw',0
aksubmenu_add db 'ksubmenu_add',0
akmenuitem_new db 'kmenuitem_new',0
akmenuitem_delete db 'kmenuitem_delete',0
akmenuitem_draw db 'kmenuitem_draw',0
mouse_dd dd ?
sc system_colors
button_press rd 0 ;for kmenu
sys_path: rb 4096
file_name: rb 4096
plugin_path: rb 4096
openfile_path: rb 4096
filename_area: rb 256
rb 1024
procinfo process_information
pi rb 1024
dataBuffer:
.1: rb 512
.2: rb 512

View File

@ -2,7 +2,7 @@
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.5: Oct 5, 2018
; Version 0.3.6: Oct 9, 2018
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
@ -52,6 +52,13 @@ START_DEBUG:
cmp byte[mode], 0 ;функция отключена - выход
jne @f
mcall -1
@@:
;режим жеста по горячей клавише?
cmp byte[mode], 3 ;подписываемся на интересные нам события в зависимости от режима работы
jne @f
mov ebx, 00000100000000000000000000100010b ;если да, то подписываемся на клавиши
mcall 40
jmp init03
@@:
;режим активации горячей клавишей?
cmp byte[mode], 2 ;подписываемся на интересные нам события в зависимости от режима работы
@ -110,8 +117,24 @@ hotkey:
cmp ah, byte[keyActivate] ;если нажата наша горячая клавиша
jne @f
;for mode 3 [
cmp byte[keyState], 1
je hotkey.e
push eax ebx
mcall 37, 0 ;запоминаем текущие(начальные) координаты мыши
;mov dword[o.x], eax
mov word[o.y], ax
shr eax, 16
mov word[o.x], ax
pop ebx eax
mov byte[keyState], 1
mov byte[state], UNLOCKd
.e:
;]
;mov byte[state], UNLOCKd
jmp hotkey.end
@@:
push edx
@ -127,7 +150,7 @@ hotkey:
@@:
pop edx
.end:
jmp mode02
jmp dword[backAdr]
init01:
@ -449,10 +472,165 @@ copyKill:
ret
keyActivate db 41 ;16 ;'Q' ;êëàâèøà àêòèâàöèè
keyState db 0 ;0-êëàâèøà íå àêòèâíà, 1 - êëàâèøà àêòèâíà
;MODE 3
init03:
mov dword[radius2], 100; 10*10
mov dword[backAdr], mode03
call setHotKey
mode03:
mcall 10
cmp eax, 2 ;обработка нажатия клавиши
je hotkey
backAdr rd 1 ;dd 0 ; àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè
;cmp byte[keyState], 0
;je mode03
cmp eax, 6 ;обработка перемещений и нажатия мыши
je mouse03
jmp mode03
mouse03:
cmp byte[keyState], 0 ;если клавиша не зажата, то обновим начальные координаты
je mouse03.updateCoord
cmp byte[state], LOCKd ;если угол заблокирован, то обновим начальные координаты
je mouse03.updateCoord
call checkPointInCircle ;иначе если преодолели радиус активации, то вызываем действие нужного угла
jmp @f
.updateCoord:
push eax ebx
mcall 37, 0 ;запоминаем текущие(начальные) координаты мыши
;mov dword[o.x], eax
mov word[o.y], ax
shr eax, 16
mov word[o.x], ax
pop ebx eax
@@:
jmp dword[backAdr]
radius2 dd 0 ;квадрат радиуса для mode 3
o: ;координаты начальной и текущей точки
.x: dw 0
.y: dw 0
.cx: dw 0
.cy: dw 0
;проверка выхода за пределы круга
; sqrt( (x2-x1)^2 + (y2-y1)^2 ) <= radius
; (x2-x1)^2 + (y2-y1)^2 <= radius^2
checkPointInCircle:
push eax ebx ecx edx
mcall 37, 0 ;получаем текущие координаты мыши
;mov dword[o.cx], eax
mov word[o.cy], ax
shr eax, 16
mov word[o.cx], ax
xor eax, eax
xor edx, edx
mov ax, word[o.x]
mov dx, word[o.cx]
cmp dx, ax
jae @f
sub ax, dx
mov dx, ax
jmp .xend
@@:
sub dx, ax
.xend:
mov eax, edx
mul dx
mov ebx, eax
xor eax, eax
xor edx, edx
mov ax, word[o.y]
mov dx, word[o.cy]
cmp dx, ax
jae @f
sub ax, dx
mov dx, ax
jmp .yend
@@:
sub dx, ax
.yend:
mov eax, edx
mul dx
add ebx, eax
cmp ebx, dword[radius2]
jbe @f
call activateCorner ;иначе активируем нужный угол
@@:
pop edx ecx ebx eax
ret
;выяснить в сторону какого угла ушли и активировать его
activateCorner:
push eax ecx
xor eax, eax
mov ax, word[o.cx]
cmp ax, word[o.x]
je activateCorner.end ;если координата равна, то выходим (такого быть не должно)
ja activateCorner.right
;иначе левая сторона
mov ax, word[o.cy]
cmp ax, word[o.y]
je activateCorner.end ;если координата равна, то выходим (такого быть не должно)
jb activateCorner.leftup
;иначе левый нижний угол
mov ecx, 1
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
.leftup:
;левый верхний угол
mov ecx, 0
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
.right: ;правая сторона экрана
mov ax, word[o.cy]
cmp ax, word[o.y]
je activateCorner.end ;если координата равна, то выходим (такого быть не должно)
jb activateCorner.rightup
;иначе правый нижний угол
mov ecx, 3
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
.rightup:
;правый верхний угол
mov ecx, 2
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
.end:
pop ecx eax
ret
keyActivate db 41 ;16 ;'Q' ;клавиша активации
keyState db 0 ;0-клавиша не активна, 1 - клавиша активна
backAdr rd 1 ;адрес для возврата из проверки мыши
;slotMax dd 0
;selfPID dd 0
@ -463,8 +641,8 @@ buf rb 1024
;структурка данных для хранения параметров экрана
screen:
.width rw 1 ;dw 0
.height rw 1 ;dw 0
.width rw 1
.height rw 1
state: rb 1 ;состояние: 0=unlock, 1=lock
mode: rb 1 ;режим работы приложения: 0=не работает, 1=классический, 2=по горячей клавише

View File

@ -1,6 +1,6 @@
Hot Angles
Version 0.3.5: Oct 5, 2018
Version 0.3.6: Oct 9, 2018
RU
Комплект утилит (аналог Hot Corners в других ОС) для расширения возможностей рабочего стола пользователя. Название выбрано путём голосования. В комплект входят две утилиты:
@ -10,7 +10,9 @@ HACONFIG -
1) состояние активности опции (один символ):
1 или y - опция активна, активирован классический режим работы уголков,
2 - опция активна, активирован режим работы по горячей клавише,
n или любой другой символ - опция отключена;
3 - опция активна, активирован режим жеста при зажатой активационной клавише,
n или 0 - опция отключена,
любой другой символ - поведение по умолчанию (зависит от версии);
2) команда (полное имя приложения) для верхнего левого угла экрана;
3) команда (полное имя приложения) для левого нижнего угла экрана;
4) команда (полное имя приложения) для правого верхнего угла экрана;
@ -33,11 +35,15 @@ MIN -
--------------------------------------------------
Текущая версия конфигуратора и утилиты работают стабильно только в классическом режиме.
В классическом режиме угол активируется путём наведения курсора. Всё происходит автоматически. Вы наводите мышь в заданный угол рабочего стола, и запускается приложение, связанное с этим углом.
Этот режим активируется символом '1' или символом 'y' в начале конфигурационного файла.
Этот режим активируется символом '1' в начале конфигурационного файла.
Начиная с версии 0.3.5 утилита @HOTANGLES поддерживает второй режим работы - активацию углов по горячей клавише. Эта функциональность тестируется, поэтому настроить её через конфигуратор нельзя.
Активируется режим символом '2' в начале конфигурационного файла. Изменить клавишу активации нельзя, по умолчанию это символ тильда '~' или '`'. В этом режиме для активации угла требуется зажать клавишу тильда и, одновременно с этим, навести курсор в нужный угол рабочего стола.
Начиная с версии 0.3.6 поддерживается третий режим работы - активация жестом при зажатой активационной клавише. Этот режим находится в тестировании. Клавиша активации - тильда '~'. Изменить клавишу нельзя. В этом режиме для активации угла необходимо зажать клавишу тильда и сместить курсор на расстояние 10 пикселей в сторону нужного угла. Спорные направления (вертикально вверх или вниз и горизонтально влево или вправо) игнорируются. Режим предполагает использование из центра экрана, из угла эрана можно вызвать только противоположный ему по диагонали угол. Этот режим в файле конфигурации отмечается символом '3'.
'n' и '0' в начале конфигурационного файла отключают утилиту. Начиная с версии 0.3.6 в конфигураторе HACONFIG есть возможность выбрать любой из этих 4 режимов работы Hot Angles.
Прочие рекомендации:
--------------------------------------------------
@ -65,8 +71,8 @@ http://websvn.kolibrios.org/dl.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2
[+] знак минус не влияет на попытку запуска в конкретном углу;
[+] пустое поле в конфигураторе и пустая строка в конфигурационном файле неверно обрабатываются;
[-] повреждение файла конфигурации после многократного вкл./выкл. опции Hot Angles;
[-] режим явной команды клавишей активации: зажимаем горячую клавишу (например, shift), наводим курсор в угол - происходит реакция;
[-] режим жеста/направления: зажимаем активирующую клавишу, после этого приложение анализирует мышь, в зависимости от направления движения мыши (от начальных координат в момент активации опции) выбирается активируемый угол - происходит реакция;
[+] режим явной команды клавишей активации: зажимаем горячую клавишу (например, shift), наводим курсор в угол - происходит реакция;
[+] режим жеста/направления: зажимаем активирующую клавишу, после этого приложение анализирует мышь, в зависимости от направления движения мыши (от начальных координат в момент активации опции) выбирается активируемый угол - происходит реакция;
[+] добавить диалог выбора пути OpenDialog в конфигураторе;
[+] переход на EditBox из библиотеки box_lib;
[+] размазывание текста или его наслоение при вводе в поле EditBox'а;

View File

@ -25,11 +25,11 @@ Notations:
[-] semblance of cron;
[-] jabber xmpp-client;
[-] drive format utility (only for fully supported FS);
[-] development and discussion of architecture Kolibri Machine Controller(KMC), semblance of LinuxCNC, based on MachineKit;
[+] development and discussion of architecture Kolibri Machine Controller(KMC), semblance of LinuxCNC, based on MachineKit;
[+] Apps: CNC Editor, Hot Angles, SysMon;
[-] modify&improve apps: IconEdit, uPDF;
[-] new app "Notes";
[-] port / adapt one of the existing text editors with code highlighting;
[+] new app "Notes";
[+] port / adapt one of the existing text editors with code highlighting;
[-] QR-code in boot log and QR-code utility;
[-] fixing a branch/tags in SVN.
@ -59,11 +59,11 @@ Notations:
[-] приложение аналог cron;
[-] jabber xmpp-клиент;
[-] утилита форматирования дисков (только для полностью поддерживаемых ФС);
[-] ïðîðàáîòêà àðõèòåêòóðû Kolibri Machine Controller(KMC), àíàëîãà LinuxCNC, íà îñíîâå MachineKit;
[+] ïðîðàáîòêà àðõèòåêòóðû Kolibri Machine Controller(KMC), àíàëîãà LinuxCNC, íà îñíîâå MachineKit;
[+] приложения: CNC Editor, Hot Angles, SysMon;
[-] доработать/улучшить приложения: IconEdit, uPDF;
[-] ðàçðàáîòàòü íîâîå ïðèëîæåíèå "Notes";
[-] ïîðòèðîâàòü îäèí èç ñóùåñòâóþùèõ òåêñòîâûõ ðåäàêòîðîâ ñ ïîäñâåòêîé êîäà;
[+] ðàçðàáîòàòü íîâîå ïðèëîæåíèå "Notes";
[+] ïîðòèðîâàòü îäèí èç ñóùåñòâóþùèõ òåêñòîâûõ ðåäàêòîðîâ ñ ïîäñâåòêîé êîäà;
[-] QR-код в логе загрузки и утилита работы с QR-кодами;
[-] фиксация ветви/тега в SVN (скорее tags, т.к. до этого ветви использовались для сборок под конкретные архитектуры, а теги как раз для фиксации версий).