载入中...
搜索中...
未找到
PcgPhotoModeColorPicker.cpp
浏览该文件的文档.
3#include <simplesquirrel/simplesquirrel.hpp>
4#include <algorithm>
5#include <cmath>
6namespace eve::ui {namespace {bool finite4(float a,float b,float c,float d){return std::isfinite(a)&&std::isfinite(b)&&std::isfinite(c)&&std::isfinite(d);}}
7bool PcgPhotoModeColorPicker::hdrActive()const noexcept{return hdr_&&(a_>1.f||a_<0.f);}
8Result<void> PcgPhotoModeColorPicker::open(float r,float g,float b,float a,bool hdr){if(!finite4(r,g,b,a))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"color must be finite","ui.pcgPhotoModeColorPicker"));float nr=r,ng=g,nb=b;if(hdr&&(a>1.f||a<0.f)){nr*=a;ng*=a;nb*=a;}r_=nr;g_=ng;b_=nb;a_=a;hdr_=hdr;open_=true;front_=true;return Result<void>::success();}
9Result<void> PcgPhotoModeColorPicker::setLast(float r,float g,float b,float a){if(!finite4(r,g,b,a))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"color must be finite","ui.pcgPhotoModeColorPicker"));lastR_=r;lastG_=g;lastB_=b;lastA_=a;return Result<void>::success();}
10Result<void> PcgPhotoModeColorPicker::setChannel(float&dst,float v){if(!std::isfinite(v))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"color must be finite","ui.pcgPhotoModeColorPicker"));dst=v;++revision_;return Result<void>::success();}
11Result<void> PcgPhotoModeColorPicker::setRed(float v){return setChannel(r_,v);}Result<void> PcgPhotoModeColorPicker::setGreen(float v){return setChannel(g_,v);}Result<void> PcgPhotoModeColorPicker::setBlue(float v){return setChannel(b_,v);}Result<void> PcgPhotoModeColorPicker::setHdr(float v){return setChannel(a_,v);}
12void PcgPhotoModeColorPicker::reset()noexcept{r_=lastR_;g_=lastG_;b_=lastB_;a_=lastA_;revision_+=5;}
13float PcgPhotoModeColorPicker::getPreviewRed()const noexcept{return r_*(hdrActive()?a_:1.f);}float PcgPhotoModeColorPicker::getPreviewGreen()const noexcept{return g_*(hdrActive()?a_:1.f);}float PcgPhotoModeColorPicker::getPreviewBlue()const noexcept{return b_*(hdrActive()?a_:1.f);}float PcgPhotoModeColorPicker::getHdrSwatch()const noexcept{return std::clamp((a_+5.f)/10.f,0.f,1.f);}PcgUiRequestStatus PcgPhotoModeColorPicker::consumeBringToFront()noexcept{auto v=front_?PcgUiRequestStatus::Requested:PcgUiRequestStatus::None;front_=false;return v;}
14void exposePcgPhotoModeColorPickerBindings(ssq::Table&t){auto c=t.addClass("PcgPhotoModeColorPicker",ssq::Class::Ctor<PcgPhotoModeColorPicker()>());auto vm=t.getHandle();c.addFunc("open",[vm](PcgPhotoModeColorPicker*s,float r,float g,float b,float a,bool h){return eve::script::projectResult(vm,s->open(r,g,b,a,h));});c.addFunc("setLast",[vm](PcgPhotoModeColorPicker*s,float r,float g,float b,float a){return eve::script::projectResult(vm,s->setLast(r,g,b,a));});c.addFunc("setFocusedName",&PcgPhotoModeColorPicker::setFocusedName);c.addFunc("close",[](PcgPhotoModeColorPicker*s){s->close();});c.addFunc("setRed",[vm](PcgPhotoModeColorPicker*s,float v){return eve::script::projectResult(vm,s->setRed(v));});c.addFunc("setGreen",[vm](PcgPhotoModeColorPicker*s,float v){return eve::script::projectResult(vm,s->setGreen(v));});c.addFunc("setBlue",[vm](PcgPhotoModeColorPicker*s,float v){return eve::script::projectResult(vm,s->setBlue(v));});c.addFunc("setHdr",[vm](PcgPhotoModeColorPicker*s,float v){return eve::script::projectResult(vm,s->setHdr(v));});c.addFunc("reset",[](PcgPhotoModeColorPicker*s){s->reset();});c.addFunc("getRed",[](const PcgPhotoModeColorPicker*s){return s->getRed();});c.addFunc("getGreen",[](const PcgPhotoModeColorPicker*s){return s->getGreen();});c.addFunc("getBlue",[](const PcgPhotoModeColorPicker*s){return s->getBlue();});c.addFunc("getAlpha",[](const PcgPhotoModeColorPicker*s){return s->getAlpha();});c.addFunc("getPreviewRed",[](const PcgPhotoModeColorPicker*s){return s->getPreviewRed();});c.addFunc("getPreviewGreen",[](const PcgPhotoModeColorPicker*s){return s->getPreviewGreen();});c.addFunc("getPreviewBlue",[](const PcgPhotoModeColorPicker*s){return s->getPreviewBlue();});c.addFunc("getHdrSwatch",[](const PcgPhotoModeColorPicker*s){return s->getHdrSwatch();});c.addFunc("getHdrEnabled",[](const PcgPhotoModeColorPicker*s){return s->getHdrEnabled();});c.addFunc("getOpen",[](const PcgPhotoModeColorPicker*s){return s->getOpen();});c.addFunc("getFocusedName",[](const PcgPhotoModeColorPicker*s){return s->getFocusedName();});c.addFunc("getChangeRevision",[](const PcgPhotoModeColorPicker*s){return s->getChangeRevision();});c.addFunc("consumeBringToFront",[](PcgPhotoModeColorPicker*s){return s->consumeBringToFront()==PcgUiRequestStatus::Requested;});}
15}
const std::string & s
HSQUIRRELVM vm
Definition ECS.cpp:20
tensor::Graph g
Definition GpuGraph.cpp:7
double r
float v
std::int32_t c
int h
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
float d
float t
The single Squirrel projection for common Result, Status and Value.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Caller-owned runtime model of Pcg PhotoModeColorPicker.
Result< void > open(float r, float g, float b, float a, bool hdr)
Open with a source color and preserve Pcg's HDR preprocessing.
Result< void > setHdr(float v)
Set HDR alpha and publish one change.
void setFocusedName(const std::string &name)
Set the focused display name, exposed with Pcg parentheses.
Result< void > setGreen(float v)
Set one raw channel and publish one change.
float getPreviewRed() const noexcept
Return displayed/applied RGB after optional HDR multiplication.
PcgUiRequestStatus consumeBringToFront() noexcept
Return and clear the SetAsLastSibling request.
float getHdrSwatch() const noexcept
Return HDR slider grayscale swatch.
void reset() noexcept
Restore last RGBA and reproduce four slider events plus explicit callback.
Result< void > setRed(float v)
Set one raw channel and publish one change.
Result< void > setLast(float r, float g, float b, float a)
Store the color restored by reset.
Result< void > setBlue(float v)
Set one raw channel and publish one change.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
void exposePcgPhotoModeColorPickerBindings(ssq::Table &t)
Register Pcg photo-mode color-picker bindings.
PcgUiRequestStatus
Explicit status returned when consuming a one-shot Pcg UI request.
Definition PcgUiStatus.h:4