Changeset 681 for libcaca/trunk
- Timestamp:
- Mar 23, 2006, 7:36:59 PM (15 years ago)
- Location:
- libcaca/trunk
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/caca.c
r672 r681 75 75 kk->events.last_key_ticks = 0; 76 76 kk->events.autorepeat_ticks = 0; 77 kk->events.last_key = 0;78 #endif 79 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) 77 kk->events.last_key_event.type = CACA_EVENT_NONE; 78 #endif 79 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL) 80 80 kk->events.queue = 0; 81 81 #endif -
libcaca/trunk/caca/caca.h
r672 r681 114 114 * Event types returned by caca_get_event(). 115 115 */ 116 enum caca_event 117 { 118 CACA_EVENT_NONE = 0x00000000, /**< No event. */ 119 CACA_EVENT_KEY_PRESS = 0x01000000, /**< A key was pressed. */ 120 CACA_EVENT_KEY_RELEASE = 0x02000000, /**< A key was released. */ 121 CACA_EVENT_MOUSE_PRESS = 0x04000000, /**< A mouse button was pressed. */ 122 CACA_EVENT_MOUSE_RELEASE = 0x08000000, /**< A mouse button was released. */ 123 CACA_EVENT_MOUSE_MOTION = 0x10000000, /**< The mouse was moved. */ 124 CACA_EVENT_RESIZE = 0x20000000, /**< The window was resized. */ 125 CACA_EVENT_ANY = 0xff000000 /**< Bitmask for any event. */ 116 enum caca_event_type 117 { 118 CACA_EVENT_NONE = 0x0000, /**< No event. */ 119 120 CACA_EVENT_KEY_PRESS = 0x0001, /**< A key was pressed. */ 121 CACA_EVENT_KEY_RELEASE = 0x0002, /**< A key was released. */ 122 CACA_EVENT_MOUSE_PRESS = 0x0004, /**< A mouse button was pressed. */ 123 CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */ 124 CACA_EVENT_MOUSE_MOTION = 0x0010, /**< The mouse was moved. */ 125 CACA_EVENT_RESIZE = 0x0020, /**< The window was resized. */ 126 127 CACA_EVENT_ANY = 0xffff /**< Bitmask for any event. */ 128 }; 129 130 struct caca_event 131 { 132 enum caca_event_type type; 133 union 134 { 135 struct { unsigned int x, y, button; } mouse; 136 struct { unsigned int w, h; } resize; 137 struct { unsigned int c; unsigned long int ucs4; char utf8[8]; } key; 138 } data; 126 139 }; 127 140 … … 197 210 * 198 211 * @{ */ 199 unsigned int caca_get_event(caca_t *kk, unsigned int);200 unsigned int caca_wait_event(caca_t *kk, unsigned int);212 int caca_get_event(caca_t *kk, unsigned int, struct caca_event *); 213 int caca_wait_event(caca_t *kk, unsigned int, struct caca_event *); 201 214 unsigned int caca_get_mouse_x(caca_t *kk); 202 215 unsigned int caca_get_mouse_y(caca_t *kk); -
libcaca/trunk/caca/caca_internals.h
r672 r681 116 116 void (* display) (caca_t *); 117 117 void (* handle_resize) (caca_t *); 118 unsigned int (* get_event) (caca_t *);118 int (* get_event) (caca_t *, struct caca_event *); 119 119 } drv; 120 120 … … 140 140 struct events 141 141 { 142 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) 143 unsigned int buf[EVENTBUF_LEN];142 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL) 143 struct caca_event buf[EVENTBUF_LEN]; 144 144 int queue; 145 145 #endif … … 148 148 unsigned int last_key_ticks; 149 149 unsigned int autorepeat_ticks; 150 unsigned int last_key;150 struct caca_event last_key_event; 151 151 #endif 152 152 } events; … … 159 159 /* Internal event functions */ 160 160 extern void _caca_handle_resize(caca_t *); 161 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) 162 extern void _push_event(caca_t *, unsigned int);163 extern unsigned int _pop_event(caca_t *);161 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL) 162 extern void _push_event(caca_t *, struct caca_event *); 163 extern int _pop_event(caca_t *, struct caca_event *); 164 164 #endif 165 165 -
libcaca/trunk/caca/driver_conio.c
r672 r681 122 122 } 123 123 124 static unsigned int conio_get_event(caca_t *kk)124 static int conio_get_event(caca_t *kk, struct caca_event *ev) 125 125 { 126 unsigned int event; 126 unsigned char ch; 127 struct caca_event release; 127 128 128 129 if(!_conio_kbhit()) 129 return CACA_EVENT_NONE; 130 { 131 ev->type = CACA_EVENT_NONE; 132 return 0; 133 } 130 134 131 event = getch(); 132 _push_event(kk, CACA_EVENT_KEY_RELEASE | event); 133 return CACA_EVENT_KEY_PRESS | event; 135 ch = getch(); 136 137 ev->type = CACA_EVENT_KEY_PRESS; 138 ev->data.key.c = ch; 139 ev->data.key.ucs4 = (uint32_t)ch; 140 ev->data.key.utf8[0] = ch; 141 ev->data.key.utf8[1] = '\0'; 142 143 release = *ev; 144 release.type = CACA_EVENT_KEY_RELEASE; 145 _push_event(kk, &release); 146 147 return 1; 134 148 } 135 149 -
libcaca/trunk/caca/driver_gl.c
r672 r681 309 309 } 310 310 311 static unsigned int gl_get_event(caca_t *kk) 312 { 313 unsigned int event = 0; 314 311 static int gl_get_event(caca_t *kk, struct caca_event *ev) 312 { 315 313 glutMainLoopEvent(); 316 314 317 315 if(kk->resize.resized) 318 return CACA_EVENT_RESIZE; 316 { 317 ev->type = CACA_EVENT_RESIZE; 318 ev->data.resize.w = kk->qq->width; 319 ev->data.resize.h = kk->qq->height; 320 return 1; 321 } 319 322 320 323 if(kk->drv.p->mouse_changed) 321 324 { 325 ev->type = CACA_EVENT_MOUSE_MOTION; 326 ev->data.mouse.x = kk->mouse.x; 327 ev->data.mouse.y = kk->mouse.y; 328 kk->drv.p->mouse_changed = 0; 329 322 330 if(kk->drv.p->mouse_clicked) 323 331 { 324 event |= CACA_EVENT_MOUSE_PRESS | kk->drv.p->mouse_button; 332 _push_event(kk, ev); 333 ev->type = CACA_EVENT_MOUSE_PRESS; 334 ev->data.mouse.button = kk->drv.p->mouse_button; 325 335 kk->drv.p->mouse_clicked = 0; 326 336 } 327 kk->mouse.x = kk->drv.p->mouse_x; 328 kk->mouse.y = kk->drv.p->mouse_y; 329 event |= CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y; 330 kk->drv.p->mouse_changed = 0; 337 338 return 1; 331 339 } 332 340 333 341 if(kk->drv.p->key != 0) 334 342 { 335 event |= CACA_EVENT_KEY_PRESS; 336 event |= kk->drv.p->key; 343 ev->type = CACA_EVENT_KEY_PRESS; 344 ev->data.key.c = kk->drv.p->key; 345 ev->data.key.ucs4 = (uint32_t)kk->drv.p->key; 346 ev->data.key.utf8[0] = kk->drv.p->key; 347 ev->data.key.utf8[1] = '\0'; 337 348 kk->drv.p->key = 0; 338 return event;349 return 1; 339 350 } 340 351 341 352 if(kk->drv.p->special_key != 0) 342 353 { 343 event |= CACA_EVENT_KEY_PRESS;344 345 354 switch(kk->drv.p->special_key) 346 355 { 347 case GLUT_KEY_F1 : kk->drv.p->special_key = 0; return event | CACA_KEY_F1;348 case GLUT_KEY_F2 : kk->drv.p->special_key = 0; return event | CACA_KEY_F2;349 case GLUT_KEY_F3 : kk->drv.p->special_key = 0; return event | CACA_KEY_F3;350 case GLUT_KEY_F4 : kk->drv.p->special_key = 0; return event | CACA_KEY_F4;351 case GLUT_KEY_F5 : kk->drv.p->special_key = 0; return event | CACA_KEY_F5;352 case GLUT_KEY_F6 : kk->drv.p->special_key = 0; return event | CACA_KEY_F6;353 case GLUT_KEY_F7 : kk->drv.p->special_key = 0; return event | CACA_KEY_F7;354 case GLUT_KEY_F8 : kk->drv.p->special_key = 0; return event | CACA_KEY_F8;355 case GLUT_KEY_F9 : kk->drv.p->special_key = 0; return event | CACA_KEY_F9;356 case GLUT_KEY_F10: kk->drv.p->special_key = 0; return event | CACA_KEY_F10;357 case GLUT_KEY_F11: kk->drv.p->special_key = 0; return event | CACA_KEY_F11;358 case GLUT_KEY_F12: kk->drv.p->special_key = 0; return event | CACA_KEY_F12;359 case GLUT_KEY_LEFT : kk->drv.p->special_key = 0; return event | CACA_KEY_LEFT;360 case GLUT_KEY_RIGHT: kk->drv.p->special_key = 0; return event | CACA_KEY_RIGHT;361 case GLUT_KEY_UP : kk->drv.p->special_key = 0; return event | CACA_KEY_UP;362 case GLUT_KEY_DOWN : kk->drv.p->special_key = 0; return event | CACA_KEY_DOWN;363 default: return CACA_EVENT_NONE;356 case GLUT_KEY_F1 : ev->data.key.c = CACA_KEY_F1; break; 357 case GLUT_KEY_F2 : ev->data.key.c = CACA_KEY_F2; break; 358 case GLUT_KEY_F3 : ev->data.key.c = CACA_KEY_F3; break; 359 case GLUT_KEY_F4 : ev->data.key.c = CACA_KEY_F4; break; 360 case GLUT_KEY_F5 : ev->data.key.c = CACA_KEY_F5; break; 361 case GLUT_KEY_F6 : ev->data.key.c = CACA_KEY_F6; break; 362 case GLUT_KEY_F7 : ev->data.key.c = CACA_KEY_F7; break; 363 case GLUT_KEY_F8 : ev->data.key.c = CACA_KEY_F8; break; 364 case GLUT_KEY_F9 : ev->data.key.c = CACA_KEY_F9; break; 365 case GLUT_KEY_F10: ev->data.key.c = CACA_KEY_F10; break; 366 case GLUT_KEY_F11: ev->data.key.c = CACA_KEY_F11; break; 367 case GLUT_KEY_F12: ev->data.key.c = CACA_KEY_F12; break; 368 case GLUT_KEY_LEFT : ev->data.key.c = CACA_KEY_LEFT; break; 369 case GLUT_KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break; 370 case GLUT_KEY_UP : ev->data.key.c = CACA_KEY_UP; break; 371 case GLUT_KEY_DOWN : ev->data.key.c = CACA_KEY_DOWN; break; 372 default: ev->type = CACA_EVENT_NONE; return 0; 364 373 } 365 } 366 return CACA_EVENT_NONE; 374 375 ev->type = CACA_EVENT_KEY_PRESS; 376 ev->data.key.ucs4 = 0; 377 ev->data.key.utf8[0] = '\0'; 378 379 kk->drv.p->special_key = 0; 380 return 1; 381 } 382 383 ev->type = CACA_EVENT_NONE; 384 return 0; 367 385 } 368 386 -
libcaca/trunk/caca/driver_ncurses.c
r672 r681 227 227 } 228 228 229 static unsigned int ncurses_get_event(caca_t *kk) 230 { 231 unsigned int event; 229 static int ncurses_get_event(caca_t *kk, struct caca_event *ev) 230 { 232 231 int intkey; 233 232 234 233 intkey = getch(); 235 234 if(intkey == ERR) 236 return CACA_EVENT_NONE; 235 { 236 ev->type = CACA_EVENT_NONE; 237 return 0; 238 } 237 239 238 240 if(intkey < 0x100) 239 241 { 240 return CACA_EVENT_KEY_PRESS | intkey; 242 ev->type = CACA_EVENT_KEY_PRESS; 243 ev->data.key.c = intkey; 244 return 1; 241 245 } 242 246 … … 249 253 { 250 254 case BUTTON1_PRESSED: 251 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 255 ev->data.mouse.button = 1; 256 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 252 257 break; 253 258 case BUTTON1_RELEASED: 254 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 259 ev->data.mouse.button = 1; 260 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 255 261 break; 256 262 case BUTTON1_CLICKED: 257 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 258 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 263 ev->data.mouse.button = 1; 264 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 265 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 259 266 break; 260 267 case BUTTON1_DOUBLE_CLICKED: 261 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 262 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 263 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 264 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 268 ev->data.mouse.button = 1; 269 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 270 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 271 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 272 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 265 273 break; 266 274 case BUTTON1_TRIPLE_CLICKED: 267 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 268 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 269 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 270 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 271 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1); 272 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1); 275 ev->data.mouse.button = 1; 276 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 277 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 278 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 279 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 280 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 281 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 273 282 break; 274 283 case BUTTON1_RESERVED_EVENT: … … 276 285 277 286 case BUTTON2_PRESSED: 278 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 287 ev->data.mouse.button = 2; 288 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 279 289 break; 280 290 case BUTTON2_RELEASED: 281 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 291 ev->data.mouse.button = 2; 292 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 282 293 break; 283 294 case BUTTON2_CLICKED: 284 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 285 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 295 ev->data.mouse.button = 2; 296 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 297 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 286 298 break; 287 299 case BUTTON2_DOUBLE_CLICKED: 288 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 289 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 290 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 291 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 300 ev->data.mouse.button = 2; 301 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 302 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 303 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 304 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 292 305 break; 293 306 case BUTTON2_TRIPLE_CLICKED: 294 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 295 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 296 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 297 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 298 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2); 299 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2); 307 ev->data.mouse.button = 2; 308 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 309 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 310 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 311 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 312 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 313 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 300 314 break; 301 315 case BUTTON2_RESERVED_EVENT: … … 303 317 304 318 case BUTTON3_PRESSED: 305 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 319 ev->data.mouse.button = 3; 320 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 306 321 break; 307 322 case BUTTON3_RELEASED: 308 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 323 ev->data.mouse.button = 3; 324 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 309 325 break; 310 326 case BUTTON3_CLICKED: 311 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 312 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 327 ev->data.mouse.button = 3; 328 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 329 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 313 330 break; 314 331 case BUTTON3_DOUBLE_CLICKED: 315 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 316 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 317 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 318 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 332 ev->data.mouse.button = 3; 333 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 334 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 335 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 336 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 319 337 break; 320 338 case BUTTON3_TRIPLE_CLICKED: 321 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 322 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 323 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 324 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 325 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3); 326 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3); 339 ev->data.mouse.button = 3; 340 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 341 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 342 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 343 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 344 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 345 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 327 346 break; 328 347 case BUTTON3_RESERVED_EVENT: … … 330 349 331 350 case BUTTON4_PRESSED: 332 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 351 ev->data.mouse.button = 4; 352 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 333 353 break; 334 354 case BUTTON4_RELEASED: 335 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 355 ev->data.mouse.button = 4; 356 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 336 357 break; 337 358 case BUTTON4_CLICKED: 338 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 339 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 359 ev->data.mouse.button = 4; 360 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 361 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 340 362 break; 341 363 case BUTTON4_DOUBLE_CLICKED: 342 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 343 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 344 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 345 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 364 ev->data.mouse.button = 4; 365 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 366 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 367 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 368 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 346 369 break; 347 370 case BUTTON4_TRIPLE_CLICKED: 348 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 349 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 350 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 351 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 352 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4); 353 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4); 371 ev->data.mouse.button = 4; 372 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 373 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 374 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 375 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 376 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev); 377 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev); 354 378 break; 355 379 case BUTTON4_RESERVED_EVENT: … … 362 386 if(kk->mouse.x == (unsigned int)mevent.x && 363 387 kk->mouse.y == (unsigned int)mevent.y) 364 return _pop_event(kk );388 return _pop_event(kk, ev); 365 389 366 390 kk->mouse.x = mevent.x; 367 391 kk->mouse.y = mevent.y; 368 392 369 return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y; 370 } 371 372 event = CACA_EVENT_KEY_PRESS; 393 ev->type = CACA_EVENT_MOUSE_MOTION; 394 ev->data.mouse.x = kk->mouse.x; 395 ev->data.mouse.y = kk->mouse.y; 396 return 1; 397 } 373 398 374 399 switch(intkey) 375 400 { 376 case KEY_UP: return event | CACA_KEY_UP; 377 case KEY_DOWN: return event | CACA_KEY_DOWN; 378 case KEY_LEFT: return event | CACA_KEY_LEFT; 379 case KEY_RIGHT: return event | CACA_KEY_RIGHT; 380 381 case KEY_IC: return event | CACA_KEY_INSERT; 382 case KEY_DC: return event | CACA_KEY_DELETE; 383 case KEY_HOME: return event | CACA_KEY_HOME; 384 case KEY_END: return event | CACA_KEY_END; 385 case KEY_PPAGE: return event | CACA_KEY_PAGEUP; 386 case KEY_NPAGE: return event | CACA_KEY_PAGEDOWN; 387 388 case KEY_F(1): return event | CACA_KEY_F1; 389 case KEY_F(2): return event | CACA_KEY_F2; 390 case KEY_F(3): return event | CACA_KEY_F3; 391 case KEY_F(4): return event | CACA_KEY_F4; 392 case KEY_F(5): return event | CACA_KEY_F5; 393 case KEY_F(6): return event | CACA_KEY_F6; 394 case KEY_F(7): return event | CACA_KEY_F7; 395 case KEY_F(8): return event | CACA_KEY_F8; 396 case KEY_F(9): return event | CACA_KEY_F9; 397 case KEY_F(10): return event | CACA_KEY_F10; 398 case KEY_F(11): return event | CACA_KEY_F11; 399 case KEY_F(12): return event | CACA_KEY_F12; 400 } 401 402 return CACA_EVENT_NONE; 401 case KEY_UP: ev->data.key.c = CACA_KEY_UP; break; 402 case KEY_DOWN: ev->data.key.c = CACA_KEY_DOWN; break; 403 case KEY_LEFT: ev->data.key.c = CACA_KEY_LEFT; break; 404 case KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break; 405 406 case KEY_IC: ev->data.key.c = CACA_KEY_INSERT; break; 407 case KEY_DC: ev->data.key.c = CACA_KEY_DELETE; break; 408 case KEY_HOME: ev->data.key.c = CACA_KEY_HOME; break; 409 case KEY_END: ev->data.key.c = CACA_KEY_END; break; 410 case KEY_PPAGE: ev->data.key.c = CACA_KEY_PAGEUP; break; 411 case KEY_NPAGE: ev->data.key.c = CACA_KEY_PAGEDOWN; break; 412 413 case KEY_F(1): ev->data.key.c = CACA_KEY_F1; break; 414 case KEY_F(2): ev->data.key.c = CACA_KEY_F2; break; 415 case KEY_F(3): ev->data.key.c = CACA_KEY_F3; break; 416 case KEY_F(4): ev->data.key.c = CACA_KEY_F4; break; 417 case KEY_F(5): ev->data.key.c = CACA_KEY_F5; break; 418 case KEY_F(6): ev->data.key.c = CACA_KEY_F6; break; 419 case KEY_F(7): ev->data.key.c = CACA_KEY_F7; break; 420 case KEY_F(8): ev->data.key.c = CACA_KEY_F8; break; 421 case KEY_F(9): ev->data.key.c = CACA_KEY_F9; break; 422 case KEY_F(10): ev->data.key.c = CACA_KEY_F10; break; 423 case KEY_F(11): ev->data.key.c = CACA_KEY_F11; break; 424 case KEY_F(12): ev->data.key.c = CACA_KEY_F12; break; 425 426 default: ev->type = CACA_EVENT_NONE; return 0; 427 } 428 429 ev->type = CACA_EVENT_KEY_PRESS; 430 ev->data.key.ucs4 = 0; 431 ev->data.key.utf8[0] = '\0'; 432 return 1; 403 433 } 404 434 -
libcaca/trunk/caca/driver_network.c
r672 r681 284 284 } 285 285 286 static unsigned int network_get_event(caca_t *kk)286 static int network_get_event(caca_t *kk, struct caca_event *ev) 287 287 { 288 288 /* Manage new connections as this function will be called sometimes -
libcaca/trunk/caca/driver_slang.c
r672 r681 255 255 } 256 256 257 static unsigned int slang_get_event(caca_t *kk) 258 { 259 unsigned int event; 257 static int slang_get_event(caca_t *kk, struct caca_event *ev) 258 { 260 259 int intkey; 261 260 262 261 if(!SLang_input_pending(0)) 263 return CACA_EVENT_NONE; 262 { 263 ev->type = CACA_EVENT_NONE; 264 return 0; 265 } 264 266 265 267 /* We first use SLang_getkey() to see whether Esc was pressed … … 277 279 if(intkey < 0x100) 278 280 { 279 return CACA_EVENT_KEY_PRESS | intkey; 281 ev->type = CACA_EVENT_KEY_PRESS; 282 ev->data.key.c = intkey; 283 return 1; 280 284 } 281 285 … … 285 289 unsigned int x = SLang_getkey() - '!'; 286 290 unsigned int y = SLang_getkey() - '!'; 287 _push_event(kk, CACA_EVENT_MOUSE_PRESS | button); 288 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | button); 291 292 ev->data.mouse.button = button; 293 ev->type = CACA_EVENT_MOUSE_PRESS; 294 _push_event(kk, ev); 295 ev->type = CACA_EVENT_MOUSE_RELEASE; 296 _push_event(kk, ev); 289 297 290 298 if(kk->mouse.x == x && kk->mouse.y == y) 291 return _pop_event(kk );299 return _pop_event(kk, ev); 292 300 293 301 kk->mouse.x = x; 294 302 kk->mouse.y = y; 295 303 296 return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y; 297 } 298 299 event = CACA_EVENT_KEY_PRESS; 304 ev->type = CACA_EVENT_MOUSE_MOTION; 305 ev->data.mouse.x = kk->mouse.x; 306 ev->data.mouse.y = kk->mouse.y; 307 return 1; 308 } 300 309 301 310 switch(intkey) 302 311 { 303 case SL_KEY_UP: return event | CACA_KEY_UP; 304 case SL_KEY_DOWN: return event | CACA_KEY_DOWN; 305 case SL_KEY_LEFT: return event | CACA_KEY_LEFT; 306 case SL_KEY_RIGHT: return event | CACA_KEY_RIGHT; 307 308 case SL_KEY_IC: return event | CACA_KEY_INSERT; 309 case SL_KEY_DELETE: return event | CACA_KEY_DELETE; 310 case SL_KEY_HOME: return event | CACA_KEY_HOME; 311 case SL_KEY_END: return event | CACA_KEY_END; 312 case SL_KEY_PPAGE: return event | CACA_KEY_PAGEUP; 313 case SL_KEY_NPAGE: return event | CACA_KEY_PAGEDOWN; 314 315 case SL_KEY_F(1): return event | CACA_KEY_F1; 316 case SL_KEY_F(2): return event | CACA_KEY_F2; 317 case SL_KEY_F(3): return event | CACA_KEY_F3; 318 case SL_KEY_F(4): return event | CACA_KEY_F4; 319 case SL_KEY_F(5): return event | CACA_KEY_F5; 320 case SL_KEY_F(6): return event | CACA_KEY_F6; 321 case SL_KEY_F(7): return event | CACA_KEY_F7; 322 case SL_KEY_F(8): return event | CACA_KEY_F8; 323 case SL_KEY_F(9): return event | CACA_KEY_F9; 324 case SL_KEY_F(10): return event | CACA_KEY_F10; 325 case SL_KEY_F(11): return event | CACA_KEY_F11; 326 case SL_KEY_F(12): return event | CACA_KEY_F12; 327 } 328 329 return CACA_EVENT_NONE; 312 case SL_KEY_UP: ev->data.key.c = CACA_KEY_UP; break; 313 case SL_KEY_DOWN: ev->data.key.c = CACA_KEY_DOWN; break; 314 case SL_KEY_LEFT: ev->data.key.c = CACA_KEY_LEFT; break; 315 case SL_KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break; 316 317 case SL_KEY_IC: ev->data.key.c = CACA_KEY_INSERT; break; 318 case SL_KEY_DELETE: ev->data.key.c = CACA_KEY_DELETE; break; 319 case SL_KEY_HOME: ev->data.key.c = CACA_KEY_HOME; break; 320 case SL_KEY_END: ev->data.key.c = CACA_KEY_END; break; 321 case SL_KEY_PPAGE: ev->data.key.c = CACA_KEY_PAGEUP; break; 322 case SL_KEY_NPAGE: ev->data.key.c = CACA_KEY_PAGEDOWN; break; 323 324 case SL_KEY_F(1): ev->data.key.c = CACA_KEY_F1; break; 325 case SL_KEY_F(2): ev->data.key.c = CACA_KEY_F2; break; 326 case SL_KEY_F(3): ev->data.key.c = CACA_KEY_F3; break; 327 case SL_KEY_F(4): ev->data.key.c = CACA_KEY_F4; break; 328 case SL_KEY_F(5): ev->data.key.c = CACA_KEY_F5; break; 329 case SL_KEY_F(6): ev->data.key.c = CACA_KEY_F6; break; 330 case SL_KEY_F(7): ev->data.key.c = CACA_KEY_F7; break; 331 case SL_KEY_F(8): ev->data.key.c = CACA_KEY_F8; break; 332 case SL_KEY_F(9): ev->data.key.c = CACA_KEY_F9; break; 333 case SL_KEY_F(10): ev->data.key.c = CACA_KEY_F10; break; 334 case SL_KEY_F(11): ev->data.key.c = CACA_KEY_F11; break; 335 case SL_KEY_F(12): ev->data.key.c = CACA_KEY_F12; break; 336 337 default: ev->type = CACA_EVENT_NONE; return 0; 338 } 339 340 ev->type = CACA_EVENT_KEY_PRESS; 341 ev->data.key.ucs4 = 0; 342 ev->data.key.utf8[0] = '\0'; 343 return 1; 330 344 } 331 345 -
libcaca/trunk/caca/driver_vga.c
r672 r681 135 135 } 136 136 137 static unsigned int vga_get_event(caca_t *kk)137 static int vga_get_event(caca_t *kk, struct caca_event *ev) 138 138 { 139 139 /* FIXME */ 140 return CACA_EVENT_NONE; 140 ev->type = CACA_EVENT_NONE; 141 return 0; 141 142 } 142 143 -
libcaca/trunk/caca/driver_win32.c
r672 r681 236 236 } 237 237 238 static unsigned int win32_get_event(caca_t *kk)238 static int win32_get_event(caca_t *kk, struct caca_event *ev) 239 239 { 240 240 INPUT_RECORD rec; … … 253 253 254 254 if(rec.Event.KeyEvent.bKeyDown) 255 ev ent= CACA_EVENT_KEY_PRESS;255 ev->type = CACA_EVENT_KEY_PRESS; 256 256 else 257 ev ent= CACA_EVENT_KEY_RELEASE;257 ev->type = CACA_EVENT_KEY_RELEASE; 258 258 259 259 if(rec.Event.KeyEvent.uChar.AsciiChar) 260 return event | rec.Event.KeyEvent.uChar.AsciiChar; 260 { 261 ev->data.key.c = rec.Event.KeyEvent.uChar.AsciiChar; 262 ev->data.key.ucs4 = (uint32_t)ev->data.key.c; 263 ev->data.key.utf8[0] = ev->data.key.c; 264 ev->data.key.utf8[1] = '\0'; 265 266 return 1; 267 } 261 268 } 262 269 … … 266 273 { 267 274 if(rec.Event.MouseEvent.dwButtonState & 0x01) 268 return CACA_EVENT_MOUSE_PRESS | 0x000001; 275 { 276 ev->type = CACA_EVENT_MOUSE_PRESS; 277 ev->data.mouse.button = 1; 278 return 1; 279 } 269 280 270 281 if(rec.Event.MouseEvent.dwButtonState & 0x02) 271 return CACA_EVENT_MOUSE_PRESS | 0x000002; 282 { 283 ev->type = CACA_EVENT_MOUSE_PRESS; 284 ev->data.mouse.button = 2; 285 return 1; 286 } 272 287 } 273 288 else if(rec.Event.MouseEvent.dwEventFlags == MOUSE_MOVED) … … 282 297 kk->mouse.y = pos.Y; 283 298 284 return CACA_EVENT_MOUSE_MOTION 285 | (kk->mouse.x << 12) | kk->mouse.y; 299 ev->type = CACA_EVENT_MOUSE_MOTION; 300 ev->data.mouse.x = kk->mouse.x; 301 ev->data.mouse.y = kk->mouse.y; 302 return 1; 286 303 } 287 304 #if 0 … … 304 321 305 322 /* Unknown event */ 306 return CACA_EVENT_NONE; 323 ev->type = CACA_EVENT_NONE; 324 return 0; 307 325 } 308 326 309 327 /* No event */ 310 return CACA_EVENT_NONE; 328 ev->type = CACA_EVENT_NONE; 329 return 0; 311 330 } 312 331 -
libcaca/trunk/caca/driver_x11.c
r672 r681 400 400 } 401 401 402 static unsigned int x11_get_event(caca_t *kk) 403 { 404 unsigned int event = 0; 402 static int x11_get_event(caca_t *kk, struct caca_event *ev) 403 { 405 404 XEvent xevent; 406 405 char key; … … 458 457 kk->mouse.y = newy; 459 458 460 return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y; 459 ev->type = CACA_EVENT_MOUSE_MOTION; 460 ev->data.mouse.x = kk->mouse.x; 461 ev->data.mouse.y = kk->mouse.y; 462 return 1; 461 463 } 462 464 463 465 /* Check for mouse press and release events */ 464 466 if(xevent.type == ButtonPress) 465 return CACA_EVENT_MOUSE_PRESS 466 | ((XButtonEvent *)&xevent)->button; 467 { 468 ev->type = CACA_EVENT_MOUSE_PRESS; 469 ev->data.mouse.button = ((XButtonEvent *)&xevent)->button; 470 return 1; 471 } 467 472 468 473 if(xevent.type == ButtonRelease) 469 return CACA_EVENT_MOUSE_RELEASE 470 | ((XButtonEvent *)&xevent)->button; 474 { 475 ev->type = CACA_EVENT_MOUSE_RELEASE; 476 ev->data.mouse.button = ((XButtonEvent *)&xevent)->button; 477 return 1; 478 } 471 479 472 480 /* Check for key press and release events */ 473 481 if(xevent.type == KeyPress) 474 ev ent |= CACA_EVENT_KEY_PRESS;482 ev->type = CACA_EVENT_KEY_PRESS; 475 483 else if(xevent.type == KeyRelease) 476 ev ent |= CACA_EVENT_KEY_RELEASE;484 ev->type = CACA_EVENT_KEY_RELEASE; 477 485 else 478 486 continue; 479 487 480 488 if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL)) 481 return event | key; 489 { 490 ev->data.key.c = key; 491 ev->data.key.ucs4 = key; 492 ev->data.key.utf8[0] = key; 493 ev->data.key.utf8[1] = '\0'; 494 return 1; 495 } 482 496 483 497 keysym = XKeycodeToKeysym(kk->drv.p->dpy, xevent.xkey.keycode, 0); 484 498 switch(keysym) 485 499 { 486 case XK_F1: return event | CACA_KEY_F1; 487 case XK_F2: return event | CACA_KEY_F2; 488 case XK_F3: return event | CACA_KEY_F3; 489 case XK_F4: return event | CACA_KEY_F4; 490 case XK_F5: return event | CACA_KEY_F5; 491 case XK_F6: return event | CACA_KEY_F6; 492 case XK_F7: return event | CACA_KEY_F7; 493 case XK_F8: return event | CACA_KEY_F8; 494 case XK_F9: return event | CACA_KEY_F9; 495 case XK_F10: return event | CACA_KEY_F10; 496 case XK_F11: return event | CACA_KEY_F11; 497 case XK_F12: return event | CACA_KEY_F12; 498 case XK_F13: return event | CACA_KEY_F13; 499 case XK_F14: return event | CACA_KEY_F14; 500 case XK_F15: return event | CACA_KEY_F15; 501 case XK_Left: return event | CACA_KEY_LEFT; 502 case XK_Right: return event | CACA_KEY_RIGHT; 503 case XK_Up: return event | CACA_KEY_UP; 504 case XK_Down: return event | CACA_KEY_DOWN; 505 default: return CACA_EVENT_NONE; 506 } 500 case XK_F1: ev->data.key.c = CACA_KEY_F1; break; 501 case XK_F2: ev->data.key.c = CACA_KEY_F2; break; 502 case XK_F3: ev->data.key.c = CACA_KEY_F3; break; 503 case XK_F4: ev->data.key.c = CACA_KEY_F4; break; 504 case XK_F5: ev->data.key.c = CACA_KEY_F5; break; 505 case XK_F6: ev->data.key.c = CACA_KEY_F6; break; 506 case XK_F7: ev->data.key.c = CACA_KEY_F7; break; 507 case XK_F8: ev->data.key.c = CACA_KEY_F8; break; 508 case XK_F9: ev->data.key.c = CACA_KEY_F9; break; 509 case XK_F10: ev->data.key.c = CACA_KEY_F10; break; 510 case XK_F11: ev->data.key.c = CACA_KEY_F11; break; 511 case XK_F12: ev->data.key.c = CACA_KEY_F12; break; 512 case XK_F13: ev->data.key.c = CACA_KEY_F13; break; 513 case XK_F14: ev->data.key.c = CACA_KEY_F14; break; 514 case XK_F15: ev->data.key.c = CACA_KEY_F15; break; 515 case XK_Left: ev->data.key.c = CACA_KEY_LEFT; break; 516 case XK_Right: ev->data.key.c = CACA_KEY_RIGHT; break; 517 case XK_Up: ev->data.key.c = CACA_KEY_UP; break; 518 case XK_Down: ev->data.key.c = CACA_KEY_DOWN; break; 519 520 default: ev->type = CACA_EVENT_NONE; return 0; 521 } 522 523 ev->data.key.ucs4 = 0; 524 ev->data.key.utf8[0] = '\0'; 525 return 1; 507 526 } 508 527 509 return CACA_EVENT_NONE; 528 ev->type = CACA_EVENT_NONE; 529 return 0; 510 530 } 511 531 -
libcaca/trunk/caca/event.c
r672 r681 20 20 #include "config.h" 21 21 22 #if !defined(__KERNEL__) 23 # include <stdio.h> 24 #endif 25 22 26 #include "cucul.h" 23 27 #include "cucul_internals.h" … … 25 29 #include "caca_internals.h" 26 30 27 static unsigned int _get_next_event(caca_t *);28 static unsigned int _lowlevel_event(caca_t *);31 static int _get_next_event(caca_t *, struct caca_event *); 32 static int _lowlevel_event(caca_t *, struct caca_event *); 29 33 30 34 #if !defined(_DOXYGEN_SKIP_ME) … … 49 53 * \return The next matching event in the queue, or 0 if no event is pending. 50 54 */ 51 unsigned int caca_get_event(caca_t *kk, unsigned int event_mask)55 int caca_get_event(caca_t *kk, unsigned int event_mask, struct caca_event *ev) 52 56 { 53 57 if(!event_mask) 54 return CACA_EVENT_NONE;58 return 0; 55 59 56 60 for( ; ; ) 57 61 { 58 unsigned int event = _get_next_event(kk);59 60 if(! event || event& event_mask)61 return event;62 int ret = _get_next_event(kk, ev); 63 64 if(!ret || ev->type & event_mask) 65 return ret; 62 66 } 63 67 } … … 73 77 * \return The next event in the queue. 74 78 */ 75 unsigned int caca_wait_event(caca_t *kk, unsigned int event_mask)79 int caca_wait_event(caca_t *kk, unsigned int event_mask, struct caca_event *ev) 76 80 { 77 81 if(!event_mask) 78 return CACA_EVENT_NONE;82 return 0; 79 83 80 84 for( ; ; ) 81 85 { 82 unsigned int event = _get_next_event(kk);83 84 if( event & event_mask)85 return event;86 int ret = _get_next_event(kk, ev); 87 88 if(ret && (ev->type & event_mask)) 89 return ret; 86 90 87 91 _caca_sleep(10000); … … 127 131 */ 128 132 129 static unsigned int _get_next_event(caca_t *kk)133 static int _get_next_event(caca_t *kk, struct caca_event *ev) 130 134 { 131 135 #if defined(USE_SLANG) || defined(USE_NCURSES) 132 136 unsigned int ticks; 133 137 #endif 134 unsigned int event;138 int ret; 135 139 136 140 /* If we are about to return a resize event, acknowledge it */ … … 139 143 kk->resize.resized = 0; 140 144 _caca_handle_resize(kk); 141 return CACA_EVENT_RESIZE; 142 } 143 144 event = _lowlevel_event(kk); 145 ev->type = CACA_EVENT_RESIZE; 146 ev->data.resize.w = kk->qq->width; 147 ev->data.resize.h = kk->qq->height; 148 return 1; 149 } 150 151 ret = _lowlevel_event(kk, ev); 145 152 146 153 #if defined(USE_SLANG) … … 150 157 if(kk->drv.driver != CACA_DRIVER_NCURSES) 151 158 #endif 152 return event;159 return ret; 153 160 154 161 #if defined(USE_SLANG) || defined(USE_NCURSES) … … 159 166 160 167 /* Handle autorepeat */ 161 if(kk->events.last_key 168 if(kk->events.last_key_event.type 162 169 && kk->events.autorepeat_ticks > AUTOREPEAT_TRIGGER 163 170 && kk->events.autorepeat_ticks > AUTOREPEAT_THRESHOLD 164 171 && kk->events.autorepeat_ticks > AUTOREPEAT_RATE) 165 172 { 166 _push_event(kk, ev ent);173 _push_event(kk, ev); 167 174 kk->events.autorepeat_ticks -= AUTOREPEAT_RATE; 168 return CACA_EVENT_KEY_PRESS | kk->events.last_key; 175 *ev = kk->events.last_key_event; 176 return 1; 169 177 } 170 178 171 179 /* We are in autorepeat mode and the same key was just pressed, ignore 172 180 * this event and return the next one by calling ourselves. */ 173 if(event == (CACA_EVENT_KEY_PRESS | kk->events.last_key)) 181 if(ev->type == CACA_EVENT_KEY_PRESS 182 && kk->events.last_key_event.type 183 && ev->data.key.c == kk->events.last_key_event.data.key.c 184 && ev->data.key.ucs4 == kk->events.last_key_event.data.key.ucs4) 174 185 { 175 186 kk->events.last_key_ticks = 0; 176 return _get_next_event(kk );187 return _get_next_event(kk, ev); 177 188 } 178 189 179 190 /* We are in autorepeat mode, but key has expired or a new key was 180 191 * pressed - store our event and return a key release event first */ 181 if(kk->events.last_key 192 if(kk->events.last_key_event.type 182 193 && (kk->events.last_key_ticks > AUTOREPEAT_THRESHOLD 183 || (event & CACA_EVENT_KEY_PRESS))) 184 { 185 _push_event(kk, event); 186 event = CACA_EVENT_KEY_RELEASE | kk->events.last_key; 187 kk->events.last_key = 0; 188 return event; 194 || (ev->type & CACA_EVENT_KEY_PRESS))) 195 { 196 _push_event(kk, ev); 197 *ev = kk->events.last_key_event; 198 ev->type = CACA_EVENT_KEY_RELEASE; 199 kk->events.last_key_event.type = CACA_EVENT_NONE; 200 return 1; 189 201 } 190 202 191 203 /* A new key was pressed, enter autorepeat mode */ 192 if(ev ent& CACA_EVENT_KEY_PRESS)204 if(ev->type & CACA_EVENT_KEY_PRESS) 193 205 { 194 206 kk->events.last_key_ticks = 0; 195 207 kk->events.autorepeat_ticks = 0; 196 kk->events.last_key = event & 0x00ffffff;197 } 198 199 return ev ent;200 #endif 201 } 202 203 static unsigned int _lowlevel_event(caca_t *kk)208 kk->events.last_key_event = *ev; 209 } 210 211 return ev->type ? 1 : 0; 212 #endif 213 } 214 215 static int _lowlevel_event(caca_t *kk, struct caca_event *ev) 204 216 { 205 217 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) 206 unsigned int event = _pop_event(kk);207 208 if( event)209 return event;210 #endif 211 212 return kk->drv.get_event(kk );213 } 214 215 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) 216 void _push_event(caca_t *kk, unsigned int event)217 { 218 if(!ev ent|| kk->events.queue == EVENTBUF_LEN)218 int ret = _pop_event(kk, ev); 219 220 if(ret) 221 return ret; 222 #endif 223 224 return kk->drv.get_event(kk, ev); 225 } 226 227 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL) 228 void _push_event(caca_t *kk, struct caca_event *ev) 229 { 230 if(!ev->type || kk->events.queue == EVENTBUF_LEN) 219 231 return; 220 kk->events.buf[kk->events.queue] = event;232 kk->events.buf[kk->events.queue] = *ev; 221 233 kk->events.queue++; 222 234 } 223 235 224 unsigned int _pop_event(caca_t *kk)236 int _pop_event(caca_t *kk, struct caca_event *ev) 225 237 { 226 238 int i; 227 unsigned int event;228 239 229 240 if(kk->events.queue == 0) 230 return CACA_EVENT_NONE;231 232 event= kk->events.buf[0];241 return 0; 242 243 *ev = kk->events.buf[0]; 233 244 for(i = 1; i < kk->events.queue; i++) 234 245 kk->events.buf[i - 1] = kk->events.buf[i]; 235 246 kk->events.queue--; 236 247 237 return event;238 } 239 #endif 240 248 return 1; 249 } 250 #endif 251 -
libcaca/trunk/src/aafire.c
r677 r681 262 262 { 263 263 #ifdef LIBCACA 264 switch (caca_get_event(kk, CACA_EVENT_KEY_PRESS)) 264 struct caca_event ev; 265 if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev)) 265 266 { 266 case CACA_EVENT_KEY_PRESS | CACA_KEY_ESCAPE: return; 267 case CACA_EVENT_KEY_PRESS | ' ': pause = !pause; 267 switch(ev.data.key.c) 268 { 269 case CACA_KEY_ESCAPE: return; 270 case ' ': pause = !pause; 271 } 268 272 } 269 270 273 #endif 271 274 drawfire (); -
libcaca/trunk/src/cacaball.c
r677 r681 93 93 for(;;) 94 94 { 95 switch(caca_get_event(kk, CACA_EVENT_KEY_PRESS)) 96 { 97 case CACA_EVENT_KEY_PRESS | CACA_KEY_ESCAPE: goto end; 98 case CACA_EVENT_KEY_PRESS | ' ': pause = !pause; 95 struct caca_event ev; 96 if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev)) 97 { 98 switch(ev.data.key.c) 99 { 100 case CACA_KEY_ESCAPE: goto end; 101 case ' ': pause = !pause; 102 } 99 103 } 100 104 -
libcaca/trunk/src/cacamoir.c
r677 r681 69 69 for(;;) 70 70 { 71 switch(caca_get_event(kk, CACA_EVENT_KEY_PRESS)) 71 struct caca_event ev; 72 if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev)) 72 73 { 73 case CACA_EVENT_KEY_PRESS | CACA_KEY_ESCAPE: goto end; 74 case CACA_EVENT_KEY_PRESS | ' ': pause = !pause; 74 switch(ev.data.key.c) 75 { 76 case CACA_KEY_ESCAPE: goto end; 77 case ' ': pause = !pause; 78 } 75 79 } 76 80 -
libcaca/trunk/src/cacaplas.c
r677 r681 81 81 for(;;) 82 82 { 83 switch(caca_get_event(kk, CACA_EVENT_KEY_PRESS)) 83 struct caca_event ev; 84 if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev)) 84 85 { 85 case CACA_EVENT_KEY_PRESS | CACA_KEY_ESCAPE: goto end; 86 case CACA_EVENT_KEY_PRESS | ' ': pause = !pause; 86 switch(ev.data.key.c) 87 { 88 case CACA_KEY_ESCAPE: goto end; 89 case ' ': pause = !pause; 90 } 87 91 } 88 92 -
libcaca/trunk/src/cacaview.c
r678 r681 144 144 while(!quit) 145 145 { 146 struct caca_event ev; 146 147 unsigned int const event_mask = CACA_EVENT_KEY_PRESS 147 148 | CACA_EVENT_RESIZE 148 149 | CACA_EVENT_MOUSE_PRESS; 149 unsigned int event, new_status = 0, new_help = 0; 150 unsigned int new_status = 0, new_help = 0; 151 int event; 150 152 151 153 if(update) 152 event = caca_get_event(kk, event_mask );154 event = caca_get_event(kk, event_mask, &ev); 153 155 else 154 event = caca_wait_event(kk, event_mask );156 event = caca_wait_event(kk, event_mask, &ev); 155 157 156 158 while(event) 157 159 { 158 if(ev ent& CACA_EVENT_MOUSE_PRESS)160 if(ev.type & CACA_EVENT_MOUSE_PRESS) 159 161 { 160 if( (event & 0x00ffffff)== 1)162 if(ev.data.mouse.button == 1) 161 163 { 162 164 if(items) current = (current + 1) % items; 163 165 reload = 1; 164 166 } 165 else if( (event & 0x00ffffff)== 2)167 else if(ev.data.mouse.button == 2) 166 168 { 167 169 if(items) current = (items + current - 1) % items; … … 169 171 } 170 172 } 171 else if(ev ent & CACA_EVENT_KEY_PRESS) switch(event & 0x00ffffff)173 else if(ev.type & CACA_EVENT_KEY_PRESS) switch(ev.data.key.c) 172 174 { 173 175 case 'n': … … 288 290 break; 289 291 } 290 else if(ev ent== CACA_EVENT_RESIZE)292 else if(ev.type == CACA_EVENT_RESIZE) 291 293 { 292 294 caca_display(kk); 293 ww = cucul_get_width(qq);294 wh = cucul_get_height(qq);295 ww = ev.data.resize.w; 296 wh = ev.data.resize.h; 295 297 update = 1; 296 298 set_zoom(zoom); … … 303 305 help = new_help; 304 306 305 event = caca_get_event(kk, CACA_EVENT_KEY_PRESS );307 event = caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev); 306 308 } 307 309 -
libcaca/trunk/test/colors.c
r677 r681 25 25 cucul_t *qq; 26 26 caca_t *kk; 27 struct caca_event ev; 27 28 int i, j; 28 29 … … 50 51 51 52 caca_display(kk); 52 caca_wait_event(kk, CACA_EVENT_KEY_PRESS );53 caca_wait_event(kk, CACA_EVENT_KEY_PRESS, &ev); 53 54 54 55 caca_detach(kk); -
libcaca/trunk/test/demo.c
r678 r681 69 69 while(!quit) 70 70 { 71 struct caca_event ev; 71 72 int menu = 0, mouse = 0, xmouse = 0, ymouse = 0; 72 int event; 73 74 while((event = caca_get_event(kk, CACA_EVENT_ANY))) 73 74 while(caca_get_event(kk, CACA_EVENT_ANY, &ev)) 75 75 { 76 if(demo && (ev ent& CACA_EVENT_KEY_PRESS))76 if(demo && (ev.type & CACA_EVENT_KEY_PRESS)) 77 77 { 78 78 menu = 1; 79 79 demo = NULL; 80 80 } 81 else if(ev ent& CACA_EVENT_KEY_PRESS)81 else if(ev.type & CACA_EVENT_KEY_PRESS) 82 82 { 83 switch(ev ent & 0xffff)83 switch(ev.data.key.c) 84 84 { 85 85 case 'q': … … 140 140 cucul_clear(qq); 141 141 } 142 else if(ev ent& CACA_EVENT_MOUSE_MOTION)142 else if(ev.type & CACA_EVENT_MOUSE_MOTION) 143 143 { 144 144 mouse = 1; 145 xmouse = (event & 0xfff000) >> 12;146 ymouse = ev ent & 0xfff;145 xmouse = ev.data.mouse.x; 146 ymouse = ev.data.mouse.y; 147 147 } 148 148 } -
libcaca/trunk/test/dithering.c
r677 r681 35 35 int main(void) 36 36 { 37 struct caca_event ev; 37 38 cucul_t *qq; 38 39 caca_t *kk; … … 124 125 caca_display(kk); 125 126 126 while(!caca_get_event(kk, CACA_EVENT_KEY_PRESS));127 caca_wait_event(kk, CACA_EVENT_KEY_PRESS, &ev); 127 128 128 129 caca_detach(kk); -
libcaca/trunk/test/event.c
r678 r681 24 24 static caca_t *kk; 25 25 26 static void print_event(int, int, unsigned int);26 static void print_event(int, int, struct caca_event *); 27 27 28 28 int main(int argc, char **argv) 29 29 { 30 int *events;30 struct caca_event *events; 31 31 int i, h, quit; 32 32 … … 48 48 caca_display(kk); 49 49 50 events = malloc(h * sizeof( int));51 memset(events, 0, h * sizeof( int));50 events = malloc(h * sizeof(struct caca_event)); 51 memset(events, 0, h * sizeof(struct caca_event)); 52 52 53 53 for(quit = 0; quit < 4; ) 54 54 { 55 struct caca_event ev; 55 56 static char const * quit_string[] = { "", "q", "qu", "qui", "quit" }; 56 unsigned int event = caca_wait_event(kk, CACA_EVENT_ANY);57 int ret = caca_wait_event(kk, CACA_EVENT_ANY, &ev); 57 58 58 if(! event)59 if(!ret) 59 60 continue; 60 61 … … 62 63 { 63 64 /* "quit" quits */ 64 if(ev ent& CACA_EVENT_KEY_PRESS)65 if(ev.type & CACA_EVENT_KEY_PRESS) 65 66 { 66 int key = ev ent & ~CACA_EVENT_KEY_PRESS;67 int key = ev.data.key.c; 67 68 if((key == 'q' && quit == 0) || (key == 'u' && quit == 1) 68 69 || (key == 'i' && quit == 2) || (key == 't' && quit == 3)) … … 74 75 } 75 76 76 memmove(events + 1, events, (h - 1) * sizeof( int));77 events[0] = ev ent;77 memmove(events + 1, events, (h - 1) * sizeof(struct caca_event)); 78 events[0] = ev; 78 79 79 event = caca_get_event(kk, CACA_EVENT_ANY);80 ret = caca_get_event(kk, CACA_EVENT_ANY, &ev); 80 81 } 81 while( event);82 while(ret); 82 83 83 84 cucul_clear(qq); … … 86 87 cucul_set_color(qq, CUCUL_COLOR_WHITE, CUCUL_COLOR_BLUE); 87 88 cucul_draw_line(qq, 0, 0, cucul_get_width(qq) - 1, 0, " "); 88 print_event(0, 0, events [0]);89 print_event(0, 0, events); 89 90 90 91 cucul_draw_line(qq, 0, h, cucul_get_width(qq) - 1, h, " "); … … 93 94 /* Print previous events */ 94 95 cucul_set_color(qq, CUCUL_COLOR_WHITE, CUCUL_COLOR_BLACK); 95 for(i = 1; i < h && events[i] ; i++)96 print_event(0, i, events [i]);96 for(i = 1; i < h && events[i].type; i++) 97 print_event(0, i, events + i); 97 98 98 99 caca_display(kk); … … 106 107 } 107 108 108 static void print_event(int x, int y, unsigned int event)109 static void print_event(int x, int y, struct caca_event *ev) 109 110 { 110 111 int character; 111 112 112 switch(ev ent & 0xff000000)113 switch(ev->type) 113 114 { 114 115 case CACA_EVENT_NONE: … … 116 117 break; 117 118 case CACA_EVENT_KEY_PRESS: 118 character = ev ent & 0x00ffffff;119 character = ev->data.key.c; 119 120 cucul_printf(qq, x, y, "CACA_EVENT_KEY_PRESS 0x%02x (%c)", character, 120 121 (character > 0x20 && character < 0x80) ? character : '?'); 121 122 break; 122 123 case CACA_EVENT_KEY_RELEASE: 123 character = ev ent & 0x00ffffff;124 character = ev->data.key.c; 124 125 cucul_printf(qq, x, y, "CACA_EVENT_KEY_RELEASE 0x%02x (%c)", character, 125 126 (character > 0x20 && character < 0x80) ? character : '?'); … … 127 128 case CACA_EVENT_MOUSE_MOTION: 128 129 cucul_printf(qq, x, y, "CACA_EVENT_MOUSE_MOTION %u %u", 129 (event & 0x00fff000) >> 12, event & 0x00000fff);130 ev->data.mouse.x, ev->data.mouse.y); 130 131 break; 131 132 case CACA_EVENT_MOUSE_PRESS: 132 133 cucul_printf(qq, x, y, "CACA_EVENT_MOUSE_PRESS %u", 133 ev ent & 0x00ffffff);134 ev->data.mouse.button); 134 135 break; 135 136 case CACA_EVENT_MOUSE_RELEASE: 136 137 cucul_printf(qq, x, y, "CACA_EVENT_MOUSE_RELEASE %u", 137 ev ent & 0x00ffffff);138 ev->data.mouse.button); 138 139 break; 139 140 case CACA_EVENT_RESIZE: 140 cucul_printf(qq, x, y, "CACA_EVENT_RESIZE"); 141 cucul_printf(qq, x, y, "CACA_EVENT_RESIZE %u %u", 142 ev->data.resize.w, ev->data.resize.h); 141 143 break; 142 144 default: -
libcaca/trunk/test/gamma.c
r680 r681 34 34 int main(void) 35 35 { 36 struct caca_event ev; 36 37 cucul_t *qq, *gg, *mask; 37 38 caca_t *kk; … … 62 63 for(x = 0; ; x++) 63 64 { 64 int ev = caca_get_event(kk, CACA_EVENT_KEY_PRESS);65 int ret = caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev); 65 66 66 if(ev == (CACA_EVENT_KEY_PRESS | CACA_KEY_LEFT)) 67 gam /= 1.03; 68 else if(ev == (CACA_EVENT_KEY_PRESS | CACA_KEY_RIGHT)) 69 gam *= 1.03; 70 else if(ev == (CACA_EVENT_KEY_PRESS | CACA_KEY_DOWN)) 71 gam = 1.0; 72 else if(ev == (CACA_EVENT_KEY_PRESS | CACA_KEY_ESCAPE)) 73 break; 67 if(ret) 68 { 69 if(ev.data.key.c == CACA_KEY_LEFT) 70 gam /= 1.03; 71 else if(ev.data.key.c == CACA_KEY_RIGHT) 72 gam *= 1.03; 73 else if(ev.data.key.c == CACA_KEY_DOWN) 74 gam = 1.0; 75 else if(ev.data.key.c == CACA_KEY_ESCAPE) 76 break; 77 } 74 78 75 79 /* Resize the spare canvas, just in case the main one changed */ -
libcaca/trunk/test/hsv.c
r677 r681 29 29 int main(void) 30 30 { 31 struct caca_event ev; 31 32 cucul_t *qq; 32 33 caca_t *kk; … … 53 54 caca_display(kk); 54 55 55 while(!caca_get_event(kk, CACA_EVENT_KEY_PRESS));56 caca_wait_event(kk, CACA_EVENT_KEY_PRESS, &ev); 56 57 57 58 caca_detach(kk); -
libcaca/trunk/test/spritedit.c
r678 r681 54 54 while(!quit) 55 55 { 56 struct caca_event ev; 56 57 int xa, ya, xb, yb; 57 58 char buf[BUFSIZ]; 58 int event;59 59 60 while( (event = caca_get_event(kk, CACA_EVENT_KEY_PRESS)))60 while(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev)) 61 61 { 62 switch(ev ent & 0x00ffffff)62 switch(ev.data.key.c) 63 63 { 64 64 case 0: -
libcaca/trunk/test/transform.c
r677 r681 50 50 int main(void) 51 51 { 52 struct caca_event ev; 52 53 cucul_t *qq, *normal, *flip, *flop, *rotate; 53 54 caca_t *kk; … … 108 109 caca_display(kk); 109 110 110 while(!caca_get_event(kk, CACA_EVENT_KEY_PRESS));111 caca_wait_event(kk, CACA_EVENT_KEY_PRESS, &ev); 111 112 112 113 caca_detach(kk); -
libcaca/trunk/test/unicode.c
r677 r681 27 27 int main(void) 28 28 { 29 struct caca_event ev; 29 30 cucul_t *qq; 30 31 caca_t *kk; … … 87 88 caca_display(kk); 88 89 89 while(!caca_get_event(kk, CACA_EVENT_KEY_PRESS));90 caca_wait_event(kk, CACA_EVENT_KEY_PRESS, &ev); 90 91 91 92 caca_detach(kk);
Note: See TracChangeset
for help on using the changeset viewer.