53#ifndef WXMAXIMA_FONTATTRIBS_H
54#define WXMAXIMA_FONTATTRIBS_H
57#include "EnumWrapper.h"
59#include <wx/version.h>
100 constexpr static float Size_Unit = 0.05f;
103 using value_type = int16_t;
105 constexpr static float Minimum_Size = 4.0f;
106 constexpr static float Maximum_Size = std::numeric_limits<value_type>::max() * Size_Unit;
109 constexpr explicit AFontSize(
float size) : m_uSize(ToUSize(size)) {}
111 m_uSize(std::max(minimum.m_uSize, ToUSize(
static_cast<float>(size)))) {}
115 constexpr void Set(
float size) { m_uSize = ToUSize(size); }
116 constexpr void Clear() { m_uSize = {}; }
121 constexpr auto operator<=>(
const AFontSize& o)
const =
default;
122 constexpr float Get()
const {
return IsValid() ? m_uSize * Size_Unit : Minimum_Size; }
123 constexpr long GetAsLong()
const {
return long(Get() + 0.5f); }
124 constexpr auto GetForWX()
const;
125 constexpr bool IsNull()
const {
return !IsValid(); }
126 constexpr bool IsValid()
const {
return m_uSize > 0; }
127 constexpr bool IsMinimal()
const {
return m_uSize == ToUSize(Minimum_Size); }
135 value_type m_uSize = {};
136 constexpr static value_type ToUSize(
float size);
139constexpr double operator*(
double factor,
AFontSize size) {
return factor * size.Get(); }
140constexpr double operator*(
AFontSize size,
double factor) {
return size.Get() * factor; }
141constexpr double operator/(
double dividend,
AFontSize size) {
return dividend / size.Get(); }
142constexpr double operator/(
AFontSize size,
double divisor) {
return size.Get() / divisor; }
143constexpr double operator+(
double offset,
AFontSize size) {
return offset + size.Get(); }
144constexpr double operator+(
AFontSize size,
double offset) {
return size.Get() + offset; }
145constexpr double operator-(
double offset,
AFontSize size) {
return offset - size.Get(); }
146constexpr double operator-(
AFontSize size,
double offset) {
return size.Get() - offset; }
148{
return size.Set(
static_cast<float>(size - factor)), size; }
150constexpr AFontSize::value_type AFontSize::ToUSize(
float size)
152 return AFontSize::value_type(std::clamp(size, Minimum_Size, Maximum_Size) / Size_Unit + 0.5f);
158#if wxCHECK_VERSION(3, 1, 2)
159 return static_cast<double>(Get());
Small compatibility shims for older toolchains and older wxWidgets.
#define wxWARN_UNUSED
Marks a class whose unused instances are a bug.
Definition: Compat.h:116
A Type-Safe Fixed-Point Font Size.
Definition: FontAttribs.h:99
constexpr auto GetForWX() const
Get the numerical value suitable for passing to wxFont/wxFontInfo.
Definition: FontAttribs.h:156
Definition: FontAttribs.h:129