1
0
Fork 0

Add: Buttons to change picker preview image height. (#14373)

Adjusted height is remembered per picker type, but not saved.
pull/13289/merge
Peter Nelson 2025-06-23 08:24:49 +01:00 committed by GitHub
parent 8901f9adca
commit 1d67094863
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 39 additions and 7 deletions

View File

@ -2833,6 +2833,11 @@ STR_PICKER_MODE_USED_TOOLTIP :Toggle showing
STR_PICKER_MODE_SAVED :Saved
STR_PICKER_MODE_SAVED_TOOLTIP :Toggle showing only saved items
STR_PICKER_PREVIEW_SHRINK :-
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Reduce the height of preview images. Ctrl+Click to reduce to minimum
STR_PICKER_PREVIEW_EXPAND :+
STR_PICKER_PREVIEW_EXPAND_TOOLTIP :Increase the height of preview images. Ctrl+Click to increase to maximum
STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display
STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display

View File

@ -181,6 +181,8 @@ void PickerWindow::ConstructWindow()
/* Test if pickers should be active.*/
bool is_active = this->callbacks.IsActive();
this->preview_height = std::max(this->callbacks.preview_height, PREVIEW_HEIGHT);
/* Functionality depends on widgets being present, not window class. */
this->has_class_picker = is_active && this->GetWidget<NWidgetBase>(WID_PW_CLASS_LIST) != nullptr && this->callbacks.HasClassChoice();
this->has_type_picker = is_active && this->GetWidget<NWidgetBase>(WID_PW_TYPE_MATRIX) != nullptr;
@ -286,7 +288,7 @@ void PickerWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, const Dime
/* Type picker */
case WID_PW_TYPE_ITEM:
size.width = ScaleGUITrad(PREVIEW_WIDTH) + WidgetDimensions::scaled.fullbevel.Horizontal();
size.height = ScaleGUITrad(PREVIEW_HEIGHT) + WidgetDimensions::scaled.fullbevel.Vertical();
size.height = ScaleGUITrad(this->preview_height) + WidgetDimensions::scaled.fullbevel.Vertical();
break;
case WID_PW_CONFIGURE_BADGES:
@ -332,7 +334,7 @@ void PickerWindow::DrawWidget(const Rect &r, WidgetID widget) const
if (FillDrawPixelInfo(&tmp_dpi, ir)) {
AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
int x = (ir.Width() - ScaleSpriteTrad(PREVIEW_WIDTH)) / 2 + ScaleSpriteTrad(PREVIEW_LEFT);
int y = (ir.Height() + ScaleSpriteTrad(PREVIEW_HEIGHT)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM);
int y = (ir.Height() + ScaleSpriteTrad(this->preview_height)) / 2 - ScaleSpriteTrad(PREVIEW_BOTTOM);
this->callbacks.DrawType(x, y, item.class_index, item.index);
@ -398,6 +400,18 @@ void PickerWindow::OnClick(Point pt, WidgetID widget, int)
this->InvalidateData({PickerInvalidation::Class, PickerInvalidation::Type, PickerInvalidation::Position});
break;
case WID_PW_SHRINK:
this->callbacks.preview_height = this->preview_height = _ctrl_pressed ? PREVIEW_HEIGHT : std::max(PREVIEW_HEIGHT, this->preview_height - STEP_PREVIEW_HEIGHT);
this->InvalidateData({});
this->ReInit();
break;
case WID_PW_EXPAND:
this->callbacks.preview_height = this->preview_height = _ctrl_pressed ? MAX_PREVIEW_HEIGHT : std::min(MAX_PREVIEW_HEIGHT, this->preview_height + STEP_PREVIEW_HEIGHT);
this->InvalidateData({});
this->ReInit();
break;
/* Type Picker */
case WID_PW_TYPE_ITEM: {
int sel = this->GetWidget<NWidgetBase>(widget)->GetParentWidget<NWidgetMatrix>()->GetCurrentElement();
@ -501,6 +515,9 @@ void PickerWindow::OnInvalidateData(int data, bool gui_scope)
SetWidgetLoweredState(WID_PW_MODE_USED, HasBit(this->callbacks.mode, PFM_USED));
SetWidgetLoweredState(WID_PW_MODE_SAVED, HasBit(this->callbacks.mode, PFM_SAVED));
}
SetWidgetDisabledState(WID_PW_SHRINK, this->preview_height == PREVIEW_HEIGHT);
SetWidgetDisabledState(WID_PW_EXPAND, this->preview_height == MAX_PREVIEW_HEIGHT);
}
EventState PickerWindow::OnHotkey(int hotkey)
@ -758,6 +775,8 @@ std::unique_ptr<NWidgetBase> MakePickerTypeWidgets()
NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_ALL), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_PICKER_MODE_ALL, STR_PICKER_MODE_ALL_TOOLTIP),
NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_USED), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_PICKER_MODE_USED, STR_PICKER_MODE_USED_TOOLTIP),
NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_PW_MODE_SAVED), SetFill(1, 0), SetResize(1, 0), SetStringTip(STR_PICKER_MODE_SAVED, STR_PICKER_MODE_SAVED_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_DARK_GREEN, WID_PW_SHRINK), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetStringTip(STR_PICKER_PREVIEW_SHRINK, STR_PICKER_PREVIEW_SHRINK_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_DARK_GREEN, WID_PW_EXPAND), SetAspect(WidgetDimensions::ASPECT_UP_DOWN_BUTTON), SetStringTip(STR_PICKER_PREVIEW_EXPAND, STR_PICKER_PREVIEW_EXPAND_TOOLTIP),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_PW_TYPE_SCROLL),

