VSTGUI - WYSIWYGPermalink

보기 좋게 장 정리하면 된다.
dB의 표기와 각 Band의 파라미터들을 하나의 컨테이너에 담아서 관리하기 쉽게 했다.

VSTGUI - drawPermalink

void MyView::draw(VSTGUI::CDrawContext* pContext)
{
 pContext->setLineWidth(1);
 pContext->setFillColor(VSTGUI::CColor(50, 50, 95, 255));
 pContext->setFrameColor(VSTGUI::CColor(0, 0, 0, 255)); // black borders
 pContext->drawRect(getViewSize(), VSTGUI::kDrawFilledAndStroked);

 double MAX_FREQ = 22000.0;
 double MIN_FREQ = 10.0;
 double FREQ_LOG_MAX = log(MAX_FREQ / MIN_FREQ);
 double DB_EQ_RANGE = 15.0;

 {
  VSTGUI::CRect r(getViewSize());
  pContext->setFrameColor(VSTGUI::CColor(255, 255, 255, 55));
  for (int x = 2; x < 10; x++) {
   VSTGUI::CCoord Hz_10 = r.getWidth() * log(10.0 * x / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_10, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_10, r.top);
   pContext->drawLine(_p1, _p2);
  }
  for (int x = 2; x < 10; x++) {
   VSTGUI::CCoord Hz_100 = r.getWidth() * log(100.0 * x / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_100, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_100, r.top);
   pContext->drawLine(_p1, _p2);
  }
  for (int x = 2; x < 10; x++) {
   VSTGUI::CCoord Hz_1000 = r.getWidth() * log(1000.0 * x / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_1000, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_1000, r.top);
   pContext->drawLine(_p1, _p2);
  }
   
  for (int x = 2; x < 3; x++) {
   VSTGUI::CCoord Hz_10000 = r.getWidth() * log(10000.0 * x / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_10000, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_10000, r.top);
   pContext->drawLine(_p1, _p2);
  }
   
  pContext->setFrameColor(VSTGUI::CColor(255, 255, 255, 155));
  {
   VSTGUI::CCoord Hz_100 = r.getWidth() * log(100.0 / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_100, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_100, r.top);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord Hz_1000 = r.getWidth() * log(1000.0 / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_1000, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_1000, r.top);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord Hz_10000 = r.getWidth() * log(10000.0 / MIN_FREQ) / FREQ_LOG_MAX;
   const VSTGUI::CPoint _p1(r.left + Hz_10000, r.bottom);
   const VSTGUI::CPoint _p2(r.left + Hz_10000, r.top);
   pContext->drawLine(_p1, _p2);
  }
 }

 {
  VSTGUI::CRect r(getViewSize());
  pContext->setFrameColor(VSTGUI::CColor(255, 255, 255, 55));
  {
   VSTGUI::CCoord dB_p15 = r.getHeight() * (1.0 - (((-15.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_p15);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_p15);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_p10 = r.getHeight() * (1.0 - (((-10.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_p10);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_p10);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_p5 = r.getHeight() * (1.0 - (((-5.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_p5);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_p5);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_0 = r.getHeight() * (1.0 - (((.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_0);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_0);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_m5 = r.getHeight() * (1.0 - (((5.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_m5);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_m5);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_m10 = r.getHeight() * (1.0 - (((10.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_m10);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_m10);
   pContext->drawLine(_p1, _p2);
  }
  {
   VSTGUI::CCoord dB_m15 = r.getHeight() * (1.0 - (((15.0 / DB_EQ_RANGE) / 2) + 0.5));
   const VSTGUI::CPoint _p1(r.left, r.bottom - dB_m15);
   const VSTGUI::CPoint _p2(r.right, r.bottom - dB_m15);
   pContext->drawLine(_p1, _p2);
  }
 }

// ~~~

}

view의 draw에서 dB선과 Hz선을 그려주었다.