Implemented support for scaling keys

Closes #100
This commit is contained in:
Daniel Collin 2014-09-14 12:03:43 +02:00
parent 6369277bcf
commit bf1ed68113
4 changed files with 58 additions and 4 deletions

View File

@ -606,7 +606,15 @@ static void deleteArea(int rowPos, int track, int bufferWidth, int bufferHeight)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void biasSelection(float value)
typedef enum BiasOperation
{
BiasOperation_Bias,
BiasOperation_Scale,
} BiasOperation;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void scaleOrBiasSelection(float value, BiasOperation biasOp)
{
int track, row;
struct sync_track** tracks = getTracks();
@ -637,8 +645,11 @@ static void biasSelection(float value)
selectTop = selectBottom = track->keys[emaxi(idx - 1, 0)].row;
}
}
Commands_beginMulti("biasSelection");
if (biasOp == BiasOperation_Bias)
Commands_beginMulti("biasSelection");
else
Commands_beginMulti("scaleSelection");
for (track = selectLeft; track <= selectRight; ++track)
{
@ -652,7 +663,11 @@ static void biasSelection(float value)
continue;
newKey = t->keys[idx];
newKey.value += value;
if (biasOp == BiasOperation_Bias)
newKey.value += value;
else
newKey.value *= value;
Commands_updateKey(track, &newKey);
}
@ -664,6 +679,20 @@ static void biasSelection(float value)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void biasSelection(float value)
{
scaleOrBiasSelection(value, BiasOperation_Bias);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void scaleSelection(float value)
{
scaleOrBiasSelection(value, BiasOperation_Scale);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static char s_editBuffer[512];
static bool is_editing = false;
@ -1489,6 +1518,12 @@ void Editor_menuEvent(int menuItem)
case EDITOR_MENU_BIAS_N_10: biasSelection(-10.0f); break;
case EDITOR_MENU_BIAS_N_100 : biasSelection(-100.0f); break;
case EDITOR_MENU_BIAS_N_1000: biasSelection(-1000.0f); break;
case EDITOR_MENU_SCALE_001 : scaleSelection(0.01f); break;
case EDITOR_MENU_SCALE_01 : scaleSelection(0.1f); break;
case EDITOR_MENU_SCALE_1: scaleSelection(1.0f); break;
case EDITOR_MENU_SCALE_10: scaleSelection(10.0f); break;
case EDITOR_MENU_SCALE_100: scaleSelection(100.0f); break;
case EDITOR_MENU_SCALE_1000: scaleSelection(1000.0f); break;
case EDITOR_MENU_INTERPOLATION : onInterpolation(); break;
case EDITOR_MENU_ENTER_CURRENT_V : onEnterCurrentValue(); break;

View File

@ -42,6 +42,13 @@ 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 0.01"), EDITOR_MENU_SCALE_001, 'q', EMGUI_KEY_COMMAND, EMGUI_KEY_SHIFT },
{ _T("Scale 0.1"), EDITOR_MENU_SCALE_01, 'w', 0, EMGUI_KEY_SHIFT },
{ _T("Scale 1.0"), EDITOR_MENU_SCALE_1, 'e', 0, EMGUI_KEY_SHIFT },
{ _T("Scale 10.0"), EDITOR_MENU_SCALE_10, '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(""), 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 },
{ 0 },

View File

@ -49,6 +49,12 @@ enum
EDITOR_MENU_BIAS_N_10,
EDITOR_MENU_BIAS_N_100,
EDITOR_MENU_BIAS_N_1000,
EDITOR_MENU_SCALE_001,
EDITOR_MENU_SCALE_01,
EDITOR_MENU_SCALE_1,
EDITOR_MENU_SCALE_10,
EDITOR_MENU_SCALE_100,
EDITOR_MENU_SCALE_1000,
EDITOR_MENU_INTERPOLATION,
EDITOR_MENU_ENTER_CURRENT_V,

View File

@ -530,6 +530,12 @@ LRESULT CALLBACK WndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam
case EDITOR_MENU_BIAS_N_10:
case EDITOR_MENU_BIAS_N_100:
case EDITOR_MENU_BIAS_N_1000:
case EDITOR_MENU_SCALE_001:
case EDITOR_MENU_SCALE_01:
case EDITOR_MENU_SCALE_1:
case EDITOR_MENU_SCALE_10:
case EDITOR_MENU_SCALE_100:
case EDITOR_MENU_SCALE_1000:
case EDITOR_MENU_INTERPOLATION:
case EDITOR_MENU_ENTER_CURRENT_V:
case EDITOR_MENU_TAB: