visualization of the interpolation type
This commit is contained in:
parent
2b1a79cc9c
commit
86543e1d04
@ -39,6 +39,10 @@ TrackView::TrackView()
|
|||||||
|
|
||||||
rowPen = CreatePen(PS_SOLID, 1, darken(GetSysColor(COLOR_WINDOW), 0.7f));
|
rowPen = CreatePen(PS_SOLID, 1, darken(GetSysColor(COLOR_WINDOW), 0.7f));
|
||||||
rowSelectPen = CreatePen(PS_SOLID, 1, darken(GetSysColor(COLOR_HIGHLIGHT), 0.7f));
|
rowSelectPen = CreatePen(PS_SOLID, 1, darken(GetSysColor(COLOR_HIGHLIGHT), 0.7f));
|
||||||
|
|
||||||
|
lerpPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
|
||||||
|
cosinePen = CreatePen(PS_SOLID, 2, RGB(0, 255, 0));
|
||||||
|
rampPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
|
||||||
|
|
||||||
editBrush = CreateSolidBrush(RGB(255, 255, 0)); // yellow
|
editBrush = CreateSolidBrush(RGB(255, 255, 0)); // yellow
|
||||||
|
|
||||||
@ -214,8 +218,10 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
|
|||||||
for (int track = 0; track <= lastTrack; ++track, ++trackIter)
|
for (int track = 0; track <= lastTrack; ++track, ++trackIter)
|
||||||
{
|
{
|
||||||
assert(trackIter != syncData->tracks.end());
|
assert(trackIter != syncData->tracks.end());
|
||||||
|
size_t trackIndex = trackIter->second;
|
||||||
|
const sync::Track &t = *syncData->actualTracks[trackIndex];
|
||||||
|
|
||||||
if (track < firstTrack) continue;
|
if (track < firstTrack) continue;
|
||||||
|
|
||||||
for (int row = firstRow; row <= lastRow; ++row)
|
for (int row = firstRow; row <= lastRow; ++row)
|
||||||
{
|
{
|
||||||
RECT patternDataRect;
|
RECT patternDataRect;
|
||||||
@ -226,6 +232,15 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
|
|||||||
|
|
||||||
if (!RectVisible(hdc, &patternDataRect)) continue;
|
if (!RectVisible(hdc, &patternDataRect)) continue;
|
||||||
|
|
||||||
|
sync::Track::KeyFrame::InterpolationType interpolationType = sync::Track::KeyFrame::IT_STEP;
|
||||||
|
sync::Track::KeyFrameContainer::const_iterator upper = t.keyFrames.upper_bound(row);
|
||||||
|
sync::Track::KeyFrameContainer::const_iterator lower = upper;
|
||||||
|
if (lower != t.keyFrames.end())
|
||||||
|
{
|
||||||
|
lower--;
|
||||||
|
if (lower != t.keyFrames.end()) interpolationType = lower->second.interpolationType;
|
||||||
|
}
|
||||||
|
|
||||||
bool selected = (track >= selectLeft && track <= selectRight) && (row >= selectTop && row <= selectBottom);
|
bool selected = (track >= selectLeft && track <= selectRight) && (row >= selectTop && row <= selectBottom);
|
||||||
|
|
||||||
HBRUSH baseBrush = bgBaseBrush;
|
HBRUSH baseBrush = bgBaseBrush;
|
||||||
@ -250,6 +265,26 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
|
|||||||
LineTo(hdc, patternDataRect.right, patternDataRect.top);
|
LineTo(hdc, patternDataRect.right, patternDataRect.top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (interpolationType)
|
||||||
|
{
|
||||||
|
case sync::Track::KeyFrame::IT_LERP:
|
||||||
|
SelectObject(hdc, lerpPen);
|
||||||
|
break;
|
||||||
|
case sync::Track::KeyFrame::IT_COSINE:
|
||||||
|
SelectObject(hdc, cosinePen);
|
||||||
|
break;
|
||||||
|
case sync::Track::KeyFrame::IT_RAMP:
|
||||||
|
SelectObject(hdc, rampPen);
|
||||||
|
break;
|
||||||
|
case sync::Track::KeyFrame::IT_STEP:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (interpolationType != sync::Track::KeyFrame::IT_STEP)
|
||||||
|
{
|
||||||
|
MoveToEx(hdc, patternDataRect.right - 1, patternDataRect.top, (LPPOINT) NULL);
|
||||||
|
LineTo(hdc, patternDataRect.right - 1, patternDataRect.bottom);
|
||||||
|
}
|
||||||
|
|
||||||
bool drawEditString = false;
|
bool drawEditString = false;
|
||||||
if (row == editRow && track == editTrack)
|
if (row == editRow && track == editTrack)
|
||||||
{
|
{
|
||||||
@ -259,17 +294,14 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
|
|||||||
if (editString.size() > 0) drawEditString = true;
|
if (editString.size() > 0) drawEditString = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// InvertRect(hdc, &fillRect);
|
bool key = t.isKeyFrame(row);
|
||||||
|
|
||||||
const sync::Track &track = *syncData->actualTracks[trackIter->second];
|
|
||||||
bool key = track.isKeyFrame(row);
|
|
||||||
|
|
||||||
/* format the text */
|
/* format the text */
|
||||||
if (drawEditString) _sntprintf_s(temp, 256, editString.c_str());
|
if (drawEditString) _sntprintf_s(temp, 256, editString.c_str());
|
||||||
else if (!key) _sntprintf_s(temp, 256, _T(" ---"));
|
else if (!key) _sntprintf_s(temp, 256, _T(" ---"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float val = track.getKeyFrame(row)->value;
|
float val = t.getKeyFrame(row)->value;
|
||||||
_sntprintf_s(temp, 256, _T("% .2f"), val);
|
_sntprintf_s(temp, 256, _T("% .2f"), val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,7 +691,8 @@ void TrackView::editEnterValue()
|
|||||||
syncData->exec(cmd);
|
syncData->exec(cmd);
|
||||||
|
|
||||||
editString.clear();
|
editString.clear();
|
||||||
invalidatePos(editTrack, editRow);
|
// invalidatePos(editTrack, editRow);
|
||||||
|
InvalidateRect(getWin(), NULL, FALSE);
|
||||||
}
|
}
|
||||||
else MessageBeep(0);
|
else MessageBeep(0);
|
||||||
}
|
}
|
||||||
@ -679,7 +712,7 @@ void TrackView::editToggleInterpolationType()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sync::Track::KeyFrameContainer::const_iterator lower = lower;
|
sync::Track::KeyFrameContainer::const_iterator lower = upper;
|
||||||
lower--;
|
lower--;
|
||||||
// bounds check again
|
// bounds check again
|
||||||
if (lower == t.keyFrames.end())
|
if (lower == t.keyFrames.end())
|
||||||
@ -737,7 +770,8 @@ void TrackView::editDelete()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
syncData->exec(multiCmd);
|
syncData->exec(multiCmd);
|
||||||
invalidateRange(selectLeft, selectRight, selectTop, selectBottom);
|
InvalidateRect(getWin(), NULL, FALSE);
|
||||||
|
// invalidateRange(selectLeft, selectRight, selectTop, selectBottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -123,6 +123,7 @@ private:
|
|||||||
HBRUSH selectBaseBrush, selectDarkBrush;
|
HBRUSH selectBaseBrush, selectDarkBrush;
|
||||||
HPEN rowPen, rowSelectPen;
|
HPEN rowPen, rowSelectPen;
|
||||||
HBRUSH editBrush;
|
HBRUSH editBrush;
|
||||||
|
HPEN lerpPen, cosinePen, rampPen;
|
||||||
|
|
||||||
/* cursor position */
|
/* cursor position */
|
||||||
int editRow, editTrack;
|
int editRow, editTrack;
|
||||||
|
|||||||
@ -30,12 +30,12 @@ Track &PlayerDevice::getTrack(const std::string &trackName)
|
|||||||
{
|
{
|
||||||
sync::Data::TrackContainer::iterator iter = syncData.tracks.find(trackName);
|
sync::Data::TrackContainer::iterator iter = syncData.tracks.find(trackName);
|
||||||
if (iter != syncData.tracks.end()) return *syncData.actualTracks[iter->second];
|
if (iter != syncData.tracks.end()) return *syncData.actualTracks[iter->second];
|
||||||
|
|
||||||
sync::Track *track = new sync::Track();
|
sync::Track *track = new sync::Track();
|
||||||
|
|
||||||
// TODO: load data from file
|
// TODO: load data from file
|
||||||
track->setKeyFrame(0, 1.0f);
|
track->setKeyFrame(0, Track::KeyFrame(1.0f, Track::KeyFrame::IT_LERP));
|
||||||
track->setKeyFrame(10, 0.0f);
|
track->setKeyFrame(10, Track::KeyFrame(0.0f, Track::KeyFrame::IT_LERP));
|
||||||
|
|
||||||
size_t index = syncData.actualTracks.size();
|
size_t index = syncData.actualTracks.size();
|
||||||
syncData.actualTracks.push_back(track);
|
syncData.actualTracks.push_back(track);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user