From 88c36967a53c47afd21c29dc97f2a3a6950e53e4 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Tue, 16 Sep 2014 18:00:36 +0200 Subject: [PATCH] Implemented scroll view Closes #104 --- ogl_editor/src/Editor.c | 20 ++++++++++++++++++-- ogl_editor/src/Menu.c | 31 ++++++++++++++++--------------- ogl_editor/src/Menu.h | 4 ++-- ogl_editor/src/TrackView.c | 7 +++++++ ogl_editor/src/TrackView.h | 5 +++++ ogl_editor/src/windows/RocketWindow.c | 4 ++-- 6 files changed, 50 insertions(+), 21 deletions(-) diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 0a51013..af8b560 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -1437,6 +1437,22 @@ static void onPrevNextKey(bool prevKey, enum Selection selection) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void onScrollView(enum ArrowDirection direction) +{ + TrackViewInfo* viewInfo = getTrackViewInfo(); + Track* t = &getTrackData()->tracks[getActiveTrack()]; + int trackSize = Track_getSize(viewInfo, t); + + if (direction == ARROW_RIGHT) + s_editorData.trackViewInfo.startPixel += trackSize; + else + s_editorData.trackViewInfo.startPixel -= trackSize; + + Editor_updateTrackScroll(); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static void onFoldTrack(bool fold) { Track* t = &getTrackData()->tracks[getActiveTrack()]; @@ -1611,8 +1627,8 @@ void Editor_menuEvent(int menuItem) case EDITOR_MENU_ROWS_2X_DOWN : onRowStep(highlightRowStep * 2 , NO_SELECTION); break; case EDITOR_MENU_PREV_BOOKMARK : onBookmarkDir(ARROW_UP, NO_SELECTION); break; case EDITOR_MENU_NEXT_BOOKMARK : onBookmarkDir(ARROW_DOWN, NO_SELECTION); break; - case EDITOR_MENU_FIRST_TRACK : onTrackSide(ARROW_LEFT, true, NO_SELECTION); break; - case EDITOR_MENU_LAST_TRACK : onTrackSide(ARROW_RIGHT, true, NO_SELECTION); break; + case EDITOR_MENU_SCROLL_LEFT : onScrollView(ARROW_LEFT); break; + case EDITOR_MENU_SCROLL_RIGHT : onScrollView(ARROW_RIGHT); break; case EDITOR_MENU_PREV_KEY : onPrevNextKey(true, NO_SELECTION); break; case EDITOR_MENU_NEXT_KEY : onPrevNextKey(false, NO_SELECTION); break; case EDITOR_MENU_FOLD_TRACK : onFoldTrack(true); break; diff --git a/ogl_editor/src/Menu.c b/ogl_editor/src/Menu.c index 0b0c333..af9db86 100644 --- a/ogl_editor/src/Menu.c +++ b/ogl_editor/src/Menu.c @@ -42,18 +42,18 @@ MenuDescriptor g_editMenu[] = { _T("Bias -10.0"), EDITOR_MENU_BIAS_N_100, 'g', 0, 0 }, { _T("Bias -100.0"), EDITOR_MENU_BIAS_N_1000, 'h', 0, 0 }, { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, - { _T("Scale 1.01"), EDITOR_MENU_SCALE_101, 'q', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 1.1"), EDITOR_MENU_SCALE_11, 'w', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 1.2"), EDITOR_MENU_SCALE_12, 'e', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 5.0"), EDITOR_MENU_SCALE_5, 'r', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 10.0"), EDITOR_MENU_SCALE_100, 't', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 100.0"), EDITOR_MENU_SCALE_1000, 'y', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.99"), EDITOR_MENU_SCALE_099, 'a', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.9"), EDITOR_MENU_SCALE_09, 's', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.8"), EDITOR_MENU_SCALE_08, 'd', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.5"), EDITOR_MENU_SCALE_05, 'f', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.1"), EDITOR_MENU_SCALE_01, 'g', 0, EMGUI_KEY_SHIFT }, - { _T("Scale 0.01"), EDITOR_MENU_SCALE_001, 'h', 0, EMGUI_KEY_SHIFT }, + { _T("Scale 1.01"), EDITOR_MENU_SCALE_101, 'q', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 1.1"), EDITOR_MENU_SCALE_11, 'w', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 1.2"), EDITOR_MENU_SCALE_12, 'e', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 5.0"), EDITOR_MENU_SCALE_5, 'r', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 10.0"), EDITOR_MENU_SCALE_100, 't', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 100.0"), EDITOR_MENU_SCALE_1000, 'y', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.99"), EDITOR_MENU_SCALE_099, 'a', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.9"), EDITOR_MENU_SCALE_09, 's', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.8"), EDITOR_MENU_SCALE_08, 'd', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.5"), EDITOR_MENU_SCALE_05, 'f', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.1"), EDITOR_MENU_SCALE_01, 'g', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, + { _T("Scale 0.01"), EDITOR_MENU_SCALE_001, 'h', EMGUI_KEY_SHIFT, EMGUI_KEY_SHIFT }, { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, { _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 }, { _T("Insert current value"), EDITOR_MENU_ENTER_CURRENT_V,EMGUI_KEY_ENTER,0, 0 }, @@ -65,7 +65,7 @@ MenuDescriptor g_editMenu[] = MenuDescriptor g_viewMenu[] = { { _T("Start/Stop Playback"), EDITOR_MENU_PLAY, EMGUI_KEY_SPACE, 0, 0 }, - { _T("Start Loop Playback"), EDITOR_MENU_PLAY_LOOP, EMGUI_KEY_SPACE, 0, EMGUI_KEY_CTRL }, + { _T("Start Loop Playback"), EDITOR_MENU_PLAY_LOOP, EMGUI_KEY_SPACE, EMGUI_KEY_CTRL, EMGUI_KEY_CTRL }, { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, { _T("Jump 8 rows up"), EDITOR_MENU_ROWS_UP, EMGUI_KEY_ARROW_UP, EMGUI_KEY_ALT, EMGUI_KEY_ALT }, { _T("Jump 8 rows down"), EDITOR_MENU_ROWS_DOWN, EMGUI_KEY_ARROW_DOWN, EMGUI_KEY_ALT, EMGUI_KEY_ALT }, @@ -73,11 +73,12 @@ MenuDescriptor g_viewMenu[] = { _T("Jump 16 rows down"), EDITOR_MENU_ROWS_2X_DOWN, EMGUI_KEY_PAGE_DOWN, 0, 0 }, { _T("Jump to previous bookmark"), EDITOR_MENU_PREV_BOOKMARK, EMGUI_KEY_ARROW_UP, EMGUI_KEY_COMMAND, EMGUI_KEY_ALT | EMGUI_KEY_CTRL }, { _T("Jump to next bookmark"), EDITOR_MENU_NEXT_BOOKMARK, EMGUI_KEY_ARROW_DOWN, EMGUI_KEY_COMMAND, EMGUI_KEY_ALT | EMGUI_KEY_CTRL }, - { _T("Jump to first track"), EDITOR_MENU_FIRST_TRACK, EMGUI_KEY_ARROW_LEFT, EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL }, - { _T("Jump to last track"), EDITOR_MENU_LAST_TRACK, EMGUI_KEY_ARROW_RIGHT, EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL }, { _T("Jump to previous key"), EDITOR_MENU_PREV_KEY, EMGUI_KEY_ARROW_UP, EMGUI_KEY_CTRL, EMGUI_KEY_CTRL }, { _T("Jump to next key"), EDITOR_MENU_NEXT_KEY, EMGUI_KEY_ARROW_DOWN, EMGUI_KEY_CTRL, EMGUI_KEY_CTRL }, { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, + { _T("Scroll view Right"), EDITOR_MENU_SCROLL_RIGHT, EMGUI_KEY_ARROW_RIGHT, EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL }, + { _T("Scroll view Left"), EDITOR_MENU_SCROLL_LEFT, EMGUI_KEY_ARROW_LEFT, EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL }, + { _T(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 }, { _T("Fold track"), EDITOR_MENU_FOLD_TRACK, EMGUI_KEY_ARROW_LEFT, EMGUI_KEY_ALT, EMGUI_KEY_ALT }, { _T("Unfold track"), EDITOR_MENU_UNFOLD_TRACK, EMGUI_KEY_ARROW_RIGHT, EMGUI_KEY_ALT, EMGUI_KEY_ALT }, { _T("Fold group"), EDITOR_MENU_FOLD_GROUP, EMGUI_KEY_ARROW_LEFT, EMGUI_KEY_ALT | EMGUI_KEY_CTRL, EMGUI_KEY_ALT | EMGUI_KEY_CTRL }, diff --git a/ogl_editor/src/Menu.h b/ogl_editor/src/Menu.h index d3cafee..638745c 100644 --- a/ogl_editor/src/Menu.h +++ b/ogl_editor/src/Menu.h @@ -74,14 +74,14 @@ enum EDITOR_MENU_ROW_DOWN, EDITOR_MENU_TRACK_LEFT, EDITOR_MENU_TRACK_RIGHT, + EDITOR_MENU_SCROLL_LEFT, + EDITOR_MENU_SCROLL_RIGHT, EDITOR_MENU_ROWS_DOWN, EDITOR_MENU_ROWS_UP, EDITOR_MENU_ROWS_2X_DOWN, EDITOR_MENU_ROWS_2X_UP, EDITOR_MENU_PREV_BOOKMARK, EDITOR_MENU_NEXT_BOOKMARK, - EDITOR_MENU_FIRST_TRACK, - EDITOR_MENU_LAST_TRACK, EDITOR_MENU_PREV_KEY, EDITOR_MENU_NEXT_KEY, EDITOR_MENU_FOLD_TRACK, diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index 1385eeb..cb7bd42 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -321,6 +321,13 @@ static int getTrackSize(TrackViewInfo* viewInfo, Track* track) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int Track_getSize(TrackViewInfo* viewInfo, Track* track) +{ + return getTrackSize(viewInfo, track); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + int getGroupSize(TrackViewInfo* viewInfo, Group* group, int startTrack) { int i, size = 0, count = group->trackCount; diff --git a/ogl_editor/src/TrackView.h b/ogl_editor/src/TrackView.h index de003f1..ab331f8 100644 --- a/ogl_editor/src/TrackView.h +++ b/ogl_editor/src/TrackView.h @@ -6,6 +6,7 @@ struct TrackData; struct TrackViewInfo; +struct Track; typedef struct TrackViewInfo { @@ -28,6 +29,10 @@ typedef struct TrackViewInfo /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int Track_getSize(TrackViewInfo* viewInfo, struct Track* track); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + void TrackView_init(); bool TrackView_render(TrackViewInfo* viewInfo, struct TrackData* trackData); int TrackView_getWidth(TrackViewInfo* viewInfo, struct TrackData* trackData); diff --git a/ogl_editor/src/windows/RocketWindow.c b/ogl_editor/src/windows/RocketWindow.c index a74c135..866c595 100644 --- a/ogl_editor/src/windows/RocketWindow.c +++ b/ogl_editor/src/windows/RocketWindow.c @@ -552,8 +552,8 @@ LRESULT CALLBACK WndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam case EDITOR_MENU_ROWS_2X_DOWN: case EDITOR_MENU_PREV_BOOKMARK: case EDITOR_MENU_NEXT_BOOKMARK: - case EDITOR_MENU_FIRST_TRACK: - case EDITOR_MENU_LAST_TRACK: + case EDITOR_MENU_SCROLL_LEFT: + case EDITOR_MENU_SCROLL_RIGHT: case EDITOR_MENU_PREV_KEY: case EDITOR_MENU_NEXT_KEY: case EDITOR_MENU_FOLD_TRACK: