Steam Skins: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
 
(52 intermediate revisions by 15 users not shown)
Line 1: Line 1:
The most important thing about skinning in the new Steam is the change of the skinning method. Instead of using <code>TrackerScheme.res</code>, <code>steamscheme.res</code> is now used. The <code>steamscheme.res</code> file is located in the <code>resource</code> folder in the Steam root folder. It should be copied to <code>skins\''YourSkinName''\resource</code>. Like everything else, images are uncompressed 24-bit [[TGA]] files.
{{No longer relevant}}{{toc-right}}
__TOC__
The following is documentation on the structure of <code>sourcescheme.res</code>.
=Scheme=
==Colors==
In this section is where all of the colors used by the Controls and drawing are defined.


'''Syntax:''' <code>"colorname" "r g b a"</code>
Over the years Steam has been slowly replacing aspects of the Steam Client from VGUI to a web-based framework called [https://bitbucket.org/chromiumembedded/cef Chromium Embedded Framework]


'''Example:''' <code>"GrayBG" "73 78 73 255"</code>
On April 27th, 2023, with the Steam client now being rendered using CEF, Steam skins '''completely lost support''' and only work through community based patching methods.


==BaseSettings==
==History==
Below are all keyvalue definitions that are utilized by controls.
Removal of skin support for the Friends List on [https://steamcommunity.com/app/593110/eventcomments/1633040337767599626/ July 24th 2018]
{|style="width:100%;"
! Key name !! Description
|-
|colspan="2"|
===Borders===
|-
| Border.Bright || Lit side of a control
|-
| Border.Dark || Dark/unlit side of a control
|-
| Border.Selection || Additional border color for displaying the default/selected button
|-
|colspan="2"|
===CheckButton===
|-
| CheckButton.BgColor ||
|-
| CheckButton.Border1 || Left checkbutton border
|-
| CheckButton.Border2 || Right checkbutton border
|-
| CheckButton.Check || Color of the check itself
|-
|colspan="2"|
===DragDrop===
|-
| DragDrop.DragFrame ||
|-
| DragDrop.DropFrame ||
|-
|colspan="2"|
===Frame===
|-
| Frame.ClientInsetX || Where to start the title bar (x)
|-
| Frame.ClientInsetY || Where to start the title bar (y)
|-
| Frame.BgColor ||
|-
| Frame.OutOfFocusBgColor ||
|-
| Frame.FocusTransitionEffectTime || Time for a window to fade on focus
|-
| Frame.TransitionEffectTime || Time for a window to fade on open/close.
|-
| Frame.AutoSnapRange ||
|-
| Frame.UsesAlphaBlending ||
|-
| FrameTitleBar.Font ||
|-
| FrameTitleBar.SmallFont ||
|-
| FrameSystemButton.Icon || Top left corner icon
|-
| FrameSystemButton.DisabledIcon || Top left corner disabled icon
|-
|colspan="2"|
===ListPanel===
|-
| ListPanel.TextColor ||
|-
| ListPanel.BgColor ||
|-
| ListPanel.SelectedTextColor ||
|-
| ListPanel.SelectedBgColor ||
|-
| ListPanel.SelectedOutOfFocusBgColor ||
|-
| ListPanel.DisabledTextColor ||
|-
| ListPanel.DisabledSelectedTextColor ||
|-
| ListPanel.EmptyListInfoTextColor ||
|-
| ListPanel.RowHeight ||
|-
| ListPanel.PerPixelScrolling ||
|-
|colspan="2"|
===Menu===
|-
| Menu.TextInset ||
|-
|colspan="2"|
===Panel===
|-
| Panel.FgColor ||
|-
| Panel.BgColor ||
|-
|colspan="2"|
===PropertySheet===
|-
| PropertySheet.TransitionEffectTime || Time to change from one tab to another
|-
| PropertySheet.TabGap ||
|-
|colspan="2"|
===RichText===
|-
| RichText.InsetX || Margin (x)
|-
| RichText.InsetY || Margin (y)
|-
| RichText.TextColor ||
|-
| RichText.BgColor ||
|-
| RichText.SelectedTextColor ||
|-
| RichText.SelectedBgColor ||
|-
|colspan="2"|


===ScrollBar===
Removal of skin support for the Library on [https://steamcommunity.com/app/593110/eventcomments/1640926712932113346/ October 30th 2019]
|-
| ScrollBar.Wide ||
|-
|colspan="2"|
===SectionedListPanel===
|-
| SectionedListPanel.CollapserWidth ||
|-
|colspan="2"|
===TextEntry===
|-
| TextEntry.CursorColor ||
|-
|colspan="2"|
===GamesList===
|-
| GamesList.InstalledAppColor ||
|-
| GamesList.NotInstalledAppColor ||
|-
| GamesList.ReadyStatusColor ||
|-
| GamesList.UpdatingStatusColor ||
|-
| GamesList.NotInstalledStatusColor ||
|}


==Controls==
Removal of skin support for the main window frame and all additional windows in Steam Beta on [https://steamcommunity.com/groups/SteamClientBeta/eventcomments/3826413850812502632/ April 27th 2023]
A control documented specifies a set of ''Override Keys'' in their section listing all of the functioning KeyValues entries for a specific control. What ''Override Keys'' do is replace the ''Base Keys'' when a specific condition is met. Once the condition is destroyed, the control converts back to the ''Base Keys''.
===BaseControls===
* [[#Panel_2|Panel]]
* [[#Button|Button]]
* GripPanel
* [[#CheckButton_2|CheckButton]]
* CheckButtonList
* [[#ComboBox|ComboBox]]
* [[#ComboBoxButton|ComboBoxButton]]
* ContextLabel
* Divider
* Frame
* [[#FrameButton|FrameButton]]
* FrameSystemButton
* [[#FrameTitle|FrameTitle]]
* [[#FrameBRGripPanel|FrameBRGripPanel]]
* GraphPanel
* HTML
* [[#HTMLInterior|HTMLInterior]]
* [[#Button|icon_button_news]]
* [[#Button|icon_button_friends]]
* [[#Button|icon_button_servers]]
* [[#Button|icon_button_settings]]
* [[#Button|icon_button_support]]
* [[#Button|icon_button_MiniMeShrink]]
* Label
* LabelDull
* LabelBright
* ListPanel
* [[#ListPanelInterior|ListPanelInterior]]
* ListPanelColumnHeader
* ListViewPanel
* Menu
* MenuBar
* [[#MenuBarItem|MenuBarItem]]
* [[#MenuItem|MenuItem]]
* MenuSeparator
* PanelListPanel
* PanelHorizListPanel
* [[#PageTab|PageTab]]
* PropertyPage
* SteamGamesPage
* PropertySheet
* ProgressBar
* [[#RadioButton|RadioButton]]
* RichText
* [[#RichTextInterior|RichTextInterior]]
* [[#ScrollBarSlider|ScrollBarSlider]]
* [[#ScrollBarButton|ScrollBarButton]]
* SectionedListPanel
* [[#SectionedListPanelInterior|SectionedListPanelInterior]]
* [[#SectionedListPanelItem|SectionedListPanelItem]]
* SectionedListPanelHeader
* SectionedListPanelCollapser
* [[#Slider|Slider]]
* SplitterHandle
* [[#TextEntry_2|TextEntry]]
* [[#ToggleButton|ToggleButton]]
* TooltipWindow
* TreeView
* TreeNode
* TreeViewSubPanel
* TreeNodeText
* URLLabel
* WizardPanel
* WizardSubPanel
====Panel====
Here is a set of ''Base Keys'' which help define what controls look like.  These keys are inherited by all controls but are only used by some.
{|
! Key name !! Description
|-
| textcolor ||
|-
| selectedtextcolor ||
|-
| shadowtextcolor ||
|-
| bgcolor ||
|-
| selectedbgcolor ||
|-
| appearance || Border must be defined as a subkey in the [[#Borders_2|Borders]] KeyValues
|-
| image || TGA image to be drawn on this control
|}


====Button====
The above update was later pushed to all users since [https://steamcommunity.com/app/593110/eventcomments/5514142341086067567/ June 15, 2023], completely removing skin support for all common windows.
* mousedown
* keyfocus
* disabled
* keyfocus_mouseover
* defaultbutton
* defaultbutton_mouseover


====CheckButton====
== Can I Still Install themes? ==
* mousedown
Yes, Steam themes still exist! And the community is still thriving!
* selected
* selected_mouseover
* selected_mousedown
* selected_keyfocus
* selected_keyfocus_mouseover
* keyfocus
* keyfocus_mouseover
* disabled
* selected_disabled


====ComboBox====
== How to install themes in {{CURRENTYEAR}}==
* mouseover
* mousedown
* keyfocus
* disabled


====ComboBoxButton====
As the official skin support (for [[VGUI]]) has been removed, with the new CEF-based UI not providing any official way of changing skins, it was unofficially replaced by '''[https://steambrew.app Millennium for Steam]''' '''For Windows 10+'''<br>
* mouseover
Millennium is an open source patcher that allows skins/themes after April 27th 2023. [https://github.com/ShadowMonster99/millennium-steam-patcher view source]
* disabled


====FrameButton====
[[File:SteamTheme2024.png|thumb|left|Millennium for Steam with a dark version of the Steam Client loaded [https://millennium.web.app/theme?id=F8h9ZhwOdoNygNcAfjIZ from here] ]]
* mousedown
{{clr}}
* keyfocus
* outoffocus


====FrameTitle====
==Setting Up==
* outoffocus
Refer to this page [https://github.com/ShadowMonster99/millennium-steam-patcher/?tab=readme-ov-file#installation Installation Guide]


====FrameBRGripPanel====
== Finding Themes ==  
* mouseover
The main sources for up-to-date themes are found on this website
* mousedown
* https://steambrew.app/themes
* disabled


====HTMLInterior====
== Discord Community ==
* scrollbar_visible
* https://steambrew.app/discord


====ListPanelInterior====
* scrollbar_visible
====MenuBarItem====
* mouseover
* mousedown
* selected
====MenuItem====
* mouseover
* disabled
====PageTab====
* mousedown
* active
* keyfocus
* keyfocus_mouseover
====RadioButton====
* mousedown
* selected
* selected_mouseover
* selected_mousedown
* selected_keyfocus
* selected_keyfocus_mouseover
* keyfocus
* keyfocus_mouseover
* disabled
====RichTextInterior====
* scrollbar_visible
====ScrollBarSlider====
* slider
* slider_horiz
====ScrollBarButton====
* mouseover
* mousedown
====SectionedListPanelInterior====
* scrollbar_visible
====SectionedListPanelItem====
* selected
====Slider====
* disabled
====TextEntry====
* disabled
====ToggleButton====
* mousedown
* mouseover
* keyfocus
* selected
* selected_mouseover
* selected_mousedown
* selected_keyfocus
* selected_keyfocus_mouseover
* disabled
===WizardSubPanelControls===
This Controls section defines property overrides for BaseControls on controls contained inside a wizard.
===PropertyPageControls===
This Controls section defines property overrides for BaseControls on controls contained inside a PropertyPage.
==LayoutTemplates==
This describes the default layouts for controls that create and control their own children works just like a normal settings .res file, except only positioning attributes are recognized. Below is a sectioned list of specific control children.
Here's a list of settings that can be added:
* xpos
* ypos
* wide
* tall
* AutoResize
* PinCorner
{{note|xpos and ypos allow their value to have r prepended to them.  With an r, the value will come from the opposite side (e.g. xpos will be set from the right, not left).}}
===Frame===
* frame_menu
* frame_title
* frame_captiongrip
* frame_minimize
* frame_close
* frame_brGrip
===PropertyDialog===
* sheet
* ApplyButton
* CancelButton
* OKButton
===WizardPanel===
* subpanel
* PrevButton
* NextButton
* CancelButton
* FinishButton
==Fonts==
This section describes the syntax of a font declaration.
"'''A'''"
{
"1"
{
"name" "'''B'''"
"tall" "'''C'''"
"weight" "'''D'''"
"underline" "'''E'''"
"antialias" "'''F'''"
"symbol" "'''G'''"
}
}
;A:This is what controls refer to as their font.  If you set a Control's font setting to this, it will use the information in this KeyValues set.
;B:This is the actual name of the font contained in a ttf file. Custom fonts go in the resource folder for the skin.
;C:This is the height of the font in pixels. The width will keep the same ratio.
;D:The weight is how bold the font will appear.
;E:Draw a line under all text including spaces.
;F:If set, text edges will be anti-aliased.
;G:Set this if the font specified is a symbol font (e.g. Marlett).
==Borders==
All borderes referenced by the Controls definitions and Controls settings should be defined in this file. A border can be defined as an alias of another border by having the keyname being the border and the value being the other border.
It is necessary to define borders using the following syntax:
'''A'''
{
"inset" "'''B'''"
"backgroundtype" "'''C'''"
"corner_rounding" "'''D'''"
render
{
'''E'''
}
render_bg
{
'''E'''
}
}
;A:This is the name of the border being defined.
;B:This is the margins of the control in format <code>"Left Top Right Bottom"</code>.
;C:The background type can be 0 for filled background, 1 for textured background, and 2 for solid background with smooth corners.
;D:This is the aliased corner rounding size in pixels.
;E:See [[#Draw Procedures|below]].  The difference between render and render_bg is the order.  <code>render_bg</code> is drawn before the control contents, while <code>render</code> is drawn after.
===Draw Procedures===
To define a draw procedure, the keyname must be a filler, such as <code>"0"</code>.  For the value, the following function calls are allowed:
* image
* fill
* gradient
* corner
* dashedrect
The draw procedures allow you to set a location in the bordered Control using the x0, x1, y0, and y1 variables.
====image====
'''Syntax:''' <code>"image( Left, Top, Right, Bottom, [[TGA]] )"</code>
The TGA parameter should specify a TGA relative to the Steam folder or skins folder without the extension appended.
'''Example:''' <code>"image( x0 + 4, y0 + 4, x0 + 20, y0 + 20, resource/borders/ScrollButton_mousedown )"</code>
====fill====
'''Syntax:''' <code>"fill( Left, Top, Right, Bottom, Color )"</code>
'''Example:''' <code>"fill( x0 + 1, y0 + 1, x1 - 2, y1 - 1, ClayBG )"</code>
====gradient====
'''Syntax:''' <code>"gradient( Left, Top, Right, Bottom, TopColor, BottomColor )"</code>
'''Example:''' <code>"gradient( x0, y1 - 40, x1, y1, LightClayBG, ClaySheetBottom )"</code>
====corner====
'''Syntax:''' <code>"corner( Left, Top, Right, Bottom, Color )"</code>
{{note|The direction the corner is drawn depends on the direction the position values go from Left to Right and Top to Bottom.}}
'''Example:''' <code>"corner( x1 - 3, y1 - 3, x1, y1, DarkClayBG )"</code>
====dashedrect====
'''Syntax:''' <code>"dashedrect( Left, Top, Right, Bottom, Color )"</code>
'''Example:''' <code>"dashedrect( x0 + 3, y0 + 3, x1 - 4, y1 - 2, BorderSelection )"</code>
[[Category:Steam]]
[[Category:Steam]]
=Resource=
This section will focus on changing the specific dialog settings to have the ability for more customization.
==Source Cited==
This section will present visualizations of specific res files which are contained in the winui.[[GCF|gcf]] file.
===Steam\cached\aboutdialog.res===
[[Image:Res...Steam..cached..aboutdialog.jpg]]
===Steam\cached\BackupCompletionPage.res===
[[Image:Res...Steam..cached..BackupCompletionPage.jpg]]
===Steam\cached\BackupCopyFilesPage.res===
[[Image:Res...Steam..cached..BackupCopyFilesPage.jpg]]
===Steam\cached\BackupSelectDirectoryPage.res===
[[Image:Res...Steam..cached..BackupSelectDirectoryPage.jpg]]
===Steam\cached\BackupSelectGamesPage.res===
[[Image:Res...Steam..cached..BackupSelectGamesPage.jpg]]
===Steam\cached\BackupSelectOptionsPage.res===
[[Image:Res...Steam..cached..BackupSelectOptionsPage.jpg]]
===Steam\cached\BandwidthUsageDialog.res===
[[Image:Res...Steam..cached..BandwidthUsageDialog.jpg]]
===Steam\cached\gamespage.res===
[[Image:Res...Steam..cached..gamespage.jpg]]
[[Image:Res...Steam..cached..gamespage_2.jpg]]
===Steam\cached\registersubintro.res===
[[Image:Res...Steam..cached..registersubintro.jpg]]
===Steam\cached\SteamRootDialog.res===
[[Image:Res...Steam..cached..SteamRootDialog.jpg]]
===Steam\cached\steamrootdialog_small.res===
[[Image:Res...Steam..cached..steamrootdialog_small.jpg]]
===Steam\cached\storepage.res===
[[Image:Res...Steam..cached..storepage.jpg]]
===Public\SteamLoginDialog.res===
[[Image:Res...Public..SteamLoginDialog.jpg]]
===Public\SubForgotPasswordAccountName.res===
[[Image:Res...Public..SubForgotPasswordAccountName.jpg]]
===Public\SubForgotPasswordCDKey.res===
[[Image:Res...Public..SubForgotPasswordCDKey.jpg]]
===Public\SubForgotPasswordEmailAddress.res===
[[Image:Res...Public..SubForgotPasswordEmailAddress.jpg]]
===Public\SubForgotPasswordOther.res===
[[Image:Res...Public..SubForgotPasswordOther.jpg]]
===Public\SubForgotPasswordResetType.res===
[[Image:Res...Public..SubForgotPasswordResetType.jpg]]
===Public\SubForgotPasswordUserName.res===
[[Image:Res...Public..SubForgotPasswordUserName.jpg]]
===Public\SubPanelWelcomeCreateNewAccountAccountName.res===
[[Image:Res...Public..SubPanelWelcomeCreateNewAccountAccountName.jpg]]
===Public\SubPanelWelcomeCreateNewAccountEmail.res===
[[Image:Res...Public..SubPanelWelcomeCreateNewAccountEmail.jpg]]
===Public\SubPanelWelcomeCreateNewAccountMultiple.res===
[[Image:Res...Public..SubPanelWelcomeCreateNewAccountMultiple.jpg]]

Latest revision as of 07:55, 17 May 2025

Over the years Steam has been slowly replacing aspects of the Steam Client from VGUI to a web-based framework called Chromium Embedded Framework

On April 27th, 2023, with the Steam client now being rendered using CEF, Steam skins completely lost support and only work through community based patching methods.

History

Removal of skin support for the Friends List on July 24th 2018

Removal of skin support for the Library on October 30th 2019

Removal of skin support for the main window frame and all additional windows in Steam Beta on April 27th 2023

The above update was later pushed to all users since June 15, 2023, completely removing skin support for all common windows.

Can I Still Install themes?

Yes, Steam themes still exist! And the community is still thriving!

How to install themes in 2025

As the official skin support (for VGUI) has been removed, with the new CEF-based UI not providing any official way of changing skins, it was unofficially replaced by Millennium for Steam For Windows 10+
Millennium is an open source patcher that allows skins/themes after April 27th 2023. view source

Millennium for Steam with a dark version of the Steam Client loaded from here

Setting Up

Refer to this page Installation Guide

Finding Themes

The main sources for up-to-date themes are found on this website

Discord Community