Extend Size class

* Compute resolution
* Get abbreviation, eg. 1080p
This commit is contained in:
Martchus 2017-08-17 18:18:10 +02:00
parent 78ceef49fb
commit c79e0435fe
3 changed files with 52 additions and 0 deletions

View File

@ -111,6 +111,7 @@ set(SRC_FILES
flac/flacmetadata.cpp
flac/flacstream.cpp
signature.cpp
size.cpp
statusprovider.cpp
tag.cpp
tagtarget.cpp

31
size.cpp Normal file
View File

@ -0,0 +1,31 @@
#include "./size.h"
namespace Media {
/*!
* \brief Returns an abbreviation for the current instance, eg. 720p for sizes greather than 1280×720
* and 1080p for sizes greather than 1920×1080.
*/
const char *Size::abbreviation() const
{
if(*this >= Size(7680, 4320)) {
return "8k";
} else if(*this >= Size(3840, 2160)) {
return "4k";
} else if(*this >= Size(1920, 1080)) {
return "1080p";
} else if(*this >= Size(1280, 720)) {
return "720p";
} else if(*this >= Size(704, 576)) {
return "576p";
} else if(*this >= Size(640, 480)) {
return "480p";
} else if(*this >= Size(480, 320)) {
return "320p";
} else if(*this >= Size(320, 240)) {
return "240p";
}
return "<240p";
}
}

20
size.h
View File

@ -23,9 +23,12 @@ public:
constexpr uint32 height() const;
void setWidth(uint32 value);
void setHeight(uint32 value);
constexpr uint32 resolution() const;
const char *abbreviation() const;
bool constexpr isNull() const;
bool constexpr operator==(const Size &other) const;
bool constexpr operator>=(const Size &other) const;
std::string toString() const;
private:
@ -81,6 +84,14 @@ inline void Size::setHeight(uint32 value)
m_height = value;
}
/*!
* \brief Returns the resolution of the current instance (product of with and height).
*/
constexpr uint32 Size::resolution() const
{
return m_width * m_height;
}
/*!
* \brief Returns an indication whether both the width and height is 0.
*/
@ -97,6 +108,15 @@ constexpr bool Size::operator==(const Size &other) const
return (m_width == other.m_width) && (m_height == other.m_height);
}
/*!
* \brief Returns whether this instance is greather than \a other.
* \remarks Both dimensions must be greather. This operator does *not* take the resolution() into account.
*/
constexpr bool Size::operator>=(const Size &other) const
{
return (m_width >= other.m_width) && (m_height >= other.m_height);
}
/*!
* \brief Returns the string representation of the current size.
*/