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;
HANDLE video_stream;
if (!gbActive) {
return;
}
saveProc = SetWindowProc(MovieWndProc);
movie_playing = TRUE;
sound_disable_music(TRUE);
@ -25,7 +21,7 @@ void play_movie(char *pszMovie, BOOL user_can_close)
if (video_stream) {
MSG Msg;
while (video_stream) {
if (!gbActive || user_can_close && !movie_playing)
if (user_can_close && !movie_playing)
break;
while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
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)
{
if (!gbActive) {
static bool inDialog = false;
if (!gbActive || inDialog) {
if (SDL_ShowCursor(SDL_ENABLE) <= -1) {
SDL_Log(SDL_GetError());
}
@ -304,11 +306,11 @@ void UiOkDialog(const char *text, const char *caption, bool error, UiItem *rende
return;
}
gbActive = false;
inDialog = true;
Init(text, caption, error);
DialogLoop(dialogItems, dialogItemsSize, render_behind, render_behind_size);
Deinit();
gbActive = true;
inDialog = false;
}
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);
case SDL_WINDOWEVENT:
switch (e.window.event) {
case SDL_WINDOWEVENT_SHOWN:
gbActive = true;
lpMsg->message = DVL_WM_PAINT;
break;
case SDL_WINDOWEVENT_HIDDEN:
// TODO stop rendering to minimize CPU usage (gbActive)
gbActive = false;
break;
case SDL_WINDOWEVENT_MINIMIZED:
// TODO pause
case SDL_WINDOWEVENT_EXPOSED:
lpMsg->message = DVL_WM_PAINT;
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
case SDL_WINDOWEVENT_TAKE_FOCUS:
case SDL_WINDOWEVENT_MOVED:
case SDL_WINDOWEVENT_RESIZED:
case SDL_WINDOWEVENT_SIZE_CHANGED:
case SDL_WINDOWEVENT_MOVED:
case SDL_WINDOWEVENT_RESTORED:
case SDL_WINDOWEVENT_MINIMIZED:
case SDL_WINDOWEVENT_MAXIMIZED:
case SDL_WINDOWEVENT_RESTORED:
case SDL_WINDOWEVENT_LEAVE:
case SDL_WINDOWEVENT_FOCUS_GAINED:
case SDL_WINDOWEVENT_FOCUS_LOST:
break;
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;
case SDL_WINDOWEVENT_TAKE_FOCUS:
break;
case SDL_WINDOWEVENT_ENTER:
lpMsg->message = DVL_WM_MOUSEHOVER;
@ -592,6 +587,9 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
mouseWarping = false;
}
break;
case SDL_WINDOWEVENT_CLOSE:
lpMsg->message = DVL_WM_QUERYENDSESSION;
break;
default:
return false_avail("SDL_WINDOWEVENT", e.window.event);
}

Loading…
Cancel
Save