bool ofxTLKeyframes::mousePressed(ofMouseEventArgs& args, long millis){ ofVec2f screenpoint = ofVec2f(args.x, args.y); keysAreDraggable = !ofGetModifierShiftPressed(); keysDidDrag = false; selectedKeyframe = keyframeAtScreenpoint(screenpoint); //if we clicked OFF of a keyframe OR... //if we clicked on a keyframe outside of the current selection and we aren't holding down shift, clear all if(!ofGetModifierSelection() && (isActive() || selectedKeyframe != NULL) ){ bool didJustDeselect = false; if( selectedKeyframe == NULL || !isKeyframeSelected(selectedKeyframe)){ //settings this to true causes the first click off of the timeline to deselct rather than create a new keyframe didJustDeselect = timeline->getTotalSelectedItems() > 1; timeline->unselectAll(); } //if we didn't just deselect everything and clicked in an empty space add a new keyframe there if(selectedKeyframe == NULL && !didJustDeselect){ createNewOnMouseup = args.button == 0 && !ofGetModifierControlPressed(); } } if(selectedKeyframe != NULL){ //add the keyframe to the selection, whether it was just generated or not if(!isKeyframeSelected(selectedKeyframe)){ selectedKeyframes.push_back(selectedKeyframe); } //unselect it if it's selected and we clicked the key with shift pressed else if(ofGetModifierSelection()){ deselectKeyframe(selectedKeyframe); selectedKeyframe = NULL; } } // if(isActive()){ // cout << "MOUSE PRESSED args button " << args.button << " control pressed? " << (ofGetModifierControlPressed() ? "YES":"NO") << " shift/cmd pressed? " << (ofGetModifierSelection() ? "YES":"NO") << endl; // } //if we have any keyframes selected update the grab offsets and check for showing the modal window if(selectedKeyframes.size() != 0){ updateDragOffsets(screenpoint, millis); if(selectedKeyframe != NULL){ if(args.button == 0 && !ofGetModifierSelection() && !ofGetModifierControlPressed()){ timeline->setDragTimeOffset(selectedKeyframe->grabTimeOffset); //move the playhead if(timeline->getMovePlayheadOnDrag()){ timeline->setCurrentTimeMillis(selectedKeyframe->time); } } if(args.button == 2 || ofGetModifierControlPressed()){ selectedKeySecondaryClick(args); } } } return selectedKeyframe != NULL; }
void ofxTLCurves::mouseReleased(ofMouseEventArgs& args, long millis){ if(drawingEasingWindow && (args.button == 0 && !ofGetModifierControlPressed()) ){ 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 ofxTLLFO::mouseReleased(ofMouseEventArgs& args, long millis){ if(drawingLFORect){ if(mouseDownRect != NULL && mouseDownRect->inside(args.x, args.y)){ ofxTLLFOKey* lfokey = (ofxTLLFOKey*)selectedKeyframe; if(mouseDownRect == &sineTypeRect){ if( lfokey->type != OFXTL_LFO_TYPE_SINE){ lfokey->type = OFXTL_LFO_TYPE_SINE; shouldRecomputePreviews = true; timeline->flagTrackModified(this); } } else if(mouseDownRect == &noiseTypeRect){ if( lfokey->type != OFXTL_LFO_TYPE_NOISE){ lfokey->type = OFXTL_LFO_TYPE_NOISE; shouldRecomputePreviews = true; timeline->flagTrackModified(this); } } //TODO: Phase match // else if(mouseDownRect == &phaseMatchRect){ // lfokey->phaseMatch = !lfokey->phaseMatch; // shouldRecomputePreviews = true; // timeline->flagTrackModified(this); // } else if(mouseDownRect == &interpolateRect){ lfokey->interpolate = !lfokey->interpolate; if (lfokey->interpolate) lfokey->expInterpolate = false; shouldRecomputePreviews = true; timeline->flagTrackModified(this); } else if(mouseDownRect == &expInterpolateRect){ lfokey->expInterpolate = !lfokey->expInterpolate; if (lfokey->expInterpolate) lfokey->interpolate = false; shouldRecomputePreviews = true; timeline->flagTrackModified(this); } if(draggedValue){ timeline->flagTrackModified(this); draggedValue = false; } } if(args.button == 0 && !ofGetModifierControlPressed() && !lfoRect.inside(args.x, args.y) && mouseDownRect == NULL){ timeline->dismissedModalContent(); drawingLFORect = false; } } else{ ofxTLKeyframes::mouseReleased(args, millis); } }
bool ofxTLKeyframes::mousePressed(ofMouseEventArgs& args, long millis){ ofVec2f screenpoint = ofVec2f(args.x, args.y); keysAreStretchable = ofGetModifierShiftPressed() && ofGetModifierControlPressed(); keysDidDrag = false; if(keysAreStretchable && timeline->getTotalSelectedItems() > 1){ unsigned long long minSelected = timeline->getEarliestSelectedTime(); unsigned long long maxSelected = timeline->getLatestSelectedTime(); if(minSelected == maxSelected){ keysAreStretchable = false; } else { unsigned long long midSelection = (maxSelected-minSelected)/2 + minSelected; //the anchor is the selected key opposite to where we are stretching stretchAnchor = midSelection <= millis ? minSelected : maxSelected; // cout << "Min selected " << ofxTimecode::timecodeForMillis(minSelected) << " Mid Selected " << ofxTimecode::timecodeForMillis(midSelection) << " Max selected " << ofxTimecode::timecodeForMillis(maxSelected) << " anchor " << ofxTimecode::timecodeForMillis(stretchAnchor) << " millis down " << ofxTimecode::timecodeForMillis(millis) << endl; stretchSelectPoint = millis; //don't do anything else, like create or deselect keyframes updateStretchOffsets(screenpoint, millis); } return true; } keysAreDraggable = !ofGetModifierShiftPressed(); selectedKeyframe = keyframeAtScreenpoint(screenpoint); //if we clicked OFF of a keyframe OR... //if we clicked on a keyframe outside of the current selection and we aren't holding down shift, clear all if(!ofGetModifierSelection() && (isActive() || selectedKeyframe != NULL) ){ bool didJustDeselect = false; if( selectedKeyframe == NULL || !isKeyframeSelected(selectedKeyframe)){ //settings this to true causes the first click off of the timeline to deselct rather than create a new keyframe didJustDeselect = timeline->getTotalSelectedItems() > 1; timeline->unselectAll(); } //if we didn't just deselect everything and clicked in an empty space add a new keyframe there if(selectedKeyframe == NULL && !didJustDeselect){ createNewOnMouseup = args.button == 0 && !ofGetModifierControlPressed(); } } if(selectedKeyframe != NULL){ //add the keyframe to the selection, whether it was just generated or not if(!isKeyframeSelected(selectedKeyframe)){ selectedKeyframes.push_back(selectedKeyframe); updateKeyframeSort(); // selectKeyframe(selectedKeyframe); } //unselect it if it's selected and we clicked the key with shift pressed else if(ofGetModifierSelection()){ deselectKeyframe(selectedKeyframe); selectedKeyframe = NULL; } } //if we have any keyframes selected update the grab offsets and check for showing the modal window if(selectedKeyframes.size() != 0){ updateDragOffsets(screenpoint, millis); if(selectedKeyframe != NULL){ if(args.button == 0 && !ofGetModifierSelection() && !ofGetModifierControlPressed()){ timeline->setDragTimeOffset(selectedKeyframe->grabTimeOffset); //move the playhead if(timeline->getMovePlayheadOnDrag()){ timeline->setCurrentTimeMillis(selectedKeyframe->time); } } if(args.button == 2 || ofGetModifierControlPressed()){ selectedKeySecondaryClick(args); } } } return selectedKeyframe != NULL; }