widget.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <draw.h>
  4. #include <thread.h>
  5. #include <mouse.h>
  6. #include <jay.h>
  7. #include "fns.h"
  8. void setVisible(Widget *w, int visible);
  9. static Widget *
  10. genWidget(char *id, wtype t, void *w){
  11. Widget *wr = malloc(sizeof(Widget));
  12. if ( wr == nil){
  13. return nil;
  14. }
  15. wr->id = strdup(id);
  16. wr->p=ZP;
  17. wr->r=ZR;
  18. wr->t=t;
  19. wr->w=w;
  20. wr->i=nil;
  21. wr->lh=nil;
  22. wr->father=nil;
  23. wr->hovered=0;
  24. wr->visible=1;
  25. wr->draw=nil;
  26. wr->_draw=nil;
  27. wr->_redraw=nil;
  28. wr->hover=nil;
  29. wr->_hover=nil;
  30. wr->unhover=nil;
  31. wr->_unhover=nil;
  32. wr->resize=nil;
  33. wr->click=nil;
  34. wr->_click=nil;
  35. wr->dclick=nil;
  36. wr->_dclick=nil;
  37. wr->mpressdown=nil;
  38. wr->_mpressdown=nil;
  39. wr->mpressup=nil;
  40. wr->_mpressup=nil;
  41. wr->change=nil;
  42. wr->_change=nil;
  43. wr->setVisible=setVisible;
  44. wr->freeWidget=nil;
  45. wr->deleteWidget=nil;
  46. wr->getWidget=nil;
  47. wr->extractWidget=nil;
  48. wr->listWidgets=nil;
  49. return wr;
  50. }
  51. Widget *
  52. createWidget(char *id, int height, int width, wtype t, void *w){
  53. Widget *wr = genWidget(id, t, w);
  54. if ( wr == nil){
  55. return nil;
  56. }
  57. wr->r=ZR;
  58. wr->height = height;
  59. wr->width = width;
  60. if (height < 0 || width < 0){
  61. wr->autosize=1;
  62. } else {
  63. wr->autosize = 0;
  64. }
  65. return wr;
  66. }
  67. Widget *
  68. createWidget1(char *id, Rectangle r, wtype t, void *w){
  69. Widget *wr = genWidget(id, t, w);
  70. if ( wr == nil){
  71. return nil;
  72. }
  73. wr->r=r;
  74. wr->height = r.max.y - r.min.y;
  75. wr->width = r.max.x - r.min.x;
  76. wr->autosize=0;
  77. return wr;
  78. }
  79. void
  80. freeWidget(Widget *w){
  81. freeimage(w->i);
  82. free(w->id);
  83. }
  84. static int
  85. checkWidget(Widget *w){
  86. if (w == nil || w->w == nil || w->father == nil){
  87. return 0;
  88. }
  89. return 1;
  90. }
  91. void
  92. setVisible(Widget *w, int visible){
  93. if(!checkWidget(w)){
  94. return;
  95. }
  96. w->visible=visible;
  97. if (visible){
  98. w->_redraw(w);
  99. } else {
  100. //To dissapear we need to redraw the father
  101. w->father->_redraw(w->father);
  102. }
  103. }