Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CGame.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ class CGame

bool Init();
bool ReCreateWindow();
/// Resize the render target (display surface + texture) to the given size, e.g. after the user resized or maximized
/// the window. Keeps the existing window and renderer, so it is cheap enough to call while dragging the border.
bool ResizeDisplay(Extent newSize);

void EventHandling(SDL_Event* Event);

Expand Down
13 changes: 13 additions & 0 deletions CGame_Event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,19 @@ void CGame::EventHandling(SDL_Event* Event)
break;
}

case SDL_WINDOWEVENT:
{
// Follow user-driven window resizing/maximizing by growing the editor's working area, just like the
// game client does. The map view and menus re-derive their surfaces from GameResolution.
if(Event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED && !fullscreen)
{
const Extent newSize(Event->window.data1, Event->window.data2);
if(newSize != GameResolution)
ResizeDisplay(newSize);
}
break;
}

case SDL_QUIT: Running = false; break;

default: break;
Expand Down
21 changes: 16 additions & 5 deletions CGame_Init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,33 @@ bool CGame::ReCreateWindow()
window_.reset();
window_.reset(SDL_CreateWindow("Return to the Roots Map editor [BETA]", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, GameResolution.x, GameResolution.y,
fullscreen ? SDL_WINDOW_FULLSCREEN : 0));
fullscreen ? SDL_WINDOW_FULLSCREEN : SDL_WINDOW_RESIZABLE));
if(!window_)
return false;
// Don't allow shrinking below the smallest resolution we have a dedicated map frame for
SDL_SetWindowMinimumSize(window_.get(), 640, 480);
renderer_.reset(SDL_CreateRenderer(window_.get(), -1, 0));
if(!renderer_)
return false;
displayTexture_ = makeSdlTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, GameResolution.x,
GameResolution.y);
Surf_Display = makeRGBSurface(GameResolution.x, GameResolution.y, true);
if(!displayTexture_ || !Surf_Display)
if(!ResizeDisplay(GameResolution))
return false;

SetAppIcon();
return true;
}

bool CGame::ResizeDisplay(Extent newSize)
{
// Ignore degenerate sizes, e.g. while the window is minimized
if(newSize.x == 0 || newSize.y == 0)
return true;
GameResolution = newSize;
displayTexture_ =
makeSdlTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, newSize.x, newSize.y);
Surf_Display = makeRGBSurface(newSize.x, newSize.y, true);
return displayTexture_ && Surf_Display;
}

bool CGame::Init()
{
std::cout << "Return to the Roots Map editor\n";
Expand Down
Loading