/* Copyright 2015, Michele Santullo * This file is part of DoorKeeper. * * DoorKeeper is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DoorKeeper is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with DoorKeeper. If not, see . */ #ifndef id83407244096746CDBFF64D23F0B1701A #define id83407244096746CDBFF64D23F0B1701A #include "doorkeeper/primitivetypes.hpp" #include "doorkeeper/components/viewport.hpp" #include "doorkeeper/components/tyler.hpp" #include "doorkeeper/components/layer.hpp" #include "doorkeeper/implem/iterableviewport.hpp" #include #include #include #include #include namespace dk { template class Tyler; template class LayeredViewport { struct ViewportItem; typedef std::vector ViewportList; public: typedef VectorT coords_f; typedef boost::transform_iterator(const LayerBase&)>, typename Tyler::iterator> iterator; typedef boost::transform_iterator(const LayerBase&)>, typename Tyler::const_iterator> const_iterator; LayeredViewport ( const LayeredViewport& ) = delete; LayeredViewport ( LayeredViewport&& parOther ); explicit LayeredViewport ( Tyler& parTyler ); ~LayeredViewport ( void ) noexcept; LayeredViewport& operator+= ( const coords_f& parValue ); LayeredViewport& operator-= ( const coords_f& parValue ); void on_layer ( const LayerBase& parLayer, bool parAdded ); iterator begin ( void ); const_iterator begin ( void ) const; iterator end ( void ); const_iterator end ( void ) const; IterableViewport viewport ( const LayerBase& parLayer ); const IterableViewport viewport ( const LayerBase& parLayer ) const; LayeredViewport& operator= ( const LayeredViewport& ) = delete; private: ViewportList m_views; Tyler& m_tyler; typename Tyler::LayerObsID m_tyler_id; }; } //namespace dk #include "doorkeeper/implem/layeredviewport.inl" #endif