Пример #1
0
void Knob::mouseMoveEvent ( QMouseEvent *pMouseEvent )
{
    if (m_dialMode == QDialMode) {
        QDial::mouseMoveEvent(pMouseEvent);
        return;
    }

    if (!m_bMousePressed)
        return;

    const QPoint& posMouse = pMouseEvent->pos();
    int xdelta = posMouse.x() - m_posMouse.x();
    int ydelta = posMouse.y() - m_posMouse.y();
    float angleDelta =  mouseAngle(posMouse) - mouseAngle(m_posMouse);

    int iNewValue = sliderPosition();

    switch (m_dialMode)	{
    case LinearMode:
        iNewValue = int(m_lastDragValue + xdelta - ydelta);
        if (iNewValue > maximum())
            iNewValue = maximum();
        else
            if (iNewValue < minimum())
                iNewValue = minimum();
        break;
    case AngularMode:
    default:
        // Forget about the drag origin to be robust on full rotations
        if (angleDelta > +180.0f) angleDelta = angleDelta - 360.0f;
        if (angleDelta < -180.0f) angleDelta = angleDelta + 360.0f;
        m_lastDragValue += float(maximum() - minimum()) * angleDelta / 270.0f;
        if (m_lastDragValue > float(maximum()))
            m_lastDragValue = float(maximum());
        if (m_lastDragValue < float(minimum()))
            m_lastDragValue = float(minimum());
        m_posMouse = posMouse;
        iNewValue = int(m_lastDragValue + 0.5f);
        break;
    }
    updatePosition(iNewValue);
}
Пример #2
0
void Knob::mouseMoveEvent ( QMouseEvent *pMouseEvent )
{
	if (m_dialMode == QDialMode) {
		QDial::mouseMoveEvent(pMouseEvent);
		return;
	}

	if (!m_bMousePressed)
		return;

	const QPoint& posMouse = pMouseEvent->pos();
	int xdelta = posMouse.x() - m_posMouse.x();
	int ydelta = posMouse.y() - m_posMouse.y();
	double angleDelta =  mouseAngle(posMouse) - mouseAngle(m_posMouse);

	int iNewValue = value();

	switch (m_dialMode)	{
	case LinearMode:
		iNewValue = int(m_lastDragValue + xdelta - ydelta);
		break;
	case AngularMode:
	default:
		// Forget about the drag origin to be robust on full rotations
		if (angleDelta > +180.0) angleDelta = angleDelta - 360.0;
		if (angleDelta < -180.0) angleDelta = angleDelta + 360.0;
		m_lastDragValue += double(maximum() - minimum()) * angleDelta / 270.0;
		if (m_lastDragValue > double(maximum()))
			m_lastDragValue = double(maximum());
		if (m_lastDragValue < double(minimum()))
			m_lastDragValue = double(minimum());
		m_posMouse = posMouse;
		iNewValue = int(m_lastDragValue + 0.5);
		break;
	}

	setValue(iNewValue);
	update();

	emit sliderMoved(value());
}