Mercurial > hg > dmlib
changeset 402:0f290af63fc1
Timeline event drawing prototype works.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 19 Oct 2012 17:49:22 +0300 |
parents | 2fdf440ea66a |
children | d34922e6a244 |
files | dmengine.h dmtimelinew.c edmain.cpp edtimeline.cpp edtimeline.h |
diffstat | 5 files changed, 78 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/dmengine.h Fri Oct 19 16:28:06 2012 +0300 +++ b/dmengine.h Fri Oct 19 17:49:22 2012 +0300 @@ -271,7 +271,9 @@ int dmTimelineNew(DMTimeline **tl, const char *name); int dmTimelineAddTrack(DMTimeline *tl, DMTimelineTrack **track, const char *name); int dmTimelineTrackAddEvent(DMTimelineTrack *track, int start, int duration, DMTimelineEvent **pev); -int dmTimelineEventSetEffect(DMTimelineEvent *event, const char *name); +int dmTimelineEventSetEffect(DMTimelineEvent *event, DMEffect *ef); +int dmTimelineEventSetEffectByIndex(DMTimelineEvent *event, const int index); +int dmTimelineEventSetEffectByName(DMTimelineEvent *event, const char *name); DMTimelineEvent *dmTimelineGetEventAt(DMTimelineTrack *track, int time);
--- a/dmtimelinew.c Fri Oct 19 16:28:06 2012 +0300 +++ b/dmtimelinew.c Fri Oct 19 17:49:22 2012 +0300 @@ -260,12 +260,10 @@ } -int dmTimelineEventSetEffect(DMTimelineEvent *event, const char *name) +int dmTimelineEventSetEffect(DMTimelineEvent *event, DMEffect *ef) { int param; - DMEffect *ef; - - if ((ef = engineFindEffectByName(name)) == NULL) + if (ef == NULL) return DMERR_INVALID_DATA; event->effect = ef; @@ -299,6 +297,21 @@ } +int dmTimelineEventSetEffectByIndex(DMTimelineEvent *event, const int index) +{ + if (index < 0 || index >= nengineEffects) + return DMERR_INVALID_DATA; + + return dmTimelineEventSetEffect(event, &engineEffects[index]); +} + + +int dmTimelineEventSetEffectByName(DMTimelineEvent *event, const char *name) +{ + return dmTimelineEventSetEffect(event, engineFindEffectByName(name)); +} + + DMTimelineEvent *dmTimelineGetEventAt(DMTimelineTrack *track, const int time) { int event;
--- a/edmain.cpp Fri Oct 19 16:28:06 2012 +0300 +++ b/edmain.cpp Fri Oct 19 17:49:22 2012 +0300 @@ -206,7 +206,7 @@ // Setup GUI elements createMainGUI(); -// createNewFile(); + createNewFile(); timelineView->setTimeline(currTimeline); settingsRestore(); initEffectsAndResources(); @@ -366,6 +366,14 @@ delete currTimeline; currTimeline = new TimelineObject(); + DMTimelineTrack *tr; + dmTimelineAddTrack(currTimeline->tl, &tr, "Penis"); + + DMTimelineEvent *ev; + dmTimelineTrackAddEvent(tr, 500, 100, &ev); + + dmTimelineEventSetEffectByIndex(ev, 0); + update(); historyReset(); updateMenuStates();
--- a/edtimeline.cpp Fri Oct 19 16:28:06 2012 +0300 +++ b/edtimeline.cpp Fri Oct 19 17:49:22 2012 +0300 @@ -49,23 +49,71 @@ } +float QTimelineTrackDisplay::getTimeScale(float value) +{ + return value * scale; +} + + +float QTimelineTrackDisplay::getTimeFromCoord(float value) +{ + return value * scale * 1000.0f; +} + + void QTimelineTrackDisplay::paintEvent(QPaintEvent *) { if (track == NULL) return; QColor eventColor(150, 150, 150); + QColor invalidEventColor(250, 150, 150); + QColor eventBorder(200, 250, 200); + QColor eventParam(200, 150, 100); + QColor eventText(255, 255, 255); QColor markerColor(255,255,255); + QFont fantti; + fantti.setFamily("Arial"); + fantti.setPointSizeF(8.0f); + fantti.setStyleHint(QFont::SansSerif); + QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); + painter.save(); painter.scale(scale, 1); + float wd = getTimeScale(width()); for (int event = 0; event < track->nevents; event++) { DMTimelineEvent *ev = track->events[event]; + + float x0 = getTimeScale(ev->start - offs), + x1 = getTimeScale(ev->start + ev->duration - offs); + + if ((x0 >= 0 && x0 < wd) || (x0 < 0 && x1 >= 0)) + { + painter.setFont(fantti); + painter.setBrush(ev->effect != NULL ? eventColor : invalidEventColor); + painter.setPen(eventBorder); + x0 = ev->start - offs; + x1 = ev->duration; + painter.fillRect(x0, 0, x1, height(), eventColor); + + painter.setBrush(eventText); + if (ev->effect != NULL) + { + QString name(ev->effect->name); + painter.drawText(QPointF(x0 + 2, 10), name); + } + else + { + painter.drawText(QPointF(x0 + 2, 10), "INVALID"); + } + } + } painter.restore();
--- a/edtimeline.h Fri Oct 19 16:28:06 2012 +0300 +++ b/edtimeline.h Fri Oct 19 17:49:22 2012 +0300 @@ -20,6 +20,7 @@ QTimelineTrackDisplay(QWidget *parent = 0); void setTrack(DMTimelineTrack *mtrack); + float getTimeScale(float value); float getTimeFromCoord(float value); void setTime(const int mtime);