Use unit library to perform font size conversions

This commit is contained in:
Dan Paulat 2023-09-12 23:55:00 -05:00
parent 10a1755056
commit 9ea3ed47a6
3 changed files with 36 additions and 6 deletions

View file

@ -1,3 +1,5 @@
#define NOMINMAX
#include <scwx/qt/config/radar_site.hpp>
#include <scwx/qt/main/main_window.hpp>
#include <scwx/qt/main/versions.hpp>

View file

@ -1,5 +1,31 @@
#pragma once
#include <units/core.h>
namespace units
{
namespace dimension
{
struct font_size_tag
{
static constexpr const char* const name = "font size";
static constexpr const char* const abbreviation = "px";
};
using font_size = make_dimension<font_size_tag>;
} // namespace dimension
UNIT_ADD(font_size,
pixels,
px,
conversion_factor<std::ratio<1>, dimension::font_size>)
UNIT_ADD(font_size, points, pt, conversion_factor<std::ratio<4, 3>, pixels<>>)
} // namespace units
namespace scwx
{
namespace qt

View file

@ -1,6 +1,7 @@
#include <scwx/qt/util/tooltip.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/types/font_types.hpp>
#include <scwx/qt/util/imgui.hpp>
#include <scwx/util/logger.hpp>
@ -101,21 +102,22 @@ void Show(const std::string& text, const QPointF& mouseGlobalPos)
else if (tooltipMethod_ == TooltipMethod::QLabel)
{
// Get monospace font size
std::size_t fontSize = 16;
auto fontSizes =
units::font_size::pixels<double> fontSize {16};
auto fontSizes =
manager::SettingsManager::general_settings().font_sizes().GetValue();
if (fontSizes.size() > 1)
{
fontSize = fontSizes[1];
fontSize = units::font_size::pixels<double> {fontSizes[1]};
}
else if (fontSizes.size() > 0)
{
fontSize = fontSizes[0];
fontSize = units::font_size::pixels<double> {fontSizes[0]};
}
// Configure the label
tooltipLabel_->setFont(
QFont("Inconsolata", static_cast<int>(std::round(fontSize * 0.72))));
QFont font("Inconsolata");
font.setPointSizeF(units::font_size::points<double>(fontSize).value());
tooltipLabel_->setFont(font);
tooltipLabel_->setText(QString::fromStdString(displayText));
// Get the screen the label will be displayed on