Example #1
0
//--------------------------------------------------------------
void ofxMuiKnob::onPress() {
    registerMousePosition(mousePosition);

    float nv = getNormalizedKnobPosition();

    if(getBounds().isBounded()) {

        if(isRangeEnabled() && isShiftPressed()) {
            if(isCtrlPressed()) {
                setRightOrLeftRangeLimit(nv);
            } else {
                setClosestRangeLimit(nv);
            }
        } else if(isRangeEnabled() && isCtrlPressed()) {
            normCtrlDragStartMin = getNormalizedRangeMin();
            normCtrlDragStartMax = getNormalizedRangeMax();
        } else {
            setNormalizedValue(nv);
        }
    } else {
        //setNormalizedValue(nv);
        ofVec2f v = screenToHitBox(mousePosition);
        float d = v.distance(getHitBoxCenter());
        float ds = ofNormalize(d,0,getHitBoxWidth()*2.0f) * 10.0f;

        add(ds*dKnobScaler*dKnobAngle);
    }

}
Example #2
0
//--------------------------------------------------------------
void ofxMuiNumberData::setClosestRangeLimit(float norm) {
    float dMin = fabs(norm - getNormalizedRangeMin());
    float dMax = fabs(norm - getNormalizedRangeMax());
    if(dMin > dMax) {
        setNormalizedRangeMax(norm);
    } else {
        setNormalizedRangeMin(norm);
    }
}
Example #3
0
//--------------------------------------------------------------
void ofxMuiKnob::update() {
//    tooltip = toString();
//    valueLabel->setText(tooltip);
//    valueLabel->setTooltip(tooltip);
//
    if(needsRedraw) { // dial shape needs update due to data change

        cout << "here" << endl;

        if(getBounds().isBounded()) {

            innerRadiusW = getHitBoxHalfWidth() * innerRadiusPct;
            outerRadiusW = getHitBoxHalfWidth() * outerRadiusPct;
            innerRadiusH = getHitBoxHalfHeight() * innerRadiusPct;
            outerRadiusH = getHitBoxHalfHeight() * outerRadiusPct;

            angleBounds0 = ofRadToDeg(normalizedValueToAngle(0.0f));
            angleBounds1 = ofRadToDeg(normalizedValueToAngle(1.0f));

            angleValue0 = angleBounds0;
            angleValue1 = ofRadToDeg(normalizedValueToAngle(getNormalizedValue()));

            dialShape.clear();
            dialShape.arc(0,0,outerRadiusW,outerRadiusH,angleBounds0,angleBounds1);
            dialShape.arcNegative(0,0,innerRadiusW,innerRadiusH,angleBounds1,angleBounds0);
            dialShape.close();


            if(getRange().isBounded()) {

                angleRange0 = ofRadToDeg(normalizedValueToAngle(getNormalizedRangeMin()));
                angleRange1 = ofRadToDeg(normalizedValueToAngle(getNormalizedRangeMax()));

                angleValue0 = angleRange0; // reset it if this is active

                dialRangeShape.clear();
                dialRangeShape.arc(0,0,outerRadiusW,outerRadiusH,angleRange0,angleRange1);
                dialRangeShape.arcNegative(0,0,innerRadiusW,innerRadiusH,angleRange1,angleRange0);
                dialRangeShape.close();
            }

            //
            dialValueShape.clear();
            dialValueShape.arc(0,0,outerRadiusW,outerRadiusH,angleValue0,angleValue1);
            dialValueShape.arcNegative(0,0,innerRadiusW,innerRadiusH,angleValue1,angleValue0);
            dialValueShape.close();


        } else {
            // nothing to draw
        }
        needsRedraw = false;
    }



}
Example #4
0
//--------------------------------------------------------------
void ofxMuiKnob::onDrag() {
    registerMousePosition(mousePosition);

    float nv = getNormalizedKnobPosition();

    cout << "nv=" << nv << endl;

    if(getBounds().isBounded()) {
        if(isRangeEnabled() && isShiftPressed()) {
            if(isCtrlPressed()) {
                setRightOrLeftRangeLimit(nv);
            } else {
                setClosestRangeLimit(nv);
            }
        } else if(isRangeEnabled() && isCtrlPressed()) {
            normCtrlDragStartMin = getNormalizedRangeMin();
            normCtrlDragStartMax = getNormalizedRangeMax();
        } else {
            setNormalizedValue(nv);
        }

        /*
        if(isRangeEnabled() && isShiftPressed()) {
            setClosestRangeLimit(nv);
        } else if(isRangeEnabled() && isCtrlPressed()) {
            // TODO -- fix this
            // TODO -- quick angle change problem

            float normDx =
            fabs(smallestAngleDelta(normCtrlDragStartMin, normCtrlDragStartMax) )/ (2 * PI - boundaryWedgeAngle);
            setNormalizedRangeMin(ofClamp(normCtrlDragStartMin + normDx,0,1));
            setNormalizedRangeMax(ofClamp(normCtrlDragStartMax + normDx,0,1));
        } else {
            //setNormalizedValue(nv);
            ofVec2f v = screenToHitBox(mousePosition);
            float d = v.distance(getHitBoxCenter());
            float ds = ofNormalize(d,0,getHitBoxWidth()*2.0f) * 10.0f;

            add(ds*dKnobScaler*getBounds().delta()*dKnobAngle);
        }
         */
    } else {
        //setNormalizedValue(nv);
        //ofVec2f v = screenToHitBox(mousePosition);
        //float d = v.distance(ofVec2f(getHitBoxWidth()*0.5f,getHitBoxHeight()*0.5f));
        float ds =  1;//ofNormalize(d,0,getHitBoxWidth()*2.0f) * 10.0f;

        add(ds*dKnobScaler*dKnobAngle);


        cout << getValue() << endl;
    }
}