void ofxTLKeyframes::mouseDragged(ofMouseEventArgs& args, long millis){

	if(keysAreStretchable){
		//cast the stretch anchor to long so that it can be signed
		float stretchRatio = 1.0*(millis-long(stretchAnchor)) / (1.0*stretchSelectPoint-stretchAnchor);

        for(int k = 0; k < selectedKeyframes.size(); k++){
            setKeyframeTime(selectedKeyframes[k], ofClamp(stretchAnchor + (selectedKeyframes[k]->grabTimeOffset * stretchRatio),
														  0, timeline->getDurationInMilliseconds()));
            selectedKeyframes[k]->screenPosition = screenPositionForKeyframe(selectedKeyframes[k]);
		}
        timeline->flagUserChangedValue();
        keysDidDrag = true;
        updateKeyframeSort();
	}

    if(keysAreDraggable && selectedKeyframes.size() != 0){
        ofVec2f screenpoint(args.x,args.y);
        for(int k = 0; k < selectedKeyframes.size(); k++){
            ofVec2f newScreenPosition;
            setKeyframeTime(selectedKeyframes[k], ofClamp(millis - selectedKeyframes[k]->grabTimeOffset,
														  screenXToMillis(bounds.getMinX()), screenXToMillis(bounds.getMaxX())));
            selectedKeyframes[k]->value = screenYToValue(args.y - selectedKeyframes[k]->grabValueOffset);
            selectedKeyframes[k]->screenPosition = screenPositionForKeyframe(selectedKeyframes[k]);
        }
        if(selectedKeyframe != NULL && timeline->getMovePlayheadOnDrag()){
            timeline->setCurrentTimeMillis(selectedKeyframe->time);
        }
        timeline->flagUserChangedValue();
        keysDidDrag = true;
        updateKeyframeSort();
    }
	createNewOnMouseup = false;
}
void ofxTLKeyframes::nudgeBy(ofVec2f nudgePercent){
	for(int i = 0; i < selectedKeyframes.size(); i++){
		setKeyframeTime(selectedKeyframes[i], ofClamp(selectedKeyframes[i]->time + timeline->getDurationInMilliseconds()*nudgePercent.x,
													  0, timeline->getDurationInMilliseconds()));
		selectedKeyframes[i]->value = ofClamp(selectedKeyframes[i]->value + nudgePercent.y, 0, 1.0);
	}	
	updateKeyframeSort();
    timeline->flagTrackModified(this);
}
void ofxTLFlags::addFlagAtTime(string key, unsigned long long time){
	ofxTLKeyframe* keyFrame = newKeyframe();
	ofxTLFlag* flag = (ofxTLFlag*)keyFrame;
	setKeyframeTime(keyFrame, time);
	flag->textField.text = key;
	keyframes.push_back(keyFrame);
	updateKeyframeSort();
	timeline->flagTrackModified(this);
}
Example #4
0
void ofxTLFlags::addFlagAtTime(string key, unsigned long long time){
//	cout << "***ADDING FLAG WITH TIME " << time << endl;
	if(time > 2000000){
		cout << "***UNITITED VAR " << time << endl;
		return;
	}
	ofxTLKeyframe* keyFrame = newKeyframe();
	ofxTLFlag* flag = (ofxTLFlag*)keyFrame;
	setKeyframeTime(keyFrame, time);
	flag->textField.text = key;
	keyframes.push_back(keyFrame);
	updateKeyframeSort();
	timeline->flagTrackModified(this);
}
void ofxTLKeyframes::mouseReleased(ofMouseEventArgs& args, long millis){
	keysAreDraggable = false;
    if(keysDidDrag){
		//reset these caches because they may no longer be valid
		lastKeyframeIndex = 1;
		lastSampleTime = 0;
        timeline->flagTrackModified(this);
    }
	
	if(createNewOnMouseup){
		//add a new one
		selectedKeyframe = newKeyframe();
		setKeyframeTime(selectedKeyframe,millis);
		selectedKeyframe->value = screenYToValue(args.y);
		keyframes.push_back(selectedKeyframe);
		selectedKeyframes.push_back(selectedKeyframe);
		updateKeyframeSort();
		timeline->flagTrackModified(this);
	}
	createNewOnMouseup = false;
}
void ofxTLKeyframes::quantizeKeys(int step){
	for(int i = 0; i < keyframes.size(); i++){
		setKeyframeTime(keyframes[i], getTimeline()->getQuantizedTime(keyframes[i]->time, step));
	}
}