mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r25295) -Feature: Allow saving window sizes as default sizes.
This commit is contained in:
parent
13badddd75
commit
4518e16da7
@ -36,6 +36,20 @@ cat = SC_ADVANCED
|
|||||||
var = pref_sticky
|
var = pref_sticky
|
||||||
def = false
|
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]
|
[SDT_END]
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -96,7 +96,9 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_wi
|
|||||||
flags(flags),
|
flags(flags),
|
||||||
nwid_parts(nwid_parts),
|
nwid_parts(nwid_parts),
|
||||||
nwid_length(nwid_length),
|
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>();
|
if (_window_descs == NULL) _window_descs = new SmallVector<WindowDesc*, 16>();
|
||||||
*_window_descs->Append() = this;
|
*_window_descs->Append() = this;
|
||||||
@ -561,16 +563,21 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case WWT_DEFSIZEBOX: {
|
case WWT_DEFSIZEBOX: {
|
||||||
int16 def_width = max<int16>(min(w->window_desc->default_width, _screen.width), w->nested_root->smallest_x);
|
if (_ctrl_pressed) {
|
||||||
int16 def_height = max<int16>(min(w->window_desc->default_height, _screen.height - 50), w->nested_root->smallest_y);
|
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 dx = (w->resize.step_width == 0) ? 0 : def_width - w->width;
|
||||||
int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height;
|
int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height;
|
||||||
/* dx and dy has to go by step.. calculate it.
|
/* 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. */
|
* 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_width > 1) dx -= dx % (int)w->resize.step_width;
|
||||||
if (w->resize.step_height > 1) dy -= dy % (int)w->resize.step_height;
|
if (w->resize.step_height > 1) dy -= dy % (int)w->resize.step_height;
|
||||||
ResizeWindow(w, dx, dy, false);
|
ResizeWindow(w, dx, dy, false);
|
||||||
|
}
|
||||||
|
|
||||||
nw->SetLowered(true);
|
nw->SetLowered(true);
|
||||||
nw->SetDirty(w);
|
nw->SetDirty(w);
|
||||||
@ -1544,8 +1551,8 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16 sm_width, int
|
|||||||
Point pt;
|
Point pt;
|
||||||
const Window *w;
|
const Window *w;
|
||||||
|
|
||||||
int16 default_width = max(desc->default_width, sm_width);
|
int16 default_width = max(desc->GetDefaultWidth(), sm_width);
|
||||||
int16 default_height = max(desc->default_height, sm_height);
|
int16 default_height = max(desc->GetDefaultHeight(), sm_height);
|
||||||
|
|
||||||
if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ &&
|
if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ &&
|
||||||
(w = FindWindowById(desc->parent_cls, window_number)) != NULL &&
|
(w = FindWindowById(desc->parent_cls, window_number)) != NULL &&
|
||||||
@ -1617,7 +1624,7 @@ void Window::FinishInitNested(WindowNumber window_number)
|
|||||||
this->ApplyDefaults();
|
this->ApplyDefaults();
|
||||||
Point pt = this->OnInitialPosition(this->nested_root->smallest_x, this->nested_root->smallest_y, window_number);
|
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->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());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -189,6 +189,11 @@ struct WindowDesc : ZeroedMemoryAllocator {
|
|||||||
int16 nwid_length; ///< Length of the #nwid_parts array.
|
int16 nwid_length; ///< Length of the #nwid_parts array.
|
||||||
|
|
||||||
bool pref_sticky; ///< Preferred stickyness.
|
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 LoadFromConfig();
|
||||||
static void SaveToConfig();
|
static void SaveToConfig();
|
||||||
|
Loading…
Reference in New Issue
Block a user