Input Mapping support for Gamepad buttons

Cleanup UI defines.
This commit is contained in:
Bruno Herbelin
2022-02-06 23:37:11 +01:00
parent ab040f5268
commit 886305ec13
5 changed files with 193 additions and 79 deletions

View File

@@ -48,7 +48,9 @@
#define CONTROL_OSC_MSG "OSC: "
bool Control::input_active[INPUT_MAX]{};
bool Control::input_active[INPUT_MAX]{};
float Control::input_values[INPUT_MAX]{};
std::condition_variable Control::joystick_end_;
void Control::RequestListener::ProcessMessage( const osc::ReceivedMessage& m,
@@ -352,6 +354,12 @@ bool Control::init()
glfwSetKeyCallback( main, Control::keyboardCalback);
glfwSetKeyCallback( output, Control::keyboardCalback);
//
// set joystick callback
//
std::thread(Control::joystickCallback).detach();
//
// load OSC Translator
//
@@ -395,6 +403,8 @@ void Control::listen()
void Control::terminate()
{
Control::joystick_end_.notify_all();
if ( receiver_ != nullptr ) {
// request termination of receiver
@@ -411,6 +421,7 @@ void Control::terminate()
delete receiver_;
receiver_ = nullptr;
}
}
@@ -777,10 +788,14 @@ void Control::keyboardCalback(GLFWwindow* window, int key, int, int action, int
{
if (UserInterface::manager().keyboardAvailable() && !mods )
{
if (key >= GLFW_KEY_A && key <= GLFW_KEY_Z)
if (key >= GLFW_KEY_A && key <= GLFW_KEY_Z) {
Control::input_active[INPUT_KEYBOARD_FIRST + key - GLFW_KEY_A] = action > GLFW_RELEASE;
else if (key >= GLFW_KEY_KP_0 && key <= GLFW_KEY_KP_EQUAL)
Control::input_values[INPUT_KEYBOARD_FIRST + key - GLFW_KEY_A] = action > GLFW_RELEASE ? 1.f : 0.f;
}
else if (key >= GLFW_KEY_KP_0 && key <= GLFW_KEY_KP_EQUAL) {
Control::input_active[INPUT_NUMPAD_FIRST + key - GLFW_KEY_KP_0] = action > GLFW_RELEASE;
Control::input_values[INPUT_NUMPAD_FIRST + key - GLFW_KEY_KP_0] = action > GLFW_RELEASE ? 1.f : 0.f;
}
else if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS )
{
static GLFWwindow *output = Rendering::manager().outputWindow().window();
@@ -790,31 +805,41 @@ void Control::keyboardCalback(GLFWwindow* window, int key, int, int action, int
}
}
void Control::joystickCallback()
{
// wait for the joystick_end_ notification
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
while ( Control::joystick_end_.wait_for(lck,std::chrono::milliseconds(20) ) == std::cv_status::timeout ) {
// read joystick buttons
int num_buttons = 0;
const unsigned char *state_buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &num_buttons );
// map to Control input array
for (int b = 0; b < num_buttons; ++b) {
Control::input_active[INPUT_JOYSTICK_FIRST_BUTTON + b] = state_buttons[b] == GLFW_PRESS;
Control::input_values[INPUT_JOYSTICK_FIRST_BUTTON + b] = state_buttons[b] == GLFW_PRESS ? 1.f : 0.f;
}
// read joystick axis
int num_axis = 0;
const float *state_axis = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &num_axis );
for (int a = 0; a < num_axis; ++a) {
Control::input_active[INPUT_JOYSTICK_FIRST_AXIS + a] = ABS(state_axis[a]) > 0.01 ? true : false;
Control::input_values[INPUT_JOYSTICK_FIRST_AXIS + a] = state_axis[a];
}
}
}
bool Control::inputActive(uint id)
{
return Control::input_active[MIN(id,INPUT_MAX)];
return Control::input_active[MIN(id,INPUT_MAX)] && !Settings::application.mapping.disabled;
}
float Control::inputValue(uint id)
{
float value = 0.f;
if ( id >= INPUT_KEYBOARD_FIRST && id <= INPUT_NUMPAD_LAST )
{
value = inputActive(id) ? 1.0f : 0.f;
}
else if ( id >= INPUT_JOYSTICK_FIRST && id <= INPUT_JOYSTICK_LAST )
{
}
else if ( id >= INPUT_CUSTOM_FIRST && id <= INPUT_CUSTOM_LAST )
{
}
return value;
return Control::input_values[MIN(id,INPUT_MAX)];
}
std::string Control::inputLabel(uint id)
@@ -833,7 +858,13 @@ std::string Control::inputLabel(uint id)
}
else if ( id >= INPUT_JOYSTICK_FIRST && id <= INPUT_JOYSTICK_LAST )
{
std::vector< std::string > joystick_labels = { "Button A", "Button B", "Button X", "Button Y",
"Left bumper", "Right bumper", "Back", "Start",
"Guide", "Left thumb", "Right thumb",
"Up", "Right", "Down", "Left",
"Left Axis X", "Left Axis Y", "Left Trigger",
"Right Axis X", "Right Axis Y", "Right Trigger" };
label = joystick_labels[id - INPUT_JOYSTICK_FIRST];
}
else if ( id >= INPUT_CUSTOM_FIRST && id <= INPUT_CUSTOM_LAST )
{

View File

@@ -4,6 +4,7 @@
#include <map>
#include <list>
#include <string>
#include <atomic>
#include <condition_variable>
#include "SourceList.h"
@@ -52,8 +53,12 @@
#define INPUT_NUMPAD_FIRST 27
#define INPUT_NUMPAD_LAST 43
#define INPUT_JOYSTICK_FIRST 44
#define INPUT_JOYSTICK_LAST 65
#define INPUT_CUSTOM_FIRST 66
#define INPUT_JOYSTICK_LAST 64
#define INPUT_JOYSTICK_FIRST_BUTTON 44
#define INPUT_JOYSTICK_LAST_BUTTON 58
#define INPUT_JOYSTICK_FIRST_AXIS 59
#define INPUT_JOYSTICK_LAST_AXIS 64
#define INPUT_CUSTOM_FIRST 65
#define INPUT_CUSTOM_LAST 99
#define INPUT_MAX 100
@@ -87,8 +92,8 @@ public:
std::string translate (std::string addresspqattern);
static bool inputActive(uint id);
float inputValue(uint id);
std::string inputLabel(uint id);
static float inputValue(uint id);
static std::string inputLabel(uint id);
protected:
@@ -123,8 +128,13 @@ private:
void loadOscConfig();
void resetOscConfig();
static bool input_active[INPUT_MAX];
static bool input_active[INPUT_MAX];
static float input_values[INPUT_MAX];
static std::condition_variable joystick_end_;
static std::mutex access_;
static void keyboardCalback(GLFWwindow*, int, int, int, int);
static void joystickCallback();
};
#endif // CONTROL_H

