Merge branch 'master' into jgrpp
# Conflicts: # src/build_vehicle_gui.cpp # src/cheat_gui.cpp # src/company_gui.cpp # src/error_gui.cpp # src/fios_gui.cpp # src/gfx_func.h # src/graph_gui.cpp # src/group_gui.cpp # src/misc_gui.cpp # src/newgrf_debug_gui.cpp # src/order_gui.cpp # src/road_gui.cpp # src/roadveh_gui.cpp # src/settings_gui.cpp # src/ship_gui.cpp # src/station_gui.cpp # src/statusbar_gui.cpp # src/subsidy_gui.cpp # src/timetable_gui.cpp # src/town_gui.cpp # src/train_gui.cpp # src/tree_gui.cpp # src/vehicle_gui.cpp # src/widget.cpp # src/widgets/dropdown.cpp # src/window_gui.h
This commit is contained in:
@@ -374,11 +374,11 @@ struct GameOptionsWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_GO_BASE_SFX_VOLUME:
|
||||
DrawVolumeSliderWidget(r, _settings_client.music.effect_vol);
|
||||
DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.effect_vol, {});
|
||||
break;
|
||||
|
||||
case WID_GO_BASE_MUSIC_VOLUME:
|
||||
DrawVolumeSliderWidget(r, _settings_client.music.music_vol);
|
||||
DrawSliderWidget(r, 0, INT8_MAX, _settings_client.music.music_vol, {});
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -505,7 +505,7 @@ struct GameOptionsWindow : Window {
|
||||
case WID_GO_BASE_SFX_VOLUME:
|
||||
case WID_GO_BASE_MUSIC_VOLUME: {
|
||||
byte &vol = (widget == WID_GO_BASE_MUSIC_VOLUME) ? _settings_client.music.music_vol : _settings_client.music.effect_vol;
|
||||
if (ClickVolumeSliderWidget(this->GetWidget<NWidgetBase>(widget)->GetCurrentRect(), pt, vol)) {
|
||||
if (ClickSliderWidget(this->GetWidget<NWidgetBase>(widget)->GetCurrentRect(), pt, 0, INT8_MAX, vol)) {
|
||||
if (widget == WID_GO_BASE_MUSIC_VOLUME) MusicDriver::GetInstance()->SetVolume(vol);
|
||||
this->SetWidgetDirty(widget);
|
||||
SetWindowClassesDirty(WC_MUSIC_WINDOW);
|
||||
@@ -2359,11 +2359,6 @@ static void ResetAllSettingsConfirmationCallback(Window *w, bool confirmed)
|
||||
|
||||
/** Window to edit settings of the game. */
|
||||
struct GameSettingsWindow : Window {
|
||||
static const int SETTINGTREE_LEFT_OFFSET = 5; ///< Position of left edge of setting values
|
||||
static const int SETTINGTREE_RIGHT_OFFSET = 5; ///< Position of right edge of setting values
|
||||
static const int SETTINGTREE_TOP_OFFSET = 5; ///< Position of top edge of setting values
|
||||
static const int SETTINGTREE_BOTTOM_OFFSET = 5; ///< Position of bottom edge of setting values
|
||||
|
||||
static GameSettings *settings_ptr; ///< Pointer to the game settings being displayed and modified.
|
||||
|
||||
SettingEntry *valuewindow_entry; ///< If non-nullptr, pointer to setting for which a value-entering window has been opened.
|
||||
@@ -2390,7 +2385,6 @@ struct GameSettingsWindow : Window {
|
||||
this->filter.type_hides = false;
|
||||
this->settings_ptr = &GetGameSettings();
|
||||
|
||||
_circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED));
|
||||
GetSettingsTree().FoldAll(); // Close all sub-pages
|
||||
|
||||
this->valuewindow_entry = nullptr; // No setting entry for which a entry window is opened
|
||||
@@ -2411,6 +2405,11 @@ struct GameSettingsWindow : Window {
|
||||
this->InvalidateData();
|
||||
}
|
||||
|
||||
void OnInit() override
|
||||
{
|
||||
_circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED));
|
||||
}
|
||||
|
||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||
{
|
||||
switch (widget) {
|
||||
@@ -2418,7 +2417,7 @@ struct GameSettingsWindow : Window {
|
||||
resize->height = SETTING_HEIGHT = std::max({(int)_circle_size.height, SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL}) + 1;
|
||||
resize->width = 1;
|
||||
|
||||
size->height = 5 * resize->height + SETTINGTREE_TOP_OFFSET + SETTINGTREE_BOTTOM_OFFSET;
|
||||
size->height = 5 * resize->height + WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM;
|
||||
break;
|
||||
|
||||
case WID_GS_HELP_TEXT: {
|
||||
@@ -2456,14 +2455,14 @@ struct GameSettingsWindow : Window {
|
||||
}
|
||||
|
||||
/* Reserve the correct number of lines for the 'some search results are hidden' notice in the central settings display panel. */
|
||||
const NWidgetBase *panel = this->GetWidget<NWidgetBase>(WID_GS_OPTIONSPANEL);
|
||||
const Rect panel = this->GetWidget<NWidgetBase>(WID_GS_OPTIONSPANEL)->GetCurrentRect().Shrink(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_TOP, WD_FRAMETEXT_RIGHT, WD_FRAMETEXT_BOTTOM);
|
||||
StringID warn_str = STR_CONFIG_SETTING_CATEGORY_HIDES - 1 + this->warn_missing;
|
||||
int new_warn_lines;
|
||||
if (this->warn_missing == WHR_NONE) {
|
||||
new_warn_lines = 0;
|
||||
} else {
|
||||
SetDParam(0, _game_settings_restrict_dropdown[this->filter.min_cat]);
|
||||
new_warn_lines = GetStringLineCount(warn_str, panel->current_x);
|
||||
new_warn_lines = GetStringLineCount(warn_str, panel.Width());
|
||||
}
|
||||
if (this->warn_lines != new_warn_lines) {
|
||||
this->vscroll->SetCount(this->vscroll->GetCount() - this->warn_lines + new_warn_lines);
|
||||
@@ -2474,16 +2473,8 @@ struct GameSettingsWindow : Window {
|
||||
|
||||
/* Draw the 'some search results are hidden' notice. */
|
||||
if (this->warn_missing != WHR_NONE) {
|
||||
const int left = panel->pos_x;
|
||||
const int right = left + panel->current_x - 1;
|
||||
const int top = panel->pos_y + WD_FRAMETEXT_TOP + (SETTING_HEIGHT - FONT_HEIGHT_NORMAL) * this->warn_lines / 2;
|
||||
SetDParam(0, _game_settings_restrict_dropdown[this->filter.min_cat]);
|
||||
if (this->warn_lines == 1) {
|
||||
/* If the warning fits at one line, center it. */
|
||||
DrawString(left + WD_FRAMETEXT_LEFT, right - WD_FRAMETEXT_RIGHT, top, warn_str, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
} else {
|
||||
DrawStringMultiLine(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, INT32_MAX, warn_str, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
}
|
||||
DrawStringMultiLine(panel.WithHeight(this->warn_lines * FONT_HEIGHT_NORMAL), warn_str, TC_FROMSTRING, SA_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2533,11 +2524,12 @@ struct GameSettingsWindow : Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_GS_OPTIONSPANEL: {
|
||||
int top_pos = r.top + SETTINGTREE_TOP_OFFSET + 1 + this->warn_lines * SETTING_HEIGHT;
|
||||
Rect tr = r.Shrink(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_TOP, WD_FRAMETEXT_RIGHT, WD_FRAMETEXT_BOTTOM);
|
||||
tr.top += this->warn_lines * SETTING_HEIGHT;
|
||||
uint last_row = this->vscroll->GetPosition() + this->vscroll->GetCapacity() - this->warn_lines;
|
||||
int next_row = GetSettingsTree().Draw(settings_ptr, r.left + SETTINGTREE_LEFT_OFFSET, r.right - SETTINGTREE_RIGHT_OFFSET, top_pos,
|
||||
int next_row = GetSettingsTree().Draw(settings_ptr, tr.left, tr.right, tr.top,
|
||||
this->vscroll->GetPosition(), last_row, this->last_clicked);
|
||||
if (next_row == 0) DrawString(r.left + SETTINGTREE_LEFT_OFFSET, r.right - SETTINGTREE_RIGHT_OFFSET, top_pos, STR_CONFIG_SETTINGS_NONE);
|
||||
if (next_row == 0) DrawString(tr, STR_CONFIG_SETTINGS_NONE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2545,20 +2537,20 @@ struct GameSettingsWindow : Window {
|
||||
if (this->last_clicked != nullptr) {
|
||||
const IntSettingDesc *sd = this->last_clicked->setting;
|
||||
|
||||
int y = r.top;
|
||||
Rect tr = r;
|
||||
switch (sd->GetType()) {
|
||||
case ST_COMPANY: SetDParam(0, _game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_COMPANY_MENU : STR_CONFIG_SETTING_TYPE_COMPANY_INGAME); break;
|
||||
case ST_CLIENT: SetDParam(0, STR_CONFIG_SETTING_TYPE_CLIENT); break;
|
||||
case ST_GAME: SetDParam(0, _game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_GAME_MENU : STR_CONFIG_SETTING_TYPE_GAME_INGAME); break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
DrawString(r.left, r.right, y, STR_CONFIG_SETTING_TYPE);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
DrawString(tr, STR_CONFIG_SETTING_TYPE);
|
||||
tr.top += FONT_HEIGHT_NORMAL;
|
||||
|
||||
std::unique_ptr<SettingEntry::SetValueDParamsTempData> tempdata;
|
||||
this->last_clicked->SetValueDParams(0, sd->def, tempdata);
|
||||
DrawString(r.left, r.right, y, STR_CONFIG_SETTING_DEFAULT_VALUE);
|
||||
y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
DrawString(tr, STR_CONFIG_SETTING_DEFAULT_VALUE);
|
||||
tr.top += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
|
||||
if (sd->flags & SF_GUI_ADVISE_DEFAULT) {
|
||||
const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN);
|
||||
@@ -2567,20 +2559,20 @@ struct GameSettingsWindow : Window {
|
||||
const int warning_offset_y = (step_height - warning_dimensions.height) / 2;
|
||||
const bool rtl = _current_text_dir == TD_RTL;
|
||||
|
||||
int left = r.left;
|
||||
int right = r.right;
|
||||
DrawSprite(SPR_WARNING_SIGN, 0, rtl ? right - warning_dimensions.width - 5 : left + 5, y + warning_offset_y);
|
||||
int left = tr.left;
|
||||
int right = tr.right;
|
||||
DrawSprite(SPR_WARNING_SIGN, 0, rtl ? right - warning_dimensions.width - 5 : left + 5, tr.top + warning_offset_y);
|
||||
if (rtl) {
|
||||
right -= (warning_dimensions.width + 10);
|
||||
} else {
|
||||
left += (warning_dimensions.width + 10);
|
||||
}
|
||||
DrawString(left, right, y + text_offset_y, STR_CONFIG_SETTING_ADVISED_LEAVE_DEFAULT, TC_RED);
|
||||
DrawString(left, right, tr.top + text_offset_y, STR_CONFIG_SETTING_ADVISED_LEAVE_DEFAULT, TC_RED);
|
||||
|
||||
y += step_height + WD_PAR_VSEP_NORMAL;
|
||||
tr.top += step_height + WD_PAR_VSEP_NORMAL;
|
||||
}
|
||||
|
||||
DrawStringMultiLine(r.left, r.right, y, r.bottom, this->last_clicked->GetHelpText(), TC_WHITE);
|
||||
DrawStringMultiLine(tr, this->last_clicked->GetHelpText(), TC_WHITE);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2642,7 +2634,7 @@ struct GameSettingsWindow : Window {
|
||||
|
||||
if (widget != WID_GS_OPTIONSPANEL) return;
|
||||
|
||||
uint btn = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GS_OPTIONSPANEL, SETTINGTREE_TOP_OFFSET);
|
||||
uint btn = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GS_OPTIONSPANEL, WD_FRAMETEXT_TOP);
|
||||
if (btn == INT_MAX || (int)btn < this->warn_lines) return;
|
||||
btn -= this->warn_lines;
|
||||
|
||||
@@ -2651,7 +2643,7 @@ struct GameSettingsWindow : Window {
|
||||
|
||||
if (clicked_entry == nullptr) return; // Clicked below the last setting of the page
|
||||
|
||||
int x = (_current_text_dir == TD_RTL ? this->width - 1 - pt.x : pt.x) - SETTINGTREE_LEFT_OFFSET - (clicked_entry->level + 1) * LEVEL_WIDTH; // Shift x coordinate
|
||||
int x = (_current_text_dir == TD_RTL ? this->width - 1 - pt.x : pt.x) - WD_FRAMETEXT_LEFT - (clicked_entry->level + 1) * LEVEL_WIDTH; // Shift x coordinate
|
||||
if (x < 0) return; // Clicked left of the entry
|
||||
|
||||
SettingsPage *clicked_page = dynamic_cast<SettingsPage*>(clicked_entry);
|
||||
@@ -2692,7 +2684,7 @@ struct GameSettingsWindow : Window {
|
||||
this->closing_dropdown = false;
|
||||
|
||||
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_GS_OPTIONSPANEL);
|
||||
int rel_y = (pt.y - (int)wid->pos_y - SETTINGTREE_TOP_OFFSET) % wid->resize_y;
|
||||
int rel_y = (pt.y - (int)wid->pos_y - WD_FRAMETEXT_TOP) % wid->resize_y;
|
||||
|
||||
Rect wi_rect;
|
||||
wi_rect.left = pt.x - (_current_text_dir == TD_RTL ? SETTING_BUTTON_WIDTH - 1 - x : x);
|
||||
@@ -2950,7 +2942,7 @@ struct GameSettingsWindow : Window {
|
||||
|
||||
void OnResize() override
|
||||
{
|
||||
this->vscroll->SetCapacityFromWidget(this, WID_GS_OPTIONSPANEL, SETTINGTREE_TOP_OFFSET + SETTINGTREE_BOTTOM_OFFSET);
|
||||
this->vscroll->SetCapacityFromWidget(this, WID_GS_OPTIONSPANEL, WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM);
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user