11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
19PROMEKI_NAMESPACE_BEGIN
61 PROMEKI_DATATYPE(PixelAspect, DataTypePixelAspect, 1)
64 Error writeToStream(DataStream &s) const;
66 template <uint32_t V> static Result<PixelAspect> readFromStream(DataStream &s);
69 using RationalType = Rational<
unsigned int>;
72 PixelAspect() : _par(1, 1) {}
80 PixelAspect(
unsigned int w,
unsigned int h) : _par(w, h) {}
83 explicit PixelAspect(
const RationalType &r) : _par(r) {}
86 bool isValid()
const {
return _par.isValid() && _par.numerator() > 0 && _par.denominator() > 0; }
89 bool isSquare()
const {
return isValid() && _par.numerator() == _par.denominator(); }
92 unsigned int width()
const {
return _par.numerator(); }
95 unsigned int height()
const {
return _par.denominator(); }
98 const RationalType &rational()
const {
return _par; }
101 double toDouble()
const {
return _par.toDouble(); }
112 String toString()
const;
120 static Result<PixelAspect> fromString(
const String &s);
123 bool operator==(
const PixelAspect &o)
const {
return _par == o._par; }
125 bool operator!=(
const PixelAspect &o)
const {
return _par != o._par; }