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
|
FSOBJECT_DRIVE = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum GFX2_WINDOW_STATES
|
||||||
|
{
|
||||||
|
GFX2_WINDOW_STANDARD = 0,
|
||||||
|
GFX2_WINDOW_MAXIMIZED,
|
||||||
|
GFX2_WINDOW_MINIMIZED
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -685,6 +685,12 @@ void Main_handler(void)
|
|||||||
// Resize requested
|
// Resize requested
|
||||||
if (Resize_width || Resize_height)
|
if (Resize_width || Resize_height)
|
||||||
{
|
{
|
||||||
|
if (Window_state == GFX2_WINDOW_STANDARD)
|
||||||
|
{
|
||||||
|
Default_window_width = Resize_width;
|
||||||
|
Default_window_height = Resize_height;
|
||||||
|
}
|
||||||
|
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Init_mode_video(Resize_width, Resize_height, 0, Pixel_ratio);
|
Init_mode_video(Resize_width, Resize_height, 0, Pixel_ratio);
|
||||||
// Reset the variables that indicate a resize was requested.
|
// 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;
|
GFX2_GLOBAL int Resize_width;
|
||||||
/// Requested window height. This is set when the user resizes the window.
|
/// Requested window height. This is set when the user resizes the window.
|
||||||
GFX2_GLOBAL int Resize_height;
|
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
|
/// Current video mode. Index in ::Video_mode
|
||||||
GFX2_GLOBAL int Current_resolution;
|
GFX2_GLOBAL int Current_resolution;
|
||||||
/// After loading an image, this holds the "original screen width", if the file format supported it.
|
/// 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)
|
#if defined(USE_SDL)
|
||||||
static void Handle_window_resize(SDL_ResizeEvent * event)
|
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_width = event->w;
|
||||||
Resize_height = event->h;
|
Resize_height = event->h;
|
||||||
}
|
}
|
||||||
@ -1428,39 +1449,47 @@ int Get_input(int sleep_time)
|
|||||||
Handle_window_resize(&event.resize);
|
Handle_window_resize(&event.resize);
|
||||||
user_feedback_required = 1;
|
user_feedback_required = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SDL_VIDEOEXPOSE:
|
||||||
|
GFX2_Log(GFX2_DEBUG, "SDL_VIDEOEXPOSE\n");
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_SDL2)
|
#if defined(USE_SDL2)
|
||||||
case SDL_WINDOWEVENT:
|
case SDL_WINDOWEVENT:
|
||||||
switch(event.window.event)
|
switch(event.window.event)
|
||||||
{
|
{
|
||||||
case SDL_WINDOWEVENT_RESIZED: // change by external event (user or window manager)
|
case SDL_WINDOWEVENT_RESIZED: // change by external event (user or window manager)
|
||||||
Resize_width = event.window.data1;
|
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_RESIZED %d %dx%d\n", event.window.windowID, event.window.data1, event.window.data2);
|
||||||
Resize_height = event.window.data2;
|
Resize_width = event.window.data1;
|
||||||
// forbid window size < 320x200
|
Resize_height = event.window.data2;
|
||||||
if (Resize_width < 320)
|
// forbid window size < 320x200
|
||||||
Resize_width = 320;
|
if (Resize_width < 320)
|
||||||
if (Resize_height < 200)
|
Resize_width = 320;
|
||||||
Resize_height = 200;
|
if (Resize_height < 200)
|
||||||
if (Resize_width != event.window.data1 || Resize_height != event.window.data2)
|
Resize_height = 200;
|
||||||
SDL_SetWindowSize(SDL_GetWindowFromID(event.window.windowID), Resize_width, Resize_height);
|
if (Resize_width != event.window.data1 || Resize_height != event.window.data2)
|
||||||
break;
|
SDL_SetWindowSize(SDL_GetWindowFromID(event.window.windowID), Resize_width, Resize_height);
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
break;
|
||||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_CLOSE %d\n", event.window.windowID);
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
Quit_is_required = 1;
|
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_CLOSE %d\n", event.window.windowID);
|
||||||
user_feedback_required = 1;
|
Quit_is_required = 1;
|
||||||
break;
|
user_feedback_required = 1;
|
||||||
case SDL_WINDOWEVENT_MINIMIZED:
|
break;
|
||||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MINIMIZED %d\n", event.window.windowID);
|
case SDL_WINDOWEVENT_MINIMIZED:
|
||||||
break;
|
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MINIMIZED %d\n", event.window.windowID);
|
||||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
Window_state = GFX2_WINDOW_MINIMIZED;
|
||||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MAXIMIZED %d\n", event.window.windowID);
|
break;
|
||||||
break;
|
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||||
case SDL_WINDOWEVENT_RESTORED:
|
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_MAXIMIZED %d\n", event.window.windowID);
|
||||||
GFX2_Log(GFX2_DEBUG, "SDL_WINDOWEVENT_RESTORED %d\n", event.window.windowID);
|
Window_state = GFX2_WINDOW_MAXIMIZED;
|
||||||
break;
|
break;
|
||||||
default:
|
case SDL_WINDOWEVENT_RESTORED:
|
||||||
GFX2_Log(GFX2_DEBUG, "Unhandled SDL_WINDOWEVENT : %d\n", event.window.event);
|
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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
15
src/main.c
15
src/main.c
@ -1244,16 +1244,15 @@ void Program_shutdown(void)
|
|||||||
|
|
||||||
// Windows only: Recover the window position.
|
// Windows only: Recover the window position.
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
|
||||||
{
|
{
|
||||||
RECT r;
|
WINDOWPLACEMENT windowplacement;
|
||||||
GetWindowRect(GFX2_Get_Window_Handle(), &r);
|
windowplacement.length = sizeof(WINDOWPLACEMENT);
|
||||||
|
if (GetWindowPlacement(GFX2_Get_Window_Handle(), &windowplacement))
|
||||||
Config.Window_pos_x = r.left;
|
{
|
||||||
Config.Window_pos_y = r.top;
|
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)
|
#elif !defined(USE_X11)
|
||||||
// All other targets: irrelevant dimensions.
|
// All other targets: irrelevant dimensions.
|
||||||
// Do not attempt to force them back on next program run.
|
// 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 (!Load_INI_get_values (file,buffer,"Default_window_size",2,values))
|
||||||
{
|
{
|
||||||
if ((values[0]>=320))
|
if ((values[0]>=320))
|
||||||
Video_mode[0].Width = values[0];
|
Default_window_width = Video_mode[0].Width = values[0];
|
||||||
if ((values[1]>=200))
|
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))))
|
if ((return_code=Save_INI_set_strings (old_file,new_file,buffer,"Default_video_mode",Mode_label(conf->Default_resolution))))
|
||||||
goto Erreur_Retour;
|
goto Erreur_Retour;
|
||||||
|
|
||||||
values[0]=Video_mode[0].Width;
|
if (Default_window_width > 0)
|
||||||
values[1]=Video_mode[0].Height;
|
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)))
|
if ((return_code=Save_INI_set_values (old_file,new_file,buffer,"Default_window_size",2,values,0)))
|
||||||
goto Erreur_Retour;
|
goto Erreur_Retour;
|
||||||
|
|
||||||
|
|||||||
@ -168,10 +168,16 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
|
|||||||
break;
|
break;
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
GFX2_Log(GFX2_DEBUG, "WM_SIZE : %dx%d type=%d\n", LOWORD(lParam), HIWORD(lParam), wParam);
|
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_width = LOWORD(lParam);
|
||||||
Resize_height = HIWORD(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;
|
return 0;
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user