From 983fb703f430eeb41eabefd0dcf026c65c8b1424 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Thu, 13 Dec 2007 19:33:47 +0000 Subject: [PATCH] adding sync-data --- syncdata.h | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ synctracker2.cpp | 13 ++++++++++ synctracker2.vcproj | 4 +++ trackview.cpp | 6 +++-- trackview.h | 2 ++ 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 syncdata.h diff --git a/syncdata.h b/syncdata.h new file mode 100644 index 0000000..ab84a68 --- /dev/null +++ b/syncdata.h @@ -0,0 +1,75 @@ +#pragma once + +#include +#include +#include +#include +#include + +class SyncTrack +{ +public: + struct KeyFrame + { + KeyFrame() : lerp(false) {} + KeyFrame(float value) : value(value), lerp(false) {} + float value; + bool lerp; + }; + + float getValue(float time) + { + if (keyFrames.size() == 0) return 0.0f; + + int currRow = int(floor(time)); + + // find bounding keyframes + keyFrameContainer::const_iterator upper = keyFrames.upper_bound(currRow); + keyFrameContainer::const_iterator lower = upper; + lower--; + + // bounds check + if (lower == keyFrames.end()) return upper->second.value; + if (upper == keyFrames.end()) return lower->second.value; + + // lerp, bitch + float d = (time - lower->first) / (upper->first - lower->first); + return lower->second.value + (upper->second.value - lower->second.value) * d; + }; + + bool isKeyFrame(int row) + { + return keyFrames.find(row) != keyFrames.end(); + } + + KeyFrame &getKeyFrame(int row) + { + return keyFrames[row]; + } + + void setKeyFrame(int row, const KeyFrame &keyFrame) + { + keyFrames[row] = keyFrame; + } + +private: + typedef std::map keyFrameContainer; + keyFrameContainer keyFrames; +}; + +class SyncData +{ +public: + SyncTrack &getTrack(std::string name) + { + TrackContainer::iterator iter = tracks.find(name); + if (iter != tracks.end()) return iter->second; + return tracks[name] = SyncTrack(); + } + + size_t getTrackCount() { return tracks.size(); } + +private: + typedef std::map TrackContainer; + TrackContainer tracks; +}; diff --git a/synctracker2.cpp b/synctracker2.cpp index 6596c35..8d59f4f 100644 --- a/synctracker2.cpp +++ b/synctracker2.cpp @@ -61,6 +61,19 @@ int _tmain(int argc, _TCHAR* argv[]) MSG Msg; HINSTANCE hInstance = GetModuleHandle(NULL); + SyncData syncData; + SyncTrack &testTrack = syncData.getTrack("test"); + +// testTrack.setKeyFrame(0, SyncTrack::KeyFrame(1.0f)); + testTrack.setKeyFrame(1, SyncTrack::KeyFrame(2.0f)); + testTrack.setKeyFrame(4, SyncTrack::KeyFrame(3.0f)); + + for (int i = 0; i < 5 * 2; ++i) + { + float time = float(i) / 2; + printf("%f %d - %f\n", time, testTrack.isKeyFrame(i), testTrack.getValue(time)); + } + ATOM mainClass = registerMainWindowClass(hInstance); ATOM trackViewClass = registerTrackViewWindowClass(hInstance); if(!mainClass || ! trackViewClass) diff --git a/synctracker2.vcproj b/synctracker2.vcproj index a1c4bc8..77d472e 100644 --- a/synctracker2.vcproj +++ b/synctracker2.vcproj @@ -200,6 +200,10 @@ > + + diff --git a/trackview.cpp b/trackview.cpp index 759eea2..462b992 100644 --- a/trackview.cpp +++ b/trackview.cpp @@ -2,7 +2,7 @@ #include "trackview.h" -const TCHAR *trackViewWindowClassName = _T("TrackView"); +static const TCHAR *trackViewWindowClassName = _T("TrackView"); static const int topMarginHeight = 20; static const int leftMarginWidth = 60; @@ -55,6 +55,8 @@ void TrackView::onPaint() PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); + SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); +// SelectObject(hdc, GetStockObject(SYSTEM_FONT)); paintTracks(hdc, ps.rcPaint); EndPaint(hwnd, &ps); @@ -199,7 +201,7 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks) float val = (float(line) / 16); /* format the text */ - if (!key) _sntprintf_s(temp, 256, _T(" - - -")); + if (!key) _sntprintf_s(temp, 256, _T("---")); else _sntprintf_s(temp, 256, _T("%2.2f"), val); TextOut(hdc, patternDataRect.left, patternDataRect.top, diff --git a/trackview.h b/trackview.h index 6580556..2032713 100644 --- a/trackview.h +++ b/trackview.h @@ -1,5 +1,7 @@ #pragma once +#include "syncdata.h" + class TrackView { public: