Changeset - r28810:dd35d3d734ac
[Not reviewed]
master
0 2 0
Peter Nelson - 2 months ago 2024-02-25 08:35:57
peter1138@openttd.org
Fix d3c673e: Don't defer OnResize() after ReInit() (#12174)

Some windows resize themselves during painting and issue ReInit(). In this case deferred OnResize() causes a visible glitch as the event is handled on the next redraw.
2 files changed with 10 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/window.cpp
Show inline comments
 
@@ -984,7 +984,7 @@ void Window::ReInit(int rx, int ry, bool
 
		this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight());
 
	}
 

	
 
	ResizeWindow(this, dx, dy);
 
	ResizeWindow(this, dx, dy, true, false);
 
	/* ResizeWindow() does this->SetDirty() already, no need to do it again here. */
 
}
 

	
 
@@ -1447,8 +1447,8 @@ void Window::FindWindowPlacementAndResiz
 
		ResizeWindow(this, enlarge_x, enlarge_y);
 
		/* ResizeWindow() calls this->OnResize(). */
 
	} else {
 
		/* Schedule OnResize; that way the scrollbars and matrices get initialized. */
 
		this->ScheduleResize();
 
		/* Always call OnResize; that way the scrollbars and matrices get initialized. */
 
		this->OnResize();
 
	}
 

	
 
	int nx = this->left;
 
@@ -2024,7 +2024,7 @@ static void EnsureVisibleCaption(Window 
 
 * @param delta_y Delta y-size of changed window
 
 * @param clamp_to_screen Whether to make sure the whole window stays visible
 
 */
 
void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen)
 
void ResizeWindow(Window *w, int delta_x, int delta_y, bool clamp_to_screen, bool schedule_resize)
 
{
 
	if (delta_x != 0 || delta_y != 0) {
 
		if (clamp_to_screen) {
 
@@ -2051,7 +2051,11 @@ void ResizeWindow(Window *w, int delta_x
 
	EnsureVisibleCaption(w, w->left, w->top);
 

	
 
	/* Schedule OnResize to make sure everything is initialised correctly if it needs to be. */
 
	w->ScheduleResize();
 
	if (schedule_resize) {
 
		w->ScheduleResize();
 
	} else {
 
		w->OnResize();
 
	}
 
	w->SetDirty();
 
}
 

	
src/window_func.h
Show inline comments
 
@@ -26,7 +26,7 @@ Window *FindWindowById(WindowClass cls, 
 
	return FindWindowById(cls, number.base());
 
}
 

	
 
void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true);
 
void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true, bool schedule_resize = true);
 
int PositionMainToolbar(Window *w);
 
int PositionStatusbar(Window *w);
 
int PositionNewsMessage(Window *w);
0 comments (0 inline, 0 general)