View File

@ -96,6 +96,8 @@ public:
const std::string ini_group; ///< Ini Group for saving favourites.
uint8_t mode = 0; ///< Bitmask of \c PickerFilterModes.
int preview_height = 0; ///< Previously adjusted height.
std::set<PickerItem> used; ///< Set of items used in the current game by the current company.
std::set<PickerItem> saved; ///< Set of saved favourite items.
};
@ -171,15 +173,19 @@ public:
static constexpr PickerInvalidations PICKER_INVALIDATION_ALL{PickerInvalidation::Class, PickerInvalidation::Type, PickerInvalidation::Position, PickerInvalidation::Validate};
static const int PREVIEW_WIDTH = 64; ///< Width of each preview button.
static const int PREVIEW_HEIGHT = 48; ///< Height of each preview button.
static const int PREVIEW_LEFT = 31; ///< Offset from left edge to draw preview.
static const int PREVIEW_BOTTOM = 31; ///< Offset from bottom edge to draw preview.
static constexpr int PREVIEW_WIDTH = 64; ///< Width of each preview button.
static constexpr int PREVIEW_HEIGHT = 48; ///< Height of each preview button.
static constexpr int PREVIEW_LEFT = 31; ///< Offset from left edge to draw preview.
static constexpr int PREVIEW_BOTTOM = 31; ///< Offset from bottom edge to draw preview.
static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box.
static constexpr int STEP_PREVIEW_HEIGHT = 16; ///< Step for decreasing or increase preivew button height.
static constexpr int MAX_PREVIEW_HEIGHT = PREVIEW_HEIGHT * 3; ///< Maximum height of each preview button.
static constexpr uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box.
bool has_class_picker = false; ///< Set if this window has a class picker 'component'.
bool has_type_picker = false; ///< Set if this window has a type picker 'component'.
int preview_height = 0; ///< Height of preview images.
PickerWindow(WindowDesc &desc, Window *parent, int window_number, PickerCallbacks &callbacks);
void OnInit() override;

View File

@ -24,6 +24,8 @@ enum PickerClassWindowWidgets : WidgetID {
WID_PW_MODE_ALL, ///< Toggle "Show all" filter mode.
WID_PW_MODE_USED, ///< Toggle showing only used types.
WID_PW_MODE_SAVED, ///< Toggle showing only saved types.
WID_PW_SHRINK, ///< Button to reduce preview image height.
WID_PW_EXPAND, ///< Button to increase preview image height.
WID_PW_TYPE_MATRIX, ///< Matrix with items.
WID_PW_TYPE_ITEM, ///< A single item.
WID_PW_TYPE_SCROLL, ///< Scrollbar for the matrix.