Fixed hover mouse Eolite. New features in Eolite (double-click). Also append new mouse events.

git-svn-id: svn://kolibrios.org@5575 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pavelyakov 2015-07-11 23:45:19 +00:00
parent 936449ad66
commit 98eee70542
7 changed files with 131 additions and 27 deletions

View File

@ -4,3 +4,4 @@ LineHeight=18
ShowDeviceName=1 ShowDeviceName=1
RealFileNamesCase=0 RealFileNamesCase=0
InfoAfterCopy=0 InfoAfterCopy=0
TimeDoubleClick=100

View File

@ -257,7 +257,7 @@ void main()
} }
} }
/*
if (files.MouseOver(m.x, m.y)) && (!can_select) if (files.MouseOver(m.x, m.y)) && (!can_select)
{ {
m_selected = m.y - files.y / files.line_h; m_selected = m.y - files.y / files.line_h;
@ -304,6 +304,40 @@ void main()
break; break;
} }
// } file menu // } file menu
*/
if (files.MouseOver(m.x, m.y))&&(m.up)
{
//select/open file {
if (m.key&MOUSE_LEFT)
{
if (m.y>=files.y)//&&(m.click)
{
id = m.y - files.y / files.line_h;
if (files.current!=id)
{
if (id<files.visible) List_Current(id-files.current);
}
else if(m.dblclick)Open(0);
}
}
// } select/open file
else
//file menu {
if (m.key&MOUSE_RIGHT)
{
menu_call_mouse = 1;
if (m.y>=files.y)&&(m.click)
{
id = m.y - files.y / files.line_h;
if (files.current!=id) List_Current(id-files.current);
SwitchToAnotherThread();
CreateThread(#FileMenu,#menu_stak+4092);
}
break;
}
// } file menu
}
if (m.vert) if (m.vert)
{ {

View File

@ -75,7 +75,7 @@ void FileMenu()
if (!CheckActiveProcess(MenuForm.ID)) ExitProcess(); if (!CheckActiveProcess(MenuForm.ID)) ExitProcess();
mm.get(); mm.get();
if (menu.ProcessMouse(mm.x, mm.y)) MenuListRedraw(); if (menu.ProcessMouse(mm.x, mm.y)) MenuListRedraw();
if (mm.lkm) {action_buf = cur_action_buf; pause(5); ExitProcess(); } if (mm.key&MOUSE_LEFT)&&(m.click) {action_buf = cur_action_buf; pause(5); ExitProcess(); }
break; break;
case evKey: case evKey:

View File

@ -104,6 +104,7 @@ void LoadIniSettings()
ini_get_int stdcall (eolite_ini_path, #confir_section, "InfoAfterCopy", 0); info_after_copy = EAX; ini_get_int stdcall (eolite_ini_path, #confir_section, "InfoAfterCopy", 0); info_after_copy = EAX;
ini_get_int stdcall (eolite_ini_path, #confir_section, "UseBigFonts", 0); use_big_fonts = EAX; ini_get_int stdcall (eolite_ini_path, #confir_section, "UseBigFonts", 0); use_big_fonts = EAX;
ini_get_int stdcall (eolite_ini_path, #confir_section, "LineHeight", 18); files.line_h = EAX; ini_get_int stdcall (eolite_ini_path, #confir_section, "LineHeight", 18); files.line_h = EAX;
ini_get_int stdcall (eolite_ini_path, #confir_section, "TimeDoubleClick", 50); MOUSE_TIME = EAX;
if (use_big_fonts) if (use_big_fonts)
{ {

View File

@ -5,7 +5,7 @@
char os_name[8] = {'M','E','N','U','E','T','0','1'}; char os_name[8] = {'M','E','N','U','E','T','0','1'};
dword os_version = 0x00000001; dword os_version = 0x00000001;
dword start_addr = #main; dword start_addr = #load_init_main;
dword final_addr = #stop+32; dword final_addr = #stop+32;
dword alloc_mem = MEMSIZE; dword alloc_mem = MEMSIZE;
dword x86esp_reg = MEMSIZE; dword x86esp_reg = MEMSIZE;
@ -33,9 +33,9 @@ char program_path[4096];
#define BT_NOFRAME 0x20000000 #define BT_NOFRAME 0x20000000
//Button mouse //Button mouse
#define MOUSE_LEFT 100b #define MOUSE_LEFT 001b
#define MOUSE_RIGHT 001b #define MOUSE_RIGHT 010b
#define MOUSE_CENTER 010b #define MOUSE_CENTER 100b
//ASCII KEYS //ASCII KEYS
#define ASCII_KEY_BS 008 #define ASCII_KEY_BS 008
@ -75,10 +75,14 @@ char program_path[4096];
* down - key event press * down - key event press
* up - key release events * up - key release events
* move - event mouse movements * move - event mouse movements
* click - when clicked
* dblclick - double-click the default 50 ms
*/ */
dword __TMP_TIME,MOUSE_TIME;
:struct mouse :struct mouse
{ {
signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,hor,vert,down,up,move; signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick;
void get(); void get();
}; };
@ -114,7 +118,10 @@ char program_path[4096];
if((down)&&!(key)){ if((down)&&!(key)){
up = true; up = true;
down = false; down = false;
if(!move) click = true;
__TMP_TIME = GetStartTime();
if(__TMP_TIME-tmp_time<=MOUSE_TIME) dblclick = true;
tmp_time = __TMP_TIME;
//returns the key code //returns the key code
key = tmp; key = tmp;
lkm = 1&tmp; lkm = 1&tmp;
@ -127,9 +134,14 @@ char program_path[4096];
//when you press the mouse button //when you press the mouse button
else { else {
up = false; up = false;
if(key) down = true; click = false;
dblclick = false;
if(key)
{
down = true;
tmp = key;
}
else down = false; else down = false;
if(down) tmp = key;
if((xx!=x)||(yy!=y)){ if((xx!=x)||(yy!=y)){
move = true; move = true;
xx = x; xx = x;
@ -651,3 +663,13 @@ inline fastcall dword GetStartTime()
$mov ebx,9 $mov ebx,9
$int 0x40 $int 0x40
} }
dword __generator; // random number generator - äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë
//The initialization of the initial data before running
void load_init_main()
{
MOUSE_TIME = 50; //Default 50 ms.
__generator = GetStartTime();
main();
}

View File

@ -19,8 +19,6 @@
*******************************************************************************/ *******************************************************************************/
dword generator; // random number generator - äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë
inline fastcall int random( ECX) inline fastcall int random( ECX)
// get pseudo-random number - ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî // get pseudo-random number - ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî
{ {
@ -30,11 +28,11 @@ inline fastcall int random( ECX)
$xor eax,edx $xor eax,edx
$not eax $not eax
EBX = generator; EBX = __generator;
$ror ebx,3 $ror ebx,3
$xor ebx,0xdeadbeef $xor ebx,0xdeadbeef
EBX += EAX; EBX += EAX;
generator = EBX; __generator = EBX;
EAX += EBX; EAX += EBX;
EAX = EAX % ECX; EAX = EAX % ECX;
@ -43,7 +41,7 @@ inline fastcall int random( ECX)
} }
inline fastcall randomize() inline fastcall randomize()
// initialize random number generator - èíèöèàëèçèðîâàòü ãåíåðàòîð ñëó÷àéíûõ ÷èñåë // initialize random number __generator - èíèöèàëèçèðîâàòü ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
{ {
asm asm
{ {
@ -51,5 +49,6 @@ inline fastcall randomize()
int 0x40 int 0x40
ror eax,16 ror eax,16
} }
generator = EAX; __generator = EAX;
} }

View File

@ -39,7 +39,7 @@ inline fastcall signed int strcmp( ESI, EDI)
} }
*/ */
int strspn(dword text1,text2) inline int strspn(dword text1,text2)
{ {
dword beg; dword beg;
char s1,s2; char s1,s2;
@ -64,7 +64,7 @@ int strspn(dword text1,text2)
return ret; return ret;
} }
dword strpbrk(dword text1,text2) inline dword strpbrk(dword text1,text2)
{ {
char s,ss; char s,ss;
dword beg; dword beg;
@ -112,8 +112,15 @@ inline fastcall unsigned int strlen( EDI)
EAX-=2+ECX; EAX-=2+ECX;
} }
inline strnlen(dword str, dword maxlen)
{
dword cp;
for (cp = str; (maxlen != 0) && (DSBYTE[cp] != '\0'); cp++, maxlen--);
return cp - str;
}
signed int strcmp(dword text1, text2)
inline signed int strcmp(dword text1, text2)
{ {
char s1,s2; char s1,s2;
dword p1,p2; dword p1,p2;
@ -136,6 +143,30 @@ signed int strcmp(dword text1, text2)
return 0; return 0;
} }
/*
signed int strncmp(dword s1, s2, signed n)
unsigned char _s1,_s2;
{
if (n == 0)
return 0;
do {
_s1 = DSBYTE[s1];
_s2 = DSBYTE[s2];
if (_s1 != _s2)
{
$dec s2
return _s1 - _s2;
}
$inc s2
if (_s1 == 0)
break;
$inc s1
$dec n
} while (n);
return 0;
}
*/
inline fastcall void strcpy( EDI, ESI) inline fastcall void strcpy( EDI, ESI)
{ {
@ -147,7 +178,7 @@ L2:
$jnz L2 $jnz L2
} }
void strncpy(dword text1, text2, signed len) inline dword strncpy(dword text1, text2, signed len)
signed o1,o2; signed o1,o2;
{ {
o1 = len/4; o1 = len/4;
@ -164,6 +195,8 @@ void strncpy(dword text1, text2, signed len)
$inc text2 $inc text2
$dec o2 $dec o2
} }
ESBYTE[text1] = 0;
return text1;
} }
inline fastcall int strlcpy(dword ESI, EDI, EBX) inline fastcall int strlcpy(dword ESI, EDI, EBX)
@ -198,7 +231,7 @@ inline fastcall void strtrim( ESI)
*/ */
byte __isWhite(int s){ if (s==13)||(s==32)||(s==10)||(s==9) return true; return false; } byte __isWhite(int s){ if (s==13)||(s==32)||(s==10)||(s==9) return true; return false; }
void strltrim(dword text){ inline void strltrim(dword text){
int s; int s;
dword back_text; dword back_text;
back_text = text; back_text = text;
@ -218,7 +251,7 @@ void strltrim(dword text){
}; };
} }
void strrtrim(dword text) inline void strrtrim(dword text)
{ {
int s; int s;
dword p; dword p;
@ -240,7 +273,7 @@ void strrtrim(dword text)
if(__isWhite(s)) ESBYTE[p] = 0; if(__isWhite(s)) ESBYTE[p] = 0;
} }
void strtrim(dword text){ inline void strtrim(dword text){
int s; int s;
dword p,back_text; dword p,back_text;
back_text = text; back_text = text;
@ -578,7 +611,7 @@ F3:
} }
*/ */
dword itoa(signed long number) inline dword itoa(signed long number)
{ {
unsigned char buf[11]; unsigned char buf[11];
dword ret; dword ret;
@ -653,7 +686,7 @@ F3:
return EBX; return EBX;
} }
dword strdup(dword text) inline dword strdup(dword text)
{ {
dword l = strlen(text); dword l = strlen(text);
dword ret = malloc(l+1); dword ret = malloc(l+1);
@ -661,6 +694,20 @@ dword strdup(dword text)
return ret; return ret;
} }
inline dword strndup(dword str, signed maxlen)
{
dword copy,len;
len = strnlen(str, maxlen);
copy = malloc(len + 1);
if (copy != NULL)
{
memcpy(copy, str, len);
DSBYTE[len+copy] = '\0';
}
return copy;
}
void debugi(dword d_int) void debugi(dword d_int)
{ {
char tmpch[12]; char tmpch[12];