mirror of https://github.com/xemu-project/xemu.git
ui/console ui_info tweaks.
ui/vnc: alpha cursor support. ui/vnc: locking fixes. ui/sdl: add extra mouse buttons. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCgAGBQJf0zgHAAoJEEy22O7T6HE4GigP+wewDSuvhQkxia9qN3MaC2DQ /17bO79KxDoIslZIbuec7UoBfgP8rhOG8nTUSoOz1oHqgiVHt14XigYUdqdc/mSv 25h26OcUEWEhHmH5X2lwZEicjDtbu4U+DG4Ouic6ueThx7a3ho/RxKDvIVJ/6DSN F6i0IrbhS1vXNYeyKu8Yc8Uh++D/GJbYY1FHR5VmTwBVR3OIN7RFbwgNc7W/ivyk hAxgDaAHT6EiRfdgIpqXCZtqXtOnYhV8yXq5XjyrvStAk6ou0wn8JKPZRABpz/1/ cuMKyWYl1X7RV8XS5D5xDY1T0pwJgrGEyuHEaYX/csyQusW4ULaskPWgP4Oq9EOG n3gMK552Jy3rNkCdT+FxnLRMjBnRpo3U3Rxos0WjRYst0wQGAfAsgVc+Qg/vSElM yqeCd7UJplYNOGCPoJFhEd39vVyYYVpTS29tLR1pPABJnedemjjkrJXYUDBv9Fxn Rs2n5NzGX3URrOnhnOznneysTlMXRpA+//WCO2vrx7RQK4bNzrvZi0yD/iLRRdsX 5MJ5d2/w5GS9EgeX1STRDmzW8JGYI/CD16YiKsuUlVBScSQmcDtSFocjmg9cCNy0 iMqpUsjsMafsqux53jiBlflHTNbGL0Ri0N8H6ZZN2QQb1pe+l0eZOEMeEDDQ9Lhf KpC+Aaw3r0hpJ0HR71Cc =AE0q -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/ui-20201211-pull-request' into staging ui/console ui_info tweaks. ui/vnc: alpha cursor support. ui/vnc: locking fixes. ui/sdl: add extra mouse buttons. # gpg: Signature made Fri 11 Dec 2020 09:12:39 GMT # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/ui-20201211-pull-request: sdl2: Add extra mouse buttons ui/vnc: Add missing lock for send_color_map vnc: add alpha cursor support vnc: add pseudo encodings vnc: drop unused copyrect feature vnc: use enum for features console: allow con==NULL in dpy_{get, set}_ui_info and dpy_ui_info_supported console: drop qemu_console_get_ui_info Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
f6029bb614
|
@ -390,7 +390,6 @@ bool qemu_console_is_gl_blocked(QemuConsole *con);
|
|||
char *qemu_console_get_label(QemuConsole *con);
|
||||
int qemu_console_get_index(QemuConsole *con);
|
||||
uint32_t qemu_console_get_head(QemuConsole *con);
|
||||
QemuUIInfo *qemu_console_get_ui_info(QemuConsole *con);
|
||||
int qemu_console_get_width(QemuConsole *con, int fallback);
|
||||
int qemu_console_get_height(QemuConsole *con, int fallback);
|
||||
/* Return the low-level window id for the console */
|
||||
|
|
18
ui/console.c
18
ui/console.c
|
@ -1544,19 +1544,27 @@ static void dpy_set_ui_info_timer(void *opaque)
|
|||
|
||||
bool dpy_ui_info_supported(QemuConsole *con)
|
||||
{
|
||||
if (con == NULL) {
|
||||
con = active_console;
|
||||
}
|
||||
|
||||
return con->hw_ops->ui_info != NULL;
|
||||
}
|
||||
|
||||
const QemuUIInfo *dpy_get_ui_info(const QemuConsole *con)
|
||||
{
|
||||
assert(con != NULL);
|
||||
if (con == NULL) {
|
||||
con = active_console;
|
||||
}
|
||||
|
||||
return &con->ui_info;
|
||||
}
|
||||
|
||||
int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info)
|
||||
{
|
||||
assert(con != NULL);
|
||||
if (con == NULL) {
|
||||
con = active_console;
|
||||
}
|
||||
|
||||
if (!dpy_ui_info_supported(con)) {
|
||||
return -1;
|
||||
|
@ -2122,12 +2130,6 @@ uint32_t qemu_console_get_head(QemuConsole *con)
|
|||
return con ? con->head : -1;
|
||||
}
|
||||
|
||||
QemuUIInfo *qemu_console_get_ui_info(QemuConsole *con)
|
||||
{
|
||||
assert(con != NULL);
|
||||
return &con->ui_info;
|
||||
}
|
||||
|
||||
int qemu_console_get_width(QemuConsole *con, int fallback)
|
||||
{
|
||||
if (con == NULL) {
|
||||
|
|
|
@ -275,6 +275,8 @@ static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy,
|
|||
[INPUT_BUTTON_LEFT] = SDL_BUTTON(SDL_BUTTON_LEFT),
|
||||
[INPUT_BUTTON_MIDDLE] = SDL_BUTTON(SDL_BUTTON_MIDDLE),
|
||||
[INPUT_BUTTON_RIGHT] = SDL_BUTTON(SDL_BUTTON_RIGHT),
|
||||
[INPUT_BUTTON_SIDE] = SDL_BUTTON(SDL_BUTTON_X1),
|
||||
[INPUT_BUTTON_EXTRA] = SDL_BUTTON(SDL_BUTTON_X2)
|
||||
};
|
||||
static uint32_t prev_state;
|
||||
|
||||
|
|
26
ui/vnc.c
26
ui/vnc.c
|
@ -937,6 +937,18 @@ static int vnc_cursor_define(VncState *vs)
|
|||
QEMUCursor *c = vs->vd->cursor;
|
||||
int isize;
|
||||
|
||||
if (vnc_has_feature(vs, VNC_FEATURE_ALPHA_CURSOR)) {
|
||||
vnc_lock_output(vs);
|
||||
vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE);
|
||||
vnc_write_u8(vs, 0); /* padding */
|
||||
vnc_write_u16(vs, 1); /* # of rects */
|
||||
vnc_framebuffer_update(vs, c->hot_x, c->hot_y, c->width, c->height,
|
||||
VNC_ENCODING_ALPHA_CURSOR);
|
||||
vnc_write_s32(vs, VNC_ENCODING_RAW);
|
||||
vnc_write(vs, c->data, c->width * c->height * 4);
|
||||
vnc_unlock_output(vs);
|
||||
return 0;
|
||||
}
|
||||
if (vnc_has_feature(vs, VNC_FEATURE_RICH_CURSOR)) {
|
||||
vnc_lock_output(vs);
|
||||
vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE);
|
||||
|
@ -2061,9 +2073,6 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
|
|||
case VNC_ENCODING_RAW:
|
||||
vs->vnc_encoding = enc;
|
||||
break;
|
||||
case VNC_ENCODING_COPYRECT:
|
||||
vs->features |= VNC_FEATURE_COPYRECT_MASK;
|
||||
break;
|
||||
case VNC_ENCODING_HEXTILE:
|
||||
vs->features |= VNC_FEATURE_HEXTILE_MASK;
|
||||
vs->vnc_encoding = enc;
|
||||
|
@ -2105,9 +2114,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
|
|||
break;
|
||||
case VNC_ENCODING_RICH_CURSOR:
|
||||
vs->features |= VNC_FEATURE_RICH_CURSOR_MASK;
|
||||
if (vs->vd->cursor) {
|
||||
vnc_cursor_define(vs);
|
||||
}
|
||||
break;
|
||||
case VNC_ENCODING_ALPHA_CURSOR:
|
||||
vs->features |= VNC_FEATURE_ALPHA_CURSOR_MASK;
|
||||
break;
|
||||
case VNC_ENCODING_EXT_KEY_EVENT:
|
||||
send_ext_key_event_ack(vs);
|
||||
|
@ -2137,6 +2146,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
|
|||
vnc_desktop_resize(vs);
|
||||
check_pointer_type_change(&vs->mouse_mode_notifier, NULL);
|
||||
vnc_led_state_change(vs);
|
||||
if (vs->vd->cursor) {
|
||||
vnc_cursor_define(vs);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_pixel_conversion(VncState *vs)
|
||||
|
@ -2156,6 +2168,7 @@ static void send_color_map(VncState *vs)
|
|||
{
|
||||
int i;
|
||||
|
||||
vnc_lock_output(vs);
|
||||
vnc_write_u8(vs, VNC_MSG_SERVER_SET_COLOUR_MAP_ENTRIES);
|
||||
vnc_write_u8(vs, 0); /* padding */
|
||||
vnc_write_u16(vs, 0); /* first color */
|
||||
|
@ -2168,6 +2181,7 @@ static void send_color_map(VncState *vs)
|
|||
vnc_write_u16(vs, (((i >> pf->gshift) & pf->gmax) << (16 - pf->gbits)));
|
||||
vnc_write_u16(vs, (((i >> pf->bshift) & pf->bmax) << (16 - pf->bbits)));
|
||||
}
|
||||
vnc_unlock_output(vs);
|
||||
}
|
||||
|
||||
static void set_pixel_format(VncState *vs, int bits_per_pixel,
|
||||
|
|
30
ui/vnc.h
30
ui/vnc.h
|
@ -411,6 +411,8 @@ enum {
|
|||
#define VNC_ENCODING_AUDIO 0XFFFFFEFD /* -259 */
|
||||
#define VNC_ENCODING_TIGHT_PNG 0xFFFFFEFC /* -260 */
|
||||
#define VNC_ENCODING_LED_STATE 0XFFFFFEFB /* -261 */
|
||||
#define VNC_ENCODING_DESKTOP_RESIZE_EXT 0XFFFFFECC /* -308 */
|
||||
#define VNC_ENCODING_ALPHA_CURSOR 0XFFFFFEC6 /* -314 */
|
||||
#define VNC_ENCODING_WMVi 0x574D5669
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -438,18 +440,20 @@ enum {
|
|||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#define VNC_FEATURE_RESIZE 0
|
||||
#define VNC_FEATURE_HEXTILE 1
|
||||
#define VNC_FEATURE_POINTER_TYPE_CHANGE 2
|
||||
#define VNC_FEATURE_WMVI 3
|
||||
#define VNC_FEATURE_TIGHT 4
|
||||
#define VNC_FEATURE_ZLIB 5
|
||||
#define VNC_FEATURE_COPYRECT 6
|
||||
#define VNC_FEATURE_RICH_CURSOR 7
|
||||
#define VNC_FEATURE_TIGHT_PNG 8
|
||||
#define VNC_FEATURE_ZRLE 9
|
||||
#define VNC_FEATURE_ZYWRLE 10
|
||||
#define VNC_FEATURE_LED_STATE 11
|
||||
enum VncFeatures {
|
||||
VNC_FEATURE_RESIZE,
|
||||
VNC_FEATURE_HEXTILE,
|
||||
VNC_FEATURE_POINTER_TYPE_CHANGE,
|
||||
VNC_FEATURE_WMVI,
|
||||
VNC_FEATURE_TIGHT,
|
||||
VNC_FEATURE_ZLIB,
|
||||
VNC_FEATURE_RICH_CURSOR,
|
||||
VNC_FEATURE_ALPHA_CURSOR,
|
||||
VNC_FEATURE_TIGHT_PNG,
|
||||
VNC_FEATURE_ZRLE,
|
||||
VNC_FEATURE_ZYWRLE,
|
||||
VNC_FEATURE_LED_STATE,
|
||||
};
|
||||
|
||||
#define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE)
|
||||
#define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE)
|
||||
|
@ -457,8 +461,8 @@ enum {
|
|||
#define VNC_FEATURE_WMVI_MASK (1 << VNC_FEATURE_WMVI)
|
||||
#define VNC_FEATURE_TIGHT_MASK (1 << VNC_FEATURE_TIGHT)
|
||||
#define VNC_FEATURE_ZLIB_MASK (1 << VNC_FEATURE_ZLIB)
|
||||
#define VNC_FEATURE_COPYRECT_MASK (1 << VNC_FEATURE_COPYRECT)
|
||||
#define VNC_FEATURE_RICH_CURSOR_MASK (1 << VNC_FEATURE_RICH_CURSOR)
|
||||
#define VNC_FEATURE_ALPHA_CURSOR_MASK (1 << VNC_FEATURE_ALPHA_CURSOR)
|
||||
#define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG)
|
||||
#define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE)
|
||||
#define VNC_FEATURE_ZYWRLE_MASK (1 << VNC_FEATURE_ZYWRLE)
|
||||
|
|
Loading…
Reference in New Issue