Changeset - r20288:668117e170ea
[Not reviewed]
master
0 3 0
frosch - 11 years ago 2013-05-26 19:30:31
frosch@openttd.org
(svn r25295) -Feature: Allow saving window sizes as default sizes.
3 files changed with 40 insertions and 14 deletions:
0 comments (0 inline, 0 general)
src/table/window_settings.ini
Show inline comments
 
@@ -36,6 +36,20 @@ cat      = SC_ADVANCED
 
var      = pref_sticky
 
def      = false
 

	
 
[SDT_VAR]
 
var      = pref_width
 
type     = SLE_INT16
 
def      = 0
 
min      = 0
 
max      = 32000
 

	
 
[SDT_VAR]
 
var      = pref_height
 
type     = SLE_INT16
 
def      = 0
 
min      = 0
 
max      = 32000
 

	
 
[SDT_END]
 

	
 
};
src/window.cpp
Show inline comments
 
@@ -96,7 +96,9 @@ WindowDesc::WindowDesc(WindowPosition de
 
	flags(flags),
 
	nwid_parts(nwid_parts),
 
	nwid_length(nwid_length),
 
	pref_sticky(false)
 
	pref_sticky(false),
 
	pref_width(0),
 
	pref_height(0)
 
{
 
	if (_window_descs == NULL) _window_descs = new SmallVector<WindowDesc*, 16>();
 
	*_window_descs->Append() = this;
 
@@ -561,16 +563,21 @@ static void DispatchLeftClickEvent(Windo
 
			return;
 

	
 
		case WWT_DEFSIZEBOX: {
 
			int16 def_width = max<int16>(min(w->window_desc->default_width, _screen.width), w->nested_root->smallest_x);
 
			int16 def_height = max<int16>(min(w->window_desc->default_height, _screen.height - 50), w->nested_root->smallest_y);
 

	
 
			int dx = (w->resize.step_width  == 0) ? 0 : def_width  - w->width;
 
			int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height;
 
			/* dx and dy has to go by step.. calculate it.
 
			 * The cast to int is necessary else dx/dy are implicitly casted to unsigned int, which won't work. */
 
			if (w->resize.step_width  > 1) dx -= dx % (int)w->resize.step_width;
 
			if (w->resize.step_height > 1) dy -= dy % (int)w->resize.step_height;
 
			ResizeWindow(w, dx, dy, false);
 
			if (_ctrl_pressed) {
 
				w->window_desc->pref_width = w->width;
 
				w->window_desc->pref_height = w->height;
 
			} else {
 
				int16 def_width = max<int16>(min(w->window_desc->GetDefaultWidth(), _screen.width), w->nested_root->smallest_x);
 
				int16 def_height = max<int16>(min(w->window_desc->GetDefaultHeight(), _screen.height - 50), w->nested_root->smallest_y);
 

	
 
				int dx = (w->resize.step_width  == 0) ? 0 : def_width  - w->width;
 
				int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height;
 
				/* dx and dy has to go by step.. calculate it.
 
				 * The cast to int is necessary else dx/dy are implicitly casted to unsigned int, which won't work. */
 
				if (w->resize.step_width  > 1) dx -= dx % (int)w->resize.step_width;
 
				if (w->resize.step_height > 1) dy -= dy % (int)w->resize.step_height;
 
				ResizeWindow(w, dx, dy, false);
 
			}
 

	
 
			nw->SetLowered(true);
 
			nw->SetDirty(w);
 
@@ -1544,8 +1551,8 @@ static Point LocalGetWindowPlacement(con
 
	Point pt;
 
	const Window *w;
 

	
 
	int16 default_width  = max(desc->default_width,  sm_width);
 
	int16 default_height = max(desc->default_height, sm_height);
 
	int16 default_width  = max(desc->GetDefaultWidth(),  sm_width);
 
	int16 default_height = max(desc->GetDefaultHeight(), sm_height);
 

	
 
	if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ &&
 
			(w = FindWindowById(desc->parent_cls, window_number)) != NULL &&
 
@@ -1617,7 +1624,7 @@ void Window::FinishInitNested(WindowNumb
 
	this->ApplyDefaults();
 
	Point pt = this->OnInitialPosition(this->nested_root->smallest_x, this->nested_root->smallest_y, window_number);
 
	this->InitializePositionSize(pt.x, pt.y, this->nested_root->smallest_x, this->nested_root->smallest_y);
 
	this->FindWindowPlacementAndResize(this->window_desc->default_width, this->window_desc->default_height);
 
	this->FindWindowPlacementAndResize(this->window_desc->GetDefaultWidth(), this->window_desc->GetDefaultHeight());
 
}
 

	
 
/**
src/window_gui.h
Show inline comments
 
@@ -189,6 +189,11 @@ struct WindowDesc : ZeroedMemoryAllocato
 
	int16 nwid_length;             ///< Length of the #nwid_parts array.
 

	
 
	bool pref_sticky;              ///< Preferred stickyness.
 
	int16 pref_width;              ///< User-preferred width of the window. Zero if unset.
 
	int16 pref_height;             ///< User-preferred height of the window. Zero if unset.
 

	
 
	int16 GetDefaultWidth() const { return this->pref_width != 0 ? this->pref_width : this->default_width; }
 
	int16 GetDefaultHeight() const { return this->pref_height != 0 ? this->pref_height : this->default_height; }
 

	
 
	static void LoadFromConfig();
 
	static void SaveToConfig();
0 comments (0 inline, 0 general)