GUI: compact sample editor

automatic button layout depending on available width
This commit is contained in:
tildearrow 2023-06-30 16:31:34 -05:00
parent 69e3515757
commit 012d43b331
3 changed files with 33 additions and 22 deletions

View File

@ -497,6 +497,15 @@ bool FurnaceGUI::InvCheckbox(const char* label, bool* value) {
return false;
}
void FurnaceGUI::sameLineMaybe(float width) {
if (width<0.0f) width=ImGui::GetFrameHeight();
logV("sameLineMaybe: %f %f",ImGui::GetContentRegionAvail().x,width);
ImGui::SameLine();
if (ImGui::GetContentRegionAvail().x<width) ImGui::NewLine();
}
const char* FurnaceGUI::getSystemName(DivSystem which) {
/*
if (settings.chipNames) {

View File

@ -2091,6 +2091,8 @@ class FurnaceGUI {
void pushWarningColor(bool warnCond, bool errorCond=false);
void popWarningColor();
void sameLineMaybe(float width=-1.0f);
float calcBPM(const DivGroovePattern& speeds, float hz, int vN, int vD);
void patternRow(int i, bool isPlaying, float lineHeight, int chans, int ord, const DivPattern** patCache, bool inhibitSel);

View File

@ -715,7 +715,7 @@ void FurnaceGUI::drawSampleEdit() {
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Edit mode: Select");
}
ImGui::SameLine();
sameLineMaybe();
pushToggleColors(sampleDragMode);
if (ImGui::Button(ICON_FA_PENCIL "##SDraw")) {
sampleDragMode=true;
@ -725,9 +725,9 @@ void FurnaceGUI::drawSampleEdit() {
ImGui::SetTooltip("Edit mode: Draw");
}
ImGui::BeginDisabled(sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT);
ImGui::SameLine();
sameLineMaybe();
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
ImGui::SameLine();
sameLineMaybe();
ImGui::Button(ICON_FA_ARROWS_H "##SResize");
if (ImGui::IsItemClicked()) {
resizeSize=sample->samples;
@ -762,7 +762,7 @@ void FurnaceGUI::drawSampleEdit() {
} else {
resizeSize=sample->samples;
}
ImGui::SameLine();
sameLineMaybe();
ImGui::Button(ICON_FA_EXPAND "##SResample");
if (ImGui::IsItemClicked()) {
resampleTarget=targetRate;
@ -819,14 +819,14 @@ void FurnaceGUI::drawSampleEdit() {
}
ImGui::SameLine();
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_UNDO "##SUndo")) {
doUndoSample();
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Undo");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_REPEAT "##SRedo")) {
doRedoSample();
}
@ -835,7 +835,7 @@ void FurnaceGUI::drawSampleEdit() {
}
ImGui::SameLine();
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
ImGui::SameLine();
sameLineMaybe();
ImGui::Button(ICON_FA_VOLUME_UP "##SAmplify");
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Amplify");
@ -883,28 +883,28 @@ void FurnaceGUI::drawSampleEdit() {
}
ImGui::EndPopup();
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_ARROWS_V "##SNormalize")) {
doAction(GUI_ACTION_SAMPLE_NORMALIZE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Normalize");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_ARROW_UP "##SFadeIn")) {
doAction(GUI_ACTION_SAMPLE_FADE_IN);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Fade in");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_ARROW_DOWN "##SFadeOut")) {
doAction(GUI_ACTION_SAMPLE_FADE_OUT);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Fade out");
}
ImGui::SameLine();
sameLineMaybe();
ImGui::Button(ICON_FA_ADJUST "##SInsertSilence");
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Insert silence");
@ -935,21 +935,21 @@ void FurnaceGUI::drawSampleEdit() {
}
ImGui::EndPopup();
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_ERASER "##SSilence")) {
doAction(GUI_ACTION_SAMPLE_SILENCE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Apply silence");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_TIMES "##SDelete")) {
doAction(GUI_ACTION_SAMPLE_DELETE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Delete");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_CROP "##STrim")) {
doAction(GUI_ACTION_SAMPLE_TRIM);
}
@ -958,28 +958,28 @@ void FurnaceGUI::drawSampleEdit() {
}
ImGui::SameLine();
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_BACKWARD "##SReverse")) {
doAction(GUI_ACTION_SAMPLE_REVERSE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Reverse");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_SORT_AMOUNT_ASC "##SInvert")) {
doAction(GUI_ACTION_SAMPLE_INVERT);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Invert");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_LEVEL_DOWN "##SSign")) {
doAction(GUI_ACTION_SAMPLE_SIGN);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Signed/unsigned exchange");
}
ImGui::SameLine();
sameLineMaybe();
ImGui::Button(ICON_FA_INDUSTRY "##SFilter");
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Apply filter");
@ -1095,21 +1095,21 @@ void FurnaceGUI::drawSampleEdit() {
ImGui::EndDisabled();
ImGui::SameLine();
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_PLAY "##PreviewSample")) {
e->previewSample(curSample);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Preview sample");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_STOP "##StopSample")) {
e->stopSamplePreview();
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Stop sample preview");
}
ImGui::SameLine();
sameLineMaybe();
if (ImGui::Button(ICON_FA_UPLOAD "##MakeIns")) {
doAction(GUI_ACTION_SAMPLE_MAKE_INS);
}
@ -1117,7 +1117,7 @@ void FurnaceGUI::drawSampleEdit() {
ImGui::SetTooltip("Create instrument from sample");
}
ImGui::SameLine();
sameLineMaybe(ImGui::CalcTextSize("Zoom").x+150.0f*dpiScale+ImGui::CalcTextSize("100%").x);
double zoomPercent=100.0/sampleZoom;
bool checkZoomLimit=false;
ImGui::Text("Zoom");