You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.5KB

  1. #ifndef BUFFERED_DRAW_FUNCTION_INCLUDE
  2. #define BUFFERED_DRAW_FUNCTION_INCLUDE
  3. #include "rack.hpp"
  4. #include <functional>
  5. #include <vector>
  6. using namespace rack;
  7. template < typename T >
  8. struct BufferedDrawFunctionWidget : virtual FramebufferWidget
  9. {
  10. typedef std::function< void( T *, NVGcontext *) > drawfn_t;
  11. T *that;
  12. drawfn_t drawf;
  13. struct InternalBDW : TransparentWidget
  14. {
  15. T* that;
  16. drawfn_t drawf;
  17. InternalBDW( Rect box_, T* that_, drawfn_t draw_ ) : that( that_ ), drawf( draw_ )
  18. {
  19. box = box_;
  20. }
  21. void draw( NVGcontext *vg ) override
  22. {
  23. drawf( that, vg );
  24. }
  25. };
  26. BufferedDrawFunctionWidget( Vec pos, Vec sz, T* that_, drawfn_t draw_ ) : that( that_ ), drawf( draw_ )
  27. {
  28. box.pos = pos; box.size = sz;
  29. auto kidBox = Rect( Vec( 0, 0 ), box.size );
  30. InternalBDW *kid = new InternalBDW( kidBox, that, drawf );
  31. addChild( kid );
  32. }
  33. };
  34. struct BufferedDrawLambdaWidget : virtual FramebufferWidget
  35. {
  36. typedef std::function< void( NVGcontext *) > drawfn_t;
  37. drawfn_t drawf;
  38. struct InternalBDW : TransparentWidget
  39. {
  40. drawfn_t drawf;
  41. InternalBDW( Rect box_, drawfn_t draw_ ) : drawf( draw_ )
  42. {
  43. box = box_;
  44. }
  45. void draw( NVGcontext *vg ) override
  46. {
  47. drawf( vg );
  48. }
  49. };
  50. BufferedDrawLambdaWidget( Vec pos, Vec sz, drawfn_t draw_ ) : drawf( draw_ )
  51. {
  52. box.pos = pos; box.size = sz;
  53. auto kidBox = Rect( Vec( 0, 0 ), box.size );
  54. InternalBDW *kid = new InternalBDW( kidBox, drawf );
  55. addChild( kid );
  56. }
  57. };
  58. #endif