View File

@@ -349,7 +349,7 @@ void UserInterface::handleKeyboard()
else if (ImGui::IsKeyPressed( GLFW_KEY_M )) {
Settings::application.widget.stats = !Settings::application.widget.stats;
}
else if (ImGui::IsKeyPressed( GLFW_KEY_K )) {
else if (ImGui::IsKeyPressed( GLFW_KEY_I )) {
Settings::application.widget.inputs = !Settings::application.widget.inputs;
}
else if (ImGui::IsKeyPressed( GLFW_KEY_N ) && shift_modifier_active) {
@@ -1714,21 +1714,26 @@ void HelperToolbox::Render()
ImGui::SetColumnWidth(0, width_column0);
ImGui::PushTextWrapPos(width_window );
ImGui::Text(ICON_FA_DESKTOP " Output"); ImGui::NextColumn();
ImGui::Text ("Preview the output displayed in the rendering window. Control video recording and sharing to other vimix in local network.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE " Player"); ImGui::NextColumn();
ImGui::Text ("Play, pause, rewind videos or dynamic sources. Control play duration, speed and synchronize multiple videos.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK " Timer"); ImGui::NextColumn();
ImGui::Text ("Keep track of time with a stopwatch or a metronome (Ableton Link).");
ImGui::NextColumn();
ImGui::Text(ICON_FA_HAND_PAPER " Inputs"); ImGui::NextColumn();
ImGui::Text ("Define how user inputs (e.g. keyboard, joystick) are mapped to custom actions in the session.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_STICKY_NOTE " Notes"); ImGui::NextColumn();
ImGui::Text ("Place sticky notes into your session.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_TACHOMETER_ALT " Metrics"); ImGui::NextColumn();
ImGui::Text ("Utility monitoring of metrics on the system (FPS, RAM), the runtime (session duration), or the current source.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE " Player"); ImGui::NextColumn();
ImGui::Text ("Play, pause, rewind videos or dynamic sources. Control play duration, speed and synchronize multiple videos.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_DESKTOP " Output"); ImGui::NextColumn();
ImGui::Text ("Preview the output displayed in the rendering window. Control video recording and sharing to other vimix in local network.");
ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK " Timer"); ImGui::NextColumn();
ImGui::Text ("Keep track of time with a stopwatch or a metronome (Ableton Link).");
ImGui::NextColumn();
ImGui::Text(ICON_FA_COG " Settings"); ImGui::NextColumn();
ImGui::Text ("Set user preferences and system settings.");
ImGui::Columns(1);
ImGui::PopTextWrapPos();
@@ -1825,19 +1830,21 @@ void HelperToolbox::Render()
ImGui::Text("Switch Current source"); ImGui::NextColumn();
ImGui::Text(CTRL_MOD "TAB"); ImGui::NextColumn();
ImGui::Text("Switch view"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_FULLSCREEN); ImGui::NextColumn();
ImGui::Text(ICON_FA_EXPAND_ALT TOOLTIP_FULLSCREEN "main window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_NOTE); ImGui::NextColumn();
ImGui::Text(ICON_FA_STICKY_NOTE TOOLTIP_NOTE); ImGui::NextColumn();
ImGui::Text(SHORTCUT_PLAYER); ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE TOOLTIP_PLAYER "window" ); ImGui::NextColumn();
ImGui::Text(ICON_FA_EXPAND_ALT " " TOOLTIP_FULLSCREEN "main window"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_OUTPUT); ImGui::NextColumn();
ImGui::Text(ICON_FA_DESKTOP TOOLTIP_OUTPUT "window"); ImGui::NextColumn();
ImGui::Text(ICON_FA_DESKTOP " " TOOLTIP_OUTPUT "window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_PLAYER); ImGui::NextColumn();
ImGui::Text(ICON_FA_PLAY_CIRCLE " " TOOLTIP_PLAYER "window" ); ImGui::NextColumn();
ImGui::Text(SHORTCUT_TIMER); ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK TOOLTIP_TIMER "window"); ImGui::NextColumn();
ImGui::Text(ICON_FA_CLOCK " " TOOLTIP_TIMER "window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_INPUTS); ImGui::NextColumn();
ImGui::Text(ICON_FA_HAND_PAPER " " TOOLTIP_INPUTS "window"); ImGui::NextColumn();
ImGui::Text(SHORTCUT_NOTE); ImGui::NextColumn();
ImGui::Text(ICON_FA_STICKY_NOTE " " TOOLTIP_NOTE); ImGui::NextColumn();
ImGui::Text("ESC"); ImGui::NextColumn();
ImGui::Text("Hide / Show windows"); ImGui::NextColumn();
ImGui::Text(ICON_FA_WINDOW_MINIMIZE " Hide / " ICON_FA_WINDOW_MAXIMIZE " Show windows"); ImGui::NextColumn();
ImGui::Separator();
ImGui::Text(SHORTCUT_NEW_FILE); ImGui::NextColumn();
ImGui::Text(MENU_NEW_FILE " session"); ImGui::NextColumn();
@@ -1877,7 +1884,7 @@ void HelperToolbox::Render()
ImGui::Text("Space"); ImGui::NextColumn();
ImGui::Text("Toggle Play/Pause selected videos"); ImGui::NextColumn();
ImGui::Text(CTRL_MOD "Space"); ImGui::NextColumn();
ImGui::Text("Back restart selected videos"); ImGui::NextColumn();
ImGui::Text("Restart selected videos"); ImGui::NextColumn();
ImGui::Text(ICON_FA_ARROW_DOWN " " ICON_FA_ARROW_UP " " ICON_FA_ARROW_DOWN " " ICON_FA_ARROW_RIGHT ); ImGui::NextColumn();
ImGui::Text("Move the selection in the canvas"); ImGui::NextColumn();
ImGui::Separator();
@@ -4281,8 +4288,8 @@ void TimerMetronome::Render()
InputMappingInterface::InputMappingInterface() : WorkspaceWindow("InputMappingInterface")
{
input_mode = { ICON_FA_KEYBOARD " Keyboard", ICON_FA_CALCULATOR " Numpad" };
current_input_for_mode = { INPUT_KEYBOARD_FIRST, INPUT_NUMPAD_FIRST };
input_mode = { ICON_FA_KEYBOARD " Keyboard", ICON_FA_CALCULATOR " Numpad" , ICON_FA_GAMEPAD " Gamepad" };
current_input_for_mode = { INPUT_KEYBOARD_FIRST, INPUT_NUMPAD_FIRST, INPUT_JOYSTICK_FIRST };
current_input_ = current_input_for_mode[Settings::application.mapping.mode];
}
@@ -4480,7 +4487,7 @@ void InputMappingInterface::Render()
if (ImGui::BeginMenu(IMGUI_TITLE_INPUT_MAPPING))
{
// Enable/Disable
ImGui::MenuItem( ICON_FA_BAN " Disable all", nullptr, &Settings::application.mapping.disabled);
ImGui::MenuItem( ICON_FA_BAN " Disable", nullptr, &Settings::application.mapping.disabled);
// output manager menu
ImGui::Separator();
@@ -4548,6 +4555,9 @@ void InputMappingInterface::Render()
ImVec4 color = ImGui::GetStyle().Colors[ImGuiCol_Header];
color.w /= Settings::application.mapping.disabled ? 2.f : 0.9f;
ImGui::PushStyleColor(ImGuiCol_Header, color);
color = ImGui::GetStyle().Colors[ImGuiCol_Text];
color.w /= Settings::application.mapping.disabled ? 2.f : 1.0f;
ImGui::PushStyleColor(ImGuiCol_Text, color);
for (uint ik = INPUT_KEYBOARD_FIRST; ik < INPUT_KEYBOARD_LAST; ++ik){
int i = ik - INPUT_KEYBOARD_FIRST;
@@ -4573,7 +4583,7 @@ void InputMappingInterface::Render()
draw_list->AddRect(pos, pos + keyLetterIconSize, ImGui::GetColorU32(ImGuiCol_Text), 6.f, ImDrawCornerFlags_All, 3.f);
}
}
ImGui::PopStyleColor();
ImGui::PopStyleColor(2);
ImGui::PopStyleVar();
ImGui::PopFont();
@@ -4594,6 +4604,9 @@ void InputMappingInterface::Render()
ImVec4 color = ImGui::GetStyle().Colors[ImGuiCol_Header];
color.w /= Settings::application.mapping.disabled ? 2.f : 0.9f;
ImGui::PushStyleColor(ImGuiCol_Header, color);
color = ImGui::GetStyle().Colors[ImGuiCol_Text];
color.w /= Settings::application.mapping.disabled ? 2.f : 1.0f;
ImGui::PushStyleColor(ImGuiCol_Text, color);
for (size_t p = 0; p < numpad_inputs.size(); ++p){
uint ik = numpad_inputs[p];
@@ -4622,7 +4635,70 @@ void InputMappingInterface::Render()
draw_list->AddRect(pos, pos + iconsize, ImGui::GetColorU32(ImGuiCol_Text), 6.f, ImDrawCornerFlags_All, 3.f);
}
}
ImGui::PopStyleColor();
ImGui::PopStyleColor(2);
ImGui::PopStyleVar();
ImGui::PopFont();
}
//
// JOYSTICK
//
else if ( Settings::application.mapping.mode == 2 ) {
// custom layout of gamepad buttons
std::vector<uint> gamepad_inputs = { INPUT_JOYSTICK_FIRST_BUTTON+11, INPUT_JOYSTICK_FIRST_BUTTON+13,
INPUT_JOYSTICK_FIRST_BUTTON+6,
INPUT_JOYSTICK_FIRST_BUTTON+2, INPUT_JOYSTICK_FIRST_BUTTON+3,
INPUT_JOYSTICK_FIRST_BUTTON+14, INPUT_JOYSTICK_FIRST_BUTTON+12,
INPUT_JOYSTICK_FIRST_BUTTON+7,
INPUT_JOYSTICK_FIRST_BUTTON+0, INPUT_JOYSTICK_FIRST_BUTTON+1,
INPUT_JOYSTICK_FIRST_BUTTON+4, INPUT_JOYSTICK_FIRST_BUTTON+9,
INPUT_JOYSTICK_FIRST_BUTTON+8,
INPUT_JOYSTICK_FIRST_BUTTON+10, INPUT_JOYSTICK_FIRST_BUTTON+5 };
std::vector< std::string > gamepad_labels = { ICON_FA_CARET_SQUARE_UP, ICON_FA_CARET_SQUARE_DOWN,
ICON_FA_CHEVRON_CIRCLE_LEFT, "X", "Y",
ICON_FA_CARET_SQUARE_LEFT, ICON_FA_CARET_SQUARE_RIGHT,
ICON_FA_CHEVRON_CIRCLE_RIGHT, "A", "B",
"L1", "LT", ICON_FA_DOT_CIRCLE, "RT", "R1" };
// Draw table of letter keys [A] to [Y]
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, ImVec2(0.5f, 0.50f));
ImVec4 color = ImGui::GetStyle().Colors[ImGuiCol_Header];
color.w /= Settings::application.mapping.disabled ? 2.f : 0.9f;
ImGui::PushStyleColor(ImGuiCol_Header, color);
color = ImGui::GetStyle().Colors[ImGuiCol_Text];
color.w /= Settings::application.mapping.disabled ? 2.f : 1.0f;
ImGui::PushStyleColor(ImGuiCol_Text, color);
for (size_t b = 0; b < gamepad_inputs.size(); ++b ){
uint ig = gamepad_inputs[b];
// draw overlay on active keys
if ( Control::inputActive(ig) ) {
ImVec2 pos = frame_top + keyLetterItemSize * ImVec2( b % 5, b / 5);
draw_list->AddRectFilled(pos, pos + keyLetterIconSize, ImGui::GetColorU32(ImGuiCol_Border), 6.f);
// set current
current_input_ = ig;
}
// draw key button
ImGui::PushID(ig);
if (ImGui::Selectable(gamepad_labels[b].c_str(), input_assigned[ig], 0, keyLetterIconSize)) {
current_input_ = ig;
}
ImGui::PopID();
if ((b % 5) < 4) ImGui::SameLine();
// Draw frame around current keyboard letter
if (current_input_ == ig) {
ImVec2 pos = frame_top + keyLetterItemSize * ImVec2( b % 5, b / 5);
draw_list->AddRect(pos, pos + keyLetterIconSize, ImGui::GetColorU32(ImGuiCol_Text), 6.f, ImDrawCornerFlags_All, 3.f);
}
}
ImGui::PopStyleColor(2);
ImGui::PopStyleVar();
ImGui::PopFont();
@@ -6324,18 +6400,19 @@ void Navigator::RenderMainPannelVimix()
std::pair<std::string, std::string> tooltip_;
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE);
ImGui::SameLine(0, 0.5f * ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_DESKTOP ) )
UserInterface::manager().outputcontrol.setVisible(!Settings::application.widget.preview);
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_OUTPUT, SHORTCUT_OUTPUT};
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_PLAY_CIRCLE ) )
UserInterface::manager().sourcecontrol.setVisible(!Settings::application.widget.media_player);
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_PLAYER, SHORTCUT_PLAYER};
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_DESKTOP ) )
UserInterface::manager().outputcontrol.setVisible(!Settings::application.widget.preview);
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_OUTPUT, SHORTCUT_OUTPUT};
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_CLOCK ) )
UserInterface::manager().timercontrol.setVisible(!Settings::application.widget.timer);
@@ -6343,25 +6420,17 @@ void Navigator::RenderMainPannelVimix()
tooltip_ = { TOOLTIP_TIMER, SHORTCUT_TIMER};
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_CUBES ) )
if ( ImGuiToolkit::IconButton( ICON_FA_HAND_PAPER ) )
UserInterface::manager().inputscontrol.setVisible(!Settings::application.widget.inputs);
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_INPUTS, SHORTCUT_INPUTS};
ImGui::PopFont();
ImGui::Spacing();
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_STICKY_NOTE ) )
Mixer::manager().session()->addNote();
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_NOTE, SHORTCUT_NOTE};
ImGui::SameLine(0, ImGui::GetTextLineHeight());
if ( ImGuiToolkit::IconButton( ICON_FA_TACHOMETER_ALT ) )
Settings::application.widget.stats = !Settings::application.widget.stats;
if (ImGui::IsItemHovered())
tooltip_ = { TOOLTIP_METRICS, SHORTCUT_METRICS};
ImGui::PopFont();
if (!tooltip_.first.empty()) {
@@ -6674,6 +6743,11 @@ void Navigator::RenderMainPannel()
ImGui::SetCursorScreenPos( rightcorner - ImVec2(button_height, button_height));
const char *tooltip[2] = {"Settings", "Settings"};
ImGuiToolkit::IconToggle(13,5,12,5, &show_config_, tooltip);
// Metrics icon just above
ImGui::SetCursorScreenPos( rightcorner - ImVec2(button_height, 2.1 * button_height));
if ( ImGuiToolkit::IconButton( 11, 3 , TOOLTIP_METRICS) )
Settings::application.widget.stats = !Settings::application.widget.stats;
ImGui::End();
}

