mirror of https://github.com/OpenTTD/OpenTTD
parent
b6ed595176
commit
b5693becdc
|
@ -24,6 +24,85 @@
|
|||
|
||||
#include "safeguards.h"
|
||||
|
||||
const WidgetDimensions WidgetDimensions::unscaled = {
|
||||
{WD_IMGBTN_LEFT, WD_IMGBTN_TOP, WD_IMGBTN_RIGHT, WD_IMGBTN_BOTTOM}, ///< imgbtn
|
||||
{WD_INSET_LEFT, WD_INSET_TOP, WD_INSET_RIGHT, WD_BEVEL_BOTTOM}, ///< inset
|
||||
{WD_SCROLLBAR_LEFT, WD_SCROLLBAR_TOP, WD_SCROLLBAR_RIGHT, WD_SCROLLBAR_BOTTOM}, ///< scrollbar
|
||||
{WD_BEVEL_LEFT, WD_BEVEL_TOP, WD_BEVEL_RIGHT, WD_BEVEL_BOTTOM}, ///< bevel
|
||||
{WD_BEVEL_LEFT, WD_BEVEL_TOP, WD_BEVEL_RIGHT, WD_BEVEL_BOTTOM}, ///< fullbevel
|
||||
{WD_FRAMERECT_LEFT, WD_FRAMERECT_TOP, WD_FRAMERECT_RIGHT, WD_FRAMERECT_BOTTOM}, ///< framerect
|
||||
{WD_FRAMETEXT_LEFT, WD_FRAMETEXT_TOP, WD_FRAMETEXT_RIGHT, WD_FRAMETEXT_BOTTOM}, ///< frametext
|
||||
{WD_FRAMETEXT_LEFT, WD_TEXTPANEL_TOP, WD_FRAMETEXT_RIGHT, WD_TEXTPANEL_BOTTOM}, ///< textpanel
|
||||
{WD_MATRIX_LEFT, WD_MATRIX_TOP, WD_MATRIX_RIGHT, WD_MATRIX_BOTTOM}, ///< matrix
|
||||
{WD_SHADEBOX_LEFT, WD_SHADEBOX_TOP, WD_SHADEBOX_RIGHT, WD_SHADEBOX_BOTTOM}, ///< shadebox
|
||||
{WD_STICKYBOX_LEFT, WD_STICKYBOX_TOP, WD_STICKYBOX_RIGHT, WD_STICKYBOX_BOTTOM}, ///< stickybox
|
||||
{WD_DEBUGBOX_LEFT, WD_DEBUGBOX_TOP, WD_DEBUGBOX_RIGHT, WD_DEBUGBOX_BOTTOM}, ///< debugbox
|
||||
{WD_DEFSIZEBOX_LEFT, WD_DEFSIZEBOX_TOP, WD_DEFSIZEBOX_RIGHT, WD_DEFSIZEBOX_BOTTOM}, ///< defsizebox
|
||||
{WD_RESIZEBOX_LEFT, WD_RESIZEBOX_TOP, WD_RESIZEBOX_RIGHT, WD_RESIZEBOX_BOTTOM}, ///< resizebox
|
||||
{WD_CLOSEBOX_LEFT, WD_CLOSEBOX_TOP, WD_CLOSEBOX_RIGHT, WD_CLOSEBOX_BOTTOM}, ///< closebox
|
||||
{WD_CAPTIONTEXT_LEFT, WD_CAPTIONTEXT_TOP, WD_CAPTIONTEXT_RIGHT, WD_CAPTIONTEXT_BOTTOM}, ///< captiontext
|
||||
{WD_DROPDOWNTEXT_LEFT, WD_DROPDOWNTEXT_TOP, WD_DROPDOWNTEXT_RIGHT, WD_DROPDOWNTEXT_BOTTOM}, ///< dropdowntext
|
||||
1, ///< pressed
|
||||
WD_PAR_VSEP_NORMAL, ///< vsep_normal
|
||||
WD_PAR_VSEP_WIDE, ///< vsep_wide
|
||||
2, ///< hsep_normal
|
||||
6, ///< hsep_wide
|
||||
10, ///< hsep_indent
|
||||
};
|
||||
|
||||
WidgetDimensions WidgetDimensions::scaled = {};
|
||||
|
||||
/**
|
||||
* Scale a RectPadding to GUI zoom level.
|
||||
* @param r RectPadding at ZOOM_LVL_BASE (traditional "normal" interface size).
|
||||
* @return RectPadding at #ZOOM_LVL_GUI (current interface size).
|
||||
*/
|
||||
static inline RectPadding ScaleGUITrad(const RectPadding &r)
|
||||
{
|
||||
return {(uint8)ScaleGUITrad(r.left), (uint8)ScaleGUITrad(r.top), (uint8)ScaleGUITrad(r.right), (uint8)ScaleGUITrad(r.bottom)};
|
||||
}
|
||||
|
||||
/**
|
||||
* Scale a Dimension to GUI zoom level.
|
||||
* @param d Dimension at ZOOM_LVL_BASE (traditional "normal" interface size).
|
||||
* @return Dimension at #ZOOM_LVL_GUI (current interface size).
|
||||
*/
|
||||
static inline Dimension ScaleGUITrad(const Dimension &dim)
|
||||
{
|
||||
return {(uint)ScaleGUITrad(dim.width), (uint)ScaleGUITrad(dim.height)};
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up pre-scaled versions of Widget Dimensions.
|
||||
*/
|
||||
void SetupWidgetDimensions()
|
||||
{
|
||||
WidgetDimensions::scaled.imgbtn = ScaleGUITrad(WidgetDimensions::unscaled.imgbtn);
|
||||
WidgetDimensions::scaled.inset = ScaleGUITrad(WidgetDimensions::unscaled.inset);
|
||||
WidgetDimensions::scaled.scrollbar = ScaleGUITrad(WidgetDimensions::unscaled.scrollbar);
|
||||
WidgetDimensions::scaled.bevel = WidgetDimensions::unscaled.bevel;
|
||||
WidgetDimensions::scaled.fullbevel = ScaleGUITrad(WidgetDimensions::unscaled.fullbevel);
|
||||
WidgetDimensions::scaled.framerect = ScaleGUITrad(WidgetDimensions::unscaled.framerect);
|
||||
WidgetDimensions::scaled.frametext = ScaleGUITrad(WidgetDimensions::unscaled.frametext);
|
||||
WidgetDimensions::scaled.textpanel = ScaleGUITrad(WidgetDimensions::unscaled.textpanel);
|
||||
WidgetDimensions::scaled.matrix = ScaleGUITrad(WidgetDimensions::unscaled.matrix);
|
||||
WidgetDimensions::scaled.shadebox = ScaleGUITrad(WidgetDimensions::unscaled.shadebox);
|
||||
WidgetDimensions::scaled.stickybox = ScaleGUITrad(WidgetDimensions::unscaled.stickybox);
|
||||
WidgetDimensions::scaled.debugbox = ScaleGUITrad(WidgetDimensions::unscaled.debugbox);
|
||||
WidgetDimensions::scaled.defsizebox = ScaleGUITrad(WidgetDimensions::unscaled.defsizebox);
|
||||
WidgetDimensions::scaled.resizebox = ScaleGUITrad(WidgetDimensions::unscaled.resizebox);
|
||||
WidgetDimensions::scaled.closebox = ScaleGUITrad(WidgetDimensions::unscaled.closebox);
|
||||
WidgetDimensions::scaled.captiontext = ScaleGUITrad(WidgetDimensions::unscaled.captiontext);
|
||||
WidgetDimensions::scaled.dropdowntext = ScaleGUITrad(WidgetDimensions::unscaled.dropdowntext);
|
||||
|
||||
WidgetDimensions::scaled.pressed = ScaleGUITrad(WidgetDimensions::unscaled.pressed);
|
||||
WidgetDimensions::scaled.vsep_normal = ScaleGUITrad(WidgetDimensions::unscaled.vsep_normal);
|
||||
WidgetDimensions::scaled.vsep_wide = ScaleGUITrad(WidgetDimensions::unscaled.vsep_wide);
|
||||
WidgetDimensions::scaled.hsep_normal = ScaleGUITrad(WidgetDimensions::unscaled.hsep_normal);
|
||||
WidgetDimensions::scaled.hsep_wide = ScaleGUITrad(WidgetDimensions::unscaled.hsep_wide);
|
||||
WidgetDimensions::scaled.hsep_indent = ScaleGUITrad(WidgetDimensions::unscaled.hsep_indent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate x and y coordinates for an aligned object within a window.
|
||||
* @param r Rectangle of the widget to be drawn in.
|
||||
|
@ -831,10 +910,7 @@ NWidgetBase *NWidgetBase::GetWidgetOfType(WidgetType tp)
|
|||
|
||||
void NWidgetBase::AdjustPaddingForZoom()
|
||||
{
|
||||
this->padding.left = ScaleGUITrad(this->uz_padding.left);
|
||||
this->padding.top = ScaleGUITrad(this->uz_padding.top);
|
||||
this->padding.right = ScaleGUITrad(this->uz_padding.right);
|
||||
this->padding.bottom = ScaleGUITrad(this->uz_padding.bottom);
|
||||
this->padding = ScaleGUITrad(this->uz_padding);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1273,4 +1273,6 @@ NWidgetContainer *MakeWindowNWidgetTree(const NWidgetPart *parts, int count, int
|
|||
|
||||
NWidgetBase *MakeCompanyButtonRows(int *biggest_index, int widget_first, int widget_last, Colours button_colour, int max_length, StringID button_tooltip);
|
||||
|
||||
void SetupWidgetDimensions();
|
||||
|
||||
#endif /* WIDGET_TYPE_H */
|
||||
|
|
|
@ -3356,6 +3356,7 @@ void ReInitWindow(Window *w, bool zoom_changed)
|
|||
/** Re-initialize all windows. */
|
||||
void ReInitAllWindows(bool zoom_changed)
|
||||
{
|
||||
SetupWidgetDimensions();
|
||||
NWidgetLeaf::InvalidateDimensionCache(); // Reset cached sizes of several widgets.
|
||||
NWidgetScrollbar::InvalidateDimensionCache();
|
||||
|
||||
|
|
|
@ -34,6 +34,36 @@ enum FrameFlags {
|
|||
|
||||
DECLARE_ENUM_AS_BIT_SET(FrameFlags)
|
||||
|
||||
struct WidgetDimensions {
|
||||
RectPadding imgbtn;
|
||||
RectPadding inset;
|
||||
RectPadding scrollbar;
|
||||
RectPadding bevel; ///< Widths of bevel border.
|
||||
RectPadding fullbevel; ///< Always-scaled bevel border.
|
||||
RectPadding framerect; ///< Offsets within frame area.
|
||||
RectPadding frametext; ///< Offsets within a text frame area.
|
||||
RectPadding textpanel; ///< Text panel?
|
||||
RectPadding matrix; ///< Offsets within a matrix cell.
|
||||
RectPadding shadebox;
|
||||
RectPadding stickybox;
|
||||
RectPadding debugbox;
|
||||
RectPadding defsizebox;
|
||||
RectPadding resizebox;
|
||||
RectPadding closebox;
|
||||
RectPadding captiontext; ///< Offsets of text within a caption.
|
||||
RectPadding dropdowntext; ///< Offsets of text within a dropdown widget.
|
||||
|
||||
int pressed; ///< Offset for contents of depressed widget.
|
||||
int vsep_normal; ///< Normal vertical spacing.
|
||||
int vsep_wide; ///< Wide vertical spacing.
|
||||
int hsep_normal; ///< Normal horizontal spacing.
|
||||
int hsep_wide; ///< Wide horizontal spacing.
|
||||
int hsep_indent; ///< Width of identation for tree layouts.
|
||||
|
||||
static const WidgetDimensions unscaled; ///< Unscaled widget dimensions.
|
||||
static WidgetDimensions scaled; ///< Widget dimensions scaled for current zoom level.
|
||||
};
|
||||
|
||||
/** Distances used in drawing widgets. */
|
||||
enum WidgetDrawDistances {
|
||||
/* WWT_IMGBTN(_2) */
|
||||
|
|
Loading…
Reference in New Issue