From 53c2f2978576b1195fb761c85fbe01de63a5c6fa Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Thu, 11 May 2023 23:01:04 -0500 Subject: [PATCH] Fix display scaling for custom map widgets --- external/imgui-backend-qt | 2 +- scwx-qt/source/scwx/qt/map/map_context.cpp | 12 ++++++++++++ scwx-qt/source/scwx/qt/map/map_context.hpp | 2 ++ scwx-qt/source/scwx/qt/map/map_widget.cpp | 3 +++ scwx-qt/source/scwx/qt/map/overlay_layer.cpp | 12 ++++++++---- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/external/imgui-backend-qt b/external/imgui-backend-qt index daef1910..0fe974eb 160000 --- a/external/imgui-backend-qt +++ b/external/imgui-backend-qt @@ -1 +1 @@ -Subproject commit daef19109c763e6eb0e4339837596616fe9dc492 +Subproject commit 0fe974ebd037844c9f23d6325dbcc128e9973749 diff --git a/scwx-qt/source/scwx/qt/map/map_context.cpp b/scwx-qt/source/scwx/qt/map/map_context.cpp index 0ce3bf38..b141b838 100644 --- a/scwx-qt/source/scwx/qt/map/map_context.cpp +++ b/scwx-qt/source/scwx/qt/map/map_context.cpp @@ -13,6 +13,7 @@ public: explicit Impl(std::shared_ptr radarProductView) : map_ {}, settings_ {}, + pixelRatio_ {1.0f}, radarProductView_ {radarProductView}, radarProductGroup_ {common::RadarProductGroup::Unknown}, radarProduct_ {"???"}, @@ -24,6 +25,7 @@ public: std::weak_ptr map_; MapSettings settings_; + float pixelRatio_; std::shared_ptr radarProductView_; common::RadarProductGroup radarProductGroup_; std::string radarProduct_; @@ -50,6 +52,11 @@ MapSettings& MapContext::settings() return p->settings_; } +float MapContext::pixel_ratio() const +{ + return p->pixelRatio_; +} + std::shared_ptr MapContext::radar_product_view() const { return p->radarProductView_; @@ -75,6 +82,11 @@ void MapContext::set_map(std::shared_ptr map) p->map_ = map; } +void MapContext::set_pixel_ratio(float pixelRatio) +{ + p->pixelRatio_ = pixelRatio; +} + void MapContext::set_radar_product_view( std::shared_ptr radarProductView) { diff --git a/scwx-qt/source/scwx/qt/map/map_context.hpp b/scwx-qt/source/scwx/qt/map/map_context.hpp index 1341d619..b9659ad2 100644 --- a/scwx-qt/source/scwx/qt/map/map_context.hpp +++ b/scwx-qt/source/scwx/qt/map/map_context.hpp @@ -28,12 +28,14 @@ public: std::weak_ptr map() const; MapSettings& settings(); + float pixel_ratio() const; std::shared_ptr radar_product_view() const; common::RadarProductGroup radar_product_group() const; std::string radar_product() const; int16_t radar_product_code() const; void set_map(std::shared_ptr map); + void set_pixel_ratio(float pixelRatio); void set_radar_product_view( std::shared_ptr radarProductView); void set_radar_product_group(common::RadarProductGroup radarProductGroup); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 40eb40f0..b63fa565 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -811,6 +811,9 @@ void MapWidget::paintGL() ImGui_ImplOpenGL3_NewFrame(); ImGui::NewFrame(); + // Update pixel ratio + p->context_->set_pixel_ratio(pixelRatio()); + // Render QMapLibreGL Map p->map_->resize(size()); p->map_->setFramebufferObject(defaultFramebufferObject(), diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index bc330960..e7f4b4ae 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -66,9 +66,6 @@ OverlayLayer::OverlayLayer(std::shared_ptr context) : AddDrawItem(p->activeBoxInner_); p->activeBoxOuter_->SetPosition(0.0f, 0.0f); - p->activeBoxOuter_->SetBorder(1.0f, {0, 0, 0, 255}); - p->activeBoxInner_->SetBorder(1.0f, {255, 255, 255, 255}); - p->activeBoxInner_->SetPosition(1.0f, 1.0f); } OverlayLayer::~OverlayLayer() = default; @@ -96,6 +93,7 @@ void OverlayLayer::Render( gl::OpenGLFunctions& gl = context()->gl(); auto radarProductView = context()->radar_product_view(); auto& settings = context()->settings(); + const float pixelRatio = context()->pixel_ratio(); if (p->sweepTimeNeedsUpdate_ && radarProductView != nullptr) { @@ -118,7 +116,13 @@ void OverlayLayer::Render( if (settings.isActive_) { p->activeBoxOuter_->SetSize(params.width, params.height); - p->activeBoxInner_->SetSize(params.width - 2.0f, params.height - 2.0f); + p->activeBoxInner_->SetSize(params.width - (2.0f * pixelRatio), + params.height - (2.0f * pixelRatio)); + + p->activeBoxInner_->SetPosition(1.0f * pixelRatio, 1.0f * pixelRatio); + + p->activeBoxOuter_->SetBorder(1.0f * pixelRatio, {0, 0, 0, 255}); + p->activeBoxInner_->SetBorder(1.0f * pixelRatio, {255, 255, 255, 255}); } DrawLayer::Render(params);