void iupmotButtonKeySetStatus(unsigned int state, unsigned int but, char* status, int doubleclick) { if (state & ShiftMask) iupKEY_SETSHIFT(status); if (state & ControlMask) iupKEY_SETCONTROL(status); if ((state & Button1Mask) || but==Button1) iupKEY_SETBUTTON1(status); if ((state & Button2Mask) || but==Button2) iupKEY_SETBUTTON2(status); if ((state & Button3Mask) || but==Button3) iupKEY_SETBUTTON3(status); if ((state & Button4Mask) || but==Button4) iupKEY_SETBUTTON4(status); if ((state & Button5Mask) || but==Button5) iupKEY_SETBUTTON5(status); if (state & Mod1Mask || state & Mod5Mask) /* Alt */ iupKEY_SETALT(status); if (state & Mod4Mask) /* Apple/Win */ iupKEY_SETSYS(status); if (doubleclick) iupKEY_SETDOUBLE(status); }
void iupgtkButtonKeySetStatus(guint state, unsigned int but, char* status, int doubleclick) { if (state & GDK_SHIFT_MASK) iupKEY_SETSHIFT(status); if (state & GDK_CONTROL_MASK) iupKEY_SETCONTROL(status); if ((state & GDK_BUTTON1_MASK) || but==1) iupKEY_SETBUTTON1(status); if ((state & GDK_BUTTON2_MASK) || but==2) iupKEY_SETBUTTON2(status); if ((state & GDK_BUTTON3_MASK) || but==3) iupKEY_SETBUTTON3(status); if ((state & GDK_BUTTON4_MASK) || but==4) iupKEY_SETBUTTON4(status); if ((state & GDK_BUTTON5_MASK) || but==5) iupKEY_SETBUTTON5(status); if (state & GDK_MOD1_MASK || state & GDK_MOD5_MASK) /* Alt */ iupKEY_SETALT(status); if (state & GDK_MOD4_MASK) /* Apple/Win */ iupKEY_SETSYS(status); if (doubleclick) iupKEY_SETDOUBLE(status); }
void iupwinButtonKeySetStatus(WORD keys, char* status, int doubleclick) { if (keys & MK_SHIFT) iupKEY_SETSHIFT(status); if (keys & MK_CONTROL) iupKEY_SETCONTROL(status); if (keys & MK_LBUTTON) iupKEY_SETBUTTON1(status); if (keys & MK_MBUTTON) iupKEY_SETBUTTON2(status); if (keys & MK_RBUTTON) iupKEY_SETBUTTON3(status); if (doubleclick) iupKEY_SETDOUBLE(status); if (GetKeyState(VK_MENU) & 0x8000) iupKEY_SETALT(status); if ((GetKeyState(VK_LWIN) & 0x8000) || (GetKeyState(VK_RWIN) & 0x8000)) iupKEY_SETSYS(status); if (keys & MK_XBUTTON1) iupKEY_SETBUTTON4(status); if (keys & MK_XBUTTON2) iupKEY_SETBUTTON5(status); }
int iupwinButtonUp(Ihandle* ih, UINT msg, WPARAM wp, LPARAM lp) { char status[IUPKEY_STATUS_SIZE] = IUPKEY_STATUS_INIT; int ret, b=0; IFniiiis cb = (IFniiiis) IupGetCallback(ih, "BUTTON_CB"); if (!cb) return 0; iupwinButtonKeySetStatus(LOWORD(wp), status, 0); /* also updates the button status, since wp could not have the flag */ if (msg==WM_LBUTTONUP) { b = IUP_BUTTON1; iupKEY_SETBUTTON1(status); } else if (msg==WM_MBUTTONUP) { b = IUP_BUTTON2; iupKEY_SETBUTTON2(status); } else if (msg==WM_RBUTTONUP) { b = IUP_BUTTON3; iupKEY_SETBUTTON3(status); } else if (msg==WM_XBUTTONUP) { if (HIWORD(wp) == XBUTTON1) { b = IUP_BUTTON4; iupKEY_SETBUTTON4(status); } else { b = IUP_BUTTON5; iupKEY_SETBUTTON5(status); } } ret = cb(ih, b, 0, (int)(short)LOWORD(lp), (int)(short)HIWORD(lp), status); if (ret == IUP_CLOSE) IupExitLoop(); else if (ret == IUP_IGNORE) return -1; return 1; }
static LRESULT CALLBACK winHookGetMessageProc(int hcode, WPARAM gm_wp, LPARAM gm_lp) { MSG* gm_msg = (MSG*)gm_lp; UINT msg = gm_msg->message; WPARAM wp = gm_msg->wParam; LPARAM lp = gm_msg->lParam; POINT pt = gm_msg->pt; static int last_button = 0; static int last_pressed = 0; char status[IUPKEY_STATUS_SIZE] = IUPKEY_STATUS_INIT; if (hcode!=HC_ACTION) return CallNextHookEx(win_OldGetMessageHook, hcode, gm_wp, gm_lp); switch (msg) { case WM_MOUSEWHEEL: { IFfiis cb = (IFfiis)IupGetFunction("GLOBALWHEEL_CB"); if (cb) { short delta = (short)HIWORD(wp); iupwinButtonKeySetStatus(LOWORD(wp), status, 0); cb((float)delta/120.0f, LOWORD(lp), HIWORD(lp), status); } break; } case WM_NCXBUTTONDBLCLK: case WM_NCLBUTTONDBLCLK: case WM_NCMBUTTONDBLCLK: case WM_NCRBUTTONDBLCLK: case WM_NCXBUTTONDOWN: case WM_NCLBUTTONDOWN: case WM_NCMBUTTONDOWN: case WM_NCRBUTTONDOWN: case WM_XBUTTONDBLCLK: case WM_LBUTTONDBLCLK: case WM_MBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_XBUTTONDOWN: case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: { int doubleclick = 0, button = 0; IFiiiis cb = (IFiiiis) IupGetFunction("GLOBALBUTTON_CB"); if (!cb) break; if (msg==WM_XBUTTONDBLCLK || msg==WM_NCXBUTTONDBLCLK || msg==WM_LBUTTONDBLCLK || msg==WM_NCLBUTTONDBLCLK || msg==WM_MBUTTONDBLCLK || msg==WM_NCMBUTTONDBLCLK || msg==WM_RBUTTONDBLCLK || msg==WM_NCRBUTTONDBLCLK) doubleclick = 1; if (msg>=WM_MOUSEFIRST && msg<=WM_MOUSELAST) iupwinButtonKeySetStatus(LOWORD(wp), status, doubleclick); else if (doubleclick) iupKEY_SETDOUBLE(status); if (msg==WM_LBUTTONDOWN || msg==WM_LBUTTONDBLCLK || msg==WM_NCLBUTTONDOWN || msg==WM_NCLBUTTONDBLCLK) { button = IUP_BUTTON1; iupKEY_SETBUTTON1(status); } else if (msg==WM_MBUTTONDOWN || msg==WM_MBUTTONDBLCLK || msg==WM_NCMBUTTONDOWN || msg==WM_NCMBUTTONDBLCLK) { button = IUP_BUTTON2; iupKEY_SETBUTTON2(status); } else if (msg==WM_RBUTTONDOWN || msg==WM_RBUTTONDBLCLK || msg==WM_NCRBUTTONDOWN || msg==WM_NCRBUTTONDBLCLK) { button = IUP_BUTTON3; iupKEY_SETBUTTON3(status); } else if (msg==WM_XBUTTONDOWN || msg==WM_XBUTTONDBLCLK || msg==WM_NCXBUTTONDOWN || msg==WM_NCXBUTTONDBLCLK) { if (HIWORD(wp) == XBUTTON1) { button = IUP_BUTTON4; iupKEY_SETBUTTON4(status); } else { button = IUP_BUTTON5; iupKEY_SETBUTTON5(status); } } if (last_button == button && last_pressed == 1) break; /* do nothing because last state was already pressed */ cb(button, 1, pt.x, pt.y, status); last_button = button; last_pressed = 1; break; } case WM_NCXBUTTONUP: case WM_NCLBUTTONUP: case WM_NCMBUTTONUP: case WM_NCRBUTTONUP: case WM_XBUTTONUP: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: { int button=0; IFiiiis cb = (IFiiiis) IupGetFunction("GLOBALBUTTON_CB"); if (!cb) break; if (msg>=WM_MOUSEFIRST && msg<=WM_MOUSELAST) iupwinButtonKeySetStatus(LOWORD(wp), status, 0); /* also updates the button status, since wp could not have the flag */ if (msg==WM_LBUTTONUP || msg==WM_NCLBUTTONUP) { button = IUP_BUTTON1; iupKEY_SETBUTTON1(status); } else if (msg==WM_MBUTTONUP || msg==WM_NCMBUTTONUP) { button = IUP_BUTTON2; iupKEY_SETBUTTON2(status); } else if (msg==WM_RBUTTONUP || msg==WM_NCRBUTTONUP) { button = IUP_BUTTON3; iupKEY_SETBUTTON3(status); } else if (msg==WM_XBUTTONUP || msg==WM_NCXBUTTONUP) { if (HIWORD(wp) == XBUTTON1) { button = IUP_BUTTON4; iupKEY_SETBUTTON4(status); } else { button = IUP_BUTTON5; iupKEY_SETBUTTON5(status); } } if (last_button == button && last_pressed == 0) break; /* do nothing because last state was already released */ cb(button, 0, pt.x, pt.y, status); last_button = button; last_pressed = 0; break; } case WM_NCMOUSEMOVE: case WM_MOUSEMOVE: { IFiis cb = (IFiis)IupGetFunction("GLOBALMOTION_CB"); if (cb) { if (msg>=WM_MOUSEFIRST && msg<=WM_MOUSELAST) iupwinButtonKeySetStatus(LOWORD(wp), status, 0); cb(pt.x, pt.y, status); } break; } case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYUP: { IFii cb = (IFii)IupGetFunction("GLOBALKEYPRESS_CB"); if (cb) { int pressed = (msg==WM_KEYDOWN || msg==WM_SYSKEYDOWN)? 1: 0; int code = iupwinKeyDecode((int)wp); if (code != 0) cb(code, pressed); } break; } default: break; } return CallNextHookEx(win_OldGetMessageHook, hcode, gm_wp, gm_lp); }