GUI: ability to customize toggle button color

This commit is contained in:
tildearrow 2022-03-22 01:57:06 -05:00
parent 73d2f97274
commit f4f91ca49e
6 changed files with 46 additions and 20 deletions

View file

@ -56,9 +56,11 @@ void FurnaceGUI::drawEditControls() {
} }
} }
ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(e->isPlaying()));
if (ImGui::Button(ICON_FA_PLAY "##Play")) { if (ImGui::Button(ICON_FA_PLAY "##Play")) {
play(); play();
} }
ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(ICON_FA_STOP "##Stop")) { if (ImGui::Button(ICON_FA_STOP "##Stop")) {
stop(); stop();
@ -95,9 +97,11 @@ void FurnaceGUI::drawEditControls() {
stop(); stop();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(e->isPlaying()));
if (ImGui::Button(ICON_FA_PLAY "##Play")) { if (ImGui::Button(ICON_FA_PLAY "##Play")) {
play(); play();
} }
ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) { if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) {
e->stepOne(cursor.y); e->stepOne(cursor.y);
@ -105,14 +109,14 @@ void FurnaceGUI::drawEditControls() {
ImGui::SameLine(); ImGui::SameLine();
bool repeatPattern=e->getRepeatPattern(); bool repeatPattern=e->getRepeatPattern();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(repeatPattern)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(repeatPattern));
if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) { if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) {
e->setRepeatPattern(!repeatPattern); e->setRepeatPattern(!repeatPattern);
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(edit)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(edit));
if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) { if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) {
edit=!edit; edit=!edit;
} }
@ -120,7 +124,7 @@ void FurnaceGUI::drawEditControls() {
ImGui::SameLine(); ImGui::SameLine();
bool metro=e->getMetronome(); bool metro=e->getMetronome();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(metro)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(metro));
if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) { if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) {
e->setMetronome(!metro); e->setMetronome(!metro);
} }
@ -168,9 +172,11 @@ void FurnaceGUI::drawEditControls() {
break; break;
case 2: // compact vertical case 2: // compact vertical
if (ImGui::Begin("Play/Edit Controls",&editControlsOpen,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse)) { if (ImGui::Begin("Play/Edit Controls",&editControlsOpen,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse)) {
ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(e->isPlaying()));
if (ImGui::Button(ICON_FA_PLAY "##Play")) { if (ImGui::Button(ICON_FA_PLAY "##Play")) {
play(); play();
} }
ImGui::PopStyleColor();
if (ImGui::Button(ICON_FA_STOP "##Stop")) { if (ImGui::Button(ICON_FA_STOP "##Stop")) {
stop(); stop();
} }
@ -179,20 +185,20 @@ void FurnaceGUI::drawEditControls() {
} }
bool repeatPattern=e->getRepeatPattern(); bool repeatPattern=e->getRepeatPattern();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(repeatPattern)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(repeatPattern));
if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) { if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) {
e->setRepeatPattern(!repeatPattern); e->setRepeatPattern(!repeatPattern);
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(edit)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(edit));
if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) { if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) {
edit=!edit; edit=!edit;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
bool metro=e->getMetronome(); bool metro=e->getMetronome();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(metro)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(metro));
if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) { if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) {
e->setMetronome(!metro); e->setMetronome(!metro);
} }
@ -226,12 +232,12 @@ void FurnaceGUI::drawEditControls() {
} }
ImGui::Text("Foll."); ImGui::Text("Foll.");
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(followOrders)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(followOrders));
if (ImGui::SmallButton("Ord##FollowOrders")) { handleUnimportant if (ImGui::SmallButton("Ord##FollowOrders")) { handleUnimportant
followOrders=!followOrders; followOrders=!followOrders;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(followPattern)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(followPattern));
if (ImGui::SmallButton("Pat##FollowPattern")) { handleUnimportant if (ImGui::SmallButton("Pat##FollowPattern")) { handleUnimportant
followPattern=!followPattern; followPattern=!followPattern;
} }
@ -243,9 +249,11 @@ void FurnaceGUI::drawEditControls() {
case 3: // split case 3: // split
if (ImGui::Begin("Play Controls",&editControlsOpen,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse)) { if (ImGui::Begin("Play Controls",&editControlsOpen,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse)) {
if (e->isPlaying()) { if (e->isPlaying()) {
ImGui::PushStyleColor(ImGuiCol_Button,uiColors[GUI_COLOR_TOGGLE_ON]);
if (ImGui::Button(ICON_FA_STOP "##Stop")) { if (ImGui::Button(ICON_FA_STOP "##Stop")) {
stop(); stop();
} }
ImGui::PopStyleColor();
} else { } else {
if (ImGui::Button(ICON_FA_PLAY "##Play")) { if (ImGui::Button(ICON_FA_PLAY "##Play")) {
play(); play();
@ -261,7 +269,7 @@ void FurnaceGUI::drawEditControls() {
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(edit)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(edit));
if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) { if (ImGui::Button(ICON_FA_CIRCLE "##Edit")) {
edit=!edit; edit=!edit;
} }
@ -269,7 +277,7 @@ void FurnaceGUI::drawEditControls() {
bool metro=e->getMetronome(); bool metro=e->getMetronome();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(metro)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(metro));
if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) { if (ImGui::Button(ICON_FA_BELL_O "##Metronome")) {
e->setMetronome(!metro); e->setMetronome(!metro);
} }
@ -277,7 +285,7 @@ void FurnaceGUI::drawEditControls() {
ImGui::SameLine(); ImGui::SameLine();
bool repeatPattern=e->getRepeatPattern(); bool repeatPattern=e->getRepeatPattern();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(repeatPattern)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(repeatPattern));
if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) { if (ImGui::Button(ICON_FA_REPEAT "##RepeatPattern")) {
e->setRepeatPattern(!repeatPattern); e->setRepeatPattern(!repeatPattern);
} }

View file

@ -2848,7 +2848,9 @@ FurnaceGUI::FurnaceGUI():
sampleFilterRes(0.25f), sampleFilterRes(0.25f),
sampleFilterCutStart(16000.0f), sampleFilterCutStart(16000.0f),
sampleFilterCutEnd(100.0f), sampleFilterCutEnd(100.0f),
sampleFilterPower(1) { sampleFilterPower(1),
sampleClipboard(NULL),
sampleClipboardLen(0) {
// value keys // value keys
valueKeys[SDLK_0]=0; valueKeys[SDLK_0]=0;
valueKeys[SDLK_1]=1; valueKeys[SDLK_1]=1;

View file

@ -41,6 +41,8 @@
#define MARK_MODIFIED modified=true; #define MARK_MODIFIED modified=true;
#define TOGGLE_COLOR(x) ((x)?uiColors[GUI_COLOR_TOGGLE_ON]:uiColors[GUI_COLOR_TOGGLE_OFF])
enum FurnaceGUIColors { enum FurnaceGUIColors {
GUI_COLOR_BACKGROUND=0, GUI_COLOR_BACKGROUND=0,
GUI_COLOR_FRAME_BACKGROUND, GUI_COLOR_FRAME_BACKGROUND,
@ -49,6 +51,8 @@ enum FurnaceGUIColors {
GUI_COLOR_TEXT, GUI_COLOR_TEXT,
GUI_COLOR_ACCENT_PRIMARY, GUI_COLOR_ACCENT_PRIMARY,
GUI_COLOR_ACCENT_SECONDARY, GUI_COLOR_ACCENT_SECONDARY,
GUI_COLOR_TOGGLE_OFF,
GUI_COLOR_TOGGLE_ON,
GUI_COLOR_EDITING, GUI_COLOR_EDITING,
GUI_COLOR_SONG_LOOP, GUI_COLOR_SONG_LOOP,
@ -774,6 +778,8 @@ class FurnaceGUI {
unsigned int sampleDragLen; unsigned int sampleDragLen;
float sampleFilterL, sampleFilterB, sampleFilterH, sampleFilterRes, sampleFilterCutStart, sampleFilterCutEnd; float sampleFilterL, sampleFilterB, sampleFilterH, sampleFilterRes, sampleFilterCutStart, sampleFilterCutEnd;
unsigned char sampleFilterPower; unsigned char sampleFilterPower;
void* sampleClipboard;
size_t sampleClipboardLen;
// visualizer // visualizer
float keyHit[DIV_MAX_CHANS]; float keyHit[DIV_MAX_CHANS];

View file

@ -1370,25 +1370,25 @@ void FurnaceGUI::drawInsEdit() {
if (ins->type==DIV_INS_C64) if (ImGui::BeginTabItem("C64")) { if (ins->type==DIV_INS_C64) if (ImGui::BeginTabItem("C64")) {
ImGui::Text("Waveform"); ImGui::Text("Waveform");
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.triOn)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.triOn));
if (ImGui::Button("tri")) { PARAMETER if (ImGui::Button("tri")) { PARAMETER
ins->c64.triOn=!ins->c64.triOn; ins->c64.triOn=!ins->c64.triOn;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.sawOn)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.sawOn));
if (ImGui::Button("saw")) { PARAMETER if (ImGui::Button("saw")) { PARAMETER
ins->c64.sawOn=!ins->c64.sawOn; ins->c64.sawOn=!ins->c64.sawOn;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.pulseOn)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.pulseOn));
if (ImGui::Button("pulse")) { PARAMETER if (ImGui::Button("pulse")) { PARAMETER
ins->c64.pulseOn=!ins->c64.pulseOn; ins->c64.pulseOn=!ins->c64.pulseOn;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.noiseOn)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.noiseOn));
if (ImGui::Button("noise")) { PARAMETER if (ImGui::Button("noise")) { PARAMETER
ins->c64.noiseOn=!ins->c64.noiseOn; ins->c64.noiseOn=!ins->c64.noiseOn;
} }
@ -1417,25 +1417,25 @@ void FurnaceGUI::drawInsEdit() {
ImGui::Text("Filter Mode"); ImGui::Text("Filter Mode");
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.lp)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.lp));
if (ImGui::Button("low")) { PARAMETER if (ImGui::Button("low")) { PARAMETER
ins->c64.lp=!ins->c64.lp; ins->c64.lp=!ins->c64.lp;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.bp)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.bp));
if (ImGui::Button("band")) { PARAMETER if (ImGui::Button("band")) { PARAMETER
ins->c64.bp=!ins->c64.bp; ins->c64.bp=!ins->c64.bp;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.hp)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.hp));
if (ImGui::Button("high")) { PARAMETER if (ImGui::Button("high")) { PARAMETER
ins->c64.hp=!ins->c64.hp; ins->c64.hp=!ins->c64.hp;
} }
ImGui::PopStyleColor(); ImGui::PopStyleColor();
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.2f,(ins->c64.ch3off)?0.6f:0.2f,0.2f,1.0f)); ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(ins->c64.ch3off));
if (ImGui::Button("ch3off")) { PARAMETER if (ImGui::Button("ch3off")) { PARAMETER
ins->c64.ch3off=!ins->c64.ch3off; ins->c64.ch3off=!ins->c64.ch3off;
} }

View file

@ -137,16 +137,20 @@ void FurnaceGUI::drawSampleEdit() {
ImGui::BeginDisabled(sample->depth!=8 && sample->depth!=16); ImGui::BeginDisabled(sample->depth!=8 && sample->depth!=16);
ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(!sampleDragMode));
if (ImGui::Button(ICON_FA_I_CURSOR "##SSelect")) { if (ImGui::Button(ICON_FA_I_CURSOR "##SSelect")) {
sampleDragMode=false; sampleDragMode=false;
} }
ImGui::PopStyleColor();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Edit mode: Select"); ImGui::SetTooltip("Edit mode: Select");
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushStyleColor(ImGuiCol_Button,TOGGLE_COLOR(sampleDragMode));
if (ImGui::Button(ICON_FA_PENCIL "##SDraw")) { if (ImGui::Button(ICON_FA_PENCIL "##SDraw")) {
sampleDragMode=true; sampleDragMode=true;
} }
ImGui::PopStyleColor();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Edit mode: Draw"); ImGui::SetTooltip("Edit mode: Draw");
} }

