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);