Programmable real-time audio signal processing application
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

cmGr2dFltk.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include <FL/Fl.H>
  2. #include <Fl/fl_draw.h>
  3. #include <FL/Fl_Widget.H>
  4. #include <FL/Fl_Double_Window.H>
  5. #include <Fl/Fl_Output.H>
  6. #include <Fl/Fl_Menu_Bar.H>
  7. #include <vector>
  8. #include "Fl_CbLinker.h"
  9. #include "cmGlobal.h"
  10. #include "cmFloatTypes.h"
  11. #include "cmRpt.h"
  12. #include "cmErr.h"
  13. #include "cmCtx.h"
  14. #include "cmMem.h"
  15. #include "cmMallocDebug.h"
  16. #include "cmLinkedHeap.h"
  17. #include "cmText.h"
  18. #include "cmGr.h"
  19. #include "cmGrDevCtx.h"
  20. #include "cmGrPlot.h"
  21. #include "cmGrPage.h"
  22. #include "cmGrFltk.h"
  23. #include "cmGr2dFltk.h"
  24. cmGr2dFltk::cmGr2dFltk(cmCtx_t* ctx, Fl_Menu_Bar* menuBar, int x, int y, int w, int h)
  25. : cmGrPlotFltk(ctx,x,y,w,h),
  26. _x(0),_y(0),_radius(0),_angle(0),
  27. _objId(0)
  28. {
  29. cmErrSetup(&_err,&ctx->rpt,"cmGr2dFltk");
  30. if( cmGrPageIsValid(pageHandle()) == false )
  31. return;
  32. initViews(1,1);
  33. unsigned vwIdx = 0;
  34. cmGrPgH_t pgH = pageHandle();
  35. cmGrVwH_t vwH = cmGrPageViewHandle( pgH, vwIdx);
  36. cmGrH_t cvH = cmGrViewGrHandle( vwH );
  37. cmGrVExt_t limExt;
  38. cmGrVExtSetD(&limExt,-kWidth,-kHeight,kWidth, kHeight);
  39. cmGrObjSetWorldExt( cvH, cmGrRootObjH(cvH), &limExt );
  40. cmGrObjSetWorldLimitExt(cvH, cmGrRootObjH(cvH), &limExt, kLeftGrFl | kRightGrFl | kTopGrFl | kBottomGrFl );
  41. _createObj();
  42. cmGrSetViewExtentsE( cvH, &limExt );
  43. }
  44. cmGr2dFltk::~cmGr2dFltk()
  45. {
  46. }
  47. bool cmGr2dFltk::on_plot_object( cmGrPlotCbArg_t* arg )
  48. {
  49. if( arg->selId==kEventCbSelGrPlId && cmIsFlag(arg->eventFlags,kMsDragGrFl ) )
  50. {
  51. cmGrVExt_t vext;
  52. cmGrPlotObjVExt(arg->objH,&vext);
  53. //cmGrVExtPrint("",&vext);
  54. _x = cmGrVExtMinX(&vext);
  55. _y = cmGrVExtMinY(&vext);
  56. _radius = sqrtf(_x*_x + _y*_y)/kWidth;
  57. _angle = -( atan2f(_y,_x) - M_PI/2.0);
  58. if( _angle < 0 )
  59. _angle += 2.0 * M_PI;
  60. _angle = 360.0f * _angle / (2.0*M_PI);
  61. setStatusText(cmTsPrintfS("r:%f angle:%f",_radius,_angle));
  62. callback()(this,user_data());
  63. }
  64. return true;
  65. }
  66. double cmGr2dFltk::x() const
  67. { return _x; }
  68. double cmGr2dFltk::y() const
  69. { return _y; }
  70. double cmGr2dFltk::radius() const
  71. { return _radius; }
  72. double cmGr2dFltk::angle() const
  73. { return _angle; }
  74. void cmGr2dFltk::_createObj()
  75. {
  76. cmGrPlH_t plH = plotHandle();
  77. cmGrPgH_t pgH = pageHandle();
  78. unsigned vwIdx = 0;
  79. cmGrVwH_t vwH = cmGrPageViewHandle( pgH, vwIdx );
  80. cmGrH_t cvH = cmGrViewGrHandle( vwH );
  81. cmGrPlObjH_t parentObjH = cmGrPlObjNullHandle;
  82. cmGrPlObjH_t xAnchorObjH = cmGrPlObjNullHandle;
  83. cmGrPlObjH_t yAnchorObjH = cmGrPlObjNullHandle;
  84. cmGrPlObjH_t objH = cmGrPlObjNullHandle;
  85. cmGrPlObjTypeId_t objTypeId = kRectGrPlId;
  86. cmReal_t x = 0;
  87. cmReal_t y = 0;
  88. cmReal_t w = 0;
  89. cmReal_t h = 0;
  90. unsigned flags = 0; //kNoDragGrPlFl;
  91. cmGrVExt_t* wext = NULL;
  92. if( cmGrPlotObjCreate(plH, cvH, &objH, _objId++, parentObjH, xAnchorObjH, yAnchorObjH, objTypeId, flags | kNoDragGrPlFl, x, y, w, h, NULL, wext ) != kOkGrPlRC )
  93. {
  94. cmErrMsg(&_err,kCreateObjRC,"Plot origin object create failed.");
  95. }
  96. else
  97. {
  98. cmGrPlotObjSetPhysExt(objH, -2, -2, 2, 2 );
  99. cmGrPlotObjSetFontSize(objH,8);
  100. }
  101. objH = cmGrPlObjNullHandle;
  102. if( cmGrPlotObjCreate(plH, cvH, &objH, _objId++, parentObjH, xAnchorObjH, yAnchorObjH, objTypeId, flags, x, y, w, h, NULL, wext ) != kOkGrPlRC )
  103. {
  104. cmErrMsg(&_err,kCreateObjRC,"Plot object create failed.");
  105. }
  106. else
  107. {
  108. //unsigned f = 0 ? (kNorthJsGrFl | kTopJsGrFl) : (kSouthJsGrFl | kBottomJsGrFl);
  109. //cmGrPlotObjSetLabelAttr( objH, f | kWestJsGrFl | kTopJsGrFl | kRightJsGrFl, 0, kBlackGrId );
  110. cmGrPlotObjSetLineColor( objH, kEnablePlGrId, kGreenGrId );
  111. cmGrPlotObjSetPhysExt(objH, -4, -4, 4, 4 );
  112. cmGrPlotObjSetFontSize(objH,8);
  113. }
  114. }