From 9f4baeb0fc7107f3d0a35dccd6027cecb5e5b72d Mon Sep 17 00:00:00 2001 From: fluxgen Date: Mon, 16 Oct 2006 18:47:27 +0000 Subject: cached pixmap helper, works like auto ptr for cached pixmaps --- src/FbTk/CachedPixmap.cc | 51 +++++++++++++++++++++++++++++++++++ src/FbTk/CachedPixmap.hh | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 src/FbTk/CachedPixmap.cc create mode 100644 src/FbTk/CachedPixmap.hh diff --git a/src/FbTk/CachedPixmap.cc b/src/FbTk/CachedPixmap.cc new file mode 100644 index 0000000..d7583c2 --- /dev/null +++ b/src/FbTk/CachedPixmap.cc @@ -0,0 +1,51 @@ +// CachedPixmap.hh +// Copyright (c) 2006 Fluxbox Team (fluxgen at fluxbox dot org) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +#include "CachedPixmap.hh" +#include "ImageControl.hh" + +namespace FbTk { + +CachedPixmap::CachedPixmap( FbTk::ImageControl& ctrl ): + m_pixmap( 0 ), + m_ctrl( ctrl ) { +} + +CachedPixmap::CachedPixmap( FbTk::ImageControl& ctrl, Pixmap pm ): + m_pixmap( pm ), + m_ctrl( ctrl ) { } + +CachedPixmap::~CachedPixmap() { + destroy(); +} + +void CachedPixmap::reset( Pixmap pm ) { + destroy(); + m_pixmap = pm; +} + +void CachedPixmap::destroy() { + if ( m_pixmap != 0 ) { + m_ctrl.removeImage( m_pixmap ); + } +} + +} diff --git a/src/FbTk/CachedPixmap.hh b/src/FbTk/CachedPixmap.hh new file mode 100644 index 0000000..943251c --- /dev/null +++ b/src/FbTk/CachedPixmap.hh @@ -0,0 +1,70 @@ +// CachedPixmap.hh +// Copyright (c) 2006 Fluxbox Team (fluxgen at fluxbox dot org) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + + +#ifndef FBTK_CACHED_PIXMAP_H +#define FBTK_CACHED_PIXMAP_H + +#include + +namespace FbTk { + +class ImageControl; + +/// holds cached pixmap and releases it from cache when it dies +class CachedPixmap { +public: + /// @param ctrl the image cache control + explicit CachedPixmap( FbTk::ImageControl& ctrl ); + /** + * @param ctrl cache control + * @param pm pixmap to store + */ + CachedPixmap( FbTk::ImageControl& ctrl, + Pixmap pm ); + ~CachedPixmap(); + + operator Pixmap() const { + return m_pixmap; + } + + /** + * Sets new pixmap and releases the old pixmap from cache + * @param pm the new pixmap to set + */ + void reset( Pixmap pm ); + + /// @return pixmap + Pixmap operator *() const { + return m_pixmap; + } + +public: + /// releases pixmap from cache + void destroy(); + + Pixmap m_pixmap; //< cached pixmap + FbTk::ImageControl &m_ctrl; //< cache control +}; + +} // namespace CachedPixmap + +#endif // FBTK_CACHED_PIXMAP -- cgit v0.11.2