#pragma once #include "skin.hpp" #include "shape.hpp" #include "drape/gpu_program_manager.hpp" #include "drape/texture_manager.hpp" #include "geometry/screenbase.hpp" #include "std/map.hpp" #include "std/unique_ptr.hpp" namespace gui { class LayerRenderer { public: LayerRenderer() = default; LayerRenderer(LayerRenderer && other) = delete; LayerRenderer(LayerRenderer const & other) = delete; LayerRenderer & operator=(LayerRenderer && other) = delete; LayerRenderer & operator=(LayerRenderer const & other) = delete; ~LayerRenderer(); void Build(ref_ptr mng); void Render(ref_ptr mng, bool routingActive, ScreenBase const & screen); void Merge(ref_ptr other); void SetLayout(gui::TWidgetsLayoutInfo const & info); bool OnTouchDown(m2::RectD const & touchArea); void OnTouchUp(m2::RectD const & touchArea); void OnTouchCancel(m2::RectD const & touchArea); bool HasWidget(EWidget widget) const; private: void DestroyRenderers(); friend class LayerCacher; void AddShapeRenderer(EWidget widget, drape_ptr && shape); private: typedef map > TRenderers; TRenderers m_renderers; ref_ptr m_activeOverlay; FeatureID m_activeOverlayId; }; class LayerCacher { public: drape_ptr RecacheWidgets(TWidgetsInitInfo const & initInfo, ref_ptr textures); drape_ptr RecacheChoosePositionMark(ref_ptr textures); #ifdef RENRER_DEBUG_INFO_LABELS drape_ptr RecacheDebugLabels(ref_ptr textures); #endif private: m2::PointF CacheCompass(Position const & position, ref_ptr renderer, ref_ptr textures); m2::PointF CacheRuler(Position const & position, ref_ptr renderer, ref_ptr textures); m2::PointF CacheCopyright(Position const & position, ref_ptr renderer, ref_ptr textures); m2::PointF CacheScaleLabel(Position const & position, ref_ptr renderer, ref_ptr textures); }; } // namespace gui