spice/client
Alexander Larsson 774e5bd36f Client: Support pixmap format conversion in copy_pixels
In order to be able to support 16bit canvases on 32bit screens and 32bit
canvases on 16bit screens we need to handle format conversion when drawing
RedPixmaps.

The way this works now for X11 is that we only have one PIXELS_SOURCE_TYPE
for pixmaps, which always has a pixman_image_t for the data, but additionally
it has an XImage (shared mem or not) if the screen the pixmap was created
for (i.e. an explicit one or the default screen) has the same format as
the pixmap.

When we draw a pixmap on a drawable we have two variants. If the pixmap
has a XImage and it matches the format of the target drawable then we
just X(Shm)PutImage it to the drawable. If the formats differ, then we
create a temporary XImage and convert into that before drawing it to
the screen.

Right now this is a bit inefficient, because we always allocate a new
temporary image when converting. We want to add some caching here, but
at least this lets things work again.
2010-04-23 16:39:13 +02:00
..
gui Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
windows Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
x11 Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
.gitignore fresh start 2009-10-14 15:06:41 +02:00
application.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
application.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
audio_channels.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
audio_devices.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cache.hpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cairo_canvas.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
canvas_utils.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
canvas.cpp Add emacs modelines to more files 2010-04-23 16:36:31 +02:00
canvas.h Add emacs modelines to more files 2010-04-23 16:36:31 +02:00
client_net_socket.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
client_net_socket.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cmd_line_parser.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cmd_line_parser.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
common.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cursor_channel.cpp Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
cursor_channel.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cursor.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
cursor.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
debug.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
display_channel.cpp Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
display_channel.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
event_sources.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
gdi_canvas.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
gl_canvas.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glc.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decode_tmpl.c Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoded_image.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoder_config.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoder_window.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoder_window.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoder.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_decoder.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
hot_keys.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
hot_keys.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
icon.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
inputs_channel.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
inputs_channel.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
inputs_handler.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
lines.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
lz.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
Makefile.am Use libjpeg to decode mjpegs, not ffmpeg 2010-04-08 11:30:18 +02:00
mem.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
menu.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
menu.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
mjpeg_decoder.cpp Avoid unncessary buffer management in mjpeg decoder if possible 2010-04-14 11:41:37 +02:00
mjpeg_decoder.h Avoid unncessary buffer management in mjpeg decoder if possible 2010-04-14 11:41:37 +02:00
monitor.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
monitor.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
pixels_source.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
pixman_utils.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
platform.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
playback_channel.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
process_loop.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
process_loop.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
quic.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
read_write_mutex.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
record_channel.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_cairo_canvas.cpp Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
red_cairo_canvas.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
red_channel.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_channel.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_client.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_client.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_drawable.h Add helper to compare RedDrawable::Formats for copy compabible 2010-04-23 16:36:35 +02:00
red_gdi_canvas.cpp Move RedPixmap::Format to RedDrawable::Format 2010-04-23 16:36:35 +02:00
red_gdi_canvas.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
red_gl_canvas.cpp Move RedPixmap::Format to RedDrawable::Format 2010-04-23 16:36:35 +02:00
red_gl_canvas.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
red_key.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_peer.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_peer.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_pixmap_cairo.h Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
red_pixmap_gdi.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
red_pixmap_gl.h Make client canvas and pixmaps handle more formats and simplify 2010-04-23 16:36:35 +02:00
red_pixmap.h Add RedDrawable::Format get_format() 2010-04-23 16:36:35 +02:00
red_types.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_window.h Add RedDrawable::Format get_format() 2010-04-23 16:36:35 +02:00
region.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
rop3.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
screen_layer.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
screen_layer.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
screen.cpp Client: Support pixmap format conversion in copy_pixels 2010-04-23 16:39:13 +02:00
screen.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
shared_cache.hpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
threads.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
threads.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
tunnel_channel.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
tunnel_channel.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
utils.cpp Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
utils.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00