GUI: and here is the mobile orders bar
This commit is contained in:
parent
992fefd9d2
commit
fa564dbe78
|
@ -2197,6 +2197,11 @@ void FurnaceGUI::processDrags(int dragX, int dragY) {
|
||||||
sampleSelEnd=x;
|
sampleSelEnd=x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (orderScrollLocked) {
|
||||||
|
orderScroll=(orderScrollSlideOrigin-dragX)/(40.0*dpiScale);
|
||||||
|
if (orderScroll<0.0f) orderScroll=0.0f;
|
||||||
|
if (orderScroll>(float)e->curSubSong->ordersLen-1) orderScroll=e->curSubSong->ordersLen-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define checkExtension(x) \
|
#define checkExtension(x) \
|
||||||
|
@ -2906,6 +2911,13 @@ void FurnaceGUI::pointUp(int x, int y, int button) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sampleDragActive=false;
|
sampleDragActive=false;
|
||||||
|
if (orderScrollLocked) {
|
||||||
|
int targetOrder=round(orderScroll);
|
||||||
|
if (targetOrder<0) targetOrder=0;
|
||||||
|
if (targetOrder>e->curSubSong->ordersLen-1) targetOrder=e->curSubSong->ordersLen-1;
|
||||||
|
if (curOrder!=targetOrder) setOrder(targetOrder);
|
||||||
|
}
|
||||||
|
orderScrollLocked=false;
|
||||||
if (selecting) {
|
if (selecting) {
|
||||||
if (!selectingFull) cursor=selEnd;
|
if (!selectingFull) cursor=selEnd;
|
||||||
finishSelection();
|
finishSelection();
|
||||||
|
@ -2929,7 +2941,7 @@ void FurnaceGUI::pointMotion(int x, int y, int xrel, int yrel) {
|
||||||
addScroll(1);
|
addScroll(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (macroDragActive || macroLoopDragActive || waveDragActive || sampleDragActive) {
|
if (macroDragActive || macroLoopDragActive || waveDragActive || sampleDragActive || orderScrollLocked) {
|
||||||
int distance=fabs((double)xrel);
|
int distance=fabs((double)xrel);
|
||||||
if (distance<1) distance=1;
|
if (distance<1) distance=1;
|
||||||
float start=x-xrel;
|
float start=x-xrel;
|
||||||
|
@ -5728,6 +5740,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
latchNibble(false),
|
latchNibble(false),
|
||||||
nonLatchNibble(false),
|
nonLatchNibble(false),
|
||||||
keepLoopAlive(false),
|
keepLoopAlive(false),
|
||||||
|
orderScrollLocked(false),
|
||||||
curWindow(GUI_WINDOW_NOTHING),
|
curWindow(GUI_WINDOW_NOTHING),
|
||||||
nextWindow(GUI_WINDOW_NOTHING),
|
nextWindow(GUI_WINDOW_NOTHING),
|
||||||
curWindowLast(GUI_WINDOW_NOTHING),
|
curWindowLast(GUI_WINDOW_NOTHING),
|
||||||
|
@ -5816,6 +5829,8 @@ FurnaceGUI::FurnaceGUI():
|
||||||
bindSetPending(false),
|
bindSetPending(false),
|
||||||
nextScroll(-1.0f),
|
nextScroll(-1.0f),
|
||||||
nextAddScroll(0.0f),
|
nextAddScroll(0.0f),
|
||||||
|
orderScroll(0.0f),
|
||||||
|
orderScrollSlideOrigin(0.0f),
|
||||||
layoutTimeBegin(0),
|
layoutTimeBegin(0),
|
||||||
layoutTimeEnd(0),
|
layoutTimeEnd(0),
|
||||||
layoutTimeDelta(0),
|
layoutTimeDelta(0),
|
||||||
|
|
|
@ -1419,7 +1419,7 @@ class FurnaceGUI {
|
||||||
SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd;
|
SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd;
|
||||||
bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI;
|
bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI;
|
||||||
bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, waveSigned, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
|
bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, waveSigned, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
|
||||||
bool keepLoopAlive;
|
bool keepLoopAlive, orderScrollLocked;
|
||||||
FurnaceGUIWindows curWindow, nextWindow, curWindowLast;
|
FurnaceGUIWindows curWindow, nextWindow, curWindowLast;
|
||||||
std::atomic<FurnaceGUIWindows> curWindowThreadSafe;
|
std::atomic<FurnaceGUIWindows> curWindowThreadSafe;
|
||||||
float peak[2];
|
float peak[2];
|
||||||
|
@ -1562,7 +1562,7 @@ class FurnaceGUI {
|
||||||
int bindSetTarget, bindSetPrevValue;
|
int bindSetTarget, bindSetPrevValue;
|
||||||
bool bindSetActive, bindSetPending;
|
bool bindSetActive, bindSetPending;
|
||||||
|
|
||||||
float nextScroll, nextAddScroll;
|
float nextScroll, nextAddScroll, orderScroll, orderScrollSlideOrigin;
|
||||||
|
|
||||||
int layoutTimeBegin, layoutTimeEnd, layoutTimeDelta;
|
int layoutTimeBegin, layoutTimeEnd, layoutTimeDelta;
|
||||||
int renderTimeBegin, renderTimeEnd, renderTimeDelta;
|
int renderTimeBegin, renderTimeEnd, renderTimeDelta;
|
||||||
|
|
|
@ -25,6 +25,20 @@
|
||||||
void FurnaceGUI::drawMobileOrderSel() {
|
void FurnaceGUI::drawMobileOrderSel() {
|
||||||
if (!portrait) return;
|
if (!portrait) return;
|
||||||
|
|
||||||
|
if (!orderScrollLocked) {
|
||||||
|
if (orderScroll>(float)curOrder-0.005f && orderScroll<(float)curOrder+0.005f) {
|
||||||
|
orderScroll=curOrder;
|
||||||
|
} else if (orderScroll<curOrder) {
|
||||||
|
orderScroll+=MAX(0.05f,(curOrder-orderScroll)*0.2f);
|
||||||
|
if (orderScroll>curOrder) orderScroll=curOrder;
|
||||||
|
WAKE_UP;
|
||||||
|
} else {
|
||||||
|
orderScroll-=MAX(0.05f,(orderScroll-curOrder)*0.2f);
|
||||||
|
if (orderScroll<curOrder) orderScroll=curOrder;
|
||||||
|
WAKE_UP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::SetNextWindowPos(ImVec2(0.0f,mobileMenuPos*-0.65*canvasH));
|
ImGui::SetNextWindowPos(ImVec2(0.0f,mobileMenuPos*-0.65*canvasH));
|
||||||
ImGui::SetNextWindowSize(ImVec2(canvasW,0.12*canvasW));
|
ImGui::SetNextWindowSize(ImVec2(canvasW,0.12*canvasW));
|
||||||
if (ImGui::Begin("OrderSel",NULL,globalWinFlags)) {
|
if (ImGui::Begin("OrderSel",NULL,globalWinFlags)) {
|
||||||
|
@ -41,18 +55,33 @@ void FurnaceGUI::drawMobileOrderSel() {
|
||||||
);
|
);
|
||||||
ImRect rect=ImRect(minArea,maxArea);
|
ImRect rect=ImRect(minArea,maxArea);
|
||||||
ImGui::ItemSize(size,style.FramePadding.y);
|
ImGui::ItemSize(size,style.FramePadding.y);
|
||||||
ImU32 col=ImGui::GetColorU32(ImGuiCol_Text);
|
|
||||||
if (ImGui::ItemAdd(rect,ImGui::GetID("OrderSelW"))) {
|
if (ImGui::ItemAdd(rect,ImGui::GetID("OrderSelW"))) {
|
||||||
String text=fmt::sprintf("%.2X",curOrder);
|
ImVec2 centerPos=ImLerp(minArea,maxArea,ImVec2(0.5,0.5));
|
||||||
|
|
||||||
|
for (int i=0; i<e->curSubSong->ordersLen; i++) {
|
||||||
|
ImVec2 pos=centerPos;
|
||||||
|
ImVec4 color=uiColors[GUI_COLOR_TEXT];
|
||||||
|
pos.x+=(i-orderScroll)*40.0*dpiScale;
|
||||||
|
if (pos.x<-200.0*dpiScale) continue;
|
||||||
|
if (pos.x>canvasW+200.0*dpiScale) break;
|
||||||
|
String text=fmt::sprintf("%.2X",i);
|
||||||
|
float targetSize=size.y-fabs(i-orderScroll)*2.0*dpiScale;
|
||||||
|
if (targetSize<8.0*dpiScale) targetSize=8.0*dpiScale;
|
||||||
|
color.w*=MIN(1.0f,targetSize/size.y);
|
||||||
|
|
||||||
ImVec2 pos=ImLerp(minArea,maxArea,ImVec2(0.5,0.0));
|
|
||||||
ImGui::PushFont(bigFont);
|
ImGui::PushFont(bigFont);
|
||||||
ImVec2 textSize=ImGui::CalcTextSize(text.c_str());
|
ImVec2 textSize=ImGui::CalcTextSize(text.c_str());
|
||||||
ImGui::PopFont();
|
ImGui::PopFont();
|
||||||
|
|
||||||
pos.x-=textSize.x*0.5*(size.y/textSize.y);
|
pos.x-=textSize.x*0.5*(targetSize/textSize.y);
|
||||||
|
pos.y-=targetSize*0.5;
|
||||||
|
|
||||||
dl->AddText(bigFont,size.y,pos,col,text.c_str());
|
dl->AddText(bigFont,targetSize,pos,ImGui::GetColorU32(color),text.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemClicked()) {
|
||||||
|
orderScrollSlideOrigin=ImGui::GetMousePos().x+orderScroll*40.0f*dpiScale;
|
||||||
|
orderScrollLocked=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
Loading…
Reference in New Issue