/src/ftk_wnd_manager.c

http://ftk.googlecode.com/ · C · 72 lines · 63 code · 9 blank · 0 comment · 13 complexity · bc193b437348617011b3ac73d79f9d81 MD5 · raw file

  1. #include "ftk.h"
  2. #include "ftk_wnd_manager.h"
  3. #include "ftk_display_rotate.h"
  4. static inline int is_mouse_event(FtkEvent* event)
  5. {
  6. if(event->type == FTK_EVT_MOUSE_DOWN || event->type == FTK_EVT_MOUSE_UP
  7. || event->type == FTK_EVT_MOUSE_MOVE || event->type == FTK_EVT_MOUSE_LONG_PRESS)
  8. {
  9. return 1;
  10. }
  11. else
  12. {
  13. return 0;
  14. }
  15. }
  16. Ret ftk_wnd_manager_set_rotate(FtkWndManager* thiz, FtkRotate rotate)
  17. {
  18. FtkRotate old = FTK_ROTATE_0;
  19. return_val_if_fail(thiz != NULL, RET_FAIL);
  20. old = ftk_display_get_rotate(ftk_default_display());
  21. if(old != rotate)
  22. {
  23. FtkEvent event;
  24. ftk_event_init(&event, FTK_EVT_SCREEN_ROTATED);
  25. ftk_wnd_manager_queue_event(thiz, &event);
  26. }
  27. return ftk_display_set_rotate(ftk_default_display(), rotate);
  28. }
  29. Ret ftk_wnd_manager_queue_event_auto_rotate(FtkWndManager* thiz, FtkEvent* event)
  30. {
  31. FtkRotate rotate = ftk_display_get_rotate(ftk_default_display());
  32. FtkDisplay* display = ftk_display_get_real_display(ftk_default_display());
  33. if(is_mouse_event(event))
  34. {
  35. int width = ftk_display_width(display);
  36. int height = ftk_display_height(display);
  37. switch(rotate)
  38. {
  39. case FTK_ROTATE_90:
  40. {
  41. int y = event->u.mouse.y;
  42. event->u.mouse.y = width - event->u.mouse.x;
  43. event->u.mouse.x = y;
  44. break;
  45. }
  46. case FTK_ROTATE_180:
  47. {
  48. event->u.mouse.x = width - event->u.mouse.x;
  49. event->u.mouse.y = height - event->u.mouse.y;
  50. break;
  51. }
  52. case FTK_ROTATE_270:
  53. {
  54. int x = event->u.mouse.x;
  55. event->u.mouse.x = height - event->u.mouse.y;
  56. event->u.mouse.y = x;
  57. break;
  58. }
  59. default:break;
  60. }
  61. }
  62. return ftk_wnd_manager_queue_event(thiz, event);
  63. }