mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-11 18:10:14 +00:00
Change: Improve news window layouts.
* Use appropriate container widget nesting with padding, instead of single-sided padding. * Use layer widget to allow main news message to overlay close box and date widgets, to more closely match the old fixed-pixel layout.
This commit is contained in:
parent
60f1618cc7
commit
910dd65710
145
src/news_gui.cpp
145
src/news_gui.cpp
@ -101,15 +101,25 @@ static TileIndex GetReferenceTile(NewsReferenceType reftype, uint32_t ref)
|
|||||||
/* Normal news items. */
|
/* Normal news items. */
|
||||||
static constexpr NWidgetPart _nested_normal_news_widgets[] = {
|
static constexpr NWidgetPart _nested_normal_news_widgets[] = {
|
||||||
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
||||||
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
|
NWidget(NWID_VERTICAL), SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1),
|
NWidget(NWID_LAYER),
|
||||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
/* Layer 1 */
|
||||||
NWidget(NWID_VERTICAL),
|
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1),
|
||||||
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetTextStyle(TC_BLACK, FS_SMALL),
|
NWidget(NWID_HORIZONTAL), SetPIPRatio(0, 1, 0),
|
||||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX),
|
||||||
|
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE),
|
||||||
|
SetDataTip(STR_JUST_DATE_LONG, STR_NULL),
|
||||||
|
SetTextStyle(TC_BLACK, FS_SMALL),
|
||||||
|
SetAlignment(SA_RIGHT | SA_TOP),
|
||||||
|
EndContainer(),
|
||||||
|
EndContainer(),
|
||||||
|
/* Layer 2 */
|
||||||
|
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MESSAGE),
|
||||||
|
SetMinimalTextLines(8, 0, FS_LARGE),
|
||||||
|
SetMinimalSize(400, 0),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_wide),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MESSAGE), SetMinimalSize(428, 154), SetPadding(0, 5, 1, 5),
|
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -123,18 +133,38 @@ static WindowDesc _normal_news_desc(
|
|||||||
/* New vehicles news items. */
|
/* New vehicles news items. */
|
||||||
static constexpr NWidgetPart _nested_vehicle_news_widgets[] = {
|
static constexpr NWidgetPart _nested_vehicle_news_widgets[] = {
|
||||||
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
||||||
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
|
NWidget(NWID_VERTICAL), SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
NWidget(NWID_VERTICAL),
|
NWidget(NWID_LAYER),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1),
|
/* Layer 1 */
|
||||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1),
|
||||||
|
NWidget(NWID_HORIZONTAL), SetPIPRatio(0, 1, 0),
|
||||||
|
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX),
|
||||||
|
EndContainer(),
|
||||||
|
EndContainer(),
|
||||||
|
/* Layer 2 */
|
||||||
|
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_VEH_TITLE),
|
||||||
|
SetFill(1, 1),
|
||||||
|
SetMinimalTextLines(2, 0, FS_LARGE),
|
||||||
|
SetMinimalSize(400, 0),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_wide),
|
||||||
|
SetDataTip(STR_EMPTY, STR_NULL),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_VEH_TITLE), SetFill(1, 1), SetMinimalSize(419, 55), SetDataTip(STR_EMPTY, STR_NULL),
|
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_VEH_BKGND), SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
EndContainer(),
|
NWidget(NWID_VERTICAL),
|
||||||
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_VEH_BKGND), SetPadding(0, 25, 1, 25),
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_NAME),
|
||||||
NWidget(NWID_VERTICAL),
|
SetMinimalTextLines(1, 0, FS_LARGE),
|
||||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_NAME), SetMinimalSize(369, 33), SetFill(1, 0),
|
SetMinimalSize(350, 0),
|
||||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_SPR), SetMinimalSize(369, 32), SetFill(1, 0),
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_wide),
|
||||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_INFO), SetMinimalSize(369, 46), SetFill(1, 0),
|
SetFill(1, 0),
|
||||||
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_SPR),
|
||||||
|
SetMinimalSize(350, 32),
|
||||||
|
SetFill(1, 0),
|
||||||
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_VEH_INFO),
|
||||||
|
SetMinimalTextLines(3, 0, FS_NORMAL),
|
||||||
|
SetMinimalSize(350, 0),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_wide),
|
||||||
|
SetFill(1, 0),
|
||||||
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
@ -150,20 +180,36 @@ static WindowDesc _vehicle_news_desc(
|
|||||||
/* Company news items. */
|
/* Company news items. */
|
||||||
static constexpr NWidgetPart _nested_company_news_widgets[] = {
|
static constexpr NWidgetPart _nested_company_news_widgets[] = {
|
||||||
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
||||||
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
|
NWidget(NWID_VERTICAL), SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
NWidget(NWID_VERTICAL),
|
NWidget(NWID_LAYER),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1),
|
/* Layer 1 */
|
||||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1),
|
||||||
|
NWidget(NWID_HORIZONTAL), SetPIPRatio(0, 1, 0),
|
||||||
|
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX),
|
||||||
|
EndContainer(),
|
||||||
|
EndContainer(),
|
||||||
|
/* Layer 2 */
|
||||||
|
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_TITLE),
|
||||||
|
SetFill(1, 1),
|
||||||
|
SetMinimalTextLines(1, 0, FS_LARGE),
|
||||||
|
SetMinimalSize(400, 0),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_normal),
|
||||||
|
SetDataTip(STR_EMPTY, STR_NULL),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_TITLE), SetFill(1, 1), SetMinimalSize(410, 20), SetDataTip(STR_EMPTY, STR_NULL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
EndContainer(),
|
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(2),
|
||||||
NWidget(NWID_HORIZONTAL), SetPadding(0, 1, 1, 1),
|
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MGR_FACE),
|
||||||
NWidget(NWID_VERTICAL),
|
SetFill(0, 0),
|
||||||
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MGR_FACE), SetMinimalSize(93, 119), SetPadding(2, 6, 2, 1),
|
SetMinimalSize(93, 119),
|
||||||
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MGR_NAME), SetMinimalSize(93, 24), SetPadding(0, 0, 0, 1),
|
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MGR_NAME),
|
||||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
SetFill(0, 1),
|
||||||
|
SetMinimalTextLines(2, 0),
|
||||||
|
EndContainer(),
|
||||||
|
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_COMPANY_MSG),
|
||||||
|
SetFill(1, 1),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_wide),
|
||||||
|
SetMinimalSize(300, 0),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_COMPANY_MSG), SetFill(1, 1), SetMinimalSize(328, 150),
|
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
};
|
};
|
||||||
@ -178,16 +224,27 @@ static WindowDesc _company_news_desc(
|
|||||||
/* Thin news items. */
|
/* Thin news items. */
|
||||||
static constexpr NWidgetPart _nested_thin_news_widgets[] = {
|
static constexpr NWidgetPart _nested_thin_news_widgets[] = {
|
||||||
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
|
||||||
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
|
NWidget(NWID_VERTICAL), SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX), SetPadding(0, 0, 0, 1),
|
NWidget(NWID_LAYER),
|
||||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
/* Layer 1 */
|
||||||
NWidget(NWID_VERTICAL),
|
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1),
|
||||||
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetTextStyle(TC_BLACK, FS_SMALL),
|
NWidget(NWID_HORIZONTAL), SetPIPRatio(0, 1, 0),
|
||||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
NWidget(WWT_CLOSEBOX, COLOUR_WHITE, WID_N_CLOSEBOX),
|
||||||
|
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE),
|
||||||
|
SetDataTip(STR_JUST_DATE_LONG, STR_NULL),
|
||||||
|
SetTextStyle(TC_BLACK, FS_SMALL),
|
||||||
|
SetAlignment(SA_RIGHT | SA_TOP),
|
||||||
|
EndContainer(),
|
||||||
|
EndContainer(),
|
||||||
|
/* Layer 2 */
|
||||||
|
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_N_MESSAGE),
|
||||||
|
SetMinimalTextLines(3, 0, FS_LARGE),
|
||||||
|
SetMinimalSize(400, 0),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.hsep_indent, WidgetDimensions::unscaled.vsep_normal),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
|
NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetMinimalSize(426, 70),
|
||||||
|
SetPadding(WidgetDimensions::unscaled.fullbevel),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MESSAGE), SetMinimalSize(428, 48), SetFill(1, 0), SetPadding(0, 5, 0, 5),
|
|
||||||
NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetMinimalSize(426, 70), SetPadding(1, 2, 2, 2),
|
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -385,11 +442,6 @@ struct NewsWindow : Window {
|
|||||||
size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT));
|
size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_N_MGR_NAME:
|
|
||||||
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->data.get())->president_name);
|
|
||||||
str = STR_JUST_RAW_STRING;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WID_N_MESSAGE:
|
case WID_N_MESSAGE:
|
||||||
CopyInDParam(this->ni->params);
|
CopyInDParam(this->ni->params);
|
||||||
str = this->ni->string_id;
|
str = this->ni->string_id;
|
||||||
@ -559,6 +611,13 @@ struct NewsWindow : Window {
|
|||||||
ScrollWindowToTile(GetReferenceTile(ni->reftype1, ni->ref1), this, true); // Re-center viewport.
|
ScrollWindowToTile(GetReferenceTile(ni->reftype1, ni->ref1), this, true); // Re-center viewport.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NWidgetResizeBase *wid = this->GetWidget<NWidgetResizeBase>(WID_N_MGR_NAME);
|
||||||
|
if (wid != nullptr) {
|
||||||
|
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->data.get())->president_name);
|
||||||
|
int y = GetStringHeight(STR_JUST_RAW_STRING, wid->current_x);
|
||||||
|
if (wid->UpdateVerticalSize(y)) this->ReInit(0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1230,6 +1230,17 @@ constexpr NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uin
|
|||||||
return NWidgetPart{WPT_PADDING, NWidgetPartPaddings{left, top, right, bottom}};
|
return NWidgetPart{WPT_PADDING, NWidgetPartPaddings{left, top, right, bottom}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Widget part function for setting additional space around a widget.
|
||||||
|
* @param horizontal The padding on either side of the widget.
|
||||||
|
* @param vertical The padding above and below the widget.
|
||||||
|
* @ingroup NestedWidgetParts
|
||||||
|
*/
|
||||||
|
constexpr NWidgetPart SetPadding(uint8_t horizontal, uint8_t vertical)
|
||||||
|
{
|
||||||
|
return NWidgetPart{WPT_PADDING, NWidgetPartPaddings{horizontal, vertical, horizontal, vertical}};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Widget part function for setting additional space around a widget.
|
* Widget part function for setting additional space around a widget.
|
||||||
* @param r The padding around the widget.
|
* @param r The padding around the widget.
|
||||||
|
Loading…
Reference in New Issue
Block a user