[Spice-devel] [PATCH spice-streaming-agent] Remove X11 dependency from send_cursor

Frediano Ziglio fziglio at redhat.com
Wed Nov 22 10:01:03 UTC 2017


> 
> Frediano Ziglio writes:
> 
> >>
> >> On Mon, Nov 20, 2017 at 03:18:14PM +0000, Frediano Ziglio wrote:
> >> > Allows a better encapsulation in the future
> >> >
> >> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> >> > ---
> >> >  src/spice-streaming-agent.cpp | 28 +++++++++++++++++-----------
> >> >  1 file changed, 17 insertions(+), 11 deletions(-)
> >> >
> >> > diff --git a/src/spice-streaming-agent.cpp
> >> > b/src/spice-streaming-agent.cpp
> >> > index 23b9768..53ffbf0 100644
> >> > --- a/src/spice-streaming-agent.cpp
> >> > +++ b/src/spice-streaming-agent.cpp
> >> > @@ -22,6 +22,7 @@
> >> >  #include <mutex>
> >> >  #include <thread>
> >> >  #include <vector>
> >> > +#include <functional>
> >> >  #include <X11/Xlib.h>
> >> >  #include <X11/extensions/Xfixes.h>
> >> >
> >> > @@ -284,15 +285,17 @@ static void usage(const char *progname)
> >> >      exit(1);
> >> >  }
> >> >
> >> > -static void send_cursor(const XFixesCursorImage &image)
> >> > +static void
> >> > +send_cursor(unsigned width, unsigned height, int hotspot_x, int
> >> > hotspot_y,
> >> > +            std::function<void(uint32_t *)> fill_cursor)
> >> >  {
> >> > -    if (image.width >= STREAM_MSG_CURSOR_SET_MAX_WIDTH ||
> >> > -        image.height >= STREAM_MSG_CURSOR_SET_MAX_HEIGHT)
> >> > +    if (width >= STREAM_MSG_CURSOR_SET_MAX_WIDTH ||
> >> > +        height >= STREAM_MSG_CURSOR_SET_MAX_HEIGHT)
> >> >          return;
> >> >
> >> >      size_t cursor_size =
> >> >          sizeof(StreamDevHeader) + sizeof(StreamMsgCursorSet) +
> >> > -        image.width * image.height * sizeof(uint32_t);
> >> > +        width * height * sizeof(uint32_t);
> >> >      std::unique_ptr<uint8_t[]> msg(new uint8_t[cursor_size]);
> >> >
> >> >      StreamDevHeader
> >> >      &dev_hdr(*reinterpret_cast<StreamDevHeader*>(msg.get()));
> >> > @@ -305,14 +308,13 @@ static void send_cursor(const XFixesCursorImage
> >> > &image)
> >> >      memset(&cursor_msg, 0, sizeof(cursor_msg));
> >> >
> >> >      cursor_msg.type = SPICE_CURSOR_TYPE_ALPHA;
> >> > -    cursor_msg.width = image.width;
> >> > -    cursor_msg.height = image.height;
> >> > -    cursor_msg.hot_spot_x = image.xhot;
> >> > -    cursor_msg.hot_spot_y = image.yhot;
> >> > +    cursor_msg.width = width;
> >> > +    cursor_msg.height = height;
> >> > +    cursor_msg.hot_spot_x = hotspot_x;
> >> > +    cursor_msg.hot_spot_y = hotspot_y;
> >> >
> >> >      uint32_t *pixels = reinterpret_cast<uint32_t *>(cursor_msg.data);
> >> > -    for (unsigned i = 0; i < image.width * image.height; ++i)
> >> > -        pixels[i] = image.pixels[i];
> >> > +    fill_cursor(pixels);
> >> >
> >> >      std::lock_guard<std::mutex> stream_guard(stream_mtx);
> >> >      write_all(streamfd, msg.get(), cursor_size);
> >> > @@ -336,7 +338,11 @@ static void cursor_changes(Display *display, int
> >> > event_base)
> >> >              continue;
> >> >
> >> >          last_serial = cursor->cursor_serial;
> >> > -        send_cursor(*cursor);
> >> > +        auto fill_cursor = [&](uint32_t *pixels) {
> >> > +            for (unsigned i = 0; i < cursor->width * cursor->height;
> >> > ++i)
> >> > +                pixels[i] = cursor->pixels[i];
> >> > +        };
> >>
> >> Can't you just pass cursor->pixels to send_cursor() rather than building
> >> a lambda and passing that?
> >>
> >> Christophe
> >>
> >
> > Because the format is X11 format so it won't remove the dependency.
> 
> If send_format is a method in an X11-specific derived class, it does.
> 

In your series send_format is part of a class handling the device
which should be platform independent so no X11.

Frediano


More information about the Spice-devel mailing list