diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-04-19 16:19:43 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-04-23 16:36:35 +0200 |
commit | 98d91203c5d2f6f7249f38941466857b6a566f5d (patch) | |
tree | cdc2b54152f0be3d668ed49b903a35886fcc1c99 /client/red_gdi_canvas.cpp | |
parent | 619c37af17406f77c7cb76f3b72bbfc268383d91 (diff) | |
download | spice-98d91203c5d2f6f7249f38941466857b6a566f5d.tar.gz spice-98d91203c5d2f6f7249f38941466857b6a566f5d.tar.xz spice-98d91203c5d2f6f7249f38941466857b6a566f5d.zip |
Make client canvas and pixmaps handle more formats and simplify
We now support 16bit format pixmaps as well as the old ones. Including
both 555 and 565 modes.
We drop the palette argument for pixmap construction as it was only
used for black/white anyway.
Canvas creation is simplified so that there is no separate set_mode
state. Canvases are already created in the right mode and never change.
Diffstat (limited to 'client/red_gdi_canvas.cpp')
-rw-r--r-- | client/red_gdi_canvas.cpp | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/client/red_gdi_canvas.cpp b/client/red_gdi_canvas.cpp index be7992c1..ae73ea2c 100644 --- a/client/red_gdi_canvas.cpp +++ b/client/red_gdi_canvas.cpp @@ -23,38 +23,33 @@ #include "region.h" #include "red_pixmap_gdi.h" -GDICanvas::GDICanvas(PixmapCache& pixmap_cache, PaletteCache& palette_cache, +GDICanvas::GDICanvas(int width, int height, uint32_t format, + PixmapCache& pixmap_cache, PaletteCache& palette_cache, GlzDecoderWindow &glz_decoder_window, CSurfaces &csurfaces) : Canvas (pixmap_cache, palette_cache, glz_decoder_window, csurfaces) , _pixmap (0) { -} - -GDICanvas::~GDICanvas() -{ - destroy(); -} - -void GDICanvas::destroy() -{ - if (_canvas) { - _canvas->ops->destroy(_canvas); - _canvas = NULL; + _pixmap = new RedPixmapGdi(width, height, + RedPixmap::format_from_surface(format), + true, NULL); + if (!(_canvas = gdi_canvas_create(width, height, _pixmap->get_dc(), + &_pixmap->get_mutex(), + depth, &pixmap_cache().base, + &palette_cache().base, + &csurfaces().base, + &glz_decoder()))) { + THROW("create canvas failed"); } - destroy_pixmap(); } -void GDICanvas::destroy_pixmap() +GDICanvas::~GDICanvas() { + _canvas->ops->destroy(_canvas); + _canvas = NULL; delete _pixmap; _pixmap = NULL; } -void GDICanvas::create_pixmap(int width, int height) -{ - _pixmap = new RedPixmapGdi(width, height, RedPixmap::RGB32, true, NULL); -} - void GDICanvas::copy_pixels(const QRegion& region, RedDrawable& dest_dc) { pixman_box32_t *rects; @@ -80,15 +75,6 @@ void GDICanvas::copy_pixels(const QRegion& region, RedDrawable* dest_dc, const P void GDICanvas::set_mode(int width, int height, int depth) { destroy(); - create_pixmap(width, height); - if (!(_canvas = gdi_canvas_create(width, height, _pixmap->get_dc(), - &_pixmap->get_mutex(), - depth, &pixmap_cache().base, - &palette_cache().base, - &csurfaces().base, - &glz_decoder()))) { - THROW("create canvas failed"); - } } CanvasType GDICanvas::get_pixmap_type() |