Add map logo to map

This commit is contained in:
Dan Paulat 2024-03-05 22:56:27 -06:00
parent f6ac027725
commit 074a39d224

View file

@ -67,13 +67,23 @@ public:
types::GetTextureName(types::ImageTexture::CardinalPoint24)}; types::GetTextureName(types::ImageTexture::CardinalPoint24)};
const std::string& compassIconName_ { const std::string& compassIconName_ {
types::GetTextureName(types::ImageTexture::Compass24)}; types::GetTextureName(types::ImageTexture::Compass24)};
const std::string& mapboxLogoImageName_ {
types::GetTextureName(types::ImageTexture::MapboxLogo)};
const std::string& mapTilerLogoImageName_ {
types::GetTextureName(types::ImageTexture::MapTilerLogo)};
std::shared_ptr<gl::draw::IconDrawItem> compassIcon_ {}; std::shared_ptr<gl::draw::IconDrawItem> compassIcon_ {};
bool compassIconDirty_ {false}; bool compassIconDirty_ {false};
double lastBearing_ {0.0}; double lastBearing_ {0.0};
double lastWidth_ {0.0}; std::shared_ptr<gl::draw::IconDrawItem> mapLogoIcon_ {};
double lastHeight_ {0.0};
float lastFontSize_ {0.0f}; bool firstRender_ {true};
double lastWidth_ {0.0};
double lastHeight_ {0.0};
float lastFontSize_ {0.0f};
QMargins lastColorTableMargins_ {};
std::string sweepTimeString_ {}; std::string sweepTimeString_ {};
bool sweepTimeNeedsUpdate_ {true}; bool sweepTimeNeedsUpdate_ {true};
@ -131,6 +141,8 @@ void OverlayLayer::Initialize()
p->icons_->StartIconSheets(); p->icons_->StartIconSheets();
p->icons_->AddIconSheet(p->cardinalPointIconName_); p->icons_->AddIconSheet(p->cardinalPointIconName_);
p->icons_->AddIconSheet(p->compassIconName_); p->icons_->AddIconSheet(p->compassIconName_);
p->icons_->AddIconSheet(p->mapboxLogoImageName_)->SetAnchor(0.0f, 1.0f);
p->icons_->AddIconSheet(p->mapTilerLogoImageName_)->SetAnchor(0.0f, 1.0f);
p->icons_->FinishIconSheets(); p->icons_->FinishIconSheets();
p->icons_->StartIcons(); p->icons_->StartIcons();
@ -180,6 +192,19 @@ void OverlayLayer::Initialize()
break; break;
} }
}); });
p->mapLogoIcon_ = p->icons_->AddIcon();
if (context()->map_provider() == MapProvider::Mapbox)
{
gl::draw::Icons::SetIconTexture(
p->mapLogoIcon_, p->mapboxLogoImageName_, 0);
}
else if (context()->map_provider() == MapProvider::MapTiler)
{
gl::draw::Icons::SetIconTexture(
p->mapLogoIcon_, p->mapTilerLogoImageName_, 0);
}
p->icons_->FinishIcons(); p->icons_->FinishIcons();
connect(p->positionManager_.get(), connect(p->positionManager_.get(),
@ -356,18 +381,27 @@ void OverlayLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)
ImGui::End(); ImGui::End();
} }
QMargins colorTableMargins = context()->color_table_margins();
if (colorTableMargins != p->lastColorTableMargins_ || p->firstRender_)
{
// Draw map logo with a 10x10 indent from the bottom left
gl::draw::Icons::SetIconLocation(p->mapLogoIcon_,
10 + colorTableMargins.left(),
10 + colorTableMargins.bottom());
p->icons_->FinishIcons();
}
auto mapCopyrights = context()->map_copyrights(); auto mapCopyrights = context()->map_copyrights();
if (mapCopyrights.length() > 0) if (mapCopyrights.length() > 0)
{ {
auto attributionFont = manager::FontManager::Instance().GetImGuiFont( auto attributionFont = manager::FontManager::Instance().GetImGuiFont(
types::FontCategory::Attribution); types::FontCategory::Attribution);
ImGui::SetNextWindowPos( ImGui::SetNextWindowPos(ImVec2 {static_cast<float>(params.width),
ImVec2 {static_cast<float>(params.width), static_cast<float>(params.height) -
static_cast<float>(params.height) - colorTableMargins.bottom()},
context()->color_table_margins().bottom()}, ImGuiCond_Always,
ImGuiCond_Always, ImVec2 {1.0f, 1.0f});
ImVec2 {1.0f, 1.0f});
ImGui::SetNextWindowBgAlpha(0.5f); ImGui::SetNextWindowBgAlpha(0.5f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2 {3.0f, 2.0f}); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2 {3.0f, 2.0f});
ImGui::PushFont(attributionFont->font()); ImGui::PushFont(attributionFont->font());
@ -381,10 +415,12 @@ void OverlayLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)
ImGui::PopStyleVar(); ImGui::PopStyleVar();
} }
p->lastWidth_ = params.width; p->firstRender_ = false;
p->lastHeight_ = params.height; p->lastWidth_ = params.width;
p->lastBearing_ = params.bearing; p->lastHeight_ = params.height;
p->lastFontSize_ = ImGui::GetFontSize(); p->lastBearing_ = params.bearing;
p->lastFontSize_ = ImGui::GetFontSize();
p->lastColorTableMargins_ = colorTableMargins;
SCWX_GL_CHECK_ERROR(); SCWX_GL_CHECK_ERROR();
} }