Merge branch 'master' into newFilePicker

This commit is contained in:
tildearrow 2025-09-20 21:49:13 -05:00
commit 134cdde1e5
8 changed files with 38 additions and 4 deletions

View file

@ -222,6 +222,9 @@ void FurnaceGUI::doAction(int what) {
}
break;
}
case GUI_ACTION_OPEN_EDIT_MENU:
openEditMenu=true;
break;
case GUI_ACTION_PANIC:
e->syncReset();
break;

View file

@ -76,7 +76,7 @@ const char* mobileButtonLabels[32]={
// page 4
_N("fade"),
_N("randomize"),
_N("menu"),
_N("opmask"),
_N("scroll\nmode"),
_N("input\nlatch"),
@ -118,7 +118,7 @@ const int mobileButtonActions[32]={
// page 4
GUI_ACTION_PAT_FADE,
0,
GUI_ACTION_OPEN_EDIT_MENU,
0,
GUI_ACTION_PAT_SCROLL_MODE,
0,

View file

@ -1624,6 +1624,29 @@ void FurnaceGUI::doRandomize(int bottom, int top, bool mode, bool eff, int effVa
}
j=0;
}
} else {
// random notes
int absoluteTop=179;
for (; jOrder<=selEnd.order; jOrder++) {
DivPattern* pat=e->curPat[iCoarse].getPattern(e->curOrders->ord[iCoarse][jOrder],true);
for (; j<e->curSubSong->patLen && (j<=selEnd.y || jOrder<selEnd.order); j++) {
int value=0;
touch(jOrder,j);
if (top-bottom<=0) {
value=MIN(absoluteTop,bottom);
} else {
value=MIN(absoluteTop,bottom+(rand()%(top-bottom+1)));
}
pat->data[j][0]=value%12;
pat->data[j][1]=(value-60)/12;
if (pat->data[j][0]==0) {
pat->data[j][0]=12;
pat->data[j][1]--;
}
pat->data[j][1]=(unsigned char)pat->data[j][1];
}
j=0;
}
}
}
iFine=0;

View file

@ -8680,6 +8680,7 @@ FurnaceGUI::FurnaceGUI():
dragMobileEditButton(false),
wantGrooveListFocus(false),
mobilePatSel(false),
openEditMenu(false),
lastAssetType(0),
curWindow(GUI_WINDOW_NOTHING),
nextWindow(GUI_WINDOW_NOTHING),

View file

@ -719,6 +719,7 @@ enum FurnaceGUIActions {
GUI_ACTION_FOLLOW_PATTERN,
GUI_ACTION_FULLSCREEN,
GUI_ACTION_TX81Z_REQUEST,
GUI_ACTION_OPEN_EDIT_MENU,
GUI_ACTION_PANIC,
GUI_ACTION_CLEAR,
@ -2401,6 +2402,7 @@ class FurnaceGUI {
bool collapseWindow, demandScrollX, fancyPattern, firstFrame, tempoView, waveHex, waveSigned, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
bool keepLoopAlive, keepGrooveAlive, orderScrollLocked, orderScrollTolerance, dragMobileMenu, dragMobileEditButton, wantGrooveListFocus;
bool mobilePatSel;
bool openEditMenu;
unsigned char lastAssetType;
FurnaceGUIWindows curWindow, nextWindow, curWindowLast;
std::atomic<FurnaceGUIWindows> curWindowThreadSafe;

View file

@ -603,6 +603,7 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={
D("FOLLOW_PATTERN", _N("Follow pattern"), 0),
D("FULLSCREEN", _N("Toggle full-screen"), SDLK_F11),
D("TX81Z_REQUEST", _N("Request voice from TX81Z"), 0),
D("OPEN_EDIT_MENU", _N("Open pattern edit menu"), 0),
D("PANIC", _N("Panic"), SDLK_F12),
D("CLEAR", _N("Clear song data"), 0),

View file

@ -1907,6 +1907,7 @@ void FurnaceGUI::drawPattern() {
ImGui::PopStyleVar();
if (patternOpen) {
if (!inhibitMenu && ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows) && ImGui::IsMouseClicked(ImGuiMouseButton_Right)) ImGui::OpenPopup("patternActionMenu");
if (openEditMenu) ImGui::OpenPopup("patternActionMenu");
if (ImGui::BeginPopup("patternActionMenu",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) {
editOptions(false);
ImGui::EndPopup();
@ -1914,5 +1915,7 @@ void FurnaceGUI::drawPattern() {
}
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PATTERN;
ImGui::End();
openEditMenu=false;
}

View file

@ -135,7 +135,7 @@ int PlotNoLerpEx(ImGuiPlotType plot_type, const char* label, float (*values_gett
const ImU32 col_base = ImGui::GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
const ImU32 col_hovered = ImGui::GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
for (int n = 0; n < res_w; n++)
for (int n = 1; n <= res_w; n++)
{
const float t1 = t0 + t_step;
const int v1_idx = (int)(t0 * item_count + 0.5f);
@ -153,7 +153,8 @@ int PlotNoLerpEx(ImGuiPlotType plot_type, const char* label, float (*values_gett
if (plot_type == ImGuiPlotType_Lines)
{
window->DrawList->AddLine(pos0, pos1, idx_hovered == v1_idx ? col_hovered : col_base);
window->DrawList->AddLine(pos2, pos3, idx_hovered == v1_idx ? col_hovered : col_base);
if (n < res_w)
window->DrawList->AddLine(pos2, pos3, idx_hovered == v1_idx ? col_hovered : col_base);
}
else if (plot_type == ImGuiPlotType_Histogram)
{