#include #include #include #include #include #include namespace scwx { namespace qt { namespace map { static const std::string logPrefix_ = "scwx::qt::map::marker_layer"; static const auto logger_ = scwx::util::Logger::Create(logPrefix_); class MarkerLayer::Impl { public: explicit Impl(MarkerLayer* self, std::shared_ptr context) : self_ {self}, geoIcons_ {std::make_shared(context)} { ConnectSignals(); } ~Impl() {} void ReloadMarkers(); void ConnectSignals(); MarkerLayer* self_; const std::string& markerIconName_ { types::GetTextureName(types::ImageTexture::Cursor17)}; std::shared_ptr geoIcons_; }; void MarkerLayer::Impl::ConnectSignals() { auto markerManager = manager::MarkerManager::Instance(); QObject::connect(markerManager.get(), &manager::MarkerManager::MarkersUpdated, self_, [this]() { this->ReloadMarkers(); }); } void MarkerLayer::Impl::ReloadMarkers() { logger_->debug("ReloadMarkers()"); auto markerManager = manager::MarkerManager::Instance(); geoIcons_->StartIcons(); for (size_t i = 0; i < markerManager->marker_count(); i++) { const types::MarkerInfo& marker = markerManager->get_marker(i); std::shared_ptr icon = geoIcons_->AddIcon(); geoIcons_->SetIconTexture(icon, markerIconName_, 0); geoIcons_->SetIconLocation(icon, marker.latitude, marker.longitude); } geoIcons_->FinishIcons(); } MarkerLayer::MarkerLayer(const std::shared_ptr& context) : DrawLayer(context), p(std::make_unique(this, context)) { AddDrawItem(p->geoIcons_); } MarkerLayer::~MarkerLayer() = default; void MarkerLayer::Initialize() { logger_->debug("Initialize()"); DrawLayer::Initialize(); p->geoIcons_->StartIconSheets(); p->geoIcons_->AddIconSheet(p->markerIconName_); p->geoIcons_->FinishIconSheets(); p->ReloadMarkers(); } void MarkerLayer::Render(const QMapLibre::CustomLayerRenderParameters& params) { // auto markerManager = manager::MarkerManager::Instance(); gl::OpenGLFunctions& gl = context()->gl(); DrawLayer::Render(params); SCWX_GL_CHECK_ERROR(); } void MarkerLayer::Deinitialize() { logger_->debug("Deinitialize()"); DrawLayer::Deinitialize(); } } // namespace map } // namespace qt } // namespace scwx