parent
88c36967a5
commit
81146a8753
@ -1190,6 +1190,66 @@ static void onInterpolation()
|
|||||||
updateNeedsSaving();
|
updateNeedsSaving();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static void onInvertSelection()
|
||||||
|
{
|
||||||
|
int track, row, rowCount;
|
||||||
|
TrackViewInfo* viewInfo = getTrackViewInfo();
|
||||||
|
struct sync_track** tracks = getTracks();
|
||||||
|
const int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
|
||||||
|
const int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
|
||||||
|
const int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow);
|
||||||
|
const int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
|
||||||
|
|
||||||
|
if (selectLeft == selectRight && selectTop == selectBottom)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rowCount = (selectBottom - selectTop) + 1;
|
||||||
|
CopyEntry* entries = malloc(rowCount * sizeof(CopyEntry));
|
||||||
|
|
||||||
|
Commands_beginMulti("invertSelection");
|
||||||
|
|
||||||
|
for (track = selectLeft; track <= selectRight; ++track)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
memset(entries, 0, rowCount * sizeof(CopyEntry));
|
||||||
|
|
||||||
|
struct sync_track* t = tracks[track];
|
||||||
|
|
||||||
|
// Take a copy of the data and delete the keys
|
||||||
|
|
||||||
|
for (i = 0, row = selectTop; row <= selectBottom; ++row, ++i)
|
||||||
|
{
|
||||||
|
int idx = sync_find_key(t, row);
|
||||||
|
if (idx < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entries[i].track = 1; // just to mark that we should use it
|
||||||
|
entries[i].keyFrame = t->keys[idx];
|
||||||
|
|
||||||
|
Commands_deleteKey(track, row);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add back the keys but in inverted order
|
||||||
|
|
||||||
|
for (i = 0, row = selectBottom; row >= selectTop; --row, ++i)
|
||||||
|
{
|
||||||
|
CopyEntry* entry = &entries[i];
|
||||||
|
|
||||||
|
if (!entry->track)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entry->keyFrame.row = row;
|
||||||
|
Commands_addOrUpdateKey(track, &entry->keyFrame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(entries);
|
||||||
|
|
||||||
|
Commands_endMulti();
|
||||||
|
updateNeedsSaving();
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -1246,10 +1306,14 @@ static void onEnterCurrentValue()
|
|||||||
if (!tracks)
|
if (!tracks)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Commands_beginMulti("enterCurrentValues");
|
||||||
|
|
||||||
enterCurrentValue(tracks[activeTrack], activeTrack, rowPos);
|
enterCurrentValue(tracks[activeTrack], activeTrack, rowPos);
|
||||||
|
|
||||||
for (i = selectLeft; i < selectRight; ++i)
|
for (i = selectLeft; i < selectRight; ++i)
|
||||||
enterCurrentValue(tracks[i], i, rowPos);
|
enterCurrentValue(tracks[i], i, rowPos);
|
||||||
|
|
||||||
|
Commands_endMulti();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1615,6 +1679,7 @@ void Editor_menuEvent(int menuItem)
|
|||||||
case EDITOR_MENU_SCALE_001: scaleSelection(0.01f); break;
|
case EDITOR_MENU_SCALE_001: scaleSelection(0.01f); break;
|
||||||
|
|
||||||
case EDITOR_MENU_INTERPOLATION : onInterpolation(); break;
|
case EDITOR_MENU_INTERPOLATION : onInterpolation(); break;
|
||||||
|
case EDITOR_MENU_INVERT_SELECTION: onInvertSelection(); break;
|
||||||
case EDITOR_MENU_ENTER_CURRENT_V : onEnterCurrentValue(); break;
|
case EDITOR_MENU_ENTER_CURRENT_V : onEnterCurrentValue(); break;
|
||||||
|
|
||||||
// View
|
// View
|
||||||
|
|||||||
@ -56,6 +56,7 @@ MenuDescriptor g_editMenu[] =
|
|||||||
{ _T("Scale 0.01"), EDITOR_MENU_SCALE_001, 'h', 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(""), EDITOR_MENU_SEPARATOR, 0, 0, 0 },
|
||||||
{ _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 },
|
{ _T("Interpolation"), EDITOR_MENU_INTERPOLATION, 'i', 0, 0 },
|
||||||
|
{ _T("Invert Selection"), EDITOR_MENU_INVERT_SELECTION, 'i', EMGUI_KEY_COMMAND, EMGUI_KEY_CTRL },
|
||||||
{ _T("Insert current value"), EDITOR_MENU_ENTER_CURRENT_V,EMGUI_KEY_ENTER,0, 0 },
|
{ _T("Insert current value"), EDITOR_MENU_ENTER_CURRENT_V,EMGUI_KEY_ENTER,0, 0 },
|
||||||
{ 0 },
|
{ 0 },
|
||||||
};
|
};
|
||||||
|
|||||||
@ -64,6 +64,7 @@ enum
|
|||||||
EDITOR_MENU_SCALE_001,
|
EDITOR_MENU_SCALE_001,
|
||||||
|
|
||||||
EDITOR_MENU_INTERPOLATION,
|
EDITOR_MENU_INTERPOLATION,
|
||||||
|
EDITOR_MENU_INVERT_SELECTION,
|
||||||
EDITOR_MENU_ENTER_CURRENT_V,
|
EDITOR_MENU_ENTER_CURRENT_V,
|
||||||
|
|
||||||
// View
|
// View
|
||||||
|
|||||||
@ -542,6 +542,7 @@ LRESULT CALLBACK WndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam
|
|||||||
case EDITOR_MENU_SCALE_05:
|
case EDITOR_MENU_SCALE_05:
|
||||||
case EDITOR_MENU_SCALE_01:
|
case EDITOR_MENU_SCALE_01:
|
||||||
case EDITOR_MENU_INTERPOLATION:
|
case EDITOR_MENU_INTERPOLATION:
|
||||||
|
case EDITOR_MENU_INVERT_SELECTION:
|
||||||
case EDITOR_MENU_ENTER_CURRENT_V:
|
case EDITOR_MENU_ENTER_CURRENT_V:
|
||||||
case EDITOR_MENU_TAB:
|
case EDITOR_MENU_TAB:
|
||||||
case EDITOR_MENU_PLAY:
|
case EDITOR_MENU_PLAY:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user