11 std::isfinite(
scale) &&
35 const double scale = std::min(
43 (
width - pixelWidth) / 2.0,
44 (
height - pixelHeight) / 2.0,
78 double windowY)
noexcept
80 if (!transform.valid() ||
81 !std::isfinite(windowX) ||
82 !std::isfinite(windowY))
88 transform.offsetX + transform.pixelWidth;
91 transform.offsetY + transform.pixelHeight;
93 if (windowX < transform.offsetX ||
94 windowY < transform.offsetY ||
103 (windowX - transform.offsetX) /
106 (windowY - transform.offsetY) /
123 if (!point)
return std::nullopt;
124 if (
modal)
return point;
125 if (!std::isfinite(worldViewport.x) || !std::isfinite(worldViewport.y) ||
126 !std::isfinite(worldViewport.width) || !std::isfinite(worldViewport.height) ||
127 worldViewport.width <= 0.0 || worldViewport.height <= 0.0)
129 const bool inside = point->x >= worldViewport.x && point->y >= worldViewport.y &&
130 point->x < worldViewport.x + worldViewport.width &&
131 point->y < worldViewport.y + worldViewport.height;
132 return inside ? std::nullopt : point;
139 if (!transform.valid())
std::atomic< float > right
std::optional< LogicalPoint > windowToUIOverlay(const Transform &uiTransform, double windowX, double windowY) noexcept
Transform makeTransform(int targetWidth, int targetHeight) noexcept
constexpr double World3DHeight
constexpr double LogicalHeight
constexpr double LogicalWidth
PixelRect logicalToPixelRect(const Transform &transform, const LogicalRect &logicalRect) noexcept
constexpr double World3DWidth
std::optional< LogicalPoint > windowToLogical(const Transform &transform, double windowX, double windowY) noexcept
Transform makeWorld3DTransform(int targetWidth, int targetHeight) noexcept