📄 event.c
字号:
event = vga_waitevent(VGA_MOUSEEVENT | VGA_KEYEVENT,
NULL, NULL, NULL, &timeout);
}
else {
if(mouse_update()) event |= VGA_MOUSEEVENT;
if(keyboard_update()) event |= VGA_KEYEVENT;
}
if( event == 0 && wait) {
if(timeout.tv_sec == 0 && timeout.tv_usec == 0) {
lwe->type = LWETYPE_TIMEOUT;
lwe->count = ++timeout_count;
return 1;
}
return 0;
}
timeout_count = 0;
// There was a event occurred.
if (event & VGA_MOUSEEVENT) {
lwe->type = LWETYPE_MOUSE;
if (RefreshCursor(&me->x, &me->y, &button))
{
me->event = ME_MOVED;
timerclear(&time1);
timerclear(&time2);
return 1;
}
if (oldbutton == button)
return 0;
if ( !(oldbutton & MOUSE_LEFTBUTTON) &&
(button & MOUSE_LEFTBUTTON) )
{
if( timerisset(&time1) ) // check double click
{
gettimeofday(&temp, NULL);
secinter = temp.tv_sec - time1.tv_sec;
usecinter = (temp.tv_usec - time1.tv_usec)/1000;
if(usecinter < 0)
usecinter += 1000;
if( secinter < 2 && usecinter <= dblclicktime )
me->event = ME_LEFTDBLCLICK;
else
me->event = ME_LEFTDOWN;
timerclear(&time1);
}
else
{
gettimeofday(&time1, NULL);
me->event = ME_LEFTDOWN;
}
goto mouseret;
}
if ( (oldbutton & MOUSE_LEFTBUTTON) &&
!(button & MOUSE_LEFTBUTTON) )
{
me->event = ME_LEFTUP;
goto mouseret;
}
if ( !(oldbutton & MOUSE_RIGHTBUTTON) &&
(button & MOUSE_RIGHTBUTTON) )
{
if( timerisset(&time2) ) // check double click
{
gettimeofday(&temp, NULL);
secinter = temp.tv_sec - time2.tv_sec;
usecinter = (temp.tv_usec - time2.tv_usec)/1000;
if(usecinter < 0)
usecinter += 1000;
if( secinter < 2 && usecinter <= dblclicktime )
me->event = ME_RIGHTDBLCLICK;
else
me->event = ME_RIGHTDOWN;
timerclear(&time2);
}
else
{
gettimeofday(&time2, NULL);
me->event = ME_RIGHTDOWN;
}
goto mouseret;
}
if ( (oldbutton & MOUSE_RIGHTBUTTON) &&
!(button & MOUSE_RIGHTBUTTON) )
{
me->event = ME_RIGHTUP;
goto mouseret;
}
}
if(event & VGA_KEYEVENT) {
lwe->type = LWETYPE_KEY;
keystate = keyboard_getstate();
for(i = 0; i < NR_KEYS; i++) {
if(!oldkeystate[i] && keystate[i]) {
ke->event = KE_KEYDOWN;
ke->scancode = i;
olddownkey = i;
break;
}
if(oldkeystate[i] && !keystate[i]) {
ke->event = KE_KEYUP;
ke->scancode = i;
break;
}
}
if (i == NR_KEYS) {
ke->event = KE_KEYDOWN;
ke->scancode = olddownkey;
}
make = (ke->event == KE_KEYDOWN)?1:0;
if (i != NR_KEYS) {
switch (ke->scancode) {
case SCANCODE_CAPSLOCK:
if (make && caps_off) {
capslock = 1 - capslock;
set_leds();
}
caps_off = 1 - make;
break;
case SCANCODE_NUMLOCK:
if (make && num_off) {
numlock = 1 - numlock;
set_leds();
}
num_off = 1 - make;
break;
case SCANCODE_SCROLLLOCK:
if (make & slock_off) {
slock = 1 - slock;
set_leds();
}
slock_off = 1 - make;
break;
case SCANCODE_LEFTCONTROL:
control1 = make;
break;
case SCANCODE_RIGHTCONTROL:
control2 = make;
break;
case SCANCODE_LEFTSHIFT:
shift1 = make;
break;
case SCANCODE_RIGHTSHIFT:
shift2 = make;
break;
case SCANCODE_LEFTALT:
alt1 = make;
break;
case SCANCODE_RIGHTALT:
alt2 = make;
break;
}
status &= 0xFFFFF0C0;
status |= (DWORD)((capslock << 8) |
(numlock << 7) |
(slock << 6) |
(control1 << 5) |
(control2 << 4) |
(alt1 << 3) |
(alt2 << 2) |
(shift1 << 1) |
(shift2));
// Mouse button status
if (oldbutton & MOUSE_LEFTBUTTON)
status |= 0x00000100;
else if (oldbutton & MOUSE_RIGHTBUTTON)
status |= 0x00000200;
}
ke->status = status;
memcpy(oldkeystate, keystate, NR_KEYS);
return 1;
}
return 0;
mouseret:
status &= 0xFFFFF0FF;
oldbutton = button;
if (oldbutton & MOUSE_LEFTBUTTON)
status |= 0x00000100;
if (oldbutton & MOUSE_RIGHTBUTTON)
status |= 0x00000200;
me->status = status;
return 1;
}
BOOL GUIAPI GetKeyStatus (UINT uKey)
{
if (uKey & 0x0F00) // this is a mouse key
return oldbutton & (uKey >> 8);
else if (uKey < NR_KEYS)
return oldkeystate [uKey];
return FALSE;
}
DWORD GUIAPI GetShiftKeyStatus (void)
{
return status;
}
BOOL InitLWEvent(void)
{
// Use raw keyboard.
keyboard_translatekeys (TRANSLATE_KEYPADENTER
| DONT_CATCH_CTRLC
| DONT_SWITCH_VT);
if( keyboard_init() ) {
return FALSE;
}
GetDblclickTime();
GetTimeout();
ResetMouseEvent();
ResetKeyEvent();
return TRUE;
}
void TerminateLWEvent(void)
{
ResetMouseEvent ();
ResetKeyEvent ();
keyboard_close ();
mouse_close ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -