* Add missing includes.
* Add libc++ < 20 fallback for floating-point strToNumber
libc++ prior to version 20 does not implement std::from_chars for
floating point types, which causes builds to fail on systems using older
libc++ versions (e.g. FreeBSD).
Add a small fallback using strtof/strtod/strtold for building with
libc++ < 20.
While libstdc++, or libc++ 20 or later continue to use the existing
std::from_chars implementation, this change restores compatibility with
older libc++ versions.
* signals: use tuple reference and check if listeners is empty
use forward_as_tuple as ít creates a temporary tuple reference instead
of copying/moving each argument. also if guard the emitInternal to only
create locals if there is actually any listeners.
* signal: revert forward_as_tuple
cant use references as signals expect a copy/move.
use is_trivially_copyable instead because is_arithmetic_v exludes small
POD structs, enums, and certain trivially copyable types.
also add a if guard in emit if we have no listeners, no point emitting.
Apparently on some setups directly modifying the rectangles is a no-go, see #78.
Pixman is another piece of undocumented shit. I hope whomever wrote this stubs their toe.
Note to self: drop pixman, rewrite region. Fucking idiots.
while profiling vector showed up as a marginal waster because it wasnt a
trivial class, a few if(m_someVector != Vector()) was causing a lot of
churn because of not being trivial and doing a lot of allocaitons and
destructions. make it trivial by defaulting constructor, and destructor,
and while we are at it make it constexpr friendly on constructors and
operators.