/** Draw the crossfader curve graph. Only needs to get drawn when a change has been made.*/ void DlgPrefCrossfader::drawXfaderDisplay() { #define GRID_X_LINES 4 #define GRID_Y_LINES 6 int sizeX = graphicsViewXfader->width(); int sizeY = graphicsViewXfader->height(); //Initialize Scene if (m_pxfScene) { delete m_pxfScene; m_pxfScene = NULL; } m_pxfScene = new QGraphicsScene(); m_pxfScene->setSceneRect(0,0,sizeX, sizeY); m_pxfScene->setBackgroundBrush(Qt::black); //Initialize QPens QPen gridPen(Qt::green); QPen graphLinePen(Qt::white); //draw grid for (int i=1; i < GRID_X_LINES; i++) { m_pxfScene->addLine(QLineF(0, i *(sizeY/GRID_X_LINES),sizeX,i *(sizeY/GRID_X_LINES)), gridPen); } for (int i=1; i < GRID_Y_LINES; i++) { m_pxfScene->addLine(QLineF( i * (sizeX/GRID_Y_LINES), 0, i * (sizeX/GRID_Y_LINES), sizeY), gridPen); } // Draw graph lines float gain1, gain2; QPoint pointTotal, point1, point2; QPoint pointTotalPrev, point1Prev, point2Prev; for (int i = 0; i < sizeX; i++) { double xfadeStep = 2. / (double)sizeX; EngineXfader::getXfadeGains(gain1, gain2, (-1. + (xfadeStep * (double) i)), m_transform, m_cal, (m_xFaderMode == MIXXX_XFADER_CONSTPWR), checkBoxReverse->isChecked()); double sum = gain1 + gain2; //scale for graph gain1 *= 0.80; gain2 *= 0.80; sum *= 0.80; //draw it pointTotalPrev = pointTotal; point1Prev = point1; point2Prev = point2; pointTotal = QPoint(i - 2, (int)((1. - sum) * (sizeY))); point1 = QPoint(i - 2, (int)((1. - gain1) * (sizeY))); point2 = QPoint(i - 2, (int)((1. - gain2) * (sizeY))); if(i == 0) { pointTotalPrev = pointTotal; point1Prev = point1; point2Prev = point2; } if(pointTotal != point1) m_pxfScene->addLine(QLineF(point1, point1Prev), graphLinePen); if(pointTotal != point2) m_pxfScene->addLine(QLineF(point2, point2Prev), graphLinePen); m_pxfScene->addLine(QLineF(pointTotal, pointTotalPrev), QPen(Qt::red)); } graphicsViewXfader->setScene(m_pxfScene); graphicsViewXfader->show(); }
// Draw the crossfader curve graph. Only needs to get drawn when a change // has been made. void DlgPrefCrossfader::drawXfaderDisplay() { const int kGrindXLines = 4; const int kGrindYLines = 6; int sizeX = graphicsViewXfader->width(); int sizeY = graphicsViewXfader->height(); // Initialize Scene if (m_pxfScene) { delete m_pxfScene; m_pxfScene = NULL; } m_pxfScene = new QGraphicsScene(); m_pxfScene->setSceneRect(0,0,sizeX, sizeY); m_pxfScene->setBackgroundBrush(Qt::black); // Initialize QPens QPen gridPen(Qt::green); QPen graphLinePen(Qt::white); // draw grid for (int i = 1; i < kGrindXLines; i++) { m_pxfScene->addLine( QLineF(0, i * (sizeY / kGrindXLines), sizeX, i * (sizeY / kGrindXLines)), gridPen); } for (int i = 1; i < kGrindYLines; i++) { m_pxfScene->addLine( QLineF(i * (sizeX / kGrindYLines), 0, i * (sizeX / kGrindYLines), sizeY), gridPen); } // Draw graph lines QPointF pointTotal, point1, point2; QPointF pointTotalPrev, point1Prev, point2Prev; int pointCount = sizeX - 4; // reduced by 2 x 1 for border + 2 x 1 for inner distance to border double xfadeStep = 2. / (pointCount - 1); for (int i = 0; i < pointCount; i++) { double gain1, gain2; EngineXfader::getXfadeGains((-1. + (xfadeStep * i)), m_transform, m_cal, m_xFaderMode, checkBoxReverse->isChecked(), &gain1, &gain2); double gain = sqrt(gain1 * gain1 + gain2 * gain2); // scale for graph gain1 *= 0.71; gain2 *= 0.71; gain *= 0.71; // draw it pointTotal = QPointF(i + 1, (1. - gain) * (sizeY) - 3); point1 = QPointF(i + 1, (1. - gain1) * (sizeY) - 3); point2 = QPointF(i + 1, (1. - gain2) * (sizeY) - 3); if (i > 0) { m_pxfScene->addLine(QLineF(pointTotal, pointTotalPrev), QPen(Qt::red)); m_pxfScene->addLine(QLineF(point1, point1Prev), graphLinePen); m_pxfScene->addLine(QLineF(point2, point2Prev), graphLinePen); } // Save old values pointTotalPrev = pointTotal; point1Prev = point1; point2Prev = point2; } graphicsViewXfader->setScene(m_pxfScene); graphicsViewXfader->show(); graphicsViewXfader->repaint(); }