mirror of
https://github.com/SteamFramelyHomebrew/framely.git
synced 2026-10-22 15:05:58 +02:00
20 lines
955 B
C++
20 lines
955 B
C++
#pragma once
|
|
#include <algorithm>
|
|
#include <chrono>
|
|
// Only compositor alpha animates; CEF can reuse its cached texture throughout.
|
|
struct LauncherFade {
|
|
bool reduced=false,waiting=false;float from=0,to=0;int duration=0;
|
|
std::chrono::steady_clock::time_point started{};
|
|
float value(std::chrono::steady_clock::time_point now)const{
|
|
if(waiting)return 0;
|
|
if(reduced||!duration)return to;
|
|
float t=std::clamp(std::chrono::duration<float,std::milli>(now-started).count()/duration,0.f,1.f);
|
|
float eased=to>from?1-(1-t)*(1-t)*(1-t):t*t*(3-2*t);
|
|
return from+(to-from)*eased;
|
|
}
|
|
void open(std::chrono::steady_clock::time_point now){from=0;to=1;duration=320;started=now;waiting=true;}
|
|
void ready(std::chrono::steady_clock::time_point now){if(waiting){waiting=false;started=now;}}
|
|
void close(std::chrono::steady_clock::time_point now){from=value(now);waiting=false;to=0;duration=240;started=now;}
|
|
void reset(){waiting=false;from=to=0;duration=0;}
|
|
};
|