diff options
Diffstat (limited to 'client/canvas.cpp')
-rw-r--r-- | client/canvas.cpp | 25 |
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) { } |