Browse Source

Disable rendering when minimized

This recovers the original use of gbActive
pull/479/head
Anders Jenbo 6 years ago
parent
commit
bc88560b41
  1. 6
      Source/movie.cpp
  2. 8
      SourceX/DiabloUI/dialogs.cpp
  3. 32
      SourceX/miniwin/misc_msg.cpp

6
Source/movie.cpp

@ -11,10 +11,6 @@ void play_movie(char *pszMovie, BOOL user_can_close)
WNDPROC saveProc; WNDPROC saveProc;
HANDLE video_stream; HANDLE video_stream;
if (!gbActive) {
return;
}
saveProc = SetWindowProc(MovieWndProc); saveProc = SetWindowProc(MovieWndProc);
movie_playing = TRUE; movie_playing = TRUE;
sound_disable_music(TRUE); sound_disable_music(TRUE);
@ -25,7 +21,7 @@ void play_movie(char *pszMovie, BOOL user_can_close)
if (video_stream) { if (video_stream) {
MSG Msg; MSG Msg;
while (video_stream) { while (video_stream) {
if (!gbActive || user_can_close && !movie_playing) if (user_can_close && !movie_playing)
break; break;
while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
if (Msg.message != WM_QUIT) { if (Msg.message != WM_QUIT) {

8
SourceX/DiabloUI/dialogs.cpp

@ -292,7 +292,9 @@ void DialogLoop(UiItem *items, std::size_t num_items, UiItem *render_behind, std
void UiOkDialog(const char *text, const char *caption, bool error, UiItem *render_behind, std::size_t render_behind_size) void UiOkDialog(const char *text, const char *caption, bool error, UiItem *render_behind, std::size_t render_behind_size)
{ {
if (!gbActive) { static bool inDialog = false;
if (!gbActive || inDialog) {
if (SDL_ShowCursor(SDL_ENABLE) <= -1) { if (SDL_ShowCursor(SDL_ENABLE) <= -1) {
SDL_Log(SDL_GetError()); SDL_Log(SDL_GetError());
} }
@ -304,11 +306,11 @@ void UiOkDialog(const char *text, const char *caption, bool error, UiItem *rende
return; return;
} }
gbActive = false; inDialog = true;
Init(text, caption, error); Init(text, caption, error);
DialogLoop(dialogItems, dialogItemsSize, render_behind, render_behind_size); DialogLoop(dialogItems, dialogItemsSize, render_behind, render_behind_size);
Deinit(); Deinit();
gbActive = true; inDialog = false;
} }
void UiErrorOkDialog(const char *text, const char *caption, UiItem *render_behind, std::size_t render_behind_size) void UiErrorOkDialog(const char *text, const char *caption, UiItem *render_behind, std::size_t render_behind_size)

32
SourceX/miniwin/misc_msg.cpp

@ -555,31 +555,26 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
return false_avail("SDL_TEXTINPUT", e.text.windowID); return false_avail("SDL_TEXTINPUT", e.text.windowID);
case SDL_WINDOWEVENT: case SDL_WINDOWEVENT:
switch (e.window.event) { switch (e.window.event) {
case SDL_WINDOWEVENT_SHOWN:
gbActive = true;
lpMsg->message = DVL_WM_PAINT;
break;
case SDL_WINDOWEVENT_HIDDEN: case SDL_WINDOWEVENT_HIDDEN:
// TODO stop rendering to minimize CPU usage (gbActive) gbActive = false;
break; break;
case SDL_WINDOWEVENT_MINIMIZED: case SDL_WINDOWEVENT_EXPOSED:
// TODO pause lpMsg->message = DVL_WM_PAINT;
break; break;
case SDL_WINDOWEVENT_FOCUS_GAINED: case SDL_WINDOWEVENT_MOVED:
case SDL_WINDOWEVENT_TAKE_FOCUS:
case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_RESIZED:
case SDL_WINDOWEVENT_SIZE_CHANGED: case SDL_WINDOWEVENT_SIZE_CHANGED:
case SDL_WINDOWEVENT_MOVED: case SDL_WINDOWEVENT_MINIMIZED:
case SDL_WINDOWEVENT_RESTORED:
case SDL_WINDOWEVENT_MAXIMIZED: case SDL_WINDOWEVENT_MAXIMIZED:
case SDL_WINDOWEVENT_RESTORED:
case SDL_WINDOWEVENT_LEAVE: case SDL_WINDOWEVENT_LEAVE:
case SDL_WINDOWEVENT_FOCUS_GAINED:
case SDL_WINDOWEVENT_FOCUS_LOST: case SDL_WINDOWEVENT_FOCUS_LOST:
break; case SDL_WINDOWEVENT_TAKE_FOCUS:
case SDL_WINDOWEVENT_CLOSE:
lpMsg->message = DVL_WM_QUERYENDSESSION;
break;
case SDL_WINDOWEVENT_SHOWN:
gbActive = true;
lpMsg->message = DVL_WM_PAINT;
break;
case SDL_WINDOWEVENT_EXPOSED:
lpMsg->message = DVL_WM_PAINT;
break; break;
case SDL_WINDOWEVENT_ENTER: case SDL_WINDOWEVENT_ENTER:
lpMsg->message = DVL_WM_MOUSEHOVER; lpMsg->message = DVL_WM_MOUSEHOVER;
@ -592,6 +587,9 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
mouseWarping = false; mouseWarping = false;
} }
break; break;
case SDL_WINDOWEVENT_CLOSE:
lpMsg->message = DVL_WM_QUERYENDSESSION;
break;
default: default:
return false_avail("SDL_WINDOWEVENT", e.window.event); return false_avail("SDL_WINDOWEVENT", e.window.event);
} }

Loading…
Cancel
Save