Region.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /******************************************************************************/
  2. const_mem_addr STRUCT(Region , GuiObj) // Gui Region !! must be stored in constant memory address !!
  3. //{
  4. Bool kb_lit ; // if highlight when has keyboard focus, default=true
  5. Button view ; // view button
  6. SlideBar slidebar[2]; // 2 SlideBars (0=horizontal, 1=vertical)
  7. // manage
  8. Region& del ( ); // delete
  9. Region& create( ); // create
  10. Region& create(C Rect &rect) {create().rect(rect); return T;} // create
  11. Region& create(C Region &src ); // create from 'src'
  12. // operations
  13. Region& scrollX (Flt delta , Bool immediate=false) {slidebar[0].scroll (delta , immediate); return T;} // horizontal scroll by delta
  14. Region& scrollToX (Flt pos , Bool immediate=false) {slidebar[0].scrollTo (pos , immediate); return T;} // horizontal scroll to pos
  15. Region& scrollFitX(Flt min, Flt max, Bool immediate=false) {slidebar[0].scrollFit(min, max, immediate); return T;} // horizontal scroll to fit min..max range
  16. Region& scrollY (Flt delta , Bool immediate=false) {slidebar[1].scroll (delta , immediate); return T;} // vertical scroll by delta
  17. Region& scrollToY (Flt pos , Bool immediate=false) {slidebar[1].scrollTo (pos , immediate); return T;} // vertical scroll to pos
  18. Region& scrollFitY(Flt min, Flt max, Bool immediate=false) {slidebar[1].scrollFit(min, max, immediate); return T;} // vertical scroll to fit min..max range
  19. Region& scrollEndY( Bool immediate=false) {slidebar[1].scrollEnd( immediate); return T;} // vertical scroll to end
  20. Region& removeSlideBars(); // remove slide bars, this will completely remove the SlideBars (they can't be used unless the Region is recreated, effectively disabling any scrolling)
  21. Region& alwaysHideHorizontalSlideBar(Bool hide); Bool alwaysHideHorizontalSlideBar()C; // set/get if horizontal SlideBar should be always hidden
  22. // set / get
  23. virtual Region& rect (C Rect &rect ); C Rect& rect ()C {return super::rect() ;} // set/get rectangle
  24. virtual Region& move (C Vec2 &delta ); // move by delta
  25. Region& slidebarSize( Flt size ); Flt slidebarSize()C {return _slidebar_size ;} // set/get slidebar size, default=0.05
  26. Flt clientWidth ()C {return _crect.w () ;} // get client width
  27. Flt clientHeight()C {return _crect.h () ;} // get client height
  28. Vec2 clientSize ()C {return _crect.size () ;} // get client size
  29. C Rect& clientRect ()C {return _crect ;} // get client rectangle
  30. Flt virtualWidth ()C {return slidebar[0].lengthTotal() ;} // get virtual width
  31. Flt virtualHeight()C {return slidebar[1].lengthTotal() ;} // get virtual height
  32. Region& virtualSize (C Vec2 *size ); Vec2 virtualSize ()C {return Vec2(virtualWidth(), virtualHeight());} // set/get virtual size, pass null to use 'childrenSize'
  33. Vec2 childrenSize ()C; // get virtual size needed to cover all children
  34. Region& skin (C GuiSkinPtr &skin, Bool sub_objects=true); C GuiSkinPtr& skin()C {return _skin ;} // set/get skin override, default=null (if set to null then current value of 'Gui.skin' is used), 'sub_objects'=if additionally change the skin of slidebars and view button
  35. GuiSkin* getSkin()C {return _skin ? _skin() : Gui.skin() ;} // get actual skin
  36. // main
  37. virtual GuiObj* test (C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel); // test if 'pos' screen position intersects with the object, by returning pointer to object or its children upon intersection and null in case no intersection, 'mouse_wheel' may be modified upon intersection either to the object or its children or null
  38. virtual void update(C GuiPC &gpc); // update object
  39. virtual void draw (C GuiPC &gpc); // draw object
  40. #if EE_PRIVATE
  41. void zero();
  42. void addChild(GuiObj &child);
  43. void removeChild(GuiObj &child);
  44. void setButtons();
  45. void setParams ();
  46. void setParent (Bool on=true);
  47. enum
  48. {
  49. ALWAYS_HIDE_HORIZONTAL_SLIDEBAR=1<<0,
  50. };
  51. #endif
  52. ~Region() {del();}
  53. Region();
  54. #if !EE_PRIVATE
  55. private:
  56. #endif
  57. Byte _flag;
  58. Flt _slidebar_size;
  59. Rect _crect;
  60. GuiSkinPtr _skin;
  61. GuiObjChildren _children;
  62. protected:
  63. virtual void childRectChanged(C Rect *old_rect, C Rect *new_rect, GuiObj &child);
  64. virtual Bool save(File &f, CChar *path=null)C;
  65. virtual Bool load(File &f, CChar *path=null) ;
  66. NO_COPY_CONSTRUCTOR(Region);
  67. };
  68. /******************************************************************************/