#include "FluidSim/Desktop/DesktopUi.hpp" #include #include #include 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=-75 && camera.distance>.35f,"camera bounds"); check(camera.target.x!=before.x || camera.target.y!=before.y,"camera panning must move target"); for(float yaw:{-90.f,-28.f,0.f,90.f,180.f})for(float pitch:{-60.f,0.f,70.f}) { camera.yaw=yaw;camera.pitch=pitch;camera.target={.7f,.4f,-.2f};camera.distance=3; const auto listener=camera.listener(1.8f,1.1f); const float y=yaw*.017453293f,p=pitch*.017453293f; const float dx=listener.position.x-camera.target.x-1.1f; const float dy=listener.position.y-camera.target.y,dz=listener.position.z-camera.target.z; const float x1=std::cos(y)*dx+std::sin(y)*dz,z1=-std::sin(y)*dx+std::cos(y)*dz; check(std::abs(x1)<2e-6f && std::abs(std::cos(p)*dy-std::sin(p)*z1)<2e-6f && std::abs(std::sin(p)*dy+std::cos(p)*z1-5.4f)<2e-6f, "audio listener must coincide with the rendered camera including fit offsets"); check(std::abs(std::cos(y)*listener.right.x+std::sin(y)*listener.right.z-1)<1e-6f, "audio ears must rotate with the camera right axis"); } std::cout<<"Desktop layout, spring pedal, keyboard travel and orbit camera checks passed\n"; }