Below you'll find an up-to-date list of all changes made to the skinning engine since the release of Kodi Matrix.
SettingsScreenCalibration.xml- Improvements to screen calibration window (details)
new window
changed controls
NOTE: This will break your skin's SettingsScreenCalibration.xml unless you add
movingspeed
to your controls.
Estuary example
here.
new features
removed boolean
new boolean- System.Setting(hideunwatchedepisodethumbs) (details)
- Player.HasPerformedSeek(interval) (details)
new infolabels
new path- addons://default_binary_addons_source/ (details)
changed infolabels- Integer.* (details)
- bordertexture (details)
- ListItem.DateAdded (details)
- Player.Editlist was introduced to remove old Player.Cutlist (details)
- Added Player.Cuts (details)
- Added Player.Process(videoscantype) (details)
- Added Player.HasSceneMarkers infobool and Player.SceneMarkers infolabel (details)
DialogKeyboard.xml
new dialog
new controls
new builtin
Containers- infoupdate attribute for itemlayout / focusedlayout (details)
Windows/Dialogs- Allow skinners to define custom dialogs with modal type modality (details)
New game dialogs- In-game port setup dialog (20505 (PR))
- In-game and out-of-game savestate dialog (20913 (PR))
addon.xml
Please keep this thread clean. It should be an easy overview for skinners who are updating their skin for Kodi.
For discussions / feature requests / bug reports, please find (or create) the appropriate thread in the skin development forum.
2021-07-05 new addon:// path
on some platforms, binary addons can be installed from our addon repository.
on other platforms, binary addons come preinstalled with kodi.
to make it easy for skinners to create a shortcut to the right location (either 'my add-ons' or 'install from repository')
we've created a shortcut path that will take you there:
- addons://default_binary_addons_source/
example usage:
xml:
ActivateWindow(addonbrowser,addons://default_binary_addons_source/kodi.pvrclient,return)
pull-request:
https://github.com/xbmc/xbmc/pull/19928
commit:
https://github.com/xbmc/xbmc/commit/99f8...667e390154
2021-12-31 New texture attribute "infill"
The new texture attribute
infill
is available if the
border
attribute is set. It is a hint for the GUI engine to avoid drawing the center portion of a texture with a border. This is especially useful for
bordertexture
elements which are completely transparent in the center. The default behavior is the same as before. Only if
infill="false"
is set, the inner portion will be skipped. See the PR below for additional information.
Example:
<bordertexture border="21" infill="false">overlays/shadow.png</bordertexture>
If used correctly, this might give a performance boost on low powered devices by avoiding overdraw. In static analysis, the default skin Estuary renders up to 15% faster.
Pull-Request:
https://github.com/xbmc/xbmc/pull/20754
2022-01-02 - Added Player.Editlist infolabel to replace old Player.Cutlist
Player.Cutlist not only had a confusing name (it returns all edl edits and not just cuts) but also had a few issues:
- It didn't include EDL mutes
- It incorrectly included EDL cuts (which are not part of the playable timeline)
- If the file had EDL cuts all the other EDL edits were placed in the wrong location on the seekbar.
Player.Editlist was introduced to fix the aforementioned problems. For v20, Player.Cutlist will still be available and will return the exact same values as Player.Editlist. However, we plan to remove Player.Cutlist in v21.
Pull Request: https://github.com/xbmc/xbmc/pull/20768
Please change your Player.Cutlist usage to Player.Editlist.
2022-01-04 - Added Player.Cuts infolabel
Since Player.Cutlist (now deprecated) and Player.Editlist no longer present cuts on the ranges control, Player.Cuts was introduced as an alternative. Cuts (in estuary and estouchy) are displayed like chapters with small red marks (as the range is effectively removed from the video timeline).
Pull request:
https://github.com/xbmc/xbmc/pull/20783

2022-01-06 - Add Player.Process(videoscantype) infolabel
Returns the scan type identifier of the currently playing video
p (for progressive) or
i (for interlaced).
Used in Estuary in the VideoProcessInfo window to show the scantype of the video (note the p and i in the below screenshots)
Pull request: https://github.com/xbmc/xbmc/pull/20800
2022-01-06 - Added Player.HasSceneMarkers infobool and Player.SceneMarkers infolabel
SceneMarkers are EDL edits that behave similar to chapters - as they identify a specific position on video timeline. Users can skip to next scenes using
NextScene and
PrevScene builtin actions. More generically,
PlayerControl(Previous) and
PlayerControl(Next) already jump to the next (or previous) points of interest on a timeline, being them chapters or scenemarkers.
In estuary Player.SceneMarkers is being used to display small white boxes on the seekbar using the ranges control identifying the position of scene markers (identical to what already happened before for chapters). Player.HasSceneMarkers is being used to control the visibility of the Next and Previous OSD buttons if the file has scenemarkers (used to be hidden before).
Pull Request: https://github.com/xbmc/xbmc/pull/20799
2022-01-30 - Allow skinners to define custom dialogs with modal type modality
Before v20 any custom dialog defined within a skin which the visibility depended on visible conditions was automatically set as Modeless. If a dialog is modeless it can't catch input as the keystrokes/actions were sent to the underlying window. In v20 skinners now have a way to override this behaviour by setting `modality=modal` in the xml window/dialog definition. If the attribute is not provided or the value is different from "modal" the dialog continues to be modeless as before.
Example:
The following example ilustrates the need, it displays a button whenever a file is playing. Without modality="modal" you can't hit the button of this window
xml:
<?xml version="1.0" encoding="utf-8"?>
<window type="dialog" id="1114" modality="modal">
<visible>Window.IsActive(fullscreenvideo) + Player.Playing + !Window.IsActive(1109) + !Window.IsActive(videoosd) + !Integer.IsEqual(Window(home).Property(hitclicked),1)</visible>
<include>Animation_BottomSlide</include>
<depth>DepthMax</depth>
<zorder>0</zorder>
<defaultcontrol always="true">1</defaultcontrol>
<controls>
<control type="group">
<animation effect="fade" start="0" end="100" time="300">VisibleChange</animation>
<control type="button" id="1">
<description>Hit me if you can!</description>
<width>auto</width>
<bottom>150</bottom>
<left>200</left>
<height>110</height>
<label>Hit me if you can!</label>
<textoffsetx>40</textoffsetx>
<onclick>Notification(Ouch, Ouch!)</onclick>
<onclick>SetProperty(hitclicked,1,home)</onclick>
<align>center</align>
<texturefocus border="23" colordiffuse="button_focus">buttons/dialogbutton-fo.png</texturefocus>
<texturenofocus border="40">buttons/dialogbutton-nofo.png</texturenofocus>
</control>
</control>
</controls>
</window>
Pull-request: https://github.com/xbmc/xbmc/pull/20927
2022-02-12 New builtin function
this will allow skins to use the builtin color picker functionality of Kodi
the builtin takes 2 to 4 arguments:
- setting = Name of skin setting.
- header = Dialog header text.
- color = Hex value of the preselected color (optional).
- colormap = XML file containing color definitions (optional).
example:
Skin.Setcolor(bgcolor, 31234, FF00AB0C, special://skin/extras/prettycolors.xml)
pull-request:
https://github.com/xbmc/xbmc/pull/20916
commit:
https://github.com/xbmc/xbmc/commit/a5f1...d762fa628f