1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-28 01:04:50 +01:00
Files
OpenRCT2/src/openrct2/interface/ZoomLevel.h
Hielke Morsink f0c1ea1d37 Split declarations and definitions to improve compile times when editing (#13332)
* Split FileStream declarations and definitions

* Split JobPool declarations and definitions

* Split StringBuilder declarations and definitions

* Split StringReader declarations and definitions

* Split ZoomLevel declarations and definitions

* Fix missing include in FileClassifier.cpp

* Remove pragma once from source files

* Fix missing include in StringBuilder.h

* Update Xcode project

* Fix compilation of tests

Co-authored-by: Michael Steenbeek <m.o.steenbeek@gmail.com>
2020-11-07 12:42:04 +00:00

73 lines
2.1 KiB
C++

/*****************************************************************************
* Copyright (c) 2020 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#include <cstdint>
struct ZoomLevel
{
private:
int8_t _level{};
public:
constexpr ZoomLevel() = default;
constexpr ZoomLevel(int8_t level)
: _level(level)
{
}
constexpr ZoomLevel(const ZoomLevel& rhs)
: _level(rhs._level)
{
}
explicit operator int8_t() const;
ZoomLevel operator++(int);
ZoomLevel& operator++();
ZoomLevel operator--(int);
ZoomLevel& operator--();
ZoomLevel& operator=(const ZoomLevel& other);
ZoomLevel& operator+=(const ZoomLevel& rhs);
ZoomLevel& operator-=(const ZoomLevel& rhs);
friend ZoomLevel operator+(ZoomLevel lhs, const ZoomLevel& rhs);
friend ZoomLevel operator-(ZoomLevel lhs, const ZoomLevel& rhs);
friend bool operator==(const ZoomLevel& lhs, const ZoomLevel& rhs);
friend bool operator!=(const ZoomLevel& lhs, const ZoomLevel& rhs);
friend bool operator>=(const ZoomLevel& lhs, const ZoomLevel& rhs);
friend bool operator<=(const ZoomLevel& lhs, const ZoomLevel& rhs);
friend bool operator>(const ZoomLevel& lhs, const ZoomLevel& rhs);
friend bool operator<(const ZoomLevel& lhs, const ZoomLevel& rhs);
template<typename T> friend T operator*(const T& lhs, const ZoomLevel& rhs)
{
if (rhs._level < 0)
return lhs >> -rhs._level;
else
return lhs << rhs._level;
}
template<typename T> friend T operator/(const T& lhs, const ZoomLevel& rhs)
{
if (rhs._level < 0)
return lhs << -rhs._level;
else
return lhs >> rhs._level;
}
static ZoomLevel min();
static constexpr ZoomLevel max()
{
return 3;
}
};