From: Søren Sandmann Pedersen <ssp@xxxxxxxxxx> All the real work is being done in spice-common, so this patch is just hooking up the virtual calls. --- client/canvas.cpp | 7 +++++++ client/canvas.h | 1 + client/display_channel.cpp | 11 +++++++++++ client/display_channel.h | 1 + 4 files changed, 20 insertions(+) diff --git a/client/canvas.cpp b/client/canvas.cpp index 7d1561a..f132186 100644 --- a/client/canvas.cpp +++ b/client/canvas.cpp @@ -114,6 +114,13 @@ void Canvas::draw_alpha_blend(SpiceMsgDisplayDrawAlphaBlend& alpha_blend, int si touched_bbox(&alpha_blend.base.box); } +void Canvas::draw_composite(SpiceMsgDisplayDrawComposite& composite, int size) +{ + begin_draw(composite.base, size, sizeof(SpiceMsgDisplayDrawComposite)); + _canvas->ops->draw_composite(_canvas, &composite.base.box, &composite.base.clip, &composite.data); + touched_bbox(&composite.base.box); +} + void Canvas::copy_bits(SpiceMsgDisplayCopyBits& copy, int size) { begin_draw(copy.base, size, sizeof(SpiceMsgDisplayCopyBits)); diff --git a/client/canvas.h b/client/canvas.h index 7702568..213a753 100644 --- a/client/canvas.h +++ b/client/canvas.h @@ -304,6 +304,7 @@ public: void draw_invers(SpiceMsgDisplayDrawInvers& invers, int size); void draw_rop3(SpiceMsgDisplayDrawRop3& rop3, int size); void draw_stroke(SpiceMsgDisplayDrawStroke& stroke, int size); + void draw_composite(SpiceMsgDisplayDrawComposite& composite, int size); void put_image( #ifdef WIN32 diff --git a/client/display_channel.cpp b/client/display_channel.cpp index 17bdf6a..b566f22 100644 --- a/client/display_channel.cpp +++ b/client/display_channel.cpp @@ -692,6 +692,8 @@ void DisplayChannel::set_draw_handlers() &DisplayChannel::handle_draw_transparent); handler->set_handler(SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND, &DisplayChannel::handle_draw_alpha_blend); + handler->set_handler(SPICE_MSG_DISPLAY_DRAW_COMPOSITE, + &DisplayChannel::handle_draw_composite); handler->set_handler(SPICE_MSG_DISPLAY_STREAM_DATA, &DisplayChannel::handle_stream_data); } @@ -712,6 +714,7 @@ void DisplayChannel::clear_draw_handlers() handler->set_handler(SPICE_MSG_DISPLAY_DRAW_TEXT, NULL); handler->set_handler(SPICE_MSG_DISPLAY_DRAW_TRANSPARENT, NULL); handler->set_handler(SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND, NULL); + handler->set_handler(SPICE_MSG_DISPLAY_DRAW_COMPOSITE, NULL); handler->set_handler(SPICE_MSG_DISPLAY_STREAM_DATA, NULL); } @@ -1735,6 +1738,14 @@ void DisplayChannel::handle_draw_alpha_blend(RedPeer::InMessage* message) DRAW(alpha_blend); } +void DisplayChannel::handle_draw_composite(RedPeer::InMessage* message) +{ + Canvas *canvas; + SpiceMsgDisplayDrawComposite* composite = (SpiceMsgDisplayDrawComposite*)message->data(); + canvas = _surfaces_cache[composite->base.surface_id]; + DRAW(composite); +} + void DisplayChannel::streams_time() { _next_timer_time = 0; diff --git a/client/display_channel.h b/client/display_channel.h index 72856f5..197ae73 100644 --- a/client/display_channel.h +++ b/client/display_channel.h @@ -173,6 +173,7 @@ private: void handle_draw_text(RedPeer::InMessage* message); void handle_draw_transparent(RedPeer::InMessage* message); void handle_draw_alpha_blend(RedPeer::InMessage* message); + void handle_draw_composite(RedPeer::InMessage* message); void on_streams_trigger(); virtual void on_update_completion(uint64_t mark); -- 1.7.11.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel