static void one_iter () { SDL_Event event; int flag; flag = SDL_PollEvent (&event); if (0 < flag) { switch (event.type) { case SDL_QUIT: exit (0); break; case SDL_KEYDOWN: keyevent (&(event.key)); break; case SDL_VIDEORESIZE: window_width = event.resize.w; window_height = event.resize.h; surface = SDL_SetVideoMode (window_width, window_height, 0, SDL_OPENGL | SDL_RESIZABLE); break; default: break; } } else { time_set(); key_input (); timer_flame (); opengl_expose (); SDL_GL_SwapBuffers (); } }
/* loop while the connection is supposed to be valid */ void xloop(char *message) { XEvent event; init_window(); while (1) { XNextEvent(display, &event); switch (event.type) { case MappingNotify: XRefreshKeyboardMapping(&event.xmapping); break; case Expose: refresh(message); break; case KeyPress: keyevent(&event.xkey); break; case ButtonPress: XCloseDisplay(display); return; break; } } }
void cf_key(unsigned key, int press) { static const unsigned keys[cf_last] = { 0, XK_BackSpace, XK_Tab, XK_Return, XK_Escape, XK_space, XK_apostrophe, XK_comma, XK_period, XK_slash, XK_0, XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8, XK_9, XK_semicolon, XK_equal, XK_bracketleft, XK_backslash, XK_bracketright, XK_a, XK_b, XK_c, XK_d, XK_e, XK_f, XK_g, XK_h, XK_i, XK_j, XK_k, XK_l, XK_m, XK_n, XK_o, XK_p, XK_q, XK_r, XK_s, XK_t, XK_u, XK_v, XK_w, XK_x, XK_y, XK_z, XK_Delete, XK_Pause, XK_Control_L, XK_Control_R, XK_Shift_L, XK_Shift_R, XK_Alt_L, XK_Alt_R, XK_Super_L, XK_Super_R, XK_Menu, XK_Up, XK_Down, XK_Left, XK_Right, XK_Home, XK_End, XK_Page_Up, XK_Page_Down, XK_Insert, XK_KP_Separator, XK_Caps_Lock, XK_Scroll_Lock, XK_Num_Lock, XK_Select, XK_Print, XK_F1, XK_F2, XK_F3, XK_F4, XK_F5, XK_F6, XK_F7, XK_F8, XK_F9, XK_F10, XK_F11, XK_F12, XK_KP_0, XK_KP_1, XK_KP_2, XK_KP_3, XK_KP_4, XK_KP_5, XK_KP_6, XK_KP_7, XK_KP_8, XK_KP_9, XK_multiply, XK_division, XK_plus, XK_minus, XK_KP_Enter, XK_backslash }; Window focus; int revert; KeySym ks = keys[key]; XGetInputFocus(dpy, &focus, &revert); keyevent(focus, XKeysymToKeycode(dpy, ks), press ? KeyPress : KeyRelease); XFlush(dpy); updatemodifiers(ks, press); }
void ATOM_Edit::onKeyDown(ATOM_WidgetKeyDownEvent *event) { ATOM_STACK_TRACE(ATOM_Edit::onKeyDown); // 只读情况,不允许输入 if(EDITTYPE_READONLY & _editType) { return; } switch(event->key) { case KEY_LEFT: moveCursor(-1); break; case KEY_RIGHT: moveCursor(1); break; case KEY_DELETE: deleteChar(); break; case KEY_HOME: moveCursor(-getStringLength()); break; case KEY_END: moveCursor(getStringLength()); break; case KEY_UP: case KEY_DOWN: case KEY_RETURN: case KEY_KP_ENTER: case KEY_TAB: case KEY_ESCAPE: case KEY_SPACE: case KEY_COLON: { ATOM_EditSysKeyEvent keyevent(getId(), event->key); _parent->handleEvent(&keyevent); } break; case KEY_v: if(GetAsyncKeyState(VK_LCONTROL) &0x8000 || GetAsyncKeyState(VK_RCONTROL) &0x8000) { pasteFromClipBoard(); } break; case KEY_a: if(GetAsyncKeyState(VK_LCONTROL) &0x8000 || GetAsyncKeyState(VK_RCONTROL) &0x8000) { setCursor(_startPosition+_string.size()); _cusorOldPosition.x = _offsetX; _cusorOldPosition.y = 0; _cusorNewPosition = _cursorPosition; } break; case KEY_c: if(GetAsyncKeyState(VK_LCONTROL) &0x8000|| GetAsyncKeyState(VK_RCONTROL)&0x8000) { size_t s = 0,t = 0; _selectString = getSelectString(s,t); if(_selectString.empty()) return; if(OpenClipboard(NULL)) { HGLOBAL hmem=GlobalAlloc(GHND,_selectString.size()+1); char *pmem=(char*)GlobalLock(hmem); EmptyClipboard(); memcpy(pmem,_selectString.c_str(),_selectString.size()); SetClipboardData(CF_TEXT,hmem); CloseClipboard(); GlobalFree(hmem); } } break; case KEY_x: if(GetAsyncKeyState(VK_LCONTROL)&0x8000 || GetAsyncKeyState(VK_RCONTROL)&0x8000) { size_t s = 0,t = 0; _selectString = getSelectString(s,t); deleteString(s,t); if(_selectString.empty()) return; if(OpenClipboard(NULL)) { HGLOBAL hmem=GlobalAlloc(GHND,_selectString.size()+1); char *pmem=(char*)GlobalLock(hmem); EmptyClipboard(); memcpy(pmem,_selectString.c_str(),_selectString.size()); SetClipboardData(CF_TEXT,hmem); CloseClipboard(); GlobalFree(hmem); } } break; } if(_parent) { _parent->queueEvent (ATOM_NEW(ATOM_WidgetKeyDownEvent, getId(),event->key,event->keymod), ATOM_APP); } }