View file

@ -497,6 +497,8 @@ void FurnaceGUI::drawSettings() {
UI_COLOR_CONFIG(GUI_COLOR_TEXT,"Text"); UI_COLOR_CONFIG(GUI_COLOR_TEXT,"Text");
UI_COLOR_CONFIG(GUI_COLOR_ACCENT_PRIMARY,"Primary"); UI_COLOR_CONFIG(GUI_COLOR_ACCENT_PRIMARY,"Primary");
UI_COLOR_CONFIG(GUI_COLOR_ACCENT_SECONDARY,"Secondary"); UI_COLOR_CONFIG(GUI_COLOR_ACCENT_SECONDARY,"Secondary");
UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_ON,"Toggle on");
UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_OFF,"Toggle off");
UI_COLOR_CONFIG(GUI_COLOR_EDITING,"Editing"); UI_COLOR_CONFIG(GUI_COLOR_EDITING,"Editing");
UI_COLOR_CONFIG(GUI_COLOR_SONG_LOOP,"Song loop"); UI_COLOR_CONFIG(GUI_COLOR_SONG_LOOP,"Song loop");
UI_COLOR_CONFIG(GUI_COLOR_PLAYBACK_STAT,"Playback status"); UI_COLOR_CONFIG(GUI_COLOR_PLAYBACK_STAT,"Playback status");
@ -1199,6 +1201,8 @@ void FurnaceGUI::commitSettings() {
PUT_UI_COLOR(GUI_COLOR_TEXT); PUT_UI_COLOR(GUI_COLOR_TEXT);
PUT_UI_COLOR(GUI_COLOR_ACCENT_PRIMARY); PUT_UI_COLOR(GUI_COLOR_ACCENT_PRIMARY);
PUT_UI_COLOR(GUI_COLOR_ACCENT_SECONDARY); PUT_UI_COLOR(GUI_COLOR_ACCENT_SECONDARY);
PUT_UI_COLOR(GUI_COLOR_TOGGLE_ON);
PUT_UI_COLOR(GUI_COLOR_TOGGLE_OFF);
PUT_UI_COLOR(GUI_COLOR_EDITING); PUT_UI_COLOR(GUI_COLOR_EDITING);
PUT_UI_COLOR(GUI_COLOR_SONG_LOOP); PUT_UI_COLOR(GUI_COLOR_SONG_LOOP);
PUT_UI_COLOR(GUI_COLOR_VOLMETER_LOW); PUT_UI_COLOR(GUI_COLOR_VOLMETER_LOW);
@ -1537,6 +1541,8 @@ void FurnaceGUI::applyUISettings() {
GET_UI_COLOR(GUI_COLOR_TEXT,ImVec4(1.0f,1.0f,1.0f,1.0f)); GET_UI_COLOR(GUI_COLOR_TEXT,ImVec4(1.0f,1.0f,1.0f,1.0f));
GET_UI_COLOR(GUI_COLOR_ACCENT_PRIMARY,ImVec4(0.06f,0.53f,0.98f,1.0f)); GET_UI_COLOR(GUI_COLOR_ACCENT_PRIMARY,ImVec4(0.06f,0.53f,0.98f,1.0f));
GET_UI_COLOR(GUI_COLOR_ACCENT_SECONDARY,ImVec4(0.26f,0.59f,0.98f,1.0f)); GET_UI_COLOR(GUI_COLOR_ACCENT_SECONDARY,ImVec4(0.26f,0.59f,0.98f,1.0f));
GET_UI_COLOR(GUI_COLOR_TOGGLE_ON,ImVec4(0.2f,0.6f,0.2f,1.0f));
GET_UI_COLOR(GUI_COLOR_TOGGLE_OFF,ImVec4(0.2f,0.2f,0.2f,1.0f));
GET_UI_COLOR(GUI_COLOR_EDITING,ImVec4(0.2f,0.1f,0.1f,1.0f)); GET_UI_COLOR(GUI_COLOR_EDITING,ImVec4(0.2f,0.1f,0.1f,1.0f));
GET_UI_COLOR(GUI_COLOR_SONG_LOOP,ImVec4(0.3f,0.5f,0.8f,0.4f)); GET_UI_COLOR(GUI_COLOR_SONG_LOOP,ImVec4(0.3f,0.5f,0.8f,0.4f));
GET_UI_COLOR(GUI_COLOR_VOLMETER_LOW,ImVec4(0.2f,0.6f,0.2f,1.0f)); GET_UI_COLOR(GUI_COLOR_VOLMETER_LOW,ImVec4(0.2f,0.6f,0.2f,1.0f));