Programmable real-time audio signal processing application
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.

cmGrFltk.h 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. //| Copyright: (C) 2019-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. #ifndef cmGrFltk_h
  4. #define cmGrFltk_h
  5. class Fl_Group;
  6. class Fl_Output;
  7. class Fl_Scrollbar;
  8. class cmGrDevDrvFltk
  9. {
  10. public:
  11. cmGrDevDrvFltk();
  12. virtual ~cmGrDevDrvFltk(){}
  13. static bool create( void* user, unsigned w, unsigned h );
  14. static void destroy( void* user );
  15. static void begin_draw( void* arg );
  16. static void end_draw( void* arg );
  17. static void draw( void* arg, int x, int y );
  18. static void set_color( void* user, const cmGrColor_t c );
  19. static void get_color( void* user, cmGrColor_t* c );
  20. static void set_font_family( void* user, unsigned fontId );
  21. static unsigned get_font_family( void* user );
  22. static void set_font_style( void* user, unsigned style );
  23. static unsigned get_font_style( void* user );
  24. static void set_font_size( void* user, unsigned size );
  25. static unsigned get_font_size( void* user );
  26. static void set_pen_style( void* user, unsigned styleFlags );
  27. static unsigned get_pen_style( void* user );
  28. static void set_pen_width( void* user, unsigned w );
  29. static unsigned get_pen_width( void* user );
  30. static void draw_line( void* user, int x0, int y0, int x1, int y1 );
  31. static void draw_rect( void* user, int x0, int y0, unsigned w, unsigned h );
  32. static void fill_rect( void* user, int x0, int y0, unsigned w, unsigned h );
  33. static void draw_ellipse( void* user, int x0, int y0, unsigned w, unsigned h );
  34. static void fill_ellipse( void* user, int x0, int y0, unsigned w, unsigned h );
  35. static void draw_diamond( void* user, int x0, int y0, unsigned w, unsigned h );
  36. static void fill_diamond( void* user, int x0, int y0, unsigned w, unsigned h );
  37. static void draw_triangle( void* user, int x0, int y0, unsigned w, unsigned h, unsigned dirFlag );
  38. static void fill_triangle( void* user, int x0, int y0, unsigned w, unsigned h, unsigned dirFlag );
  39. static void draw_text( void* user, const char* text, int x, int y );
  40. static void draw_text_rot( void* user, const char* text, int x, int y, int angle );
  41. static void measure_text( void* user, const char* text, unsigned* w, unsigned* h );
  42. static void read_image( void* user, unsigned char* p, int x, int y, unsigned w, unsigned h );
  43. static void draw_image( void* user, const unsigned char* p, int x, int y, unsigned w, unsigned h );
  44. bool is_initialized() const;
  45. cmGrDev_t d;
  46. private:
  47. unsigned _fltk_pen_width;
  48. unsigned _fltk_pen_style;
  49. unsigned _fltk_font_size;
  50. unsigned _w;
  51. unsigned _h;
  52. static void _get_font_family_style( unsigned* fontId, unsigned* style );
  53. static void _set_font_family_style( void* user, unsigned fontId, unsigned style );
  54. };
  55. //--------------------------------------------------------------------------------------
  56. // Canvas Object
  57. class cmGrViewFltk : public Fl_Widget
  58. {
  59. public:
  60. cmGrViewFltk( cmCtx_t* ctx, cmGrH_t grH, int x, int y, int w, int h );
  61. virtual ~cmGrViewFltk();
  62. virtual int handle(int event);
  63. virtual void resize(int x, int y, int w, int h );
  64. void setGrH( cmGrH_t grH );
  65. private:
  66. virtual void draw();
  67. typedef struct
  68. {
  69. unsigned idx;
  70. unsigned fltk_code;
  71. char ch;
  72. cmGrKeyCodeId_t gr_code;
  73. } keyMap_t;
  74. cmGrH_t _grH;
  75. cmGrDevDrvFltk _dd;
  76. cmGrDcH_t _dcH;
  77. static keyMap_t _keymap[];
  78. const keyMap_t* _getGrKeyCode( unsigned fltk_code );
  79. cmGrKeyCodeId_t _eventKeyCode( );
  80. };
  81. //--------------------------------------------------------------------------------------
  82. // Container for multiple plots
  83. class cmGrPageFltk : public Fl_Group
  84. {
  85. public:
  86. cmGrPageFltk( cmCtx_t* ctx, cmGrPgH_t pgH, int x, int y, int w, int h );
  87. virtual ~cmGrPageFltk();
  88. virtual void createView( unsigned vwIdx );
  89. virtual void destroyView( unsigned vwIdx );
  90. virtual cmGrDcH_t devCtxHandle();
  91. virtual cmGrViewFltk* viewWidget( unsigned vwIdx );
  92. virtual void resize(int x, int y, int w, int h );
  93. private:
  94. virtual void draw();
  95. cmGrDevDrvFltk _dd;
  96. cmCtx_t* _ctx;
  97. cmGrPgH_t _pgH;
  98. cmGrDcH_t _dcH;
  99. cmGrViewFltk** _vwV;
  100. unsigned _vwN;
  101. };
  102. //--------------------------------------------------------------------------------------
  103. // Contains a single cmGrPageFltk and a control panel
  104. class cmGrPlotFltk : public Fl_Group
  105. {
  106. public:
  107. cmGrPlotFltk( cmCtx_t* ctx, int x, int y, int w, int h, int rn=1, int cn=1, int textSz=10 );
  108. virtual ~cmGrPlotFltk();
  109. virtual void resize(int x, int y, int w, int h );
  110. cmGrPgH_t pageHandle();
  111. cmGrPlH_t plotHandle();
  112. cmGrDcH_t dcHandle();
  113. virtual void initViews( int rn, int cn );
  114. virtual void setStatusText( const cmChar_t* s );
  115. virtual void on_button( unsigned id );
  116. virtual void on_scroll( Fl_Scrollbar* sb, unsigned id );
  117. virtual void on_view_create( unsigned viewIdx );
  118. virtual void on_view_destroy( unsigned viewIdx );
  119. virtual void rpt_local_pt( cmGrH_t grH );
  120. virtual void rpt_global_pt( cmGrH_t grH );
  121. virtual void on_phys_change( cmGrH_t grH );
  122. virtual void on_view_change( cmGrH_t grH );
  123. virtual void on_select_change( cmGrH_t grH );
  124. virtual void on_focused_plot( cmGrH_t grH );
  125. virtual void on_key_event( cmGrH_t grH, unsigned eventFlags, cmGrKeyCodeId_t keycode );
  126. virtual bool on_plot_object( cmGrPlotCbArg_t* arg );
  127. private:
  128. enum
  129. {
  130. kHBord = 0, // dist between vertical elements (cols)
  131. kVBord = 0, // dist between horz elements (rows)
  132. kBtnH = 20, // control height
  133. kBtnW = 50, // button width
  134. kOutW = 100, // output width
  135. kLblW = 20, // output label width,
  136. kScrD = 20 // scroll bar thickness
  137. };
  138. enum
  139. {
  140. kHScrollId,
  141. kVScrollId,
  142. kShowAllId,
  143. kReportId,
  144. kZoomInId,
  145. kZoomOutId,
  146. kZoomInXId,
  147. kZoomInYId,
  148. kZoomOutXId,
  149. kZoomOutYId,
  150. };
  151. cmGrPgH_t _pgH;
  152. cmGrPlH_t _plH;
  153. cmGrPageFltk* _pg;
  154. Fl_Group* _ctl_grp;
  155. Fl_Group* _usr_grp;
  156. Fl_Output* _status; // status text output
  157. Fl_Scrollbar* _hsb; // scroll bars
  158. Fl_Scrollbar* _vsb;
  159. Fl_Output* _gx; // current global coord display
  160. Fl_Output* _gy;
  161. Fl_Output* _lx; // current local coord display
  162. Fl_Output* _ly;
  163. Fl_Output* _s0x; // seletion point
  164. Fl_Output* _s0y;
  165. Fl_Output* _s1x;
  166. Fl_Output* _s1y;
  167. Fl_Output* _sdx;
  168. Fl_Output* _sdy;
  169. int _textSz;
  170. void _layout();
  171. Fl_Group* _create_ctls();
  172. void _create_scroll_bars();
  173. void _showHideScrollBars();
  174. cmGrH_t _getFocusedView();
  175. // controls callback
  176. static void _s_ctl_cb(Fl_Widget* w, long id );
  177. // plot page callbacks
  178. static void _s_cmGrCallback( void* arg, cmGrH_t grH, cmGrCbId_t id, unsigned eventFlags, cmGrKeyCodeId_t keycode );
  179. // plot object callbacks
  180. static bool _s_cmGrPlotObjCbFunc( cmGrPlotCbArg_t* arg );
  181. };
  182. #endif