zori.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "zori.h"
  2. #include "miao.h"
  3. /*
  4. * Pardon the pun name, but Zori is the submodule that handles the user
  5. * interface and the menus.
  6. */
  7. int zori_handler_compare(const void * v1, const void * v2) {
  8. const struct zori_handler * h1 = v1;
  9. const struct zori_handler * h2 = v2;
  10. if (h1->type < h2->type) return -1;
  11. if (h1->type > h2->type) return 1;
  12. return 0;
  13. }
  14. struct zori_handler * zori_handlers_add(struct zori_handlers * me, zori_event_type type, zori_handler_func * handler, void * data) {
  15. struct zori_handler * result = NULL;
  16. result = miao_push_ptr(me);
  17. if (result) {
  18. result->type = type;
  19. result->handler = handler;
  20. result->data = data;
  21. }
  22. miao_qsort(me, zori_handler_compare);
  23. return result;
  24. }
  25. void zori_handlers_done(struct zori_handlers * me) {
  26. miao_done(me);
  27. }
  28. void zori_handlers_init(struct zori_handlers * me) {
  29. miao_init(me);
  30. }
  31. struct zori_handler * zori_handlers_search(struct zori_handlers * me, zori_event_type type) {
  32. struct zori_handler * result;
  33. struct zori_handler key;
  34. key.type = type;
  35. key.handler = NULL;
  36. key.data = NULL;
  37. if (!me) return NULL;
  38. result = miao_bsearch(me, zori_handler_compare, &key);
  39. return result;
  40. }
  41. int zori_handlers_handle(struct zori_handlers * me, struct zori_event * event, struct zori_widget * widget) {
  42. struct zori_handler * handler = zori_handlers_search(me, event->sysev.type);
  43. if (!handler) return 0;
  44. return handler->handler(event);
  45. }
  46. struct zori_root zori_the_root = {0};
  47. int zori_init() {
  48. return 0;
  49. }