diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-07-08 12:43:33 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-07-08 12:43:33 +0200 |
commit | 31d2d6e4e485f1addece7139c82b4f3e64b1bd91 (patch) | |
tree | b7493ed75a5a5805023b2859809ad188ea8633d9 /server/red_parse_qxl.c | |
parent | fe4f90210f492b8818af33dd1824c09295631c73 (diff) | |
download | spice-31d2d6e4e485f1addece7139c82b4f3e64b1bd91.tar.gz spice-31d2d6e4e485f1addece7139c82b4f3e64b1bd91.tar.xz spice-31d2d6e4e485f1addece7139c82b4f3e64b1bd91.zip |
Properly parse QXLLineAttrs.style
Diffstat (limited to 'server/red_parse_qxl.c')
-rw-r--r-- | server/red_parse_qxl.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/server/red_parse_qxl.c b/server/red_parse_qxl.c index ee099a03..85caa88a 100644 --- a/server/red_parse_qxl.c +++ b/server/red_parse_qxl.c @@ -557,24 +557,35 @@ static void red_put_rop3(SpiceRop3 *red) static void red_get_stroke_ptr(RedMemSlotInfo *slots, int group_id, SpiceStroke *red, QXLStroke *qxl) { - red->path = red_get_path(slots, group_id, qxl->path); - red->attr.flags = qxl->attr.flags; - if (red->attr.flags & SPICE_LINE_FLAGS_STYLED) { - red->attr.style_nseg = qxl->attr.style_nseg; - red->attr.style = qxl->attr.style; - } else { - red->attr.style_nseg = 0; - red->attr.style = 0; - } - red_get_brush_ptr(slots, group_id, &red->brush, &qxl->brush); - red->fore_mode = qxl->fore_mode; - red->back_mode = qxl->back_mode; + red->path = red_get_path(slots, group_id, qxl->path); + red->attr.flags = qxl->attr.flags; + if (red->attr.flags & SPICE_LINE_FLAGS_STYLED) { + int style_nseg; + uint8_t *buf; + + style_nseg = qxl->attr.style_nseg; + red->attr.style = spice_malloc_n(style_nseg, sizeof(SPICE_FIXED28_4)); + red->attr.style_nseg = style_nseg; + ASSERT(qxl->attr.style); + buf = (uint8_t *)get_virt(slots, qxl->attr.style, + style_nseg * sizeof(QXLFIXED), group_id); + memcpy(red->attr.style, buf, style_nseg * sizeof(QXLFIXED)); + } else { + red->attr.style_nseg = 0; + red->attr.style = NULL; + } + red_get_brush_ptr(slots, group_id, &red->brush, &qxl->brush); + red->fore_mode = qxl->fore_mode; + red->back_mode = qxl->back_mode; } static void red_put_stroke(SpiceStroke *red) { red_put_brush(&red->brush); free(red->path); + if (red->attr.flags & SPICE_LINE_FLAGS_STYLED) { + free(red->attr.style); + } } static SpiceString *red_get_string(RedMemSlotInfo *slots, int group_id, |