mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 22:48:19 +00:00
qxl abi: parse QXLCompatDrawable.
This commit is contained in:
parent
11034dda42
commit
856e2ba355
@ -82,6 +82,59 @@ void red_get_drawable(RedMemSlotInfo *slots, int group_id,
|
||||
};
|
||||
}
|
||||
|
||||
void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
|
||||
RedDrawable *red, SPICE_ADDRESS addr)
|
||||
{
|
||||
QXLCompatDrawable *qxl;
|
||||
|
||||
qxl = (QXLCompatDrawable *)get_virt(slots, addr, sizeof(*qxl), group_id);
|
||||
red->release_info = &qxl->release_info;
|
||||
|
||||
red->bbox = qxl->bbox;
|
||||
red->clip = qxl->clip;
|
||||
red->effect = qxl->effect;
|
||||
red->mm_time = qxl->mm_time;
|
||||
|
||||
red->type = qxl->type;
|
||||
switch (red->type) {
|
||||
case QXL_DRAW_ALPHA_BLEND:
|
||||
red->u.alpha_blend = qxl->u.alpha_blend;
|
||||
break;
|
||||
case QXL_DRAW_BLACKNESS:
|
||||
red->u.blackness = qxl->u.blackness;
|
||||
break;
|
||||
case QXL_DRAW_BLEND:
|
||||
red->u.blend = qxl->u.blend;
|
||||
break;
|
||||
case QXL_DRAW_COPY:
|
||||
red->u.copy = qxl->u.copy;
|
||||
break;
|
||||
case QXL_DRAW_FILL:
|
||||
red->u.fill = qxl->u.fill;
|
||||
break;
|
||||
case QXL_DRAW_INVERS:
|
||||
red->u.invers = qxl->u.invers;
|
||||
break;
|
||||
case QXL_DRAW_NOP:
|
||||
break;
|
||||
case QXL_DRAW_ROP3:
|
||||
red->u.rop3 = qxl->u.rop3;
|
||||
break;
|
||||
case QXL_DRAW_STROKE:
|
||||
red->u.stroke = qxl->u.stroke;
|
||||
break;
|
||||
case QXL_DRAW_TEXT:
|
||||
red->u.text = qxl->u.text;
|
||||
break;
|
||||
case QXL_DRAW_TRANSPARENT:
|
||||
red->u.transparent = qxl->u.transparent;
|
||||
break;
|
||||
case QXL_DRAW_WHITENESS:
|
||||
red->u.whiteness = qxl->u.whiteness;
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void red_put_drawable(RedDrawable *red)
|
||||
{
|
||||
/* nothing yet */
|
||||
|
||||
@ -55,6 +55,8 @@ typedef struct SPICE_ATTR_PACKED RedDrawable {
|
||||
|
||||
void red_get_drawable(RedMemSlotInfo *slots, int group_id,
|
||||
RedDrawable *red, SPICE_ADDRESS addr);
|
||||
void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
|
||||
RedDrawable *red, SPICE_ADDRESS addr);
|
||||
void red_put_drawable(RedDrawable *red);
|
||||
|
||||
#endif
|
||||
|
||||
@ -5031,8 +5031,13 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size)
|
||||
switch (ext_cmd.cmd.type) {
|
||||
case QXL_CMD_DRAW: {
|
||||
RedDrawable *drawable = spice_new0(RedDrawable, 1);
|
||||
red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
|
||||
drawable, ext_cmd.cmd.data);
|
||||
if (ext_cmd.flags & QXL_COMMAND_FLAG_COMPAT) {
|
||||
red_get_compat_drawable(&worker->mem_slots, ext_cmd.group_id,
|
||||
drawable, ext_cmd.cmd.data);
|
||||
} else {
|
||||
red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
|
||||
drawable, ext_cmd.cmd.data);
|
||||
}
|
||||
red_process_drawable(worker, drawable, ext_cmd.group_id);
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user