mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
275 lines
12 KiB
C#
275 lines
12 KiB
C#
using Robust.Client.Graphics;
|
|
using Robust.Client.ResourceManagement;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.CustomControls;
|
|
using Robust.Shared.Graphics;
|
|
using Robust.Shared.Maths;
|
|
using static Robust.Client.UserInterface.StylesheetHelpers;
|
|
|
|
namespace Robust.Client.UserInterface.Stylesheets;
|
|
|
|
public sealed class DefaultStylesheet
|
|
{
|
|
public Stylesheet Stylesheet { get; private set; } = default!;
|
|
|
|
public DefaultStylesheet(IResourceCache res, IUserInterfaceManager userInterfaceManager)
|
|
{
|
|
var notoSansFont = res.GetResource<FontResource>("/EngineFonts/NotoSans/NotoSans-Regular.ttf");
|
|
var notoSansFont12 = new VectorFont(notoSansFont, 12);
|
|
var notoSansMonoFont = res.GetResource<FontResource>("/EngineFonts/NotoSans/NotoSansMono-Regular.ttf");
|
|
var notoSansMono12 = new VectorFont(notoSansMonoFont, 12);
|
|
|
|
|
|
var theme = userInterfaceManager.CurrentTheme;
|
|
|
|
var scrollBarNormal = new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("scrollBarDefault",Color.FromHex("#80808059")),
|
|
ContentMarginLeftOverride = 10,
|
|
ContentMarginTopOverride = 10
|
|
};
|
|
|
|
var scrollBarHovered = new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("scrollBarHovered",Color.FromHex("#8C8C8C59")),
|
|
ContentMarginLeftOverride = 10,
|
|
ContentMarginTopOverride = 10
|
|
};
|
|
|
|
var scrollBarGrabbed = new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("scrollBarGrabbed",Color.FromHex("#8C8C8C59")),
|
|
ContentMarginLeftOverride = 10,
|
|
ContentMarginTopOverride = 10,
|
|
};
|
|
|
|
Stylesheet = new Stylesheet(new StyleRule[]
|
|
{
|
|
/*
|
|
* Debug console and other monospace things.
|
|
*/
|
|
|
|
Element().Class("monospace")
|
|
.Prop("font", notoSansMono12),
|
|
|
|
/*
|
|
* OS Window defaults
|
|
*/
|
|
|
|
Element<WindowRoot>()
|
|
.Prop("background", theme.ResolveColorOrSpecified("rootBackground", Color.Black)),
|
|
|
|
/*
|
|
* Scrollbars
|
|
*/
|
|
|
|
// VScrollBar grabber normal
|
|
Element<VScrollBar>()
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarNormal),
|
|
|
|
// VScrollBar grabber hovered
|
|
Element<VScrollBar>().Pseudo(ScrollBar.StylePseudoClassHover)
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarHovered),
|
|
|
|
// VScrollBar grabber grabbed
|
|
Element<VScrollBar>().Pseudo(ScrollBar.StylePseudoClassGrabbed)
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarGrabbed),
|
|
|
|
// HScrollBar grabber normal
|
|
Element<HScrollBar>()
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarNormal),
|
|
|
|
// HScrollBar grabber hovered
|
|
Element<HScrollBar>().Pseudo(ScrollBar.StylePseudoClassHover)
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarHovered),
|
|
|
|
// HScrollBar grabber grabbed
|
|
Element<HScrollBar>().Pseudo(ScrollBar.StylePseudoClassGrabbed)
|
|
.Prop(ScrollBar.StylePropertyGrabber, scrollBarGrabbed),
|
|
|
|
/*
|
|
* UI Window Defaults
|
|
*/
|
|
|
|
// Background
|
|
Element().Class(DefaultWindow.StyleClassWindowPanel)
|
|
.Prop("panel", new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("windowBackground", Color.FromHex("#111111")),
|
|
BorderColor = theme.ResolveColorOrSpecified("windowBorder", Color.FromHex("#444444")),
|
|
BorderThickness = new Thickness(1),
|
|
}),
|
|
|
|
// Header
|
|
Element().Class(DefaultWindow.StyleClassWindowHeader)
|
|
.Prop(PanelContainer.StylePropertyPanel, new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("windowHeader",Color.FromHex("#636396")),
|
|
BorderColor = theme.ResolveColorOrSpecified("windowBorder", Color.FromHex("#444444")),
|
|
BorderThickness = new Thickness(0, 0, 0, 1),
|
|
Padding = new Thickness(1),
|
|
}),
|
|
|
|
/*
|
|
* Window close button
|
|
*/
|
|
|
|
Element().Class(DefaultWindow.StyleClassWindowCloseButton)
|
|
// Button texture
|
|
.Prop(TextureButton.StylePropertyTexture, theme.ResolveTexture("cross"))
|
|
// Normal button color
|
|
.Prop(Control.StylePropertyModulateSelf, theme.ResolveColorOrSpecified("windowCloseButton", Color.FromHex("#FFFFFF"))),
|
|
|
|
// Close button hover coloring.
|
|
Element().Class(DefaultWindow.StyleClassWindowCloseButton).Pseudo(TextureButton.StylePseudoClassHover)
|
|
.Prop(Control.StylePropertyModulateSelf, theme.ResolveColorOrSpecified("windowCloseButtonHover", Color.FromHex("#FF7F7F"))),
|
|
|
|
Element().Class(DefaultWindow.StyleClassWindowCloseButton).Pseudo(TextureButton.StylePseudoClassPressed)
|
|
.Prop(Control.StylePropertyModulateSelf, theme.ResolveColorOrSpecified("windowCloseButtonPressed", Color.FromHex("#FF0000"))),
|
|
|
|
/*
|
|
* Font defaults
|
|
*/
|
|
|
|
Element()
|
|
.Prop("font", notoSansFont12)
|
|
.Prop("font-color", Color.White),
|
|
|
|
/*
|
|
* Buttons
|
|
*/
|
|
|
|
// Button style normal
|
|
Element<ContainerButton>().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassNormal)
|
|
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("buttonBackground", Color.FromHex("#171717")),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("buttonBorder", Color.FromHex("#444444")),
|
|
Padding = new Thickness(3),
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
}),
|
|
|
|
// Button style hovered
|
|
Element<ContainerButton>().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassHover)
|
|
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("buttonBackgroundHovered", Color.FromHex("#272727")),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("buttonBorderHovered", Color.FromHex("#444444")),
|
|
Padding = new Thickness(3),
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
}),
|
|
|
|
// Button style pressed
|
|
Element<ContainerButton>().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassPressed)
|
|
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("buttonBackgroundPressed", Color.FromHex("#173717")),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("buttonBorderPressed", Color.FromHex("#447044")),
|
|
Padding = new Thickness(3),
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
}),
|
|
|
|
// Button style disabled
|
|
Element<ContainerButton>().Class(ContainerButton.StyleClassButton).Pseudo(ContainerButton.StylePseudoClassDisabled)
|
|
.Prop(ContainerButton.StylePropertyStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("buttonBackgroundDisabled", Color.FromHex("#333333")),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("buttonBorderDisabled", Color.FromHex("#222222")),
|
|
Padding = new Thickness(3),
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
}),
|
|
|
|
/*
|
|
* Checkbox
|
|
*/
|
|
|
|
// CheckBox unchecked
|
|
Element<TextureRect>().Class(CheckBox.StyleClassCheckBox)
|
|
.Prop(TextureRect.StylePropertyTexture, Texture.Black), // TODO: Add actual texture instead of this.
|
|
|
|
// CheckBox unchecked
|
|
Element<TextureRect>().Class(CheckBox.StyleClassCheckBox, CheckBox.StyleClassCheckBoxChecked)
|
|
.Prop(TextureRect.StylePropertyTexture, Texture.White), // TODO: Add actual texture instead of this.
|
|
|
|
/*
|
|
* LineEdit
|
|
*/
|
|
|
|
Element<LineEdit>()
|
|
// background color
|
|
.Prop(LineEdit.StylePropertyStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("lineEditBackground", Color.FromHex("#000000")),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("lineEditBorder", Color.FromHex("#444444")),
|
|
Padding = new Thickness(3),
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
})
|
|
// default font color
|
|
.Prop("font-color", Color.White)
|
|
.Prop("cursor-color", Color.White),
|
|
|
|
// LineEdit non-editable text color
|
|
Element<LineEdit>().Class(LineEdit.StyleClassLineEditNotEditable)
|
|
.Prop("font-color", theme.ResolveColorOrSpecified("lineEditUneditableText", Color.FromHex("#444444"))),
|
|
|
|
// LineEdit placeholder text color
|
|
Element<LineEdit>().Pseudo(LineEdit.StylePseudoClassPlaceholder)
|
|
.Prop("font-color", theme.ResolveColorOrSpecified("lineEditPlaceholderText", Color.FromHex("#7d7d7d"))),
|
|
|
|
/*
|
|
* TabContainer
|
|
*/
|
|
|
|
Element<TabContainer>()
|
|
// Panel style
|
|
.Prop(TabContainer.StylePropertyPanelStyleBox, new StyleBoxFlat
|
|
{
|
|
BackgroundColor = theme.ResolveColorOrSpecified("tabContainerBackground", Color.Black),
|
|
BorderThickness = new Thickness(1),
|
|
BorderColor = theme.ResolveColorOrSpecified("tabContainerBorder", Color.FromHex("#444444")),
|
|
})
|
|
// Active tab style
|
|
.Prop(TabContainer.StylePropertyTabStyleBox, new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("tabContainerActiveTabBackground", Color.FromHex("#173717")),
|
|
BorderColor = theme.ResolveColorOrSpecified("tabContainerActiveTabBorder", Color.FromHex("#447044")),
|
|
BorderThickness = new Thickness(1, 1, 1, 0),
|
|
PaddingLeft = 1,
|
|
PaddingRight = 1,
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
})
|
|
// Inactive tab style
|
|
.Prop(TabContainer.StylePropertyTabStyleBoxInactive, new StyleBoxFlat {
|
|
BackgroundColor = theme.ResolveColorOrSpecified("tabContainerInactiveTabBackground", Color.FromHex("#173717")),
|
|
BorderColor = theme.ResolveColorOrSpecified("tabContainerInactiveTabBorder", Color.FromHex("#447044")),
|
|
BorderThickness = new Thickness(1, 1, 1, 0),
|
|
PaddingLeft = 1,
|
|
PaddingRight = 1,
|
|
ContentMarginBottomOverride = 3,
|
|
ContentMarginLeftOverride = 5,
|
|
ContentMarginRightOverride = 5,
|
|
ContentMarginTopOverride = 3,
|
|
})
|
|
.Prop("font", notoSansFont12),
|
|
});
|
|
}
|
|
}
|