hgeguirange.cpp
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.6
  3. ** Copyright (C) 2006, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** Bitmap Font Builder
  7. */
  8. #include "hgeguirange.h"
  9. hgeGUIRange::hgeGUIRange(int _id, float x, float y, float w, float h, int _nrows, int _ncols, DWORD color)
  10. {
  11. id=_id;
  12. bStatic=false;
  13. bVisible=true;
  14. bEnabled=true;
  15. rect.Set(x, y, x+w, y+h);
  16. spr=new hgeSprite(0, 0, 0, 1, 1);
  17. spr->SetColor(color);
  18. nrows=_nrows;
  19. ncols=_ncols;
  20. nfirst=nlast=0;
  21. mx=0; my=0;
  22. bPressed=false;
  23. }
  24. hgeGUIRange::~hgeGUIRange()
  25. {
  26. if(spr) delete spr;
  27. }
  28. void hgeGUIRange::SetRange(int first, int last)
  29. {
  30. if(first<0) first=0;
  31. if(last>=nrows*ncols) last=nrows*ncols-1;
  32. nfirst=first;
  33. nlast=last;
  34. }
  35. void hgeGUIRange::GetRange(int *first, int *last)
  36. {
  37. if(nlast>=nfirst) { *first=nfirst; *last=nlast; }
  38. else { *first=nlast; *last=nfirst; }
  39. }
  40. void hgeGUIRange::Render()
  41. {
  42. float cw=(rect.x2-rect.x1)/ncols;
  43. float ch=(rect.y2-rect.y1)/nrows;
  44. float xf,yf, xl, yl;
  45. int first, last;
  46. if(nlast>=nfirst)
  47. {
  48. first=nfirst;
  49. last=nlast;
  50. }
  51. else
  52. {
  53. first=nlast;
  54. last=nfirst;
  55. }
  56. xf=rect.x1 + cw*(first%ncols);
  57. yf=rect.y1 + ch*(first/ncols);
  58. xl=rect.x1 + cw*(last%ncols);
  59. yl=rect.y1 + ch*(last/ncols);
  60. if(yf == yl) spr->RenderStretch(xf, yf, xl+cw, yf+ch);
  61. else
  62. {
  63. spr->RenderStretch(xf, yf, rect.x2, yf+ch);
  64. spr->RenderStretch(rect.x1, yl, xl+cw, yl+ch);
  65. if(yl-yf>1) spr->RenderStretch(rect.x1, yf+ch, rect.x2, yl);
  66. }
  67. //spr->RenderStretch(x1,y1,x2,y2);
  68. }
  69. bool hgeGUIRange::MouseMove(float x, float y)
  70. {
  71. mx=x; my=y;
  72. if(bPressed)
  73. {
  74. nlast=calc_point(mx, my);
  75. return true;
  76. }
  77. return false;
  78. }
  79. bool hgeGUIRange::MouseLButton(bool bDown)
  80. {
  81. bPressed=bDown;
  82. if(bPressed)
  83. {
  84. nfirst=calc_point(mx, my);
  85. nlast=nfirst;
  86. return true;
  87. }
  88. return false;
  89. }
  90. int hgeGUIRange::calc_point(float x, float y)
  91. {
  92. float cw=rect.x2-rect.x1;
  93. float ch=rect.y2-rect.y1;
  94. if(x<0) x=0;
  95. if(x>cw-1) x=cw-1;
  96. if(y<0) y=0;
  97. if(y>ch-1) y=ch-1;
  98. cw/=ncols;
  99. ch/=nrows;
  100. int xcell=int(x)/int(cw);
  101. int ycell=int(y)/int(ch);
  102. return ycell*ncols + xcell;
  103. }