View File

@@ -21,6 +21,14 @@
#define ALT_MOD "Alt+"
#endif
#define IMGUI_TITLE_MEDIAPLAYER ICON_FA_PLAY_CIRCLE " Player"
#define IMGUI_TITLE_TIMER ICON_FA_CLOCK " Timer"
#define IMGUI_TITLE_INPUT_MAPPING ICON_FA_HAND_PAPER " Inputs Mapping"
#define IMGUI_TITLE_HELP ICON_FA_LIFE_RING " Help"
#define IMGUI_TITLE_TOOLBOX ICON_FA_HAMSA " Guru Toolbox"
#define IMGUI_TITLE_SHADEREDITOR ICON_FA_CODE " Code Editor"
#define IMGUI_TITLE_PREVIEW ICON_FA_DESKTOP " Ouput"
#define MENU_NEW_FILE ICON_FA_FILE " New"
#define SHORTCUT_NEW_FILE CTRL_MOD "W"
#define MENU_OPEN_FILE ICON_FA_FILE_UPLOAD " Open"
@@ -62,7 +70,7 @@
#define SHORTCUT_OUTPUTFULLSCREEN CTRL_MOD "F"
#define MENU_CLOSE ICON_FA_TIMES " Close"
#define TOOLTIP_NOTE "New note "
#define TOOLTIP_NOTE "New sticky note "
#define SHORTCUT_NOTE CTRL_MOD "Shift+N"
#define TOOLTIP_METRICS "Metrics "
#define SHORTCUT_METRICS CTRL_MOD "M"
@@ -72,7 +80,7 @@
#define SHORTCUT_OUTPUT CTRL_MOD "D"
#define TOOLTIP_TIMER "Timer "
#define SHORTCUT_TIMER CTRL_MOD "T"
#define TOOLTIP_INPUTS "Inputs mapping"
#define TOOLTIP_INPUTS "Inputs mapping "
#define SHORTCUT_INPUTS CTRL_MOD "I"
#define TOOLTIP_FULLSCREEN "Fullscreen "
#define SHORTCUT_FULLSCREEN CTRL_MOD "Shift+F"
@@ -358,8 +366,8 @@ public:
class InputMappingInterface : public WorkspaceWindow
{
std::array< std::string, 2 > input_mode;
std::array< uint, 2 > current_input_for_mode;
std::array< std::string, 3 > input_mode;
std::array< uint, 3 > current_input_for_mode;
uint current_input_;

View File

@@ -71,16 +71,7 @@
#define SESSION_THUMBNAIL_HEIGHT 120.f
#define RECORD_MAX_TIMEOUT 1200000
#define IMGUI_TITLE_MAINWINDOW ICON_FA_CIRCLE_NOTCH " vimix"
#define IMGUI_TITLE_MEDIAPLAYER ICON_FA_PLAY_CIRCLE " Player"
#define IMGUI_TITLE_TIMER ICON_FA_CLOCK " Timer"
#define IMGUI_TITLE_INPUT_MAPPING ICON_FA_CUBES " Inputs Mapping"
#define IMGUI_TITLE_LOGS ICON_FA_LIST_UL " Logs"
#define IMGUI_TITLE_HELP ICON_FA_LIFE_RING " Help"
#define IMGUI_TITLE_TOOLBOX ICON_FA_HAMSA " Guru Toolbox"
#define IMGUI_TITLE_SHADEREDITOR ICON_FA_CODE " Code Editor"
#define IMGUI_TITLE_PREVIEW ICON_FA_DESKTOP " Ouput"
#define IMGUI_TITLE_DELETE ICON_FA_BROOM " Delete?"
#define IMGUI_LABEL_RECENT_FILES " Recent files"
#define IMGUI_LABEL_RECENT_RECORDS " Recent recordings"
#define IMGUI_RIGHT_ALIGN -3.5f * ImGui::GetTextLineHeightWithSpacing()