mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-08-07 01:49:09 +00:00
Add support for Composite command to the client
All the real work is being done in spice-common, so this patch is just hooking up the virtual calls and adding the SPICE_DISPLAY_CAP_COMPOSITE capability.
This commit is contained in:
parent
a91daa2feb
commit
37be9e0c2e
@ -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));
|
||||
|
||||
@ -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
|
||||
|
||||
@ -650,6 +650,8 @@ DisplayChannel::DisplayChannel(RedClient& client, uint32_t id,
|
||||
get_process_loop().add_trigger(_interrupt_update);
|
||||
|
||||
set_draw_handlers();
|
||||
|
||||
set_capability(SPICE_DISPLAY_CAP_COMPOSITE);
|
||||
}
|
||||
|
||||
DisplayChannel::~DisplayChannel()
|
||||
@ -692,6 +694,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 +716,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 +1740,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;
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user