Properly sleep when window gets minimized
This commit is contained in:
parent
5e81912125
commit
fc629be57a
|
@ -81,6 +81,8 @@ static gboolean allocate_screen_and_texture() {
|
||||||
player->notify_critical_error(error_msg);
|
player->notify_critical_error(error_msg);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // make the scaled rendering look smoother.
|
||||||
|
SDL_RenderSetLogicalSize(sdl_renderer, width, height);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,8 +95,6 @@ static gboolean sdl_init()
|
||||||
player->notify_critical_error(error_msg);
|
player->notify_critical_error(error_msg);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // make the scaled rendering look smoother.
|
|
||||||
SDL_RenderSetLogicalSize(sdl_renderer, width, height);
|
|
||||||
return allocate_screen_and_texture();
|
return allocate_screen_and_texture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
137
src/infinity.c
137
src/infinity.c
|
@ -60,7 +60,6 @@ static GTimer *title_timer;
|
||||||
|
|
||||||
static SDL_Thread *thread;
|
static SDL_Thread *thread;
|
||||||
|
|
||||||
static int event_filter(void*, SDL_Event *event);
|
|
||||||
static void check_events();
|
static void check_events();
|
||||||
static int renderer(void *);
|
static int renderer(void *);
|
||||||
static void set_title(void);
|
static void set_title(void);
|
||||||
|
@ -111,8 +110,6 @@ void infinity_init(InfParameters * _params, Player * _player)
|
||||||
g_timer_start(title_timer);
|
g_timer_start(title_timer);
|
||||||
display_load_random_effect(¤t_effect);
|
display_load_random_effect(¤t_effect);
|
||||||
|
|
||||||
SDL_SetEventFilter(event_filter, NULL);
|
|
||||||
|
|
||||||
thread = SDL_CreateThread(renderer, "infinity_renderer", NULL);
|
thread = SDL_CreateThread(renderer, "infinity_renderer", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,120 +156,19 @@ void infinity_render_multi_pcm(const float *data, int channels)
|
||||||
display_set_pcm_data(data, channels);
|
display_set_pcm_data(data, channels);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO really needed?
|
|
||||||
static int event_filter(void *user_data, SDL_Event *event)
|
|
||||||
{
|
|
||||||
if (!event) {
|
|
||||||
g_warning("Infinity: SDL_Event is NULL");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event->type == SDL_WINDOWEVENT) {
|
|
||||||
switch (event->window.event) {
|
|
||||||
case SDL_WINDOWEVENT_SHOWN:
|
|
||||||
SDL_Log("Window %d shown", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_HIDDEN:
|
|
||||||
SDL_Log("Window %d hidden", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_EXPOSED:
|
|
||||||
SDL_Log("Window %d exposed", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_MOVED:
|
|
||||||
SDL_Log("Window %d moved to %d,%d",
|
|
||||||
event->window.windowID, event->window.data1,
|
|
||||||
event->window.data2);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_RESIZED:
|
|
||||||
SDL_Log("Window %d resized to %dx%d",
|
|
||||||
event->window.windowID, event->window.data1,
|
|
||||||
event->window.data2);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
|
||||||
SDL_Log("Window %d size changed to %dx%d",
|
|
||||||
event->window.windowID, event->window.data1,
|
|
||||||
event->window.data2);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_MINIMIZED:
|
|
||||||
SDL_Log("Window %d minimized", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
|
||||||
SDL_Log("Window %d maximized", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_RESTORED:
|
|
||||||
SDL_Log("Window %d restored", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_ENTER:
|
|
||||||
SDL_Log("Mouse entered window %d",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_LEAVE:
|
|
||||||
SDL_Log("Mouse left window %d", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
|
||||||
SDL_Log("Window %d gained keyboard focus",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
|
||||||
SDL_Log("Window %d lost keyboard focus",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
|
||||||
SDL_Log("event_filter Window %d closed", event->window.windowID);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
SDL_Log("Window %d got unknown event %d",
|
|
||||||
event->window.windowID, event->window.event);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*switch (event->type) {
|
|
||||||
case SDL_VIDEORESIZE:
|
|
||||||
G_LOCK(resizing);
|
|
||||||
if (resizing) {
|
|
||||||
G_UNLOCK(resizing);
|
|
||||||
/*
|
|
||||||
* VIDEORESIZE event dropped from event queue
|
|
||||||
*
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
G_UNLOCK(resizing);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
g_assert_not_reached();
|
|
||||||
break;
|
|
||||||
case SDL_ACTIVEEVENT:
|
|
||||||
if (event->active.state & SDL_APPACTIVE) {
|
|
||||||
if (event->active.gain) {
|
|
||||||
visible = TRUE;
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
visible = FALSE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SDL_QUIT:
|
|
||||||
// ignore it. let handle it in check_events()
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void handle_window_event(SDL_Event *event) {
|
static void handle_window_event(SDL_Event *event) {
|
||||||
switch (event->window.event) {
|
switch (event->window.event) {
|
||||||
case SDL_WINDOWEVENT_SHOWN:
|
case SDL_WINDOWEVENT_SHOWN:
|
||||||
SDL_Log("Window %d shown", event->window.windowID);
|
SDL_Log("Window %d shown", event->window.windowID);
|
||||||
break;
|
visible = TRUE;
|
||||||
case SDL_WINDOWEVENT_HIDDEN:
|
|
||||||
SDL_Log("Window %d hidden", event->window.windowID);
|
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_EXPOSED:
|
case SDL_WINDOWEVENT_EXPOSED:
|
||||||
SDL_Log("Window %d exposed", event->window.windowID);
|
SDL_Log("Window %d exposed", event->window.windowID);
|
||||||
|
visible = TRUE;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOWEVENT_HIDDEN:
|
||||||
|
SDL_Log("Window %d hidden", event->window.windowID);
|
||||||
|
visible = FALSE;
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MOVED:
|
case SDL_WINDOWEVENT_MOVED:
|
||||||
SDL_Log("Window %d moved to %d,%d",
|
SDL_Log("Window %d moved to %d,%d",
|
||||||
|
@ -298,6 +194,7 @@ static void handle_window_event(SDL_Event *event) {
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MINIMIZED:
|
case SDL_WINDOWEVENT_MINIMIZED:
|
||||||
SDL_Log("Window %d minimized", event->window.windowID);
|
SDL_Log("Window %d minimized", event->window.windowID);
|
||||||
|
visible = FALSE;
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||||
SDL_Log("Window %d maximized", event->window.windowID);
|
SDL_Log("Window %d maximized", event->window.windowID);
|
||||||
|
@ -305,29 +202,11 @@ static void handle_window_event(SDL_Event *event) {
|
||||||
case SDL_WINDOWEVENT_RESTORED:
|
case SDL_WINDOWEVENT_RESTORED:
|
||||||
SDL_Log("Window %d restored", event->window.windowID);
|
SDL_Log("Window %d restored", event->window.windowID);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_ENTER:
|
|
||||||
SDL_Log("Mouse entered window %d",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_LEAVE:
|
|
||||||
SDL_Log("Mouse left window %d", event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
|
||||||
SDL_Log("Window %d gained keyboard focus",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
|
||||||
SDL_Log("Window %d lost keyboard focus",
|
|
||||||
event->window.windowID);
|
|
||||||
break;
|
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
SDL_Log("Window %d closed", event->window.windowID);
|
SDL_Log("Window %d closed", event->window.windowID);
|
||||||
//infinity_finish();
|
|
||||||
player->disable_plugin();
|
player->disable_plugin();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SDL_Log("Window %d got unknown event %d",
|
|
||||||
event->window.windowID, event->window.event);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -485,7 +364,7 @@ static int renderer(void *arg)
|
||||||
check_events();
|
check_events();
|
||||||
if (finished)
|
if (finished)
|
||||||
break;
|
break;
|
||||||
g_usleep(3000 * frame_length);
|
g_usleep(3 * frame_length);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
check_events();
|
check_events();
|
||||||
|
|
Loading…
Reference in New Issue