Made it possible to do selection of rows and tracks (shift + arrow keys)
This commit is contained in:
parent
4015d13f40
commit
ca73e5748a
@ -8,6 +8,7 @@
|
|||||||
#include "LoadSave.h"
|
#include "LoadSave.h"
|
||||||
#include "TrackView.h"
|
#include "TrackView.h"
|
||||||
#include "rlog.h"
|
#include "rlog.h"
|
||||||
|
#include "minmax.h"
|
||||||
#include "TrackData.h"
|
#include "TrackData.h"
|
||||||
#include "RemoteConnection.h"
|
#include "RemoteConnection.h"
|
||||||
#include "MinecraftiaFont.h"
|
#include "MinecraftiaFont.h"
|
||||||
@ -149,10 +150,11 @@ static bool is_editing = false;
|
|||||||
bool Editor_keyDown(int key, int modifiers)
|
bool Editor_keyDown(int key, int modifiers)
|
||||||
{
|
{
|
||||||
bool handled_key = true;
|
bool handled_key = true;
|
||||||
|
TrackViewInfo* viewInfo = &s_editorData.trackViewInfo;
|
||||||
bool paused = RemoteConnection_isPaused();
|
bool paused = RemoteConnection_isPaused();
|
||||||
struct sync_track** tracks = getTracks();
|
struct sync_track** tracks = getTracks();
|
||||||
int active_track = getActiveTrack();
|
int active_track = getActiveTrack();
|
||||||
int row_pos = s_editorData.trackViewInfo.rowPos;
|
int row_pos = viewInfo->rowPos;
|
||||||
|
|
||||||
if (key == ' ')
|
if (key == ' ')
|
||||||
{
|
{
|
||||||
@ -174,7 +176,16 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
int row = row_pos;
|
int row = row_pos;
|
||||||
|
|
||||||
row += modifiers & EDITOR_KEY_ALT ? 8 : 1;
|
row += modifiers & EDITOR_KEY_ALT ? 8 : 1;
|
||||||
s_editorData.trackViewInfo.rowPos = row;
|
viewInfo->rowPos = row;
|
||||||
|
|
||||||
|
if (modifiers & EDITOR_KEY_SHIFT)
|
||||||
|
{
|
||||||
|
viewInfo->selectStopRow = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
||||||
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = active_track;
|
||||||
|
|
||||||
RemoteConnection_sendSetRowCommand(row);
|
RemoteConnection_sendSetRowCommand(row);
|
||||||
|
|
||||||
@ -190,7 +201,16 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
if ((modifiers & EDITOR_KEY_COMMAND) || row < 0)
|
if ((modifiers & EDITOR_KEY_COMMAND) || row < 0)
|
||||||
row = 0;
|
row = 0;
|
||||||
|
|
||||||
s_editorData.trackViewInfo.rowPos = row;
|
viewInfo->rowPos = row;
|
||||||
|
|
||||||
|
if (modifiers & EDITOR_KEY_SHIFT)
|
||||||
|
{
|
||||||
|
viewInfo->selectStopRow = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row;
|
||||||
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = active_track;
|
||||||
|
|
||||||
RemoteConnection_sendSetRowCommand(row);
|
RemoteConnection_sendSetRowCommand(row);
|
||||||
handled_key = true;
|
handled_key = true;
|
||||||
@ -207,6 +227,15 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
|
|
||||||
setActiveTrack(track < 0 ? 0 : track);
|
setActiveTrack(track < 0 ? 0 : track);
|
||||||
|
|
||||||
|
if (modifiers & EDITOR_KEY_SHIFT)
|
||||||
|
{
|
||||||
|
viewInfo->selectStopTrack = track;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row_pos;
|
||||||
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
|
||||||
|
|
||||||
handled_key = true;
|
handled_key = true;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -225,6 +254,15 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
|
|
||||||
setActiveTrack(track);
|
setActiveTrack(track);
|
||||||
|
|
||||||
|
if (modifiers & EDITOR_KEY_SHIFT)
|
||||||
|
{
|
||||||
|
viewInfo->selectStopTrack = track;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
viewInfo->selectStartRow = viewInfo->selectStopRow = row_pos;
|
||||||
|
viewInfo->selectStartTrack = viewInfo->selectStopTrack = track;
|
||||||
|
|
||||||
handled_key = true;
|
handled_key = true;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -238,7 +276,7 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
if ((key >= '1' && key <= '9') && ((modifiers & EDITOR_KEY_CTRL) || (modifiers & EDITOR_KEY_ALT)))
|
if ((key >= '1' && key <= '9') && ((modifiers & EDITOR_KEY_CTRL) || (modifiers & EDITOR_KEY_ALT)))
|
||||||
{
|
{
|
||||||
struct sync_track* track = tracks[active_track];
|
struct sync_track* track = tracks[active_track];
|
||||||
int row = s_editorData.trackViewInfo.rowPos;
|
int row = viewInfo->rowPos;
|
||||||
|
|
||||||
float bias_value = 0.0f;
|
float bias_value = 0.0f;
|
||||||
|
|
||||||
@ -310,7 +348,7 @@ bool Editor_keyDown(int key, int modifiers)
|
|||||||
if (key == 'i')
|
if (key == 'i')
|
||||||
{
|
{
|
||||||
struct sync_track* track = tracks[active_track];
|
struct sync_track* track = tracks[active_track];
|
||||||
int row = s_editorData.trackViewInfo.rowPos;
|
int row = viewInfo->rowPos;
|
||||||
|
|
||||||
int idx = key_idx_floor(track, row);
|
int idx = key_idx_floor(track, row);
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "TrackData.h"
|
#include "TrackData.h"
|
||||||
#include "rlog.h"
|
#include "rlog.h"
|
||||||
|
#include "minmax.h"
|
||||||
#include "../../sync/sync.h"
|
#include "../../sync/sync.h"
|
||||||
#include "../../sync/data.h"
|
#include "../../sync/data.h"
|
||||||
#include "../../sync/track.h"
|
#include "../../sync/track.h"
|
||||||
@ -52,7 +53,8 @@ static void printRowNumbers(int x, int y, int rowCount, int rowOffset, int rowSp
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track,
|
static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track,
|
||||||
int startX, int startY, int startPos, int endPos, int endSizeY)
|
int startX, int startY, int startPos, int endPos, int endSizeY,
|
||||||
|
int trackId, int selectLeft, int selectRight, int selectTop, int selectBottom)
|
||||||
{
|
{
|
||||||
uint y;
|
uint y;
|
||||||
int size = min_track_size;
|
int size = min_track_size;
|
||||||
@ -63,11 +65,8 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
|
|||||||
int x_adjust = 0;
|
int x_adjust = 0;
|
||||||
|
|
||||||
Emgui_setFont(viewInfo->smallFontId);
|
Emgui_setFont(viewInfo->smallFontId);
|
||||||
|
|
||||||
text_size = Emgui_getTextSize(track->name) + 4;
|
text_size = Emgui_getTextSize(track->name) + 4;
|
||||||
|
|
||||||
rlog(R_INFO, "t %s size %d\n", track->name, text_size);
|
|
||||||
|
|
||||||
// if text is smaller than min size we center the text
|
// if text is smaller than min size we center the text
|
||||||
|
|
||||||
if (text_size < min_track_size)
|
if (text_size < min_track_size)
|
||||||
@ -75,8 +74,6 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
|
|||||||
else
|
else
|
||||||
size = text_size + 1;
|
size = text_size + 1;
|
||||||
|
|
||||||
rlog(R_INFO, "t %s size %d adjust %d\n", track->name, text_size, x_adjust);
|
|
||||||
|
|
||||||
Emgui_drawText(track->name, (startX + 3) + x_adjust, startY - 12, Emgui_color32(0xff, 0xff, 0xff, 0xff));
|
Emgui_drawText(track->name, (startX + 3) + x_adjust, startY - 12, Emgui_color32(0xff, 0xff, 0xff, 0xff));
|
||||||
Emgui_setDefaultFont();
|
Emgui_setDefaultFont();
|
||||||
}
|
}
|
||||||
@ -135,16 +132,15 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint32_t color = 0;
|
uint32_t color = (y & 7) ? Emgui_color32(0x4f, 0x4f, 0x4f, 0xff) : Emgui_color32(0x7f, 0x7f, 0x7f, 0xff);
|
||||||
|
|
||||||
if (y & 7)
|
|
||||||
color = Emgui_color32(0x4f, 0x4f, 0x4f, 0xff);
|
|
||||||
else
|
|
||||||
color = Emgui_color32(0x7f, 0x7f, 0x7f, 0xff);
|
|
||||||
|
|
||||||
Emgui_drawText("---", offset, y_offset - font_size / 2, color);
|
Emgui_drawText("---", offset, y_offset - font_size / 2, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool selected = (trackId >= selectLeft && trackId <= selectRight) && (y >= selectTop && y < selectBottom);
|
||||||
|
|
||||||
|
if (selected)
|
||||||
|
Emgui_fill(Emgui_color32(0x4f, 0x4f, 0x4f, 0x3f), startX, y_offset - font_size/2, size, font_size);
|
||||||
|
|
||||||
y_offset += font_size;
|
y_offset += font_size;
|
||||||
|
|
||||||
if (y_offset > (endSizeY + font_size/2))
|
if (y_offset > (endSizeY + font_size/2))
|
||||||
@ -156,27 +152,6 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
int doMax(int a, int b)
|
|
||||||
{
|
|
||||||
if (b >= a)
|
|
||||||
return b;
|
|
||||||
else
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
static inline int min(int a, int b)
|
|
||||||
{
|
|
||||||
if (a < b)
|
|
||||||
return a;
|
|
||||||
else
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// foo
|
|
||||||
|
|
||||||
void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
|
void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
|
||||||
{
|
{
|
||||||
uint i = 0;
|
uint i = 0;
|
||||||
@ -198,12 +173,20 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
|
|||||||
|
|
||||||
if (syncData->num_tracks == 0)
|
if (syncData->num_tracks == 0)
|
||||||
{
|
{
|
||||||
renderChannel(0, 0, 40 + (i * 64), adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border);
|
renderChannel(0, 0, 40 + (i * 64), adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border,
|
||||||
|
0, 0, 0, 0, 0);
|
||||||
uint32_t color = Emgui_color32(127, 127, 127, 56);
|
uint32_t color = Emgui_color32(127, 127, 127, 56);
|
||||||
Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 2);
|
Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
|
||||||
|
int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
|
||||||
|
int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow);
|
||||||
|
int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
|
||||||
|
|
||||||
|
rlog(R_INFO, "%d %d %d %d\n", selectLeft, selectRight, selectTop, selectBottom);
|
||||||
|
|
||||||
int num_tracks = syncData->num_tracks;
|
int num_tracks = syncData->num_tracks;
|
||||||
|
|
||||||
int max_render_tracks = viewInfo->windowSizeX / min_track_size;
|
int max_render_tracks = viewInfo->windowSizeX / min_track_size;
|
||||||
@ -218,11 +201,12 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
|
|||||||
|
|
||||||
int x_pos = 40;
|
int x_pos = 40;
|
||||||
|
|
||||||
const int end_track = min(start_track + num_tracks, syncData->num_tracks);
|
const int end_track = mini(start_track + num_tracks, syncData->num_tracks);
|
||||||
|
|
||||||
for (i = start_track; i < end_track; ++i)
|
for (i = start_track; i < end_track; ++i)
|
||||||
{
|
{
|
||||||
int size = renderChannel(viewInfo, syncData->tracks[i], x_pos, adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border);
|
int size = renderChannel(viewInfo, syncData->tracks[i], x_pos, adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border,
|
||||||
|
i, selectLeft, selectRight, selectTop, selectBottom);
|
||||||
|
|
||||||
if (sel_track == i)
|
if (sel_track == i)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,6 +12,10 @@ typedef struct TrackViewInfo
|
|||||||
int windowSizeY;
|
int windowSizeY;
|
||||||
int rowPos;
|
int rowPos;
|
||||||
int smallFontId;
|
int smallFontId;
|
||||||
|
int selectStartTrack;
|
||||||
|
int selectStopTrack;
|
||||||
|
int selectStartRow;
|
||||||
|
int selectStopRow;
|
||||||
|
|
||||||
} TrackViewInfo;
|
} TrackViewInfo;
|
||||||
|
|
||||||
|
|||||||
22
ogl_editor/src/minmax.h
Normal file
22
ogl_editor/src/minmax.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static inline int maxi(int a, int b)
|
||||||
|
{
|
||||||
|
if (a > b)
|
||||||
|
return a;
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static inline int mini(int a, int b)
|
||||||
|
{
|
||||||
|
if (a < b)
|
||||||
|
return a;
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user