win32: save the "not maximized" window size
also fix the window start up position see http://pulkomandy.tk/projects/GrafX2/ticket/102
This commit is contained in:
parent
31d3719f26
commit
2d645edbc0
@ -652,4 +652,11 @@ enum FSOBJECT_TYPE
|
||||
FSOBJECT_DRIVE = 2
|
||||
};
|
||||
|
||||
enum GFX2_WINDOW_STATES
|
||||
{
|
||||
GFX2_WINDOW_STANDARD = 0,
|
||||
GFX2_WINDOW_MAXIMIZED,
|
||||
GFX2_WINDOW_MINIMIZED
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -685,6 +685,12 @@ void Main_handler(void)
|
||||
// Resize requested
|
||||
if (Resize_width || Resize_height)
|
||||
{
|
||||
if (Window_state == GFX2_WINDOW_STANDARD)
|
||||
{
|
||||
Default_window_width = Resize_width;
|
||||
Default_window_height = Resize_height;
|
||||
}
|
||||
|
||||
Hide_cursor();
|
||||
Init_mode_video(Resize_width, Resize_height, 0, Pixel_ratio);
|
||||
// Reset the variables that indicate a resize was requested.
|
||||
|
||||
@ -215,6 +215,12 @@ GFX2_GLOBAL Func_draw_brush Display_brush;
|
||||
GFX2_GLOBAL int Resize_width;
|
||||
/// Requested window height. This is set when the user resizes the window.
|
||||
GFX2_GLOBAL int Resize_height;
|
||||
/// Current window state (standard, minimized, maximized)
|
||||
GFX2_GLOBAL enum GFX2_WINDOW_STATES Window_state;
|
||||
/// Default window width (not maximized)
|
||||
GFX2_GLOBAL int Default_window_width;
|
||||
/// Default window height (not maximized)
|
||||
GFX2_GLOBAL int Default_window_height;
|
||||
/// Current video mode. Index in ::Video_mode
|
||||
GFX2_GLOBAL int Current_resolution;
|
||||
/// After loading an image, this holds the "original screen width", if the file format supported it.
|
||||
|
||||
83
src/input.c
83
src/input.c
@ -767,6 +767,27 @@ static void Handle_SelectionRequest(const XSelectionRequestEvent* xselectionrequ
|
||||
#if defined(USE_SDL)
|
||||
static void Handle_window_resize(SDL_ResizeEvent * event)
|
||||
{
|
||||
#if defined(WIN32)
|
||||
WINDOWPLACEMENT windowplacement;
|
||||
windowplacement.length = sizeof(WINDOWPLACEMENT);
|
||||
if (GetWindowPlacement(GFX2_Get_Window_Handle(), &windowplacement))
|
||||
{
|
||||
switch (windowplacement.showCmd)
|
||||
{
|
||||
case SW_SHOWMAXIMIZED:
|
||||
Window_state = GFX2_WINDOW_MAXIMIZED;
|
||||
GFX2_Log(GFX2_DEBUG, "window is MAXIMIZED\n");
|
||||
break;
|
||||
case SW_SHOWMINIMIZED:
|
||||
Window_state = GFX2_WINDOW_MINIMIZED;
|
||||
GFX2_Log(GFX2_DEBUG, "window is MINIMIZED\n");
|
||||
break;
|
||||
default:
|
||||
Window_state = GFX2_WINDOW_STANDARD;
|
||||
GFX2_Log(GFX2_DEBUG, "window is NORMAL\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Resize_width = event->w;
|
||||
Resize_height = event->h;
|
||||
}
|
||||
@ -1428,39 +1449,47 @@ int Get_input(int sleep_time)
|
||||
Handle_window_resize(&event.resize);
|
||||
user_feedback_required = 1;
|
||||
break;
|
||||
|
||||
case SDL_VIDEOEXPOSE:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_VIDEOEXPOSE\n");
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(USE_SDL2)
|
||||
case SDL_WINDOWEVENT:
|
||||
switch(event.window.event)
|
||||
{
|
||||
case SDL_WINDOWEVENT_RESIZED: // change by external event (user or window manager)
|
||||
Resize_width = event.window.data1;
|
||||
Resize_height = event.window.data2;
|
||||
// forbid window size < 320x200
|
||||
if (Resize_width < 320)
|
||||
Resize_width = 320;
|
||||
if (Resize_height < 200)
|
||||
Resize_height = 200;
|
||||
if (Resize_width != event.window.data1 || Resize_height != event.window.data2)
|
||||
SDL_SetWindowSize(SDL_GetWindowFromID(event.window.windowID), Resize_width, Resize_height);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_CLOSE %d\n", event.window.windowID);
|
||||
Quit_is_required = 1;
|
||||
user_feedback_required = 1;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MINIMIZED %d\n", event.window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MAXIMIZED %d\n", event.window.windowID);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_RESTORED %d\n", event.window.windowID);
|
||||
break;
|
||||
default:
|
||||
GFX2_Log(GFX2_DEBUG, "Unhandled SDL_WINDOWEVENT : %d\n", event.window.event);
|
||||
case SDL_WINDOWEVENT_RESIZED: // change by external event (user or window manager)
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_RESIZED %d %dx%d\n", event.window.windowID, event.window.data1, event.window.data2);
|
||||
Resize_width = event.window.data1;
|
||||
Resize_height = event.window.data2;
|
||||
// forbid window size < 320x200
|
||||
if (Resize_width < 320)
|
||||
Resize_width = 320;
|
||||
if (Resize_height < 200)
|
||||
Resize_height = 200;
|
||||
if (Resize_width != event.window.data1 || Resize_height != event.window.data2)
|
||||
SDL_SetWindowSize(SDL_GetWindowFromID(event.window.windowID), Resize_width, Resize_height);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_CLOSE %d\n", event.window.windowID);
|
||||
Quit_is_required = 1;
|
||||
user_feedback_required = 1;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MINIMIZED %d\n", event.window.windowID);
|
||||
Window_state = GFX2_WINDOW_MINIMIZED;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MAXIMIZED %d\n", event.window.windowID);
|
||||
Window_state = GFX2_WINDOW_MAXIMIZED;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_RESTORED %d\n", event.window.windowID);
|
||||
Window_state = GFX2_WINDOW_STANDARD;
|
||||
break;
|
||||
default:
|
||||
GFX2_Log(GFX2_DEBUG, "Unhandled SDL_WINDOWEVENT : %d\n", event.window.event);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
15
src/main.c
15
src/main.c
@ -1244,16 +1244,15 @@ void Program_shutdown(void)
|
||||
|
||||
// Windows only: Recover the window position.
|
||||
#if defined(WIN32)
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
{
|
||||
RECT r;
|
||||
GetWindowRect(GFX2_Get_Window_Handle(), &r);
|
||||
|
||||
Config.Window_pos_x = r.left;
|
||||
Config.Window_pos_y = r.top;
|
||||
WINDOWPLACEMENT windowplacement;
|
||||
windowplacement.length = sizeof(WINDOWPLACEMENT);
|
||||
if (GetWindowPlacement(GFX2_Get_Window_Handle(), &windowplacement))
|
||||
{
|
||||
Config.Window_pos_x = windowplacement.rcNormalPosition.left;
|
||||
Config.Window_pos_y = windowplacement.rcNormalPosition.top;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// Config.Window_pos_x / Config.Window_pos_y are set in win32screen.c
|
||||
#elif !defined(USE_X11)
|
||||
// All other targets: irrelevant dimensions.
|
||||
// Do not attempt to force them back on next program run.
|
||||
|
||||
@ -792,9 +792,9 @@ int Load_INI(T_Config * conf)
|
||||
if (!Load_INI_get_values (file,buffer,"Default_window_size",2,values))
|
||||
{
|
||||
if ((values[0]>=320))
|
||||
Video_mode[0].Width = values[0];
|
||||
Default_window_width = Video_mode[0].Width = values[0];
|
||||
if ((values[1]>=200))
|
||||
Video_mode[0].Height = values[1];
|
||||
Default_window_height = Video_mode[0].Height = values[1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -651,8 +651,14 @@ int Save_INI(const T_Config * conf)
|
||||
if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Default_video_mode",Mode_label(conf->Default_resolution))))
|
||||
goto Erreur_Retour;
|
||||
|
||||
values[0]=Video_mode[0].Width;
|
||||
values[1]=Video_mode[0].Height;
|
||||
if (Default_window_width > 0)
|
||||
values[0] = Default_window_width;
|
||||
else
|
||||
values[0] = Video_mode[0].Width;
|
||||
if (Default_window_height > 0)
|
||||
values[1] = Default_window_height;
|
||||
else
|
||||
values[1] = Video_mode[0].Height;
|
||||
if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Default_window_size",2,values,0)))
|
||||
goto Erreur_Retour;
|
||||
|
||||
|
||||
@ -168,10 +168,16 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
|
||||
break;
|
||||
case WM_SIZE:
|
||||
GFX2_Log(GFX2_DEBUG, "WM_SIZE : %dx%d type=%d\n", LOWORD(lParam), HIWORD(lParam), wParam);
|
||||
if (wParam != SIZE_MINIMIZED)
|
||||
if (wParam == SIZE_MINIMIZED)
|
||||
Window_state = GFX2_WINDOW_MINIMIZED;
|
||||
else
|
||||
{
|
||||
Resize_width = LOWORD(lParam);
|
||||
Resize_height = HIWORD(lParam);
|
||||
if (wParam == SIZE_MAXIMIZED)
|
||||
Window_state = GFX2_WINDOW_MAXIMIZED;
|
||||
else if (wParam == SIZE_RESTORED)
|
||||
Window_state = GFX2_WINDOW_STANDARD;
|
||||
}
|
||||
return 0;
|
||||
case WM_CLOSE:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user