void ofxTLBeatTicker::setup() { bpmScreenPoints.clear(); ofxTLTicker::setup(); (*(getTimeline()->getPages().begin()))->setTicker(this); getTimeline()->setTicker(this); setBPM(getTimeline()->getBPM()); isSetup = true; refreshTickMarks(); bMouseCursorInside = false; disabled = false; }
void ofxTLTicker::draw(){ ofPushStyle(); int textH, textW; string text; //draw tickers with time float startTime = zoomBounds.min * timeline->getDurationInSeconds(); float endTime = zoomBounds.max * timeline->getDurationInSeconds(); float durationInview = endTime-startTime; float secondsPerPixel = durationInview / bounds.width; if(viewIsDirty){ refreshTickMarks(); } tickerMarks.setStrokeColor( ofColor(200, 180, 40) ); tickerMarks.setStrokeWidth(1); tickerMarks.draw(bounds.x, bounds.y); if(drawBPMGrid){ if(viewIsDirty){ updateBPMPoints(); } ofPushStyle(); ofSetColor(255, 255, 255, 50); for(int i = 0; i < bpmScreenPoints.size(); i++){ ofSetLineWidth(bpmScreenPoints[i].weight); ofLine(bpmScreenPoints[i].screenX, getBottomEdge(), bpmScreenPoints[i].screenX, totalDrawRect.y+totalDrawRect.height); } ofPopStyle(); } textH = timeline->getFont().getLineHeight(); textW = 3; //highlite current mouse position if(hover){ //draw background rect ofSetColor(timeline->getColors().backgroundColor); float screenX = millisToScreenX(hoverTime); text = timeline->formatTime(hoverTime); textW = timeline->getFont().stringWidth(text)+3; if(bounds.height > 2){ int previewTimecodeX = ofClamp(screenX+5, bounds.x, bounds.x+bounds.width-textW-5); ofFill(); ofRect(previewTimecodeX-5, bounds.y+textH, textW, textH); //draw playhead line ofSetColor(timeline->getColors().textColor); timeline->getFont().drawString(text, previewTimecodeX, bounds.y+textH*2); } ofSetColor(timeline->getColors().highlightColor); ofSetLineWidth(1); ofLine(screenX, totalDrawRect.y, screenX, totalDrawRect.y+totalDrawRect.height); } //draw current frame //TIMECODE int currentFrameX; if (timeline->getIsFrameBased()) { text = ofToString(timeline->getCurrentFrame()); currentFrameX = screenXForIndex(timeline->getCurrentFrame()); } else{ text = timeline->formatTime(timeline->getCurrentTime()); currentFrameX = screenXForTime(timeline->getCurrentTime()); } if(bounds.height > 2){ int timeCodeX = ofClamp(currentFrameX+5, bounds.x, bounds.x+bounds.width-textW-5); ofSetColor(timeline->getColors().backgroundColor); ofFill(); ofRect(timeCodeX-5, bounds.y, textW, textH); ofSetColor(timeline->getColors().textColor); timeline->getFont().drawString(text, timeCodeX, bounds.y+textH); } if(timeline->getIsPlaying()){ ofSetColor(timeline->getColors().keyColor); } else{ ofSetColor(timeline->getColors().outlineColor); } //draw playhead line ofSetLineWidth(1); ofLine(currentFrameX, totalDrawRect.y, currentFrameX, totalDrawRect.y+totalDrawRect.height); //draw bounds ofNoFill(); ofSetColor(200, 180, 40); ofRect(bounds); ofPopStyle(); }
void ofxTLTicker::refresh() { refreshTickMarks(); updateBPMPoints(); }
void ofxTLBeatTicker::draw(){ if (!isSetup || disabled) return; ofPushStyle(); int textH, textW; string text; if(viewIsDirty){ refreshTickMarks(); } drawBPMGrid = true; tickerMarks.setStrokeColor( ofColor(0, 0, 240) ); tickerMarks.setStrokeWidth(1); tickerMarks.draw(bounds.x, bounds.y); if(drawBPMGrid){ if(viewIsDirty){ updateBPMPoints(); } ofPushStyle(); ofSetColor(0, 0, 0, 200); ofSetLineWidth(1); int siz = bpmScreenPoints.size(); int howmany; if (siz > 20) howmany = siz / 15; else if (siz > 12) howmany = 4; else howmany = 4; for(int i = 0; i < bpmScreenPoints.size(); i++) { if (isOnScreen(bpmScreenPoints[i].screenX)) { int bi = floor(bpmScreenPoints[i].beat); //if ((bi) % 4 == 1) { // draw bpms indices if ((bi) % howmany == 1) { // draw bpms indices #if DRAW_FXCKING_GRID ofLine(bpmScreenPoints[i].screenX, getBottomEdge(), bpmScreenPoints[i].screenX, totalDrawRect.y+totalDrawRect.height); #endif text = tostr(bi); textW = timeline->getFont().stringWidth(text); timeline->getFont().drawString(text, bpmScreenPoints[i].screenX - textW/2, getBottomEdge()-20); } } } ofPopStyle(); } textH = timeline->getFont().getLineHeight(); textW = 3; //draw current frame int currentFrameX; if (timeline->getIsFrameBased()) { //text = ofToString(timeline->getCurrentFrame()); text = tostr(timeline->millisecToBeat(hoverTime)); currentFrameX = screenXForIndex(timeline->getCurrentFrame()); } else{ //text = timeline->formatTime(timeline->getCurrentTime()); text = tostr(timeline->millisecToBeat(hoverTime)); currentFrameX = screenXForTime(timeline->getCurrentTime()); //currenttimeline->normalizedXtoScreenX(timeline->beatToNormalizedX(currentPoint), zoomBounds); //;timeline->millisToScreenX(timeline->beatToMillisec(measures[0].beat)); } currentFrameX = ofClamp(currentFrameX, bounds.getMinX(), bounds.getMaxX()); //draw playhead line ofSetLineWidth(1); ofLine(currentFrameX, totalDrawRect.y, currentFrameX, totalDrawRect.y+totalDrawRect.height); //text = tostr(timeline->millisecToBeat(hoverTime)+1 - startBeat); unsigned long startBeat = timeline->normalizedXToBeat(zoomBounds.min);// * timeline->getDurationInMilliseconds(); text = tostr( timeline->normalizedXToBeat( screenXtoNormalizedX( millisToScreenX(hoverTime), zoomBounds) ) + 1); //cout << "ofxTLBeatTicker: hoverTime: " << hoverTime << " text:"<< text << endl; float screenX = ofClamp(millisToScreenX(hoverTime), bounds.getMinX(), bounds.getMaxX()); timeline->getFont().drawString(text, screenX, bounds.y+textH+25); ofPopStyle(); }