forked from KolibriOS/kolibrios
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:
parent
f188191965
commit
a623f90476
@ -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
|
||||
|
@ -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=по горячей клавише
|
||||
|
@ -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'а;
|
||||
|
12
roadmap.txt
12
roadmap.txt
@ -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, т.к. до этого ветви использовались для сборок под конкретные архитектуры, а теги как раз для фиксации версий).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user