summaryrefslogtreecommitdiffstats
path: root/client/canvas.cpp
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2011-09-18 14:52:04 +0300
committerYonit Halperin <yhalperi@redhat.com>2011-11-02 11:30:21 +0200
commitf22caf9aee2aa64313468b04efa615e2e1c7f8b3 (patch)
treef34d73c8f99b8eef51c43378617411fd5def8353 /client/canvas.cpp
parent76966571748efa32a706d21830349ab2431aa4e6 (diff)
downloadspice-f22caf9aee2aa64313468b04efa615e2e1c7f8b3.tar.gz
spice-f22caf9aee2aa64313468b04efa615e2e1c7f8b3.tar.xz
spice-f22caf9aee2aa64313468b04efa615e2e1c7f8b3.zip
client: rewrite surfaces cache
use std::map instead of a specific template (CHash). There is no need for special template. Moreover, using std::map will allow easy iteration over the surfaces. (cherry picked from commit fcb3b4ce5231218bcf949da4270bd85a2cfb3535 branch 0.8) Conflicts: client/display_channel.cpp
Diffstat (limited to 'client/canvas.cpp')
-rw-r--r--client/canvas.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/client/canvas.cpp b/client/canvas.cpp
index 3b5f4b69..139b663b 100644
--- a/client/canvas.cpp
+++ b/client/canvas.cpp
@@ -24,14 +24,35 @@
#include "utils.h"
#include "debug.h"
+static SpiceCanvas* surfaces_cache_op_get(SpiceImageSurfaces *surfaces, uint32_t surface_id)
+{
+ SurfacesCache* surfaces_cache = static_cast<SurfacesCache*>(surfaces);
+ if (!surfaces_cache->exist(surface_id)) {
+ return NULL;
+ }
+ return (*surfaces_cache)[surface_id]->get_internal_canvas();
+}
+
+SurfacesCache::SurfacesCache()
+{
+ static SpiceImageSurfacesOps surfaces_ops = {
+ surfaces_cache_op_get,
+ };
+ ops = &surfaces_ops;
+}
+
+bool SurfacesCache::exist(uint32_t surface_id)
+{
+ return (this->count(surface_id) != 0);
+}
Canvas::Canvas(PixmapCache& pixmap_cache, PaletteCache& palette_cache,
- GlzDecoderWindow &glz_decoder_window, CSurfaces &csurfaces)
+ GlzDecoderWindow &glz_decoder_window, SurfacesCache &csurfaces)
: _canvas (NULL)
, _pixmap_cache (pixmap_cache)
, _palette_cache (palette_cache)
, _glz_decoder(glz_decoder_window, _glz_handler, _glz_debug)
- , _csurfaces(csurfaces)
+ , _surfaces_cache(csurfaces)
{
}