📄 xwin_event.c.svn-base
字号:
#include <glib.h>#include <stdio.h>#include <fcntl.h>#include <string.h>#include <pthread.h>#include <X11/Xlib.h>#include <X11/keysym.h>#include <assert.h>#include "xwin_pub.h"#include "xwin_event.h"#include "base_types.h"//pthread_mutex_t event_mutex = PTHREAD_MUTEX_INITIALIZER;void xwin_event_init(xwin_t *xwin_p) { XSelectInput(xwin_p->dpy, xwin_p->movie, (ButtonReleaseMask |ButtonPressMask |KeyPressMask |KeyReleaseMask |PointerMotionMask // |PointerMotionHintMask |StructureNotifyMask // |SubstructureNotifyMask |ExposureMask) );};void xwin_event_get(xwin_t *xwin_p) { player_t *player_p = xwin_p->player_p; XEvent x_event; int destory = 0; xwin_event_init(xwin_p); while(!destory) { XLockDisplay(xwin_p->dpy); XNextEvent(xwin_p->dpy, &x_event); XUnlockDisplay(xwin_p->dpy); if (x_event.xany.window == xwin_p->movie) { int keycode; KeySym keysym; flash_event_t *fe_p; char *key_str; fe_p = g_new0(flash_event_t,1); assert(pthread_mutex_lock(&player_p->eventq_mutex)==0); switch (x_event.type) { case KeyPress: fe_p->event_type = EVENT_KEY_PRESS; player_p->eventq_p=g_slist_append(player_p->eventq_p,fe_p); keycode = x_event.xkey.keycode; keysym = XLookupKeysym((XKeyEvent*)&x_event, 0); key_str = XKeysymToString(keysym); fe_p->key_value = key_str[0]; printf("event log: key press %s\n",key_str); if (g_strcasecmp(key_str,"BackSpace") == 0) { fe_p->key_value = 0x8; }; if (g_strcasecmp(key_str,"period") == 0) { fe_p->key_value = '.'; }; break; case KeyRelease: fe_p->event_type = EVENT_KEY_RELEASE; player_p->eventq_p=g_slist_append(player_p->eventq_p,fe_p); break; case ButtonPress: fe_p->event_type = EVENT_BUTTON_PRESS; fe_p->x = x_event.xmotion.x * xwin_p->twips_per_pixel; fe_p->y = x_event.xmotion.y * xwin_p->twips_per_pixel; player_p->eventq_p=g_slist_append(player_p->eventq_p,fe_p); printf("event log: click %d,%d\n",x_event.xmotion.x,x_event.xmotion.y); break; case ButtonRelease: fe_p->event_type = EVENT_BUTTON_RELEASE; fe_p->x = x_event.xmotion.x * xwin_p->twips_per_pixel; fe_p->y = x_event.xmotion.y * xwin_p->twips_per_pixel; player_p->eventq_p=g_slist_append(player_p->eventq_p,fe_p); break; case MotionNotify: fe_p->event_type = EVENT_MOTION_NOTIFY; fe_p->x = x_event.xmotion.x * xwin_p->twips_per_pixel; fe_p->y = x_event.xmotion.y * xwin_p->twips_per_pixel; player_p->eventq_p=g_slist_append(player_p->eventq_p,fe_p); break; case Expose: //XXX 整个画布全重画有些浪费.应仅重画 expose 部分即可 xwin_draw_frame(xwin_p,1); break; case DestroyNotify: case UnmapNotify: destory = 1; printf("asdfASDFASDFASFD\n"); break; default: printf("unkown %d\n",x_event.type); g_free(fe_p); break; } assert(pthread_mutex_unlock(&player_p->eventq_mutex)==0); }; }; printf("ksldajflaksdfjlaksfdj\n"); return 0;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -