* [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation.
@ 2014-12-11 10:49 Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile Gerd Hoffmann
` (9 more replies)
0 siblings, 10 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
This patch series is a brings a bunch of fixes and inprovements
to the sdl2 ui code. Proper window scaling and working keyboard
grabs are the most noteworthy ones. It also reorganizes the code
in preparation for adding opengl support to sdl2.
please review,
Gerd
Gerd Hoffmann (10):
sdl: move version logic from source code to makefile
sdl2: rename sdl2_state to sdl2_console, move to header file
sdl2: move keyboard input code to new sdl2-input.c
sdl2: turn on keyboard grabs
sdl2: move sdl_update to new sdl2-2d.c
sdl2: overhaul window size handling
sdl2: move sdl_switch to sdl2-2d.c
sdl2: add+use sdl2_2d_redraw function.
sdl2: factor out sdl2_poll_events
sdl2: move sdl2_2d_refresh to sdl2-2d.c
include/ui/sdl2.h | 27 +++++
ui/Makefile.objs | 7 +-
ui/sdl.c | 3 -
ui/sdl2-2d.c | 123 ++++++++++++++++++++
ui/sdl2-input.c | 106 +++++++++++++++++
ui/sdl2.c | 333 +++++++++++++-----------------------------------------
6 files changed, 343 insertions(+), 256 deletions(-)
create mode 100644 include/ui/sdl2.h
create mode 100644 ui/sdl2-2d.c
create mode 100644 ui/sdl2-input.c
--
1.8.3.1
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 14:05 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file Gerd Hoffmann
` (8 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Compile sdl.c / sdl2.c depending on CONFIG_SDLABI instead of
compiling both and have version #ifdefs in the source code.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/Makefile.objs | 7 ++++++-
ui/sdl.c | 3 ---
ui/sdl2.c | 3 ---
3 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index 801cba2..b25e85f 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -16,7 +16,12 @@ common-obj-$(CONFIG_CURSES) += curses.o
common-obj-$(CONFIG_VNC) += $(vnc-obj-y)
common-obj-$(CONFIG_GTK) += gtk.o x_keymap.o
-sdl.mo-objs := sdl.o sdl_zoom.o sdl2.o
+ifeq ($(CONFIG_SDLABI),1.2)
+sdl.mo-objs := sdl.o sdl_zoom.o
+endif
+ifeq ($(CONFIG_SDLABI),2.0)
+sdl.mo-objs := sdl2.o
+endif
sdl.mo-cflags := $(SDL_CFLAGS)
gtk.o-cflags := $(GTK_CFLAGS) $(VTE_CFLAGS)
diff --git a/ui/sdl.c b/ui/sdl.c
index 94c1d9d..3e9d810 100644
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -26,8 +26,6 @@
#undef WIN32_LEAN_AND_MEAN
#include <SDL.h>
-
-#if SDL_MAJOR_VERSION == 1
#include <SDL_syswm.h>
#include "qemu-common.h"
@@ -958,4 +956,3 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
atexit(sdl_cleanup);
}
-#endif
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 1ad74ba..45f23b1 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -27,8 +27,6 @@
#undef WIN32_LEAN_AND_MEAN
#include <SDL.h>
-
-#if SDL_MAJOR_VERSION == 2
#include <SDL_syswm.h>
#include "qemu-common.h"
@@ -912,4 +910,3 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
atexit(sdl_cleanup);
}
-#endif
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 13:45 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c Gerd Hoffmann
` (7 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Create sdl2.h header file, in preparation for sdl2 code splitup.
Populate it with sdl2_console struct (renamed from sdl2_state).
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 11 ++++++++++
ui/sdl2.c | 63 ++++++++++++++++++++++++-------------------------------
2 files changed, 38 insertions(+), 36 deletions(-)
create mode 100644 include/ui/sdl2.h
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
new file mode 100644
index 0000000..7f91a75
--- /dev/null
+++ b/include/ui/sdl2.h
@@ -0,0 +1,11 @@
+struct sdl2_console {
+ DisplayChangeListener dcl;
+ DisplaySurface *surface;
+ SDL_Texture *texture;
+ SDL_Window *real_window;
+ SDL_Renderer *real_renderer;
+ int idx;
+ int last_vm_running; /* per console for caption reasons */
+ int x, y;
+ int hidden;
+};
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 45f23b1..375e1a3 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -32,22 +32,13 @@
#include "qemu-common.h"
#include "ui/console.h"
#include "ui/input.h"
+#include "ui/sdl2.h"
#include "sysemu/sysemu.h"
#include "sdl2-keymap.h"
static int sdl2_num_outputs;
-static struct sdl2_state {
- DisplayChangeListener dcl;
- DisplaySurface *surface;
- SDL_Texture *texture;
- SDL_Window *real_window;
- SDL_Renderer *real_renderer;
- int idx;
- int last_vm_running; /* per console for caption reasons */
- int x, y;
- int hidden;
-} *sdl2_console;
+static struct sdl2_console *sdl2_console;
static SDL_Surface *guest_sprite_surface;
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
@@ -71,9 +62,9 @@ static SDL_Cursor *guest_sprite;
static int scaling_active;
static Notifier mouse_mode_notifier;
-static void sdl_update_caption(struct sdl2_state *scon);
+static void sdl_update_caption(struct sdl2_console *scon);
-static struct sdl2_state *get_scon_from_window(uint32_t window_id)
+static struct sdl2_console *get_scon_from_window(uint32_t window_id)
{
int i;
for (i = 0; i < sdl2_num_outputs; i++) {
@@ -87,7 +78,7 @@ static struct sdl2_state *get_scon_from_window(uint32_t window_id)
static void sdl_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
{
- struct sdl2_state *scon = container_of(dcl, struct sdl2_state, dcl);
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
SDL_Rect rect;
DisplaySurface *surf = qemu_console_surface(dcl->con);
@@ -109,7 +100,7 @@ static void sdl_update(DisplayChangeListener *dcl,
SDL_RenderPresent(scon->real_renderer);
}
-static void do_sdl_resize(struct sdl2_state *scon, int width, int height,
+static void do_sdl_resize(struct sdl2_console *scon, int width, int height,
int bpp)
{
int flags;
@@ -149,7 +140,7 @@ static void do_sdl_resize(struct sdl2_state *scon, int width, int height,
static void sdl_switch(DisplayChangeListener *dcl,
DisplaySurface *new_surface)
{
- struct sdl2_state *scon = container_of(dcl, struct sdl2_state, dcl);
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
int format = 0;
int idx = scon->idx;
DisplaySurface *old_surface = scon->surface;
@@ -191,7 +182,7 @@ static void sdl_switch(DisplayChangeListener *dcl,
}
}
-static void reset_keys(struct sdl2_state *scon)
+static void reset_keys(struct sdl2_console *scon)
{
QemuConsole *con = scon ? scon->dcl.con : NULL;
int i;
@@ -205,7 +196,7 @@ static void reset_keys(struct sdl2_state *scon)
}
}
-static void sdl_process_key(struct sdl2_state *scon,
+static void sdl_process_key(struct sdl2_console *scon,
SDL_KeyboardEvent *ev)
{
int qcode = sdl2_scancode_to_qcode[ev->keysym.scancode];
@@ -257,7 +248,7 @@ static void sdl_process_key(struct sdl2_state *scon,
}
}
-static void sdl_update_caption(struct sdl2_state *scon)
+static void sdl_update_caption(struct sdl2_console *scon)
{
char win_title[1024];
char icon_title[1024];
@@ -321,7 +312,7 @@ static void sdl_show_cursor(void)
}
}
-static void sdl_grab_start(struct sdl2_state *scon)
+static void sdl_grab_start(struct sdl2_console *scon)
{
QemuConsole *con = scon ? scon->dcl.con : NULL;
@@ -349,7 +340,7 @@ static void sdl_grab_start(struct sdl2_state *scon)
sdl_update_caption(scon);
}
-static void sdl_grab_end(struct sdl2_state *scon)
+static void sdl_grab_end(struct sdl2_console *scon)
{
SDL_SetWindowGrab(scon->real_window, SDL_FALSE);
gui_grab = 0;
@@ -357,7 +348,7 @@ static void sdl_grab_end(struct sdl2_state *scon)
sdl_update_caption(scon);
}
-static void absolute_mouse_grab(struct sdl2_state *scon)
+static void absolute_mouse_grab(struct sdl2_console *scon)
{
int mouse_x, mouse_y;
int scr_w, scr_h;
@@ -384,7 +375,7 @@ static void sdl_mouse_mode_change(Notifier *notify, void *data)
}
}
-static void sdl_send_mouse_event(struct sdl2_state *scon, int dx, int dy,
+static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy,
int x, int y, int state)
{
static uint32_t bmap[INPUT_BUTTON_MAX] = {
@@ -407,7 +398,7 @@ static void sdl_send_mouse_event(struct sdl2_state *scon, int dx, int dy,
int i;
for (i = 0; i < sdl2_num_outputs; i++) {
- struct sdl2_state *thiscon = &sdl2_console[i];
+ struct sdl2_console *thiscon = &sdl2_console[i];
if (thiscon->real_window && thiscon->surface) {
SDL_GetWindowSize(thiscon->real_window, &scr_w, &scr_h);
cur_off_x = thiscon->x;
@@ -441,14 +432,14 @@ static void sdl_send_mouse_event(struct sdl2_state *scon, int dx, int dy,
qemu_input_event_sync();
}
-static void sdl_scale(struct sdl2_state *scon, int width, int height)
+static void sdl_scale(struct sdl2_console *scon, int width, int height)
{
int bpp = 0;
do_sdl_resize(scon, width, height, bpp);
scaling_active = 1;
}
-static void toggle_full_screen(struct sdl2_state *scon)
+static void toggle_full_screen(struct sdl2_console *scon)
{
int width = surface_width(scon->surface);
int height = surface_height(scon->surface);
@@ -482,7 +473,7 @@ static void toggle_full_screen(struct sdl2_state *scon)
static void handle_keydown(SDL_Event *ev)
{
int mod_state, win;
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
if (alt_grab) {
mod_state = (SDL_GetModState() & (gui_grab_code | KMOD_LSHIFT)) ==
@@ -560,7 +551,7 @@ static void handle_keydown(SDL_Event *ev)
static void handle_keyup(SDL_Event *ev)
{
int mod_state;
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
if (!alt_grab) {
mod_state = (ev->key.keysym.mod & gui_grab_code);
@@ -590,7 +581,7 @@ static void handle_keyup(SDL_Event *ev)
static void handle_textinput(SDL_Event *ev)
{
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
QemuConsole *con = scon ? scon->dcl.con : NULL;
if (qemu_console_is_graphic(con)) {
@@ -602,7 +593,7 @@ static void handle_textinput(SDL_Event *ev)
static void handle_mousemotion(SDL_Event *ev)
{
int max_x, max_y;
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
if (qemu_input_is_absolute() || absolute_enabled) {
int scr_w, scr_h;
@@ -629,7 +620,7 @@ static void handle_mousebutton(SDL_Event *ev)
{
int buttonstate = SDL_GetMouseState(NULL, NULL);
SDL_MouseButtonEvent *bev;
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
bev = &ev->button;
if (!gui_grab && !qemu_input_is_absolute()) {
@@ -649,7 +640,7 @@ static void handle_mousebutton(SDL_Event *ev)
static void handle_mousewheel(SDL_Event *ev)
{
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
SDL_MouseWheelEvent *wev = &ev->wheel;
InputButton btn;
@@ -670,7 +661,7 @@ static void handle_mousewheel(SDL_Event *ev)
static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
{
int w, h;
- struct sdl2_state *scon = get_scon_from_window(ev->key.windowID);
+ struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
switch (ev->window.event) {
case SDL_WINDOWEVENT_RESIZED:
@@ -717,7 +708,7 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
static void sdl_refresh(DisplayChangeListener *dcl)
{
- struct sdl2_state *scon = container_of(dcl, struct sdl2_state, dcl);
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
SDL_Event ev1, *ev = &ev1;
if (scon->last_vm_running != runstate_is_running()) {
@@ -766,7 +757,7 @@ static void sdl_refresh(DisplayChangeListener *dcl)
static void sdl_mouse_warp(DisplayChangeListener *dcl,
int x, int y, int on)
{
- struct sdl2_state *scon = container_of(dcl, struct sdl2_state, dcl);
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
if (on) {
if (!guest_cursor) {
sdl_show_cursor();
@@ -871,7 +862,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
}
}
sdl2_num_outputs = i;
- sdl2_console = g_new0(struct sdl2_state, sdl2_num_outputs);
+ sdl2_console = g_new0(struct sdl2_console, sdl2_num_outputs);
for (i = 0; i < sdl2_num_outputs; i++) {
QemuConsole *con = qemu_console_lookup_by_index(i);
if (!qemu_console_is_graphic(con)) {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 14:00 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs Gerd Hoffmann
` (6 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 4 +++
ui/Makefile.objs | 2 +-
ui/sdl2-input.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
ui/sdl2.c | 75 ++------------------------------------
4 files changed, 114 insertions(+), 73 deletions(-)
create mode 100644 ui/sdl2-input.c
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 7f91a75..e1c304a 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -9,3 +9,7 @@ struct sdl2_console {
int x, y;
int hidden;
};
+
+void sdl2_reset_keys(struct sdl2_console *scon);
+void sdl2_process_key(struct sdl2_console *scon,
+ SDL_KeyboardEvent *ev);
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index b25e85f..011c5bb 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -20,7 +20,7 @@ ifeq ($(CONFIG_SDLABI),1.2)
sdl.mo-objs := sdl.o sdl_zoom.o
endif
ifeq ($(CONFIG_SDLABI),2.0)
-sdl.mo-objs := sdl2.o
+sdl.mo-objs := sdl2.o sdl2-input.o
endif
sdl.mo-cflags := $(SDL_CFLAGS)
diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c
new file mode 100644
index 0000000..6702e8e
--- /dev/null
+++ b/ui/sdl2-input.c
@@ -0,0 +1,106 @@
+/*
+ * QEMU SDL display driver
+ *
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+/* Ported SDL 1.2 code to 2.0 by Dave Airlie. */
+
+/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */
+#undef WIN32_LEAN_AND_MEAN
+
+#include <SDL.h>
+#include <SDL_syswm.h>
+
+#include "qemu-common.h"
+#include "ui/console.h"
+#include "ui/input.h"
+#include "ui/sdl2.h"
+#include "sysemu/sysemu.h"
+
+#include "sdl2-keymap.h"
+
+static uint8_t modifiers_state[SDL_NUM_SCANCODES];
+
+void sdl2_reset_keys(struct sdl2_console *scon)
+{
+ QemuConsole *con = scon ? scon->dcl.con : NULL;
+ int i;
+
+ for (i = 0; i < 256; i++) {
+ if (modifiers_state[i]) {
+ int qcode = sdl2_scancode_to_qcode[i];
+ qemu_input_event_send_key_qcode(con, qcode, false);
+ modifiers_state[i] = 0;
+ }
+ }
+}
+
+void sdl2_process_key(struct sdl2_console *scon,
+ SDL_KeyboardEvent *ev)
+{
+ int qcode = sdl2_scancode_to_qcode[ev->keysym.scancode];
+ QemuConsole *con = scon ? scon->dcl.con : NULL;
+
+ if (!qemu_console_is_graphic(con)) {
+ if (ev->type == SDL_KEYDOWN) {
+ switch (ev->keysym.scancode) {
+ case SDL_SCANCODE_RETURN:
+ kbd_put_keysym_console(con, '\n');
+ break;
+ case SDL_SCANCODE_BACKSPACE:
+ kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE);
+ break;
+ default:
+ kbd_put_qcode_console(con, qcode);
+ break;
+ }
+ }
+ return;
+ }
+
+ switch (ev->keysym.scancode) {
+#if 0
+ case SDL_SCANCODE_NUMLOCKCLEAR:
+ case SDL_SCANCODE_CAPSLOCK:
+ /* SDL does not send the key up event, so we generate it */
+ qemu_input_event_send_key_qcode(con, qcode, true);
+ qemu_input_event_send_key_qcode(con, qcode, false);
+ return;
+#endif
+ case SDL_SCANCODE_LCTRL:
+ case SDL_SCANCODE_LSHIFT:
+ case SDL_SCANCODE_LALT:
+ case SDL_SCANCODE_LGUI:
+ case SDL_SCANCODE_RCTRL:
+ case SDL_SCANCODE_RSHIFT:
+ case SDL_SCANCODE_RALT:
+ case SDL_SCANCODE_RGUI:
+ if (ev->type == SDL_KEYUP) {
+ modifiers_state[ev->keysym.scancode] = 0;
+ } else {
+ modifiers_state[ev->keysym.scancode] = 1;
+ }
+ /* fall though */
+ default:
+ qemu_input_event_send_key_qcode(con, qcode,
+ ev->type == SDL_KEYDOWN);
+ }
+}
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 375e1a3..b8d592f 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -35,8 +35,6 @@
#include "ui/sdl2.h"
#include "sysemu/sysemu.h"
-#include "sdl2-keymap.h"
-
static int sdl2_num_outputs;
static struct sdl2_console *sdl2_console;
@@ -52,7 +50,6 @@ static int gui_noframe;
static int gui_key_modifier_pressed;
static int gui_keysym;
static int gui_grab_code = KMOD_LALT | KMOD_LCTRL;
-static uint8_t modifiers_state[SDL_NUM_SCANCODES];
static SDL_Cursor *sdl_cursor_normal;
static SDL_Cursor *sdl_cursor_hidden;
static int absolute_enabled;
@@ -182,72 +179,6 @@ static void sdl_switch(DisplayChangeListener *dcl,
}
}
-static void reset_keys(struct sdl2_console *scon)
-{
- QemuConsole *con = scon ? scon->dcl.con : NULL;
- int i;
-
- for (i = 0; i < 256; i++) {
- if (modifiers_state[i]) {
- int qcode = sdl2_scancode_to_qcode[i];
- qemu_input_event_send_key_qcode(con, qcode, false);
- modifiers_state[i] = 0;
- }
- }
-}
-
-static void sdl_process_key(struct sdl2_console *scon,
- SDL_KeyboardEvent *ev)
-{
- int qcode = sdl2_scancode_to_qcode[ev->keysym.scancode];
- QemuConsole *con = scon ? scon->dcl.con : NULL;
-
- if (!qemu_console_is_graphic(con)) {
- if (ev->type == SDL_KEYDOWN) {
- switch (ev->keysym.scancode) {
- case SDL_SCANCODE_RETURN:
- kbd_put_keysym_console(con, '\n');
- break;
- case SDL_SCANCODE_BACKSPACE:
- kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE);
- break;
- default:
- kbd_put_qcode_console(con, qcode);
- break;
- }
- }
- return;
- }
-
- switch (ev->keysym.scancode) {
-#if 0
- case SDL_SCANCODE_NUMLOCKCLEAR:
- case SDL_SCANCODE_CAPSLOCK:
- /* SDL does not send the key up event, so we generate it */
- qemu_input_event_send_key_qcode(con, qcode, true);
- qemu_input_event_send_key_qcode(con, qcode, false);
- return;
-#endif
- case SDL_SCANCODE_LCTRL:
- case SDL_SCANCODE_LSHIFT:
- case SDL_SCANCODE_LALT:
- case SDL_SCANCODE_LGUI:
- case SDL_SCANCODE_RCTRL:
- case SDL_SCANCODE_RSHIFT:
- case SDL_SCANCODE_RALT:
- case SDL_SCANCODE_RGUI:
- if (ev->type == SDL_KEYUP) {
- modifiers_state[ev->keysym.scancode] = 0;
- } else {
- modifiers_state[ev->keysym.scancode] = 1;
- }
- /* fall though */
- default:
- qemu_input_event_send_key_qcode(con, qcode,
- ev->type == SDL_KEYDOWN);
- }
-}
-
static void sdl_update_caption(struct sdl2_console *scon)
{
char win_title[1024];
@@ -544,7 +475,7 @@ static void handle_keydown(SDL_Event *ev)
}
}
if (!gui_keysym) {
- sdl_process_key(scon, &ev->key);
+ sdl2_process_key(scon, &ev->key);
}
}
@@ -569,13 +500,13 @@ static void handle_keyup(SDL_Event *ev)
}
/* SDL does not send back all the modifiers key, so we must
* correct it. */
- reset_keys(scon);
+ sdl2_reset_keys(scon);
return;
}
gui_keysym = 0;
}
if (!gui_keysym) {
- sdl_process_key(scon, &ev->key);
+ sdl2_process_key(scon, &ev->key);
}
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (2 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 14:05 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c Gerd Hoffmann
` (5 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Makes quite some keys actually go to the guest instead of
being captured by the host window manager.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index b8d592f..9b66017 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -189,11 +189,11 @@ static void sdl_update_caption(struct sdl2_console *scon)
status = " [Stopped]";
} else if (gui_grab) {
if (alt_grab) {
- status = " - Press Ctrl-Alt-Shift to exit mouse grab";
+ status = " - Press Ctrl-Alt-Shift to exit grab";
} else if (ctrl_grab) {
- status = " - Press Right-Ctrl to exit mouse grab";
+ status = " - Press Right-Ctrl to exit grab";
} else {
- status = " - Press Ctrl-Alt to exit mouse grab";
+ status = " - Press Ctrl-Alt to exit grab";
}
}
@@ -785,6 +785,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
SDL_GetError());
exit(1);
}
+ SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1");
for (i = 0;; i++) {
QemuConsole *con = qemu_console_lookup_by_index(i);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (3 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 14:14 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling Gerd Hoffmann
` (4 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Create new sdl2-2d file for 2d display rendering.
Move over sdl_update code, and rename to sdl2_2d_update.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 3 +++
ui/Makefile.objs | 2 +-
ui/sdl2-2d.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
ui/sdl2.c | 35 +++++--------------------------
4 files changed, 70 insertions(+), 31 deletions(-)
create mode 100644 ui/sdl2-2d.c
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index e1c304a..0573e2a 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -13,3 +13,6 @@ struct sdl2_console {
void sdl2_reset_keys(struct sdl2_console *scon);
void sdl2_process_key(struct sdl2_console *scon,
SDL_KeyboardEvent *ev);
+
+void sdl2_2d_update(DisplayChangeListener *dcl,
+ int x, int y, int w, int h);
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index 011c5bb..13b5cfb 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -20,7 +20,7 @@ ifeq ($(CONFIG_SDLABI),1.2)
sdl.mo-objs := sdl.o sdl_zoom.o
endif
ifeq ($(CONFIG_SDLABI),2.0)
-sdl.mo-objs := sdl2.o sdl2-input.o
+sdl.mo-objs := sdl2.o sdl2-input.o sdl2-2d.o
endif
sdl.mo-cflags := $(SDL_CFLAGS)
diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
new file mode 100644
index 0000000..7b0039b
--- /dev/null
+++ b/ui/sdl2-2d.c
@@ -0,0 +1,61 @@
+/*
+ * QEMU SDL display driver
+ *
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+/* Ported SDL 1.2 code to 2.0 by Dave Airlie. */
+
+/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */
+#undef WIN32_LEAN_AND_MEAN
+
+#include <SDL.h>
+#include <SDL_syswm.h>
+
+#include "qemu-common.h"
+#include "ui/console.h"
+#include "ui/input.h"
+#include "ui/sdl2.h"
+#include "sysemu/sysemu.h"
+
+void sdl2_2d_update(DisplayChangeListener *dcl,
+ int x, int y, int w, int h)
+{
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
+ DisplaySurface *surf = qemu_console_surface(dcl->con);
+ SDL_Rect rect;
+
+ if (!surf) {
+ return;
+ }
+ if (!scon->texture) {
+ return;
+ }
+
+ rect.x = x;
+ rect.y = y;
+ rect.w = w;
+ rect.h = h;
+
+ SDL_UpdateTexture(scon->texture, NULL, surface_data(surf),
+ surface_stride(surf));
+ SDL_RenderCopy(scon->real_renderer, scon->texture, &rect, &rect);
+ SDL_RenderPresent(scon->real_renderer);
+}
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 9b66017..47a757a 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -72,31 +72,6 @@ static struct sdl2_console *get_scon_from_window(uint32_t window_id)
return NULL;
}
-static void sdl_update(DisplayChangeListener *dcl,
- int x, int y, int w, int h)
-{
- struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
- SDL_Rect rect;
- DisplaySurface *surf = qemu_console_surface(dcl->con);
-
- if (!surf) {
- return;
- }
- if (!scon->texture) {
- return;
- }
-
- rect.x = x;
- rect.y = y;
- rect.w = w;
- rect.h = h;
-
- SDL_UpdateTexture(scon->texture, NULL, surface_data(surf),
- surface_stride(surf));
- SDL_RenderCopy(scon->real_renderer, scon->texture, &rect, &rect);
- SDL_RenderPresent(scon->real_renderer);
-}
-
static void do_sdl_resize(struct sdl2_console *scon, int width, int height,
int bpp)
{
@@ -609,7 +584,7 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
break;
case SDL_WINDOWEVENT_EXPOSED:
SDL_GetWindowSize(SDL_GetWindowFromID(ev->window.windowID), &w, &h);
- sdl_update(dcl, 0, 0, w, h);
+ sdl2_2d_update(dcl, 0, 0, w, h);
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
case SDL_WINDOWEVENT_ENTER:
@@ -746,9 +721,9 @@ static void sdl_cleanup(void)
SDL_QuitSubSystem(SDL_INIT_VIDEO);
}
-static const DisplayChangeListenerOps dcl_ops = {
- .dpy_name = "sdl",
- .dpy_gfx_update = sdl_update,
+static const DisplayChangeListenerOps dcl_2d_ops = {
+ .dpy_name = "sdl2-2d",
+ .dpy_gfx_update = sdl2_2d_update,
.dpy_gfx_switch = sdl_switch,
.dpy_refresh = sdl_refresh,
.dpy_mouse_set = sdl_mouse_warp,
@@ -800,7 +775,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
if (!qemu_console_is_graphic(con)) {
sdl2_console[i].hidden = true;
}
- sdl2_console[i].dcl.ops = &dcl_ops;
+ sdl2_console[i].dcl.ops = &dcl_2d_ops;
sdl2_console[i].dcl.con = con;
register_displaychangelistener(&sdl2_console[i].dcl);
sdl2_console[i].idx = i;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (4 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 14:42 ` Max Reitz
2014-12-11 15:06 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c Gerd Hoffmann
` (3 subsequent siblings)
9 siblings, 2 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Split do_sdl_resize function (which does alot more than just resizing)
into three: sdl2_window_{create,destroy,resize}.
Fix SDL_Renderer handling: must be guest display size not host window
size, and SDL2 will magically handle all scaling for us.
Make fullscreen actually enter fullscreen mode and simplify the code.
There is no need to store the original window size, the window manager
will do that for us.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2.c | 172 +++++++++++++++++++++++++++++---------------------------------
1 file changed, 79 insertions(+), 93 deletions(-)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 47a757a..70f79a5 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -41,9 +41,6 @@ static struct sdl2_console *sdl2_console;
static SDL_Surface *guest_sprite_surface;
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
-static bool gui_saved_scaling;
-static int gui_saved_width;
-static int gui_saved_height;
static int gui_saved_grab;
static int gui_fullscreen;
static int gui_noframe;
@@ -56,7 +53,6 @@ static int absolute_enabled;
static int guest_cursor;
static int guest_x, guest_y;
static SDL_Cursor *guest_sprite;
-static int scaling_active;
static Notifier mouse_mode_notifier;
static void sdl_update_caption(struct sdl2_console *scon);
@@ -72,86 +68,96 @@ static struct sdl2_console *get_scon_from_window(uint32_t window_id)
return NULL;
}
-static void do_sdl_resize(struct sdl2_console *scon, int width, int height,
- int bpp)
+static void sdl2_window_create(struct sdl2_console *scon)
{
- int flags;
+ int flags = 0;
- if (scon->real_window && scon->real_renderer) {
- if (width && height) {
- SDL_RenderSetLogicalSize(scon->real_renderer, width, height);
- SDL_SetWindowSize(scon->real_window, width, height);
- } else {
- SDL_DestroyRenderer(scon->real_renderer);
- SDL_DestroyWindow(scon->real_window);
- scon->real_renderer = NULL;
- scon->real_window = NULL;
- }
+ if (!scon->surface) {
+ return;
+ }
+ assert(!scon->real_window);
+
+ if (gui_fullscreen) {
+ flags |= SDL_WINDOW_FULLSCREEN;
} else {
- if (!width || !height) {
- return;
- }
- flags = 0;
- if (gui_fullscreen) {
- flags |= SDL_WINDOW_FULLSCREEN;
- } else {
- flags |= SDL_WINDOW_RESIZABLE;
- }
- if (scon->hidden) {
- flags |= SDL_WINDOW_HIDDEN;
- }
+ flags |= SDL_WINDOW_RESIZABLE;
+ }
+ if (scon->hidden) {
+ flags |= SDL_WINDOW_HIDDEN;
+ }
- scon->real_window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED,
- SDL_WINDOWPOS_UNDEFINED,
- width, height, flags);
- scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0);
- sdl_update_caption(scon);
+ scon->real_window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED,
+ surface_width(scon->surface),
+ surface_height(scon->surface),
+ flags);
+ scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0);
+ sdl_update_caption(scon);
+}
+
+static void sdl2_window_destroy(struct sdl2_console *scon)
+{
+ if (!scon->real_window) {
+ return;
}
+
+ SDL_DestroyRenderer(scon->real_renderer);
+ scon->real_renderer = NULL;
+ SDL_DestroyWindow(scon->real_window);
+ scon->real_window = NULL;
+}
+
+static void sdl2_window_resize(struct sdl2_console *scon)
+{
+ if (!scon->real_window) {
+ return;
+ }
+
+ SDL_SetWindowSize(scon->real_window,
+ surface_width(scon->surface),
+ surface_height(scon->surface));
}
static void sdl_switch(DisplayChangeListener *dcl,
DisplaySurface *new_surface)
{
struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
- int format = 0;
- int idx = scon->idx;
DisplaySurface *old_surface = scon->surface;
+ int format = 0;
- /* temporary hack: allows to call sdl_switch to handle scaling changes */
- if (new_surface) {
- scon->surface = new_surface;
- }
+ scon->surface = new_surface;
- if (!new_surface && idx > 0) {
- scon->surface = NULL;
+ if (scon->texture) {
+ SDL_DestroyTexture(scon->texture);
+ scon->texture = NULL;
}
- if (new_surface == NULL) {
- do_sdl_resize(scon, 0, 0, 0);
- } else {
- do_sdl_resize(scon, surface_width(scon->surface),
- surface_height(scon->surface), 0);
+ if (!new_surface) {
+ sdl2_window_destroy(scon);
+ return;
}
- if (old_surface && scon->texture) {
- SDL_DestroyTexture(scon->texture);
- scon->texture = NULL;
+ if (!scon->real_window) {
+ sdl2_window_create(scon);
+ } else if (old_surface &&
+ ((surface_width(old_surface) != surface_width(new_surface)) ||
+ (surface_height(old_surface) != surface_height(new_surface)))) {
+ sdl2_window_resize(scon);
}
- if (new_surface) {
- if (!scon->texture) {
- if (surface_bits_per_pixel(scon->surface) == 16) {
- format = SDL_PIXELFORMAT_RGB565;
- } else if (surface_bits_per_pixel(scon->surface) == 32) {
- format = SDL_PIXELFORMAT_ARGB8888;
- }
+ SDL_RenderSetLogicalSize(scon->real_renderer,
+ surface_width(new_surface),
+ surface_height(new_surface));
- scon->texture = SDL_CreateTexture(scon->real_renderer, format,
- SDL_TEXTUREACCESS_STREAMING,
- surface_width(new_surface),
- surface_height(new_surface));
- }
+ if (surface_bits_per_pixel(scon->surface) == 16) {
+ format = SDL_PIXELFORMAT_RGB565;
+ } else if (surface_bits_per_pixel(scon->surface) == 32) {
+ format = SDL_PIXELFORMAT_ARGB8888;
}
+ scon->texture = SDL_CreateTexture(scon->real_renderer, format,
+ SDL_TEXTUREACCESS_STREAMING,
+ surface_width(new_surface),
+ surface_height(new_surface));
}
static void sdl_update_caption(struct sdl2_console *scon)
@@ -338,39 +344,19 @@ static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy,
qemu_input_event_sync();
}
-static void sdl_scale(struct sdl2_console *scon, int width, int height)
-{
- int bpp = 0;
- do_sdl_resize(scon, width, height, bpp);
- scaling_active = 1;
-}
-
static void toggle_full_screen(struct sdl2_console *scon)
{
- int width = surface_width(scon->surface);
- int height = surface_height(scon->surface);
- int bpp = surface_bits_per_pixel(scon->surface);
-
gui_fullscreen = !gui_fullscreen;
if (gui_fullscreen) {
- SDL_GetWindowSize(scon->real_window,
- &gui_saved_width, &gui_saved_height);
- gui_saved_scaling = scaling_active;
-
- do_sdl_resize(scon, width, height, bpp);
- scaling_active = 0;
-
+ SDL_SetWindowFullscreen(scon->real_window,
+ SDL_WINDOW_FULLSCREEN_DESKTOP);
gui_saved_grab = gui_grab;
sdl_grab_start(scon);
} else {
- if (gui_saved_scaling) {
- sdl_scale(scon, gui_saved_width, gui_saved_height);
- } else {
- do_sdl_resize(scon, width, height, 0);
- }
if (!gui_saved_grab) {
sdl_grab_end(scon);
}
+ SDL_SetWindowFullscreen(scon->real_window, 0);
}
graphic_hw_invalidate(scon->dcl.con);
graphic_hw_update(scon->dcl.con);
@@ -419,14 +405,13 @@ static void handle_keydown(SDL_Event *ev)
gui_keysym = 1;
break;
case SDL_SCANCODE_U:
- if (scaling_active) {
- scaling_active = 0;
- sdl_switch(&scon->dcl, NULL);
- graphic_hw_invalidate(scon->dcl.con);
- graphic_hw_update(scon->dcl.con);
- }
+ sdl2_window_destroy(scon);
+ sdl2_window_create(scon);
+ graphic_hw_invalidate(scon->dcl.con);
+ graphic_hw_update(scon->dcl.con);
gui_keysym = 1;
break;
+#if 0
case SDL_SCANCODE_KP_PLUS:
case SDL_SCANCODE_KP_MINUS:
if (!gui_fullscreen) {
@@ -439,12 +424,14 @@ static void handle_keydown(SDL_Event *ev)
160);
height = (surface_height(scon->surface) * width) /
surface_width(scon->surface);
-
+ fprintf(stderr, "%s: scale to %dx%d\n",
+ __func__, width, height);
sdl_scale(scon, width, height);
graphic_hw_invalidate(NULL);
graphic_hw_update(NULL);
gui_keysym = 1;
}
+#endif
default:
break;
}
@@ -571,7 +558,6 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
switch (ev->window.event) {
case SDL_WINDOWEVENT_RESIZED:
- sdl_scale(scon, ev->window.data1, ev->window.data2);
{
QemuUIInfo info;
memset(&info, 0, sizeof(info));
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (5 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 15:00 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function Gerd Hoffmann
` (2 subsequent siblings)
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Move sdl_switch to sdl2-2d.c file, rename to sdl2_2d_switch.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 6 ++++++
ui/sdl2-2d.c | 42 ++++++++++++++++++++++++++++++++++++++++++
ui/sdl2.c | 50 ++++----------------------------------------------
3 files changed, 52 insertions(+), 46 deletions(-)
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 0573e2a..2c48c4f 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -10,9 +10,15 @@ struct sdl2_console {
int hidden;
};
+void sdl2_window_create(struct sdl2_console *scon);
+void sdl2_window_destroy(struct sdl2_console *scon);
+void sdl2_window_resize(struct sdl2_console *scon);
+
void sdl2_reset_keys(struct sdl2_console *scon);
void sdl2_process_key(struct sdl2_console *scon,
SDL_KeyboardEvent *ev);
void sdl2_2d_update(DisplayChangeListener *dcl,
int x, int y, int w, int h);
+void sdl2_2d_switch(DisplayChangeListener *dcl,
+ DisplaySurface *new_surface);
diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
index 7b0039b..29ada53 100644
--- a/ui/sdl2-2d.c
+++ b/ui/sdl2-2d.c
@@ -59,3 +59,45 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
SDL_RenderCopy(scon->real_renderer, scon->texture, &rect, &rect);
SDL_RenderPresent(scon->real_renderer);
}
+
+void sdl2_2d_switch(DisplayChangeListener *dcl,
+ DisplaySurface *new_surface)
+{
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
+ DisplaySurface *old_surface = scon->surface;
+ int format = 0;
+
+ scon->surface = new_surface;
+
+ if (scon->texture) {
+ SDL_DestroyTexture(scon->texture);
+ scon->texture = NULL;
+ }
+
+ if (!new_surface) {
+ sdl2_window_destroy(scon);
+ return;
+ }
+
+ if (!scon->real_window) {
+ sdl2_window_create(scon);
+ } else if (old_surface &&
+ ((surface_width(old_surface) != surface_width(new_surface)) ||
+ (surface_height(old_surface) != surface_height(new_surface)))) {
+ sdl2_window_resize(scon);
+ }
+
+ SDL_RenderSetLogicalSize(scon->real_renderer,
+ surface_width(new_surface),
+ surface_height(new_surface));
+
+ if (surface_bits_per_pixel(scon->surface) == 16) {
+ format = SDL_PIXELFORMAT_RGB565;
+ } else if (surface_bits_per_pixel(scon->surface) == 32) {
+ format = SDL_PIXELFORMAT_ARGB8888;
+ }
+ scon->texture = SDL_CreateTexture(scon->real_renderer, format,
+ SDL_TEXTUREACCESS_STREAMING,
+ surface_width(new_surface),
+ surface_height(new_surface));
+}
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 70f79a5..28b1e22 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -68,7 +68,7 @@ static struct sdl2_console *get_scon_from_window(uint32_t window_id)
return NULL;
}
-static void sdl2_window_create(struct sdl2_console *scon)
+void sdl2_window_create(struct sdl2_console *scon)
{
int flags = 0;
@@ -95,7 +95,7 @@ static void sdl2_window_create(struct sdl2_console *scon)
sdl_update_caption(scon);
}
-static void sdl2_window_destroy(struct sdl2_console *scon)
+void sdl2_window_destroy(struct sdl2_console *scon)
{
if (!scon->real_window) {
return;
@@ -107,7 +107,7 @@ static void sdl2_window_destroy(struct sdl2_console *scon)
scon->real_window = NULL;
}
-static void sdl2_window_resize(struct sdl2_console *scon)
+void sdl2_window_resize(struct sdl2_console *scon)
{
if (!scon->real_window) {
return;
@@ -118,48 +118,6 @@ static void sdl2_window_resize(struct sdl2_console *scon)
surface_height(scon->surface));
}
-static void sdl_switch(DisplayChangeListener *dcl,
- DisplaySurface *new_surface)
-{
- struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
- DisplaySurface *old_surface = scon->surface;
- int format = 0;
-
- scon->surface = new_surface;
-
- if (scon->texture) {
- SDL_DestroyTexture(scon->texture);
- scon->texture = NULL;
- }
-
- if (!new_surface) {
- sdl2_window_destroy(scon);
- return;
- }
-
- if (!scon->real_window) {
- sdl2_window_create(scon);
- } else if (old_surface &&
- ((surface_width(old_surface) != surface_width(new_surface)) ||
- (surface_height(old_surface) != surface_height(new_surface)))) {
- sdl2_window_resize(scon);
- }
-
- SDL_RenderSetLogicalSize(scon->real_renderer,
- surface_width(new_surface),
- surface_height(new_surface));
-
- if (surface_bits_per_pixel(scon->surface) == 16) {
- format = SDL_PIXELFORMAT_RGB565;
- } else if (surface_bits_per_pixel(scon->surface) == 32) {
- format = SDL_PIXELFORMAT_ARGB8888;
- }
- scon->texture = SDL_CreateTexture(scon->real_renderer, format,
- SDL_TEXTUREACCESS_STREAMING,
- surface_width(new_surface),
- surface_height(new_surface));
-}
-
static void sdl_update_caption(struct sdl2_console *scon)
{
char win_title[1024];
@@ -710,7 +668,7 @@ static void sdl_cleanup(void)
static const DisplayChangeListenerOps dcl_2d_ops = {
.dpy_name = "sdl2-2d",
.dpy_gfx_update = sdl2_2d_update,
- .dpy_gfx_switch = sdl_switch,
+ .dpy_gfx_switch = sdl2_2d_switch,
.dpy_refresh = sdl_refresh,
.dpy_mouse_set = sdl_mouse_warp,
.dpy_cursor_define = sdl_mouse_define,
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function.
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (6 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 15:07 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c Gerd Hoffmann
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Add a new sdl2_2d_redraw function for a complete screen refresh,
so we can stop using graphic_hw_invalidate for that. There is
no need to bother console / gfx emulation code if we are just
going to re-blit the screen after window resizes.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 1 +
ui/sdl2-2d.c | 11 +++++++++++
ui/sdl2.c | 17 ++++++-----------
3 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 2c48c4f..048340f 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -22,3 +22,4 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
int x, int y, int w, int h);
void sdl2_2d_switch(DisplayChangeListener *dcl,
DisplaySurface *new_surface);
+void sdl2_2d_redraw(struct sdl2_console *scon);
diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
index 29ada53..40a552c 100644
--- a/ui/sdl2-2d.c
+++ b/ui/sdl2-2d.c
@@ -100,4 +100,15 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
SDL_TEXTUREACCESS_STREAMING,
surface_width(new_surface),
surface_height(new_surface));
+ sdl2_2d_redraw(scon);
+}
+
+void sdl2_2d_redraw(struct sdl2_console *scon)
+{
+ if (!scon->surface) {
+ return;
+ }
+ sdl2_2d_update(&scon->dcl, 0, 0,
+ surface_width(scon->surface),
+ surface_height(scon->surface));
}
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 28b1e22..1798902 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -316,8 +316,7 @@ static void toggle_full_screen(struct sdl2_console *scon)
}
SDL_SetWindowFullscreen(scon->real_window, 0);
}
- graphic_hw_invalidate(scon->dcl.con);
- graphic_hw_update(scon->dcl.con);
+ sdl2_2d_redraw(scon);
}
static void handle_keydown(SDL_Event *ev)
@@ -365,8 +364,8 @@ static void handle_keydown(SDL_Event *ev)
case SDL_SCANCODE_U:
sdl2_window_destroy(scon);
sdl2_window_create(scon);
- graphic_hw_invalidate(scon->dcl.con);
- graphic_hw_update(scon->dcl.con);
+ /* re-create texture */
+ sdl2_2d_switch(&scon->dcl, scon->surface);
gui_keysym = 1;
break;
#if 0
@@ -385,8 +384,7 @@ static void handle_keydown(SDL_Event *ev)
fprintf(stderr, "%s: scale to %dx%d\n",
__func__, width, height);
sdl_scale(scon, width, height);
- graphic_hw_invalidate(NULL);
- graphic_hw_update(NULL);
+ sdl2_2d_redraw(scon);
gui_keysym = 1;
}
#endif
@@ -511,7 +509,6 @@ static void handle_mousewheel(SDL_Event *ev)
static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
{
- int w, h;
struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
switch (ev->window.event) {
@@ -523,12 +520,10 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
info.height = ev->window.data2;
dpy_set_ui_info(scon->dcl.con, &info);
}
- graphic_hw_invalidate(scon->dcl.con);
- graphic_hw_update(scon->dcl.con);
+ sdl2_2d_redraw(scon);
break;
case SDL_WINDOWEVENT_EXPOSED:
- SDL_GetWindowSize(SDL_GetWindowFromID(ev->window.windowID), &w, &h);
- sdl2_2d_update(dcl, 0, 0, w, h);
+ sdl2_2d_redraw(scon);
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
case SDL_WINDOWEVENT_ENTER:
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (7 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 15:17 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c Gerd Hoffmann
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Create a new function to poll and handle sdl2 events,
which is then just called from the refresh timer.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 1 +
ui/sdl2.c | 23 +++++++++++++----------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 048340f..27b3132 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -13,6 +13,7 @@ struct sdl2_console {
void sdl2_window_create(struct sdl2_console *scon);
void sdl2_window_destroy(struct sdl2_console *scon);
void sdl2_window_resize(struct sdl2_console *scon);
+void sdl2_poll_events(struct sdl2_console *scon);
void sdl2_reset_keys(struct sdl2_console *scon);
void sdl2_process_key(struct sdl2_console *scon,
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 1798902..8d10e0e 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -507,10 +507,8 @@ static void handle_mousewheel(SDL_Event *ev)
qemu_input_event_sync();
}
-static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
+static void handle_windowevent(struct sdl2_console *scon, SDL_Event *ev)
{
- struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
-
switch (ev->window.event) {
case SDL_WINDOWEVENT_RESIZED:
{
@@ -537,10 +535,10 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
}
break;
case SDL_WINDOWEVENT_RESTORED:
- update_displaychangelistener(dcl, GUI_REFRESH_INTERVAL_DEFAULT);
+ update_displaychangelistener(&scon->dcl, GUI_REFRESH_INTERVAL_DEFAULT);
break;
case SDL_WINDOWEVENT_MINIMIZED:
- update_displaychangelistener(dcl, 500);
+ update_displaychangelistener(&scon->dcl, 500);
break;
case SDL_WINDOWEVENT_CLOSE:
if (!no_quit) {
@@ -551,9 +549,8 @@ static void handle_windowevent(DisplayChangeListener *dcl, SDL_Event *ev)
}
}
-static void sdl_refresh(DisplayChangeListener *dcl)
+void sdl2_poll_events(struct sdl2_console *scon)
{
- struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
SDL_Event ev1, *ev = &ev1;
if (scon->last_vm_running != runstate_is_running()) {
@@ -561,8 +558,6 @@ static void sdl_refresh(DisplayChangeListener *dcl)
sdl_update_caption(scon);
}
- graphic_hw_update(dcl->con);
-
while (SDL_PollEvent(ev)) {
switch (ev->type) {
case SDL_KEYDOWN:
@@ -591,7 +586,7 @@ static void sdl_refresh(DisplayChangeListener *dcl)
handle_mousewheel(ev);
break;
case SDL_WINDOWEVENT:
- handle_windowevent(dcl, ev);
+ handle_windowevent(scon, ev);
break;
default:
break;
@@ -599,6 +594,14 @@ static void sdl_refresh(DisplayChangeListener *dcl)
}
}
+static void sdl_refresh(DisplayChangeListener *dcl)
+{
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
+
+ graphic_hw_update(dcl->con);
+ sdl2_poll_events(scon);
+}
+
static void sdl_mouse_warp(DisplayChangeListener *dcl,
int x, int y, int on)
{
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
` (8 preceding siblings ...)
2014-12-11 10:49 ` [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events Gerd Hoffmann
@ 2014-12-11 10:49 ` Gerd Hoffmann
2014-12-11 15:19 ` Max Reitz
9 siblings, 1 reply; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-11 10:49 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori
Now that common event handling code is split off, we can move
over sdl_refresh to sdl2-2d.c, and rename it to sdl2_2d_refresh.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/sdl2.h | 1 +
ui/sdl2-2d.c | 9 +++++++++
ui/sdl2.c | 10 +---------
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 27b3132..9e9a92d 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -23,4 +23,5 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
int x, int y, int w, int h);
void sdl2_2d_switch(DisplayChangeListener *dcl,
DisplaySurface *new_surface);
+void sdl2_2d_refresh(DisplayChangeListener *dcl);
void sdl2_2d_redraw(struct sdl2_console *scon);
diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
index 40a552c..9c60075 100644
--- a/ui/sdl2-2d.c
+++ b/ui/sdl2-2d.c
@@ -103,6 +103,15 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
sdl2_2d_redraw(scon);
}
+void sdl2_2d_refresh(DisplayChangeListener *dcl)
+{
+ struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
+
+ assert(!scon->opengl);
+ graphic_hw_update(dcl->con);
+ sdl2_poll_events(scon);
+}
+
void sdl2_2d_redraw(struct sdl2_console *scon)
{
if (!scon->surface) {
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 8d10e0e..a1def81 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -594,14 +594,6 @@ void sdl2_poll_events(struct sdl2_console *scon)
}
}
-static void sdl_refresh(DisplayChangeListener *dcl)
-{
- struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
-
- graphic_hw_update(dcl->con);
- sdl2_poll_events(scon);
-}
-
static void sdl_mouse_warp(DisplayChangeListener *dcl,
int x, int y, int on)
{
@@ -667,7 +659,7 @@ static const DisplayChangeListenerOps dcl_2d_ops = {
.dpy_name = "sdl2-2d",
.dpy_gfx_update = sdl2_2d_update,
.dpy_gfx_switch = sdl2_2d_switch,
- .dpy_refresh = sdl_refresh,
+ .dpy_refresh = sdl2_2d_refresh,
.dpy_mouse_set = sdl_mouse_warp,
.dpy_cursor_define = sdl_mouse_define,
};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file
2014-12-11 10:49 ` [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file Gerd Hoffmann
@ 2014-12-11 13:45 ` Max Reitz
2014-12-12 9:03 ` Gerd Hoffmann
0 siblings, 1 reply; 26+ messages in thread
From: Max Reitz @ 2014-12-11 13:45 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Create sdl2.h header file, in preparation for sdl2 code splitup.
> Populate it with sdl2_console struct (renamed from sdl2_state).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 11 ++++++++++
> ui/sdl2.c | 63 ++++++++++++++++++++++++-------------------------------
> 2 files changed, 38 insertions(+), 36 deletions(-)
> create mode 100644 include/ui/sdl2.h
>
> diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> new file mode 100644
> index 0000000..7f91a75
> --- /dev/null
> +++ b/include/ui/sdl2.h
> @@ -0,0 +1,11 @@
> +struct sdl2_console {
> + DisplayChangeListener dcl;
> + DisplaySurface *surface;
> + SDL_Texture *texture;
> + SDL_Window *real_window;
> + SDL_Renderer *real_renderer;
> + int idx;
> + int last_vm_running; /* per console for caption reasons */
> + int x, y;
> + int hidden;
> +};
Is there a reason why you did not use include guards?
Max
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c
2014-12-11 10:49 ` [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c Gerd Hoffmann
@ 2014-12-11 14:00 ` Max Reitz
2014-12-12 10:38 ` Gerd Hoffmann
0 siblings, 1 reply; 26+ messages in thread
From: Max Reitz @ 2014-12-11 14:00 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 4 +++
> ui/Makefile.objs | 2 +-
> ui/sdl2-input.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ui/sdl2.c | 75 ++------------------------------------
> 4 files changed, 114 insertions(+), 73 deletions(-)
> create mode 100644 ui/sdl2-input.c
>
> diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> index 7f91a75..e1c304a 100644
> --- a/include/ui/sdl2.h
> +++ b/include/ui/sdl2.h
> @@ -9,3 +9,7 @@ struct sdl2_console {
> int x, y;
> int hidden;
> };
> +
> +void sdl2_reset_keys(struct sdl2_console *scon);
> +void sdl2_process_key(struct sdl2_console *scon,
> + SDL_KeyboardEvent *ev);
> diff --git a/ui/Makefile.objs b/ui/Makefile.objs
> index b25e85f..011c5bb 100644
> --- a/ui/Makefile.objs
> +++ b/ui/Makefile.objs
> @@ -20,7 +20,7 @@ ifeq ($(CONFIG_SDLABI),1.2)
> sdl.mo-objs := sdl.o sdl_zoom.o
> endif
> ifeq ($(CONFIG_SDLABI),2.0)
> -sdl.mo-objs := sdl2.o
> +sdl.mo-objs := sdl2.o sdl2-input.o
> endif
> sdl.mo-cflags := $(SDL_CFLAGS)
>
> diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c
> new file mode 100644
> index 0000000..6702e8e
> --- /dev/null
> +++ b/ui/sdl2-input.c
> @@ -0,0 +1,106 @@
> +/*
> + * QEMU SDL display driver
> + *
> + * Copyright (c) 2003 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +/* Ported SDL 1.2 code to 2.0 by Dave Airlie. */
> +
> +/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */
> +#undef WIN32_LEAN_AND_MEAN
> +
> +#include <SDL.h>
> +#include <SDL_syswm.h>
> +
> +#include "qemu-common.h"
> +#include "ui/console.h"
> +#include "ui/input.h"
> +#include "ui/sdl2.h"
> +#include "sysemu/sysemu.h"
> +
> +#include "sdl2-keymap.h"
> +
> +static uint8_t modifiers_state[SDL_NUM_SCANCODES];
> +
> +void sdl2_reset_keys(struct sdl2_console *scon)
> +{
> + QemuConsole *con = scon ? scon->dcl.con : NULL;
> + int i;
> +
> + for (i = 0; i < 256; i++) {
Should this be SDL_NUM_SCANCODES?
> + if (modifiers_state[i]) {
> + int qcode = sdl2_scancode_to_qcode[i];
> + qemu_input_event_send_key_qcode(con, qcode, false);
> + modifiers_state[i] = 0;
> + }
> + }
> +}
Max
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile
2014-12-11 10:49 ` [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile Gerd Hoffmann
@ 2014-12-11 14:05 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 14:05 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Compile sdl.c / sdl2.c depending on CONFIG_SDLABI instead of
> compiling both and have version #ifdefs in the source code.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/Makefile.objs | 7 ++++++-
> ui/sdl.c | 3 ---
> ui/sdl2.c | 3 ---
> 3 files changed, 6 insertions(+), 7 deletions(-)
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs
2014-12-11 10:49 ` [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs Gerd Hoffmann
@ 2014-12-11 14:05 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 14:05 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Makes quite some keys actually go to the guest instead of
> being captured by the host window manager.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/sdl2.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c
2014-12-11 10:49 ` [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c Gerd Hoffmann
@ 2014-12-11 14:14 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 14:14 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Create new sdl2-2d file for 2d display rendering.
> Move over sdl_update code, and rename to sdl2_2d_update.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 3 +++
> ui/Makefile.objs | 2 +-
> ui/sdl2-2d.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ui/sdl2.c | 35 +++++--------------------------
> 4 files changed, 70 insertions(+), 31 deletions(-)
> create mode 100644 ui/sdl2-2d.c
>
> diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> index e1c304a..0573e2a 100644
> --- a/include/ui/sdl2.h
> +++ b/include/ui/sdl2.h
> @@ -13,3 +13,6 @@ struct sdl2_console {
> void sdl2_reset_keys(struct sdl2_console *scon);
> void sdl2_process_key(struct sdl2_console *scon,
> SDL_KeyboardEvent *ev);
> +
> +void sdl2_2d_update(DisplayChangeListener *dcl,
> + int x, int y, int w, int h);
> diff --git a/ui/Makefile.objs b/ui/Makefile.objs
> index 011c5bb..13b5cfb 100644
> --- a/ui/Makefile.objs
> +++ b/ui/Makefile.objs
> @@ -20,7 +20,7 @@ ifeq ($(CONFIG_SDLABI),1.2)
> sdl.mo-objs := sdl.o sdl_zoom.o
> endif
> ifeq ($(CONFIG_SDLABI),2.0)
> -sdl.mo-objs := sdl2.o sdl2-input.o
> +sdl.mo-objs := sdl2.o sdl2-input.o sdl2-2d.o
> endif
> sdl.mo-cflags := $(SDL_CFLAGS)
>
> diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
> new file mode 100644
> index 0000000..7b0039b
> --- /dev/null
> +++ b/ui/sdl2-2d.c
> @@ -0,0 +1,61 @@
> +/*
> + * QEMU SDL display driver
> + *
> + * Copyright (c) 2003 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +/* Ported SDL 1.2 code to 2.0 by Dave Airlie. */
> +
> +/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */
> +#undef WIN32_LEAN_AND_MEAN
> +
> +#include <SDL.h>
> +#include <SDL_syswm.h>
> +
> +#include "qemu-common.h"
> +#include "ui/console.h"
> +#include "ui/input.h"
> +#include "ui/sdl2.h"
> +#include "sysemu/sysemu.h"
> +
> +void sdl2_2d_update(DisplayChangeListener *dcl,
> + int x, int y, int w, int h)
> +{
> + struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
> + DisplaySurface *surf = qemu_console_surface(dcl->con);
> + SDL_Rect rect;
> +
> + if (!surf) {
> + return;
> + }
> + if (!scon->texture) {
> + return;
> + }
> +
> + rect.x = x;
> + rect.y = y;
> + rect.w = w;
> + rect.h = h;
> +
> + SDL_UpdateTexture(scon->texture, NULL, surface_data(surf),
> + surface_stride(surf));
Hm, I'm wondering whether this could be optimized by passing &rect
instead of NULL and calculating the start address from
surface_data(surf) and rect...
Anyway:
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling
2014-12-11 10:49 ` [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling Gerd Hoffmann
@ 2014-12-11 14:42 ` Max Reitz
2014-12-11 15:06 ` Max Reitz
1 sibling, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 14:42 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Split do_sdl_resize function (which does alot more than just resizing)
> into three: sdl2_window_{create,destroy,resize}.
>
> Fix SDL_Renderer handling: must be guest display size not host window
> size, and SDL2 will magically handle all scaling for us.
>
> Make fullscreen actually enter fullscreen mode and simplify the code.
> There is no need to store the original window size, the window manager
> will do that for us.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/sdl2.c | 172 +++++++++++++++++++++++++++++---------------------------------
> 1 file changed, 79 insertions(+), 93 deletions(-)
>
> diff --git a/ui/sdl2.c b/ui/sdl2.c
> index 47a757a..70f79a5 100644
> --- a/ui/sdl2.c
> +++ b/ui/sdl2.c
[snip]
> static void sdl_switch(DisplayChangeListener *dcl,
> DisplaySurface *new_surface)
> {
> struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
> - int format = 0;
> - int idx = scon->idx;
> DisplaySurface *old_surface = scon->surface;
> + int format = 0;
Moving "format" seems unnecessary, but of course it doesn't matter.
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c
2014-12-11 10:49 ` [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c Gerd Hoffmann
@ 2014-12-11 15:00 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 15:00 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Move sdl_switch to sdl2-2d.c file, rename to sdl2_2d_switch.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 6 ++++++
> ui/sdl2-2d.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> ui/sdl2.c | 50 ++++----------------------------------------------
> 3 files changed, 52 insertions(+), 46 deletions(-)
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling
2014-12-11 10:49 ` [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling Gerd Hoffmann
2014-12-11 14:42 ` Max Reitz
@ 2014-12-11 15:06 ` Max Reitz
2014-12-12 10:43 ` Gerd Hoffmann
1 sibling, 1 reply; 26+ messages in thread
From: Max Reitz @ 2014-12-11 15:06 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Split do_sdl_resize function (which does alot more than just resizing)
> into three: sdl2_window_{create,destroy,resize}.
>
> Fix SDL_Renderer handling: must be guest display size not host window
> size, and SDL2 will magically handle all scaling for us.
>
> Make fullscreen actually enter fullscreen mode and simplify the code.
> There is no need to store the original window size, the window manager
> will do that for us.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> ui/sdl2.c | 172 +++++++++++++++++++++++++++++---------------------------------
> 1 file changed, 79 insertions(+), 93 deletions(-)
>
> diff --git a/ui/sdl2.c b/ui/sdl2.c
> index 47a757a..70f79a5 100644
> --- a/ui/sdl2.c
> +++ b/ui/sdl2.c
> @@ -439,12 +424,14 @@ static void handle_keydown(SDL_Event *ev)
> 160);
> height = (surface_height(scon->surface) * width) /
> surface_width(scon->surface);
> -
> + fprintf(stderr, "%s: scale to %dx%d\n",
> + __func__, width, height);
I forgot to ask: What's the reason for this fprintf()? Thanks to "#if 0"
it doesn't do anything, but it seems kind of strange if this block would
not be commented out...
Max
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function.
2014-12-11 10:49 ` [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function Gerd Hoffmann
@ 2014-12-11 15:07 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 15:07 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Add a new sdl2_2d_redraw function for a complete screen refresh,
> so we can stop using graphic_hw_invalidate for that. There is
> no need to bother console / gfx emulation code if we are just
> going to re-blit the screen after window resizes.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 1 +
> ui/sdl2-2d.c | 11 +++++++++++
> ui/sdl2.c | 17 ++++++-----------
> 3 files changed, 18 insertions(+), 11 deletions(-)
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events
2014-12-11 10:49 ` [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events Gerd Hoffmann
@ 2014-12-11 15:17 ` Max Reitz
0 siblings, 0 replies; 26+ messages in thread
From: Max Reitz @ 2014-12-11 15:17 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Create a new function to poll and handle sdl2 events,
> which is then just called from the refresh timer.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 1 +
> ui/sdl2.c | 23 +++++++++++++----------
> 2 files changed, 14 insertions(+), 10 deletions(-)
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c
2014-12-11 10:49 ` [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c Gerd Hoffmann
@ 2014-12-11 15:19 ` Max Reitz
2014-12-12 10:45 ` Gerd Hoffmann
0 siblings, 1 reply; 26+ messages in thread
From: Max Reitz @ 2014-12-11 15:19 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Anthony Liguori
On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> Now that common event handling code is split off, we can move
> over sdl_refresh to sdl2-2d.c, and rename it to sdl2_2d_refresh.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/sdl2.h | 1 +
> ui/sdl2-2d.c | 9 +++++++++
> ui/sdl2.c | 10 +---------
> 3 files changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> index 27b3132..9e9a92d 100644
> --- a/include/ui/sdl2.h
> +++ b/include/ui/sdl2.h
> @@ -23,4 +23,5 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
> int x, int y, int w, int h);
> void sdl2_2d_switch(DisplayChangeListener *dcl,
> DisplaySurface *new_surface);
> +void sdl2_2d_refresh(DisplayChangeListener *dcl);
> void sdl2_2d_redraw(struct sdl2_console *scon);
> diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
> index 40a552c..9c60075 100644
> --- a/ui/sdl2-2d.c
> +++ b/ui/sdl2-2d.c
> @@ -103,6 +103,15 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
> sdl2_2d_redraw(scon);
> }
>
> +void sdl2_2d_refresh(DisplayChangeListener *dcl)
> +{
> + struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
> +
> + assert(!scon->opengl);
This doesn't compile for me because this flag is not added by this series.
With this assertion moved to the OpenGL series:
Reviewed-by: Max Reitz <mreitz@redhat.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file
2014-12-11 13:45 ` Max Reitz
@ 2014-12-12 9:03 ` Gerd Hoffmann
0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-12 9:03 UTC (permalink / raw)
To: Max Reitz; +Cc: qemu-devel, Anthony Liguori
> > diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> > new file mode 100644
> > index 0000000..7f91a75
> > --- /dev/null
> > +++ b/include/ui/sdl2.h
> > @@ -0,0 +1,11 @@
> > +struct sdl2_console {
> > + DisplayChangeListener dcl;
> Is there a reason why you did not use include guards?
Fixed.
cheers,
Gerd
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c
2014-12-11 14:00 ` Max Reitz
@ 2014-12-12 10:38 ` Gerd Hoffmann
0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-12 10:38 UTC (permalink / raw)
To: Max Reitz; +Cc: qemu-devel, Anthony Liguori
Hi,
> > +static uint8_t modifiers_state[SDL_NUM_SCANCODES];
> > +
> > +void sdl2_reset_keys(struct sdl2_console *scon)
> > +{
> > + QemuConsole *con = scon ? scon->dcl.con : NULL;
> > + int i;
> > +
> > + for (i = 0; i < 256; i++) {
>
> Should this be SDL_NUM_SCANCODES?
Yes, fixed.
thanks,
Gerd
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling
2014-12-11 15:06 ` Max Reitz
@ 2014-12-12 10:43 ` Gerd Hoffmann
0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-12 10:43 UTC (permalink / raw)
To: Max Reitz; +Cc: qemu-devel, Anthony Liguori
Hi,
> > @@ -439,12 +424,14 @@ static void handle_keydown(SDL_Event *ev)
> > 160);
> > height = (surface_height(scon->surface) * width) /
> > surface_width(scon->surface);
> > -
> > + fprintf(stderr, "%s: scale to %dx%d\n",
> > + __func__, width, height);
>
> I forgot to ask: What's the reason for this fprintf()? Thanks to "#if 0"
> it doesn't do anything, but it seems kind of strange if this block would
> not be commented out...
Just a debug printf. Will go away when this code gets re-enabled.
cheers,
Gerd
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c
2014-12-11 15:19 ` Max Reitz
@ 2014-12-12 10:45 ` Gerd Hoffmann
0 siblings, 0 replies; 26+ messages in thread
From: Gerd Hoffmann @ 2014-12-12 10:45 UTC (permalink / raw)
To: Max Reitz; +Cc: qemu-devel, Anthony Liguori
On Do, 2014-12-11 at 16:19 +0100, Max Reitz wrote:
> On 2014-12-11 at 11:49, Gerd Hoffmann wrote:
> > Now that common event handling code is split off, we can move
> > over sdl_refresh to sdl2-2d.c, and rename it to sdl2_2d_refresh.
> >
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> > include/ui/sdl2.h | 1 +
> > ui/sdl2-2d.c | 9 +++++++++
> > ui/sdl2.c | 10 +---------
> > 3 files changed, 11 insertions(+), 9 deletions(-)
> >
> > diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
> > index 27b3132..9e9a92d 100644
> > --- a/include/ui/sdl2.h
> > +++ b/include/ui/sdl2.h
> > @@ -23,4 +23,5 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
> > int x, int y, int w, int h);
> > void sdl2_2d_switch(DisplayChangeListener *dcl,
> > DisplaySurface *new_surface);
> > +void sdl2_2d_refresh(DisplayChangeListener *dcl);
> > void sdl2_2d_redraw(struct sdl2_console *scon);
> > diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c
> > index 40a552c..9c60075 100644
> > --- a/ui/sdl2-2d.c
> > +++ b/ui/sdl2-2d.c
> > @@ -103,6 +103,15 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
> > sdl2_2d_redraw(scon);
> > }
> >
> > +void sdl2_2d_refresh(DisplayChangeListener *dcl)
> > +{
> > + struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);
> > +
> > + assert(!scon->opengl);
>
> This doesn't compile for me because this flag is not added by this series.
Fixed.
cheers,
Gerd
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2014-12-12 10:45 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-11 10:49 [Qemu-devel] [PATCH 00/10] sdl2: fixes, cleanups and opengl preparation Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 01/10] sdl: move version logic from source code to makefile Gerd Hoffmann
2014-12-11 14:05 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 02/10] sdl2: rename sdl2_state to sdl2_console, move to header file Gerd Hoffmann
2014-12-11 13:45 ` Max Reitz
2014-12-12 9:03 ` Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 03/10] sdl2: move keyboard input code to new sdl2-input.c Gerd Hoffmann
2014-12-11 14:00 ` Max Reitz
2014-12-12 10:38 ` Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 04/10] sdl2: turn on keyboard grabs Gerd Hoffmann
2014-12-11 14:05 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 05/10] sdl2: move sdl_update to new sdl2-2d.c Gerd Hoffmann
2014-12-11 14:14 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 06/10] sdl2: overhaul window size handling Gerd Hoffmann
2014-12-11 14:42 ` Max Reitz
2014-12-11 15:06 ` Max Reitz
2014-12-12 10:43 ` Gerd Hoffmann
2014-12-11 10:49 ` [Qemu-devel] [PATCH 07/10] sdl2: move sdl_switch to sdl2-2d.c Gerd Hoffmann
2014-12-11 15:00 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 08/10] sdl2: add+use sdl2_2d_redraw function Gerd Hoffmann
2014-12-11 15:07 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 09/10] sdl2: factor out sdl2_poll_events Gerd Hoffmann
2014-12-11 15:17 ` Max Reitz
2014-12-11 10:49 ` [Qemu-devel] [PATCH 10/10] sdl2: move sdl2_2d_refresh to sdl2-2d.c Gerd Hoffmann
2014-12-11 15:19 ` Max Reitz
2014-12-12 10:45 ` Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).