#pragma once #include #include #include #include #include #include namespace scwx { namespace qt { namespace map { class GenericLayerImpl; class GenericLayer : public QObject { Q_OBJECT public: explicit GenericLayer(std::shared_ptr context); virtual ~GenericLayer(); virtual void Initialize() = 0; virtual void Render(const QMapLibreGL::CustomLayerRenderParameters&) = 0; virtual void Deinitialize() = 0; /** * @brief Run mouse picking on the layer. * * @param [in] params Custom layer render parameters * @param [in] mouseLocalPos Mouse cursor widget position * @param [in] mouseGlobalPos Mouse cursor screen position * @param [in] mouseCoords Mouse cursor location in map screen coordinates * @param [in] mouseGeoCoords Mouse cursor location in geographic coordinates * * @return true if a draw item was picked, otherwise false */ virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, const QPointF& mouseLocalPos, const QPointF& mouseGlobalPos, const glm::vec2& mouseCoords, const common::Coordinate& mouseGeoCoords); signals: void NeedsRendering(); protected: std::shared_ptr context() const; private: std::unique_ptr p; }; } // namespace map } // namespace qt } // namespace scwx