[Spice-devel] [PATCH spice-streaming-agent v4 2/2] CursorUpdater: pass the cursor pointer directly to send_cursor
Frediano Ziglio
fziglio at redhat.com
Mon Jul 9 09:21:01 UTC 2018
>
> Pass the pointer to X cursor struct directly instead of using a lambda
> to fill in the pixels.
>
> Signed-off-by: Lukáš Hrázký <lhrazky at redhat.com>
> ---
> src/cursor-updater.cpp | 28 ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/src/cursor-updater.cpp b/src/cursor-updater.cpp
> index 8f65e83..5901172 100644
> --- a/src/cursor-updater.cpp
> +++ b/src/cursor-updater.cpp
> @@ -23,16 +23,17 @@ namespace streaming_agent {
>
> namespace {
>
> -void send_cursor(StreamPort &stream_port, unsigned width, unsigned height,
> int hotspot_x, int hotspot_y,
> - std::function<void(uint32_t *)> fill_cursor)
> +void send_cursor(StreamPort &stream_port, XFixesCursorImage *cursor)
> {
> - if (width >= STREAM_MSG_CURSOR_SET_MAX_WIDTH || height >=
> STREAM_MSG_CURSOR_SET_MAX_HEIGHT) {
> + if (cursor->width >= STREAM_MSG_CURSOR_SET_MAX_WIDTH ||
> + cursor->height >= STREAM_MSG_CURSOR_SET_MAX_HEIGHT)
> + {
style
> return;
> }
>
> size_t cursor_size =
> sizeof(StreamDevHeader) + sizeof(StreamMsgCursorSet) +
> - width * height * sizeof(uint32_t);
> + cursor->width * cursor->height * sizeof(uint32_t);
> std::unique_ptr<uint8_t[]> msg(new uint8_t[cursor_size]);
>
> StreamDevHeader
> &dev_hdr(*reinterpret_cast<StreamDevHeader*>(msg.get()));
> @@ -45,13 +46,15 @@ void send_cursor(StreamPort &stream_port, unsigned width,
> unsigned height, int h
> memset(&cursor_msg, 0, sizeof(cursor_msg));
>
> cursor_msg.type = SPICE_CURSOR_TYPE_ALPHA;
> - cursor_msg.width = width;
> - cursor_msg.height = height;
> - cursor_msg.hot_spot_x = hotspot_x;
> - cursor_msg.hot_spot_y = hotspot_y;
> + cursor_msg.width = cursor->width;
> + cursor_msg.height = cursor->height;
> + cursor_msg.hot_spot_x = cursor->xhot;
> + cursor_msg.hot_spot_y = cursor->yhot;
>
> uint32_t *pixels = reinterpret_cast<uint32_t *>(cursor_msg.data);
> - fill_cursor(pixels);
> + for (unsigned i = 0; i < cursor->width * cursor->height; ++i) {
> + pixels[i] = cursor->pixels[i];
> + }
>
> std::lock_guard<std::mutex> guard(stream_port.mutex);
> stream_port.write(msg.get(), cursor_size);
> @@ -95,11 +98,8 @@ CursorUpdater::CursorUpdater(StreamPort *stream_port) :
> stream_port(stream_port)
> }
>
> last_serial = cursor->cursor_serial;
> - auto fill_cursor = [cursor](uint32_t *pixels) {
> - for (unsigned i = 0; i < cursor->width * cursor->height; ++i)
> - pixels[i] = cursor->pixels[i];
> - };
> - send_cursor(*stream_port, cursor->width, cursor->height,
> cursor->xhot, cursor->yhot, fill_cursor);
> +
> + send_cursor(*stream_port, cursor);
> }
> }
>
Why bounding send_cursor to a specific (X11) implementation?
Would not be better to add another overloaded send_cursor instead?
I don't thing cursor can be nullptr, in this case I would use a reference
instead, better constant, I don't see why we should change it.
Frediano
More information about the Spice-devel
mailing list