Programmable real-time audio signal processing application
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }