all of the changes

This commit is contained in:
2026-10-23 18:29:51 +02:00
parent 4c435fdd76
commit 5607dcf2b5
73 changed files with 4365 additions and 2059 deletions

View File

@@ -0,0 +1,37 @@
#include "FluidSim/Desktop/DesktopUi.hpp"
#include <cmath>
#include <iostream>
#include <stdexcept>
using namespace fluidsim::port::desktop;
void check(bool condition,const char* reason) {if(!condition)throw std::runtime_error(reason);}
int main() {
for(auto size : {sf::Vector2u{933,1010},sf::Vector2u{1920,1080},sf::Vector2u{1040,800},sf::Vector2u{800,700}}) {
const auto l=WorkspaceLayout::calculate(size);
for(auto r : {l.sidebar,l.viewport,l.chart,l.inspector,l.pedal}) {
check(r.position.x>=0 && r.position.y>=0 && r.size.x>0 && r.size.y>0,"invalid panel bounds");
check(r.position.x+r.size.x<=size.x && r.position.y+r.size.y<=size.y,"panel escapes window");
}
check(l.sidebar.position.x+l.sidebar.size.x<l.viewport.position.x,"sidebar overlaps engine");
check(l.viewport.position.y+l.viewport.size.y<l.chart.position.y,"engine overlaps dyno");
check(l.chart.position.x+l.chart.size.x<l.inspector.position.x,"dyno overlaps inspector");
}
DesktopUi ui;
const sf::Vector2u size{1440,900};const auto track=WorkspaceLayout::calculate(size).pedal;
const sf::Vector2i point{int(track.position.x+track.size.x*.7f),int(track.position.y+12)};
ui.handle_event(sf::Event::MouseButtonPressed{sf::Mouse::Button::Left,point},size);
check(std::abs(ui.pedal()-.7f)<.01f,"slider should set direct pedal request");
ui.update_pedal(.5f,false,true);
check(std::abs(ui.pedal()-.7f)<.01f,"keyboard ramp must not interfere while dragging slider");
ui.handle_event(sf::Event::MouseButtonReleased{sf::Mouse::Button::Left,point},size);
check(ui.pedal()==0,"slider must spring to zero on release");
ui.update_pedal(.5f,true,false);check(ui.pedal()==1,"W full travel must take 0.5 seconds");
ui.update_pedal(.25f,false,false);check(std::abs(ui.pedal()-.5f)<1e-6f,"keyboard release travel timing");
ui.update_pedal(.25f,false,false);check(ui.pedal()==0,"keyboard must return to idle request");
ui.handle_event(sf::Event::MouseButtonPressed{sf::Mouse::Button::Left,point},size);
ui.handle_event(sf::Event::FocusLost{},size);check(ui.pedal()==0,"lost focus must release UI pedal");
OrbitCamera camera;camera.reset(2);auto before=camera.target;
camera.orbit({40,20});camera.pan({20,15},500);camera.zoom(2);
check(camera.pitch<=80 && camera.pitch>=-75 && camera.distance>.35f,"camera bounds");
check(camera.target.x!=before.x || camera.target.y!=before.y,"camera panning must move target");
std::cout<<"Desktop layout, spring pedal, keyboard travel and orbit camera checks passed\n";
}