示例#1
0
void ofxTLFlags::draw(){
	
	if(bounds.height < 2){
		return;
	}
	
	ofPushStyle();
	
    ofxTLBangs::draw();
    
	ofFill();
	ofSetLineWidth(5);
	for(int i = keyframes.size()-1; i >= 0; i--){
        ofxTLFlag* key = (ofxTLFlag*)keyframes[i];
		if(isKeyframeIsInBounds(key)){
			int screenX = millisToScreenX(key->time);
			
			ofSetColor(timeline->getColors().backgroundColor);		
			int textHeight = bounds.y + 10 + ( (20*i) % int(MAX(bounds.height-15, 15)));
			key->display = ofRectangle(MIN(screenX+3, bounds.getMaxX() - key->textField.bounds.width),
									   textHeight-10, 100, 15);
			ofRect(key->display);
			
			ofSetColor(timeline->getColors().textColor);
			
			key->textField.bounds.x = key->display.x;
			key->textField.bounds.y = key->display.y;
			key->textField.draw();
		}
	}
	ofPopStyle();
}
void ofxTLKeyframes::recomputePreviews(){
	preview.clear();
	
//	cout << "ofxTLKeyframes::recomputePreviews " << endl;
	
//	if(keyframes.size() == 0 || keyframes.size() == 1){
//		preview.addVertex(ofPoint(bounds.x, bounds.y + bounds.height - sampleAtPercent(.5f)*bounds.height));
//		preview.addVertex(ofPoint(bounds.x+bounds.width, bounds.y + bounds.height - sampleAtPercent(.5f)*bounds.height));
//	}
//	else{
		for(int p = bounds.getMinX(); p <= bounds.getMaxX(); p+=2){
			preview.addVertex(p,  bounds.y + bounds.height - sampleAtPercent(screenXtoNormalizedX(p)) * bounds.height);
		}
//	}
//	int size = preview.getVertices().size();
	preview.simplify();
	//cout << "simplify pre " << size << " post: " << preview.getVertices().size() << " dif: " << (size - preview.getVertices().size()) << endl;

	ofVec2f lastPoint;
	keyPoints.clear();
	for(int i = 0; i < keyframes.size(); i++){
		if(!isKeyframeIsInBounds(keyframes[i])){
			continue;
		}
		ofVec2f screenpoint = screenPositionForKeyframe(keyframes[i]);
		if(lastPoint.squareDistance(screenpoint) > 5*5){
			keyPoints.push_back(screenpoint);
		}
		
		lastPoint = screenpoint;
	}
	
	shouldRecomputePreviews = false;
	
}
示例#3
0
void ofxTLKeyframes::draw(){
	
	if(bounds.width == 0 || bounds.height < 2){
		return;
	}
	
	if(shouldRecomputePreviews || viewIsDirty){
		recomputePreviews();
	}
	
	ofPushStyle();
	
	//draw current value indicator as a big transparent rectangle
	ofSetColor(timeline->getColors().disabledColor, 30);
	float currentPercent = sampleAtTime(timeline->getCurrentTimeMillis());
	ofFill();
	ofRect(bounds.x, bounds.getMaxY(), bounds.width, -bounds.height*currentPercent);
	
	//***** DRAW KEYFRAME LINES
	ofSetColor(timeline->getColors().keyColor);
	ofNoFill();
	
	preview.draw();
	
	//**** DRAW KEYFRAME DOTS
	
	//**** HOVER FRAME
	if(hoverKeyframe != NULL){
		ofPushStyle();
		ofFill();
		ofSetColor(timeline->getColors().highlightColor);
		ofVec2f hoverKeyPoint = screenPositionForKeyframe( hoverKeyframe );
		ofCircle(hoverKeyPoint.x, hoverKeyPoint.y, 6);
		ofPopStyle();
	}

	//**** ALL CACHED VISIBLE KEYS
	ofSetColor(timeline->getColors().textColor);
	ofNoFill();
	for(int i = 0; i < keyPoints.size(); i++){
		ofRect(keyPoints[i].x-1, keyPoints[i].y-1, 3, 3);
	}
	
	//**** SELECTED KEYS
	ofSetColor(timeline->getColors().textColor);
	ofFill();
	for(int i = 0; i < selectedKeyframes.size(); i++){
		if(isKeyframeIsInBounds(selectedKeyframes[i])){
			ofVec2f screenpoint = screenPositionForKeyframe(selectedKeyframes[i]);
			float keysValue = ofMap(selectedKeyframes[i]->value, 0, 1.0, valueRange.min, valueRange.max, true);
			if(keysAreDraggable){
				string frameString = timeline->formatTime(selectedKeyframes[i]->time);
				timeline->getFont().drawString(ofToString(keysValue, 4), screenpoint.x+5, screenpoint.y-5);
			}
			ofCircle(screenpoint.x, screenpoint.y, 4);
		}
	}

	ofPopStyle();
}
void ofxTLKeyframes::getSnappingPoints(set<unsigned long long>& points){
	for(int i = 0; i < keyframes.size(); i++){
		if (isKeyframeIsInBounds(keyframes[i]) && !isKeyframeSelected(keyframes[i])) {
			points.insert(keyframes[i]->time);
		}
	}
}
//draw your keyframes into bounds
void ofxTLEmptyKeyframes::draw(){
	
	ofPushStyle();
	
	ofFill();
	//show the current color as background based on the playhead position
	ofSetColor(getCurrentColor(), 100);
	ofDrawRectangle(bounds);

	for(int i = 0; i < keyframes.size(); i++){
		//make sure it's on screen
		if(isKeyframeIsInBounds(keyframes[i])){
			//we know the type because we created it in newKeyframe()
			//so we can safely cast
			ofxTLEmptyKeyframe* emptyKeyframe = (ofxTLEmptyKeyframe*)keyframes[i];
			if(hoverKeyframe == emptyKeyframe){
				ofSetColor(timeline->getColors().highlightColor);
			}
			else if(isKeyframeSelected(emptyKeyframe)){
				ofSetColor(timeline->getColors().textColor);
			}
			else{
				ofSetColor(timeline->getColors().keyColor);
			}
			ofVec2f screenPoint = screenPositionForKeyframe(emptyKeyframe);
			ofDrawCircle(screenPoint, 7);
			ofSetColor(emptyKeyframe->color);
			ofDrawCircle(screenPoint, 5);
		}
	}
	
	ofPopStyle();
}
void ofxTLCameraTrack::draw(){
	//draw your keyframes into bounds
	ofPushStyle();

	if(lockCameraToTrack){
		ofSetColor(timeline->getColors().keyColor, 40*(sin(ofGetElapsedTimef()*5)*.5+.5)+25);
		ofFill();
		ofRect(bounds);
	}
	ofSetColor(timeline->getColors().keyColor);
	ofNoFill();


	//	for(int i = 0; i < track.getSamples().size(); i++){
	for(int i = 0; i < keyframes.size(); i++){
		if(!isKeyframeIsInBounds(keyframes[i])){
			continue;
		}
		
		ofxTLCameraFrame* sample =(ofxTLCameraFrame*)keyframes[i];
		float screenX = millisToScreenX(keyframes[i]->time);
		float screenY = bounds.y;
		ofPoint screenPoint = ofPoint(screenX,screenY);
		
		//        if(keyframes[i] == selectedKeyframe){
		if(isKeyframeSelected(sample)){
			if(sample->easeInSelected){
				ofSetColor(timeline->getColors().highlightColor);
				draweEase(sample->easeIn, screenPoint, true);
				ofSetColor(timeline->getColors().keyColor);
				draweEase(sample->easeOut, screenPoint, false);
			}
			else {
				ofSetColor(timeline->getColors().keyColor);
				draweEase(sample->easeIn, screenPoint, true);
				ofSetColor(timeline->getColors().highlightColor);
				draweEase(sample->easeOut,screenPoint, false);
			}
		}
		else{
			ofSetColor(timeline->getColors().keyColor);
			draweEase(sample->easeIn,  screenPoint, true);
			draweEase(sample->easeOut, screenPoint, false);
		}
	}

	ofFill();
	ofSetColor(timeline->getColors().highlightColor);
	for(int i = 0; i < selectedKeyframes.size(); i++){
		float screenX = millisToScreenX( selectedKeyframes[i]->time );
		float screenY = bounds.y+bounds.height/2;
		ofCircle(screenX, screenY, 4);
	}

	ofPopStyle();

}
void ofxTLSwitches::getSnappingPoints(set<unsigned long>& points){
	for(int i = 0; i < keyframes.size(); i++){
        ofxTLSwitch* switchKey = (ofxTLSwitch*)keyframes[i];
		if (isKeyframeIsInBounds(switchKey) && !isKeyframeSelected(switchKey) &&
            !switchKey->startSelected && !switchKey->endSelected) {
			points.insert(switchKey->timeRange.min);
            points.insert(switchKey->timeRange.max);
		}
	}
}
void ofxTLFileSelectFlags::drawModalContent()
{
    for(int i = keyframes.size()-1; i >= 0; i--)
    {
        ofxTLFileSelectFlag* key = (ofxTLFileSelectFlag*)keyframes[i];
        if(isKeyframeIsInBounds(key))
        {
            key->flagButton->draw();
        }
        
    }
    
}
ofxTLKeyframe* ofxTLKeyframes::keyframeAtScreenpoint(ofVec2f p){
	if(!bounds.inside(p)){
		return NULL;	
	}
	float minDistanceSquared = 15*15;
	for(int i = 0; i < keyframes.size(); i++){
		if(isKeyframeIsInBounds(keyframes[i]) &&
		   p.squareDistance(screenPositionForKeyframe(keyframes[i])) < minDistanceSquared)
		{
			return keyframes[i];
		}
	}
	return NULL;
}
示例#10
0
//draw your keyframes into bounds
void ofxTLLFO::draw(){
	
	//we draw keys our own way

	//ofxTLKeyframes::draw();
	if(bounds.width == 0 || bounds.height < 2){
		return;
	}
	
	if(shouldRecomputePreviews || viewIsDirty){
		recomputePreviews();
	}
	
	ofSetColor(timeline->getColors().disabledColor, 30);
	float currentPercent = sampleAtTime(currentTrackTime());
	ofFill();
	ofRect(bounds.x, bounds.getMaxY(), bounds.width, -bounds.height*currentPercent);
	
	ofPushStyle();
	ofSetColor(timeline->getColors().keyColor);
	preview.draw();
	
	
	for(int i = 0; i < keyframes.size(); i++){
		//make sure it's on screen
		if(isKeyframeIsInBounds(keyframes[i])){
			//we know the type because we created it in newKeyframe()
			//so we can safely cast
			ofxTLLFOKey* lfoKey = (ofxTLLFOKey*)keyframes[i];

			if(isKeyframeSelected(keyframes[i])){
				ofSetLineWidth(2);
				ofSetColor(timeline->getColors().textColor);
			}
			else if(keyframes[i] == hoverKeyframe){
				ofSetLineWidth(4);
				ofSetColor(timeline->getColors().highlightColor);
			}
			else{
				ofSetLineWidth(4);
				ofSetColor(timeline->getColors().keyColor);
			}
			float screenX = millisToScreenX(keyframes[i]->time);
			ofLine(screenX, bounds.y, screenX, bounds.y+bounds.height);
		}
	}
	
	ofPopStyle();
}
示例#11
0
void ofxTLBangs::draw(){
        
    if(bounds.height < 2){
        return;
    }
    
    ofPushStyle();
    ofFill();
	
	//float currentPercent = powf(MIN(ofGetElapsedTimef() - lastBangTime, .5), 2);
	float currentPercent = powf(ofMap(ofGetElapsedTimef() - lastBangTime, 0, .5, 1.0, 0,true), 2);
	if(currentPercent > 0){
		ofSetColor(timeline->getColors().disabledColor, 100*(currentPercent));
		ofFill();
		ofRect(bounds.x, bounds.y, bounds.width, bounds.height);
	}
	
    for(int i = keyframes.size()-1; i >= 0; i--){
		if(!isKeyframeIsInBounds(keyframes[i])){
			continue;
		}
        //int screenX = normalizedXtoScreenX(keyframes[i]->position.x);
        int screenX = millisToScreenX(keyframes[i]->time);
        if(isKeyframeSelected(keyframes[i])){
            ofSetLineWidth(2);
            ofSetColor(timeline->getColors().textColor);
        }
        else if(keyframes[i] == hoverKeyframe){
            ofSetLineWidth(4);
            ofSetColor(timeline->getColors().highlightColor);
        }
        else{
            ofSetLineWidth(4);
            ofSetColor(timeline->getColors().keyColor);
        }
        
        ofLine(screenX, bounds.y, screenX, bounds.y+bounds.height);
    }
    ofPopStyle();

}
void ofxTLFileSelectFlags::draw()
{
    
    if(bounds.height < 2){
        return;
    }
    
    ofPushStyle();
    
    ofxTLBangs::draw();
    
    ofFill();
    ofSetLineWidth(5);
    for(int i = keyframes.size()-1; i >= 0; i--){
        ofxTLFileSelectFlag* key = (ofxTLFileSelectFlag*)keyframes[i];
        if(isKeyframeIsInBounds(key)){
            int screenX = millisToScreenX(key->time);
            int textHeight = bounds.y + 10 + ( (20*i) % int(MAX(bounds.height-15, 15)));
            
//            ofSetColor(timeline->getColors().backgroundColor);
//            key->display = ofRectangle(MIN(screenX+3, bounds.getMaxX() - key->textField.bounds.width),
//                                       textHeight-10, 180, 30);
//            ofRect(key->display);
//            
//            ofSetColor(timeline->getColors().textColor);
            
            int x = MIN(screenX+3, bounds.getMaxX());// - key->textField.bounds.width);
            int y = textHeight - 10;

            //key->textField.draw();
            
            
            //DatGUI
            
            key->flagButton->setPosition(x,y);
            key->flagButton->draw();
        }
    }
    ofPopStyle();
}
void ofxTLFileSelectFlags::update()
{
    ofxTLBangs::update();
    
//    if (enteringText) cout << "TLDropDown :: Editing Text : " << ofGetElapsedTimef() << endl;
    for(int i = keyframes.size()-1; i >= 0; i--)
    {
        ofxTLFileSelectFlag* key = (ofxTLFileSelectFlag*)keyframes[i];
        if(isKeyframeIsInBounds(key))
        {
            key->flagButton->update(true);
            /*
            if(timeline->isModal())
            {
                key->menu->update(true);
            }
            else
            {
                key->menu->update(false);
            }
             */
        }
    }
}
示例#14
0
void ofxTLColorTrack::draw() {

    if(bounds.height == 0) {
        return;
    }

    if(viewIsDirty || shouldRecomputePreviews) {
        updatePreviewPalette();
    }

    if(keyframes.size() == 0) {
        ofPushStyle();
        ofSetColor(defaultColor);
        ofFill();
        ofRect(bounds);
        ofPopStyle();
    }
    else if(keyframes.size() == 1) {
        ofPushStyle();
        ofxTLColorSample* s = (ofxTLColorSample*)keyframes[0];
        ofSetColor(s->color);
        ofFill();
        ofRect(bounds);
        ofPopStyle();
    }
    else {
        previewPalette.draw(bounds);
    }

    for(int i = 0; i < keyframes.size(); i++) {

        if(!isKeyframeIsInBounds(keyframes[i])) {
            continue;
        }

        float screenX = millisToScreenX(keyframes[i]->time);

        ofPoint a = ofPoint(screenX-10,bounds.y);
        ofPoint b = ofPoint(screenX+10,bounds.y);
        ofPoint c = ofPoint(screenX,bounds.y+10);

        ofPushStyle();
        ofFill();
        ofxTLColorSample* s = (ofxTLColorSample*)keyframes[i];
        ofSetColor(s->color);
        ofTriangle(a,b,c);
        ofNoFill();
        ofSetColor(s->color.getInverted());
        ofSetLineWidth(1);
        ofTriangle(a,b,c);

        if(keyframes[i] == hoverKeyframe) {
            ofSetColor(timeline->getColors().highlightColor);
            ofSetLineWidth(3);
        }
        else if(isKeyframeSelected(keyframes[i])) {
            ofSetColor(timeline->getColors().textColor);
            ofSetLineWidth(2);
        }
        else {
            ofSetColor(s->color.getInverted());
        }
        ofLine(c, ofVec2f(screenX, bounds.getMaxY()));
        ofPopStyle();
    }
}