> > On Tue, Nov 10, 2015 at 9:41 PM, Jonathon Jongsma <jjongsma@xxxxxxxxxx> > wrote: > > Functions that check the equality of a patch, brush, etc are moved the > > display channel source file to prepare for moving the surfaces to the > > display channel. > > "equality of a patch" -> "equality of a path" > > > --- > > server/display-channel.h | 89 > > +++++++++++++++++++++++++++++++++++++++++++++ > > server/red_worker.c | 95 > > ++---------------------------------------------- > > 2 files changed, 92 insertions(+), 92 deletions(-) > > > > diff --git a/server/display-channel.h b/server/display-channel.h > > index 8c1648b..7bb9c14 100644 > > --- a/server/display-channel.h > > +++ b/server/display-channel.h > > @@ -20,6 +20,7 @@ > > > > #include <setjmp.h> > > > > +#include "common/rect.h" > > #include "red_worker.h" > > #include "reds_stream.h" > > #include "cache-item.h" > > @@ -370,6 +371,94 @@ void > > display_channel_compress_stats_print (const > > Disp > > void display_channel_compress_stats_reset > > (DisplayChannel *display); > > void display_channel_drawable_unref > > (DisplayChannel *display, Drawable *drawable); > > > > +static inline int is_equal_path(SpicePath *path1, SpicePath *path2) > > +{ > > + SpicePathSeg *seg1, *seg2; > > + int i, j; > > + > > + if (path1->num_segments != path2->num_segments) > > + return FALSE; > > + > > + for (i = 0; i < path1->num_segments; i++) { > > + seg1 = path1->segments[i]; > > + seg2 = path2->segments[i]; > > + > > + if (seg1->flags != seg2->flags || > > + seg1->count != seg2->count) { > > + return FALSE; > > + } > > + for (j = 0; j < seg1->count; j++) { > > + if (seg1->points[j].x != seg2->points[j].x || > > + seg1->points[j].y != seg2->points[j].y) { > > + return FALSE; > > + } > > + } > > + } > > + > > + return TRUE; > > +} > > + > > +// partial imp > > +static inline int is_equal_brush(SpiceBrush *b1, SpiceBrush *b2) > > +{ > > + return b1->type == b2->type && > > + b1->type == SPICE_BRUSH_TYPE_SOLID && > > + b1->u.color == b2->u.color; > > +} > > + > > +// partial imp > > +static inline int is_equal_line_attr(SpiceLineAttr *a1, SpiceLineAttr *a2) > > +{ > > + return a1->flags == a2->flags && > > + a1->style_nseg == a2->style_nseg && > > + a1->style_nseg == 0; > > +} > > + > > +// partial imp > > +static inline int is_same_geometry(Drawable *d1, Drawable *d2) > > +{ > > + if (d1->red_drawable->type != d2->red_drawable->type) { > > + return FALSE; > > + } > > + > > + switch (d1->red_drawable->type) { > > + case QXL_DRAW_STROKE: > > + return is_equal_line_attr(&d1->red_drawable->u.stroke.attr, > > + &d2->red_drawable->u.stroke.attr) && > > + is_equal_path(d1->red_drawable->u.stroke.path, > > + d2->red_drawable->u.stroke.path); > > + case QXL_DRAW_FILL: > > + return rect_is_equal(&d1->red_drawable->bbox, > > &d2->red_drawable->bbox); > > + default: > > + return FALSE; > > + } > > +} > > + > > +static inline int is_same_drawable(Drawable *d1, Drawable *d2) > > +{ > > + if (!is_same_geometry(d1, d2)) { > > + return FALSE; > > + } > > + > > + switch (d1->red_drawable->type) { > > + case QXL_DRAW_STROKE: > > + return is_equal_brush(&d1->red_drawable->u.stroke.brush, > > + &d2->red_drawable->u.stroke.brush); > > + case QXL_DRAW_FILL: > > + return is_equal_brush(&d1->red_drawable->u.fill.brush, > > + &d2->red_drawable->u.fill.brush); > > + default: > > + return FALSE; > > + } > > +} > > + > > +static inline int is_primary_surface(DisplayChannel *display, uint32_t > > surface_id) > > +{ > > + if (surface_id == 0) { > > + return TRUE; > > + } > > + return FALSE; > > +} > > > > > > #endif /* DISPLAY_CHANNEL_H_ */ > > diff --git a/server/red_worker.c b/server/red_worker.c > > index 8282b31..a2ed49b 100644 > > --- a/server/red_worker.c > > +++ b/server/red_worker.c > > @@ -563,14 +563,6 @@ QXLInstance* red_worker_get_qxl(RedWorker *worker) > > return worker->qxl; > > } > > > > -static inline int is_primary_surface(DisplayChannel *display, uint32_t > > surface_id) > > -{ > > - if (surface_id == 0) { > > - return TRUE; > > - } > > - return FALSE; > > -} > > - > > static int validate_drawable_bbox(RedWorker *worker, RedDrawable > > *drawable) > > { > > DrawContext *context; > > @@ -1417,87 +1409,6 @@ static inline void __current_add_drawable(RedWorker > > *worker, Drawable *drawable, > > drawable->refs++; > > } > > > > -static int is_equal_path(RedWorker *worker, SpicePath *path1, SpicePath > > *path2) > > -{ > > - SpicePathSeg *seg1, *seg2; > > - int i, j; > > - > > - if (path1->num_segments != path2->num_segments) > > - return FALSE; > > - > > - for (i = 0; i < path1->num_segments; i++) { > > - seg1 = path1->segments[i]; > > - seg2 = path2->segments[i]; > > - > > - if (seg1->flags != seg2->flags || > > - seg1->count != seg2->count) { > > - return FALSE; > > - } > > - for (j = 0; j < seg1->count; j++) { > > - if (seg1->points[j].x != seg2->points[j].x || > > - seg1->points[j].y != seg2->points[j].y) { > > - return FALSE; > > - } > > - } > > - } > > - > > - return TRUE; > > -} > > - > > -// partial imp > > -static int is_equal_brush(SpiceBrush *b1, SpiceBrush *b2) > > -{ > > - return b1->type == b2->type && > > - b1->type == SPICE_BRUSH_TYPE_SOLID && > > - b1->u.color == b2->u.color; > > -} > > - > > -// partial imp > > -static int is_equal_line_attr(SpiceLineAttr *a1, SpiceLineAttr *a2) > > -{ > > - return a1->flags == a2->flags && > > - a1->style_nseg == a2->style_nseg && > > - a1->style_nseg == 0; > > -} > > - > > -// partial imp > > -static int is_same_geometry(RedWorker *worker, Drawable *d1, Drawable *d2) > > -{ > > - if (d1->red_drawable->type != d2->red_drawable->type) { > > - return FALSE; > > - } > > - > > - switch (d1->red_drawable->type) { > > - case QXL_DRAW_STROKE: > > - return is_equal_line_attr(&d1->red_drawable->u.stroke.attr, > > - &d2->red_drawable->u.stroke.attr) && > > - is_equal_path(worker, d1->red_drawable->u.stroke.path, > > - d2->red_drawable->u.stroke.path); > > - case QXL_DRAW_FILL: > > - return rect_is_equal(&d1->red_drawable->bbox, > > &d2->red_drawable->bbox); > > - default: > > - return FALSE; > > - } > > -} > > - > > -static int is_same_drawable(RedWorker *worker, Drawable *d1, Drawable *d2) > > -{ > > - if (!is_same_geometry(worker, d1, d2)) { > > - return FALSE; > > - } > > - > > - switch (d1->red_drawable->type) { > > - case QXL_DRAW_STROKE: > > - return is_equal_brush(&d1->red_drawable->u.stroke.brush, > > - &d2->red_drawable->u.stroke.brush); > > - case QXL_DRAW_FILL: > > - return is_equal_brush(&d1->red_drawable->u.fill.brush, > > - &d2->red_drawable->u.fill.brush); > > - default: > > - return FALSE; > > - } > > -} > > - > > static void detach_stream(DisplayChannel *display, Stream *stream, > > int detach_sized) > > { > > @@ -2282,7 +2193,7 @@ static inline int red_current_add_equal(RedWorker > > *worker, DrawItem *item, TreeI > > > > switch (item->effect) { > > case QXL_EFFECT_REVERT_ON_DUP: > > - if (is_same_drawable(worker, drawable, other_drawable)) { > > + if (is_same_drawable(drawable, other_drawable)) { > > > > DisplayChannelClient *dcc; > > DrawablePipeItem *dpi; > > @@ -2324,7 +2235,7 @@ static inline int red_current_add_equal(RedWorker > > *worker, DrawItem *item, TreeI > > } > > break; > > case QXL_EFFECT_OPAQUE_BRUSH: > > - if (is_same_geometry(worker, drawable, other_drawable)) { > > + if (is_same_geometry(drawable, other_drawable)) { > > __current_add_drawable(worker, drawable, > > &other->siblings_link); > > remove_drawable(worker, other_drawable); > > red_pipes_add_drawable(worker, drawable); > > @@ -2332,7 +2243,7 @@ static inline int red_current_add_equal(RedWorker > > *worker, DrawItem *item, TreeI > > } > > break; > > case QXL_EFFECT_NOP_ON_DUP: > > - if (is_same_drawable(worker, drawable, other_drawable)) { > > + if (is_same_drawable(drawable, other_drawable)) { > > return TRUE; > > } > > break; > > -- > > 2.4.3 > > > > _______________________________________________ > > Spice-devel mailing list > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > http://lists.freedesktop.org/mailman/listinfo/spice-devel > > Looks good, ACK! Merged with the small typo fix Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel