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