void ofxTLCurves::mouseReleased(ofMouseEventArgs& args, long millis){ if(drawingEasingWindow && args.button == 0){ drawingEasingWindow = false; timeline->dismissedModalContent(); ofVec2f screenpoint(args.x,args.y); for(int i = 0; i < easingFunctions.size(); i++){ if(easingFunctions[i]->bounds.inside(screenpoint-easingWindowPosition)){ for(int k = 0; k < selectedKeyframes.size(); k++){ ((ofxTLTweenKeyframe*)selectedKeyframes[k])->easeFunc = easingFunctions[i]; } timeline->flagTrackModified(this); shouldRecomputePreviews = true; return; } } for(int i = 0; i < easingTypes.size(); i++){ if(easingTypes[i]->bounds.inside(screenpoint-easingWindowPosition)){ for(int k = 0; k < selectedKeyframes.size(); k++){ ((ofxTLTweenKeyframe*)selectedKeyframes[k])->easeType = easingTypes[i]; } timeline->flagTrackModified(this); shouldRecomputePreviews = true; return; } } } else{ ofxTLKeyframes::mouseReleased(args, millis); } }
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::mouseDragged(ofMouseEventArgs& args, long millis){ if(keysAreDraggable && selectedKeyframes.size() != 0){ ofVec2f screenpoint(args.x,args.y); for(int k = 0; k < selectedKeyframes.size(); k++){ ofVec2f newScreenPosition; selectedKeyframes[k]->time = millis - selectedKeyframes[k]->grabTimeOffset; 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; }