From ff7110cb05e4bf787d810eabe4f9e926034cc694 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 20 Feb 2023 16:35:02 -0500 Subject: [PATCH] GUI: possibly fix particles going out of bounds --- src/gui/pattern.cpp | 75 ++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index b02b1150..fa8bffb3 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -1011,6 +1011,12 @@ void FurnaceGUI::drawPattern() { e->getCommandStream(cmdStream); ImDrawList* dl=ImGui::GetWindowDrawList(); ImVec2 off=ImVec2(0.0f,ImGui::GetWindowPos().y); + + ImVec2 winMin=ImGui::GetWindowPos(); + ImVec2 winMax=ImVec2( + winMin.x+ImGui::GetWindowSize().x, + winMin.y+ImGui::GetWindowSize().y + ); // commands for (DivCommand& i: cmdStream) { @@ -1133,11 +1139,18 @@ void FurnaceGUI::drawPattern() { } for (int j=0; jFontSize) + ); + + if (partPos.xwinMax.x || partPos.y>winMax.y) continue; + particles.push_back(Particle( color, partIcon, - off.x+patChanX[i.chan]+fmod(rand(),width)-scrollX, - off.y+(ImGui::GetWindowHeight()*0.5f)+randRange(0,patFont->FontSize), + partPos.x, + partPos.y, (speedX+randRange(-spread,spread))*0.5*dpiScale, (speedY+randRange(-spread,spread))*0.5*dpiScale, grav, @@ -1160,18 +1173,25 @@ void FurnaceGUI::drawPattern() { col.w*=0.2; float width=patChanX[i+1]-patChanX[i]; - particles.push_back(Particle( - pitchGrad, - (ch->portaNote<=ch->note)?ICON_FA_CHEVRON_DOWN:ICON_FA_CHEVRON_UP, + ImVec2 partPos=ImVec2( off.x+patChanX[i]+fmod(rand(),width)-scrollX, - off.y+fmod(rand(),MAX(1,ImGui::GetWindowHeight())), - 0.0f, - (7.0f+(rand()%5)+pow(ch->portaSpeed,0.7f))*((ch->portaNote<=ch->note)?1:-1), - 0.0f, - 1.0f, - 255.0f, - 15.0f - )); + off.y+fmod(rand(),MAX(1,ImGui::GetWindowHeight())) + ); + + if (!(partPos.xwinMax.x || partPos.y>winMax.y)) { + particles.push_back(Particle( + pitchGrad, + (ch->portaNote<=ch->note)?ICON_FA_CHEVRON_DOWN:ICON_FA_CHEVRON_UP, + partPos.x, + partPos.y, + 0.0f, + (7.0f+(rand()%5)+pow(ch->portaSpeed,0.7f))*((ch->portaNote<=ch->note)?1:-1), + 0.0f, + 1.0f, + 255.0f, + 15.0f + )); + } if (width>0.1) for (float j=-patChanSlideY[i]; jvibratoPosGiant/64.0f)*width)-scrollX, - off.y+(ImGui::GetWindowHeight()*0.5f)+randRange(0,patFont->FontSize), - randRange(-4.0f,4.0f), - 2.0f*(3.0f+(rand()%5)+ch->vibratoRate), - 0.4f, - 1.0f, - 128.0f, - 4.0f - )); + off.y+(ImGui::GetWindowHeight()*0.5f)+randRange(0,patFont->FontSize) + ); + + if (!(partPos.xwinMax.x || partPos.y>winMax.y)) { + particles.push_back(Particle( + pitchGrad, + ICON_FA_GLASS, + partPos.x, + partPos.y, + randRange(-4.0f,4.0f), + 2.0f*(3.0f+(rand()%5)+ch->vibratoRate), + 0.4f, + 1.0f, + 128.0f, + 4.0f + )); + } } }