diff options
author | lordjaxom <lordjaxom> | 2005-01-02 20:58:41 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2005-01-02 20:58:41 +0000 |
commit | 83a591f16e0b17d3ba9655035407e7982a56abce (patch) | |
tree | d3baea2f5171f2644db5d1f64bcca66e56108ca5 /Docs | |
parent | 6292e081aaa521f05459ac1b7c85cfce9defadbe (diff) | |
download | vdr-plugin-text2skin-83a591f16e0b17d3ba9655035407e7982a56abce.tar.gz vdr-plugin-text2skin-83a591f16e0b17d3ba9655035407e7982a56abce.tar.bz2 |
- added first revision (thanks to Monroe)
Diffstat (limited to 'Docs')
-rw-r--r-- | Docs/Reference.txt | 658 | ||||
-rw-r--r-- | Docs/Tutorial.txt | 283 |
2 files changed, 941 insertions, 0 deletions
diff --git a/Docs/Reference.txt b/Docs/Reference.txt new file mode 100644 index 0000000..dbbe9eb --- /dev/null +++ b/Docs/Reference.txt @@ -0,0 +1,658 @@ +REFERENCE text2skin-skins + +Thomas Wehrspann + +17.12.2004 +Last update 02.01.2005 + +This is a short reference of the XML based skin-format of the +text2skin-plugin. + +Table of Contents +1. Elements +1.1 <skin> +1.2 <display> +1.3 <window> +1.4 <rectangle> +1.5 <ellipse> +1.6 <slope> +1.7 <image> +1.8 <text> +1.9 <marquee> +1.10 <blink> +1.11 <scrolltext> +1.12 <scrollbar> +1.13 <progress> +1.14 <block> +1.15 <list> +1.16 <item> +2. Token +2.1 Common +2.2 Channel Display +2.3 Volume Display +2.4 Message Display +2.5 Replay Display +2.6 Menu Display +3. Functions +3.1 not +3.2 and +3.3 or +3.4 equal +3.5 file +3.6 trans +4. Attributes +4.1 arc +4.2 color +4.3 font + +1. Elements +=========== +1.1 <skin> +---------- +This is the root element of the skins. All further elements go inside this +container. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| version || VERSION || Version of the skin-format (this is + fix value, currently "1.0") +| name || NAME || Name to display in the VDR-OSD +| screenBase || "relative","absolute" || Should the skin be drawn "relative" + to the VDR setup of "absolute" to + the coordinates 720x576 +----------------------------------------------------------------------------- + + <?xml version="1.0"?> + <skin version="1.0" name="brushed Aluminium" screenBase="relative"> + . + . + . + </skin> + + +1.2 <display> +------------- +For each type of a OSD display a <display>-section is required. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| id || * channelInfo || Type of the OSD display + * channelSmall + * volume + * message + * replayInfo + * replaySmall + * menu +----------------------------------------------------------------------------- + + <?xml version="1.0"?> + <skin version="1.0" name="brushed Aluminium" screenBase="relative"> + <display id="replayInfo"> + . + . + . + </display> + </skin> + + +1.3 <window> +------------ +Each <display>-container has to start with a definition of drawing areas. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| x2 || NUMBER || Position of the right border +| y2 || NUMBER || Position of the bottom border +| bpp || NUMBER || Color depth of the drawing area +----------------------------------------------------------------------------- + + <?xml version="1.0"?> + <skin version="1.0" name="brushed Aluminium" screenBase="relative"> + <display id="replayInfo"> + <window x1="0" x2="619" y1="-113" y2="-84" bpp="4" /> + <window x1="20" x2="99" y1="-83" y2="-44" bpp="4" /> + . + . + . + </display> + </skin> + + +1.4 <rectangle> +--------------- +Draws a filled rectangle. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| x2 || NUMBER || Position of the right border +| y2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Color of the rectangle (see 4.2 color) +----------------------------------------------------------------------------- + + <rectangle x1="20" x2="99" y1="-83" y2="-44" color="#00000000" /> + + +1.5 <ellipse> +------------- +Draws a circle, a pitch circle, or a ellipse. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Color (see 4.2 color) +| arc || NUMBER || pitch circle (see 4.1 arc) +----------------------------------------------------------------------------- + + <ellipse x1="5" y1="7" x2="14" y2="15" color="GraphLight" condition="{IsMenuCurrent}"/> + + +1.6 <slope> +----------- +Draws a curve. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Color (see 4.2 color) +| arc || NUMBER || Direction (see 4.1 arc) +----------------------------------------------------------------------------- + + ;-( + + +1.7 <image> +----------- +Display an image. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x || NUMBER || Position of the left border (no scaling) +| y || NUMBER || Position of the top border (no scaling) +| x1 || NUMBER || Position of the left border (with scaling) +| y1 || NUMBER || Position of the top border (with scaling) +| x2 || NUMBER || Position of the right border (with scaling) +| y2 || NUMBER || Position of the bottom border (with scaling) +| condition || FUNCTION/TOKEN || Complex condition +| alpha || NUMBER || Blended transparency (0-255) (see 4.2 color) +| colors || NUMBER || Maximum amount of colors in the scaled image + (if scaling should be applied) +| color || STRING || replacement color for color 1 of the image + (see 4.2 color) +| bgColor || STRING || replacement color for color 0 of the image + (see 4.2 color) +| path || STRING/TOKEN || Image file +----------------------------------------------------------------------------- + + <image x="0" y="-70" path="Aluminium_volumebar.png" /> + <image x="585" y="138" condition="{CanScrollUp}" path="symbols/arrowup.xpm" color="#AFFFFF00" /> + + +1.8 <text> +---------- +A static or compound text. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Text color (see 4.2 color) +| align || * center || Alignment of the text + * right + * left +| font || STRING || Font name (see 4.3 font) +----------------------------------------------------------------------------- + + <text x1="42" x2="571" y1="-113" y2="-86" color="#FF000000" font="Osd">{ReplayTitle}</text> + + +1.9 <marquee> +---------- +An alternative to <text> for legth texts + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Text color (see 4.2 color) +| delay || NUMBER || Scroll rate (in ms) +| align || * center || Alignment of the text + * right + * left +| font || STRING || Font name (see 4.3 font) +----------------------------------------------------------------------------- + + <marquee x1="130" x2="480" y1="423" y2="445" color="Text" font="Sml">{ReplayTitle}</marquee>; + +1.9 <blink> +---------- +An alternative to <text> for legth texts + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Text color (see 4.2 color) +| blinkColor || STRING || Highlight color (see 4.2 color) +| delay || NUMBER || Delay between switches +| align || * center || Alignment of the text + * right + * left +| font || STRING || Font name (see 4.3 font) +----------------------------------------------------------------------------- + + ;-( + + +1.11 <scrolltext> +----------------- +A multiline text. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Text color (see 4.2 color) +| align || * center || Alignment of the text + * right + * left +| font || STRING || Font name (see 4.3 font) +----------------------------------------------------------------------------- + + <scrolltext x1="24" y1="138" y2="-72" x2="583" font="helmetr.ttf:20" color="#AFFFFF00"> +{PresentShortText} +{PresentDescription} + </scrolltext> + + +1.12 <scrollbar> +---------------- +A scrollbar. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Color of the bar (see 4.2 color) +| bgColor || STRING || Color of the background (see 4.2 color) +----------------------------------------------------------------------------- + + <scrollbar x1="585" x2="608" y1="162" y2="-110" color="#AFFFFF00" bgColor="#8F2B1B9E" /> + + +1.13 <progress> +-------------- +A progressbar. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition +| color || STRING || Color of the bar (see 4.2 color) +| bgColor || STRING || Color of the background (see 4.2 color) +| mark || STRING || Color of the cutting marks (see 4.2 color) +| active || STRING || Color of the active area (see 4.2 color) +| keep || STRING || Color of the video area that should be + kept (see 4.2 color) +| current || ZAHL/TOKEN || Current index value +| total || ZAHL/TOKEN || Maximum index value +----------------------------------------------------------------------------- + + <progress x1="19" x2="556" y1="-17" y2="-7" color="#AF000000" current="{VolumeCurrent}" total="{VolumeTotal}" /> + <progress x1="129" x2="478" y1="487" y2="502" color="#FFCE7B00" bgColor="Blue" mark="Black" active="Black" keep="Black" current="{ReplayPositionIndex}" total="{ReplayDurationIndex}" /> + +1.14 <block> +------------ +A '''<block></block>''' pools several objects together. (No recursion) + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| condition || FUNCTION || Complex condition +----------------------------------------------------------------------------- + + <block condition="file('logos/{ChannelName}.mng')"> + <rectangle x1="4" x2="67" y1="4" y2="51" color="#AF000000" /> + <image x="0" y="0" path="logos/{ChannelName}.mng" /> + </block> + + +1.15 <list> +----------- +Defines a list in the menu. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| x1 || NUMBER || Position of the left border +| y1 || NUMBER || Position of the top border +| y2 || NUMBER || Position of the right border +| x2 || NUMBER || Position of the bottom border +| condition || FUNCTION/TOKEN || Complex condition (possible, but makes + little sense) +----------------------------------------------------------------------------- + + <list x1="24" y1="62" x2="569" y2="-82"> + <item height="28"/> + <text x1="25" x2="569" y1="3" y2="27" color="#AF00FFFF" font="Sml">{MenuGroup}</text> + <text x1="25" x2="569" y1="3" y2="27" color="#AFFFFFFF" font="Sml">{MenuItem}</text> + <rectangle x1="0" x2="579" y1="0" y2="27" color="#FF2B1B9E" condition="{IsMenuCurrent}" /> + <text x1="22" x2="569" y1="0" y2="27" color="#AFFFFFFF" font="Osd">{MenuCurrent}</text> + <text x1="0" x2="25" y1="0" y2="27" color="#AFFFFFFF" font="Osd">-></text> + </list> + + +1.16 <item> +----------- +Defines an item for the list. + +----------------------------------------------------------------------------- +| Attribute || Value || Description +----------------------------------------------------------------------------- +| condition || FUNCTION/TOKEN || Complex condition (possible, but makes + little sense) +| height || NUMBER || Height of one list item +----------------------------------------------------------------------------- + + <list x1="24" y1="62" x2="569" y2="-82"> + <item height="28" /> + <text x1="25" x2="569" y1="3" y2="27" color="#AF00FFFF" font="Sml">{MenuGroup}</text> + <text x1="25" x2="569" y1="3" y2="27" color="#AFFFFFFF" font="Sml">{MenuItem}</text> + <rectangle x1="0" x2="579" y1="0" y2="27" color="#FF2B1B9E" condition="{IsMenuCurrent}" /> + <text x1="22" x2="569" y1="0" y2="27" color="#AFFFFFFF" font="Osd">{MenuCurrent}</text> + <text x1="0" x2="25" y1="0" y2="27" color="#AFFFFFFF" font="Osd">-></text> + </list> + + +2. Token +======== +2.1 Common +---------- +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| DateTime || (s.h. "man strftime") || Current date/time +----------------------------------------------------------------------------- + + +2.2 Channel Display +------------------- +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| ChannelNumber || || Channel number ("channel number-" on ongoing input +| ChannelName || || Channel- or group name +| ChannelShortName || || Short name of channel if available +| ChannelBouquet || || Provider-/bouquet name if available +| ChannelPortal || || Portal name if available +| ChannelSource || || Signal source (e.g. "S19.2E") +| PresentStartDateTime || (also in Menu Display) || Start time of current title +| PresentVPSDateTime || (also in Menu Display) || VPS start time of current title if available +| PresentEndDateTime || (also in Menu Display) || End time of current title +| PresentDuration || (also in Menu Display) || Duration of current title +| PresentProgress || (also in Menu Display) || Elapsed time of current title +| PresentRemaining || (also in Menu Display) || Remaining time of current title +| PresentTitle || (also in Menu Display) || Title/Heading of current title +| PresentShortText || (also in Menu Display) || Short text/episode of current title +| PresentDescription || (also in Menu Display) || Description of current title +| FollowingStartDateTime || || Start time of following title +| FollowingVPSDateTime || || VPS start time of following title if available +| FollowingEndDateTime || || End time of following title +| FollowingDuration || || Duration of following title +| FollowingTitle || || Title/Heading of following title +| FollowingShortText || || Short text/episode of following title +| FollowingDescription || || Description of following title +| ButtonRed || (also in Menu Display || Caption of red button if available + and Replay Display) +| ButtonGreen || (also in Menu Display || Caption of green button if available + and Replay Display) +| ButtonYellow || (also in Menu Display || Caption of yellow button if available + and Replay Display) +| ButtonBlue || (also in Menu Display || Caption of blue button if available + and Replay Display) +| Language || || Language (currently only "Audio 1", "Audio 2" or "Digital Audio") +| HasTeletext || || True, if video text is available +| HasMultilang || || True, if if several sound tracks are available +| HasDolby || || True, if digital multi-channel sound is available +| IsEncrypted || || True, if the broadcast is encrypted +| IsRadio || || True, if the broadcast is a radio channel +| IsRecording || || True, if a recording is running +| HasVPS || (also in Menu Display) || True, if VPS is available +| HasTimer || (also in Menu Display) || True, if a timer for the current title is set +| IsRunning || (also in Menu Display) || True, if the current title has the state "running" +| CurrentRecording || (in every Display) || Provides every currently running recording in a 2 second cycle +----------------------------------------------------------------------------- + + +2.3 Volume Display +------------------ +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| VolumeCurrent || || Current volume (0-VolumeTotal) (numeric) +| VolumeTotal || || Maximum value for volume +| IsMute || || True, if volume is muted +----------------------------------------------------------------------------- + + +2.4 Message Display +------------------- +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| Message || (in every Display) || Text of the current message if available (whatever type) +| MessageStatus || (in every Display) || Text of the current message if available (status message) +| MessageInfo || (in every Display) || Text of the current message if available (information) +| MessageWarning || (in every Display) || Text of the current message if available (warning) +| MessageError || (in every Display) || Text of the current message if available (error) +----------------------------------------------------------------------------- + + +2.5 Replay Display +------------------ +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| ReplayTitle || || Title of the current replay +| ReplayPositionIndex || || Position in the current replay (numeric, analog to PresentProgress) +| ReplayDurationIndex || || Duration of the current replay (numeric, analog to PresentDuration) +| ReplayRemaining || || Remaining time of the current replay to elapse (numeric, analog to PresentRemaining) +| ReplayPrompt || || Prompt if available (e.g. "Jump: --:--") +| IsPlaying || || True, if a replay is runnning +| IsFastForward || || True, if fast forward +| IsFastRewind || || True, if fase rewind +| IsSlowForward || || True, if slow forward +| IsSlowRewind || || True, if slow rewind +| IsPausing || || True, if replay is pausing +| ReplayPosition || || Position in the replay, completely formatted, with frames at cutting marks, otherwise without frames +| ReplayDuration || || Duration of the replay, completely formatted +| ReplayMode || || Type of the replay (e.g. "dvd", "vcd", "normal",...) +| ButtonRed || (also in Menu Display || Caption of red button if available + and Channel Display) +| ButtonGreen || (also in Menu Display || Caption of green button if available + and Channel Display) +| ButtonYellow || (also in Menu Display || Caption of yellow button if available + and ReChannel Display) +| ButtonBlue || (also in Menu Display || Caption of blue button if available + and Channel Display) +----------------------------------------------------------------------------- + + +2.6 Menu Display +---------------- +----------------------------------------------------------------------------- +| Token || Comment || Description +----------------------------------------------------------------------------- +| MenuTitle || Attribute: "clean" || Title of the menu page, or filtered title with "clean" +| MenuGroup || || Text of the current list item if it is a group/delimiter +| IsMenuGroup || || True, if currently drawn list item is a group/delimiter +| MenuItem || || Text of the current list item if it is a normal entry +| IsMenuItem || || True, if currently drawn list item is a normal entry +| MenuCurrent || Atrribute: "clean" || Text of the current list item if it is the selected entry +| IsMenuCurrent || || True, if currently drawn list item is a currently selected one +| MenuText || Attribute: "clean" || Text page to display instead of the list (e.g. display in the command menu) +| ButtonRed || (also in Channel Display || Caption of red button if available + and Replay Display) +| ButtonGreen || (also in Channel Display || Caption of green button if available + and Replay Display) +| ButtonYellow || (also in Channel Display || Caption of yellow button if available + and Replay Display) +| ButtonBlue || (also in Channel Display || Caption of blue button if available + and Replay Display) +| CanScrollUp || || True, if a scroll-text can be scrolled upward +| CanScrollDown || || True, if a scroll-text can be scrolled downward +| PresentStartDateTime || (also in Channel Display) || +| PresentVPSDateTime || (also in Channel Display) || +| PresentEndDateTime || (also in Channel Display) || +| PresentDuration || (also in Channel Display) || +| PresentProgress || (also in Channel Display) || +| PresentTitle || (also in Channel Display) || +| PresentShortText || (also in Channel Display) || +| PresentDescription || (also in Channel Display) || +| HasVPS || (also in Channel Display) || +| HasTimer || (also in Channel Display) || +| IsRunning || (also in Channel Display) || +----------------------------------------------------------------------------- + + +3. Functions +============ +3.1 not +------- +Negation of the term. + + not(equal({PresentStartDateTime},{PresentVPSDateTime})) + +3.2 and +------- +True, if all parameter are true. + + and({CanScrollUp},{CanScrollDown}) + +3.3 or +------ +True, if one parameter is true. + + or({CanScrollUp},{CanScrollDown}) + +3.4 equal +--------- +True, if both parameters are true. + + equal('Kanäle', trans('Channels')) + +3.5 file +-------- +Returns the parameter, if the file exists in the skin directory. + + file('logos/{ChannelName}.png') + +3.6 trans +--------- +Rreturn the translation (i18n) of the parameter, false, if no translation is found. + + equal('Kanäle', trans('Channels')) + + +4. Attributes +============== +4.1 arc +------- +----------------------------------------------------------------------------- +| Attribute || Value || Meaning (ellipse) || Meaning (slope) +----------------------------------------------------------------------------- +| arc || 0 || full ellipse || horizontal, increasing, bottom + || 1 || first quadrant || horizontal, increasing, top + || 2 || second quadrant || horizontal, decreasing, bottom + || 3 || third quadrant || horizontal, decreasing, top + || 4 || fourth quadrant || vertical, increasing, right + || 5 || right half || vertical, increasing, left + || 6 || upper half || vertical, decreasing, right + || 7 || left half || vertical, decreasing, left + || 8 || lower half || + || -1..-8 || invers of the above || +----------------------------------------------------------------------------- + +4.2 color +--------- +Also concerns bgColor, blinkColor, mark, active, keep +Colors are given in RGB-format transparency information + + color=#AARRGGBB + +* A - alpha value (transparency 0-255) +* R - red value +* G - gree value +* B - blue value + +Some examples + + AARRGGBB + color=#00000000 = Black, fully transparent + color=#FF000000 = Black, full opacity + color=#7F000000 = Black, half translucent + color=#7FFFFFFF = White, half translucent + +4.3 font +-------- +There are three predefined fonts + +* Osd +* Fix +* Sml + +If the freetype library is installed it is possible to use every True-Type font in the directories + /etc/vdr/plugins/text2skin/fonts/ +or + /etc/vdr/plugins/text2skin/SkinName/ + +In the skin file the font is defined with + + font="Osd" + +or with True-Type fonts with the desired size and width (optional) + + font="helmetr.ttf:size[,width]" diff --git a/Docs/Tutorial.txt b/Docs/Tutorial.txt new file mode 100644 index 0000000..1b95588 --- /dev/null +++ b/Docs/Tutorial.txt @@ -0,0 +1,283 @@ +HOWTO create text2skin-skins + +Sascha Volkenandt + +english translation by Thomas Wehrspann + +16.12.2004 +Last update 02.01.2005 + +Table of Contents + 1. General Stucture of XML Documents + 2. General Structure of the Skin file + 3. Structure of the individual Sections + 4. Drawing Objects + 5. Tokens and Texts + 6. Token Attributes + 7. Complex Conditions and Block Objects + 8. List in the Main Menu + 9. Creation of Image-Maps for Menu Logos +10. List of all Functions +11. Scaling of Images +12. Colors +13. True-type Fonts + + +1. General Stucture of XML Documents +==================================== +Those, who already worked with XML ca omit this section. + +XML files has a tree-like structure of elements. Each document starts with a root element (a container) which includes all other elements hierachically. Elements, so called tags, are written in spiky brackets, a slash before the name marks an end tag. + + <element> + <subemelent> + ... + </subelement> + </element> + +Every element can provide attributes to specify further properties. Attributes are following the element name inside the brackets, their values are written after an equal in quotation marks + + <element attribute="value" anotherattribtute="another value" + ... + </element> + +Empty elements include no other elements and must be empty even a line break is not allowed. + + <element attribute="value"></element> + +It is possible to write those elements in a simpler way + + <element attribute="value" /> + +Normal XML files start with a control instruction to specify the XML version used + + <?xml version="1.0"?> + + +2. General Structure of the Skin file +===================================== +Each skin file (ending with the extension ".skin") starts with the XML control incstruction (see above) followed by the root element <skin>. This element has three attributes which must be specified + +* version - Version of the skin format (current: "1.0") +* name - Name of the skin +* screenBase - Specifies, if the skin is drawn "relative" to the VDR setup of "absolute" to the coordinates 720x576. + + <?xml version="1.0"?> + <skin version="1.0" name="brushed Aluminium" screenBase="relative"> + ... + </skin> + + +3. Structure of the individual Sections +======================================= +The different sections of the VDR-OSD are defined in several <display> elements. The <display> elements get the "id" attribute which specifies the actual section + +* channelInfo +* channelSmall +* volume +* message +* replayInfo +* replaySmall +* menu + +Each <display> definition starts with the definition of drawing areas, so called windows. The quantity and color depth of windows depends on the output device. + + <display id="replayInfo"> + <window x1="0" x2="619" y1="-113" y2="-84" bpp="4"/> + <window x1="20" x2="99" y1="-83" y2="-44" bpp="4"/> + ... + </display> + + +4. Drawing Objects +================== +After the definition of the drawing areas objects can be drawn on it freely. There are three types of objects + +* simple objects + * rectangle - draws a filled rectangle + * text - static or compound text + * image - draws a image + * ellipse - ellipse of (pitch)circle + * slope - a curve + +* extended or connected objects + * progress - shows a progress bar + * scrolltext - multiline text + * scrollbar - a scrollbar + +* group and special objects + * block - groups several objects + * list - defines the list in the menu + * item - defines one item in the list + +The simple object are mostly self-explanatory, they all have attributes "x1", "y1", "x2" and "y2" which decribe the position and dimension (exception: <image>, which only uses "x" and "y" when no scaling should be applied) and "color" which is a symbolic or hexadecimal color description. Images need furthermore the attributes "path" and can have the attributes "bgColor" and "alpha" (transparency 0-255). Texts can have the attribute align (with values "left", "right" and "center"), scrolltexts furthermore "font". Ellipses will be pitch circles with the "arc" attribute curves get the direction with it. +Scroll- and progress-bars also need "bgColor", progress-bars "current" and "total". + + <image x="0" y="-70" path="Aluminium_volumebar.png"/> + <rectangle x1="20" x2="99" y1="-83" y2="-44" color="#00000000"/> + <text x1="42" x2="571" y1="-113" y2="-86" color="#FF000000" font="Osd">{ReplayTitle}</text> + <progress x1="124" x2="577" y1="-70" y2="-55" color="#FF84ff00" bgColor="#FFFFFFFF" current="{ReplayPositionIndex}" total="{ReplayDurationIndex}"/> + <scrolltext x1="24" y1="138" y2="-72" x2="583" font="helmetr.ttf:20" color="#AFFFFF00"> + {PresentShortText} + {PresentDescription} + </scrolltext> + + +5. Tokens and Texts +=================== +In the example above text in curly braces used. These are so called tokens, variables which actual embodiment depends on information of VDR. A complete list of all tokens is in the reference and the demo skins can be used as examples. Normal text and paths can be mixed with token for dynamic display of information + + <image x="0" y="0" path="logos/{ChannelName}.mng" /> + +Each object, in addition to his own attributes, can have the attribute "condition" which is a complex function. Conditions are used to bound the actual display of an element or block to information provided by VDR. A token can also be a condition. A token without content is evaluate to false. Strings included in functions are quoted in quotation marks. Quotation marks are escaped with a backslash. + + <image x="20" y="-83" alpha="180" condition="file('replay/{ReplayMode}.png')" path="replay/{ReplayMode}.png" /> + <image x="20" y="-83" alpha="180" condition="not(file('replay/{ReplayMode}.png'))" path="replay/common.png" /> + <image x="314" y="-34" condition="{IsPlaying}" path="symbols/play_sml.xpm" /> + <image x="334" y="-34" condition="{IsFastForward:2}" path="symbols/ffwd_sml.xpm" /> + <image x="420" y="25" condition="or({HasVPS},{HasTimer},{IsRunning})" path="Aluminium_epgbottom.png" /> + +Shows the image only, if ... + +1) ...file exists +2) ...the does not exist +3) ...the ReplayMode is ''Replay'' +4) ...the ReplayMode is ''Forward Level 2'' ('':0'' is normal Replay without Multi-Speed and with '':X'' every level is meant) +5) ...the current Event is either VPS, or is currently aired, or programmed as Timer. + + +6. Token Attributes +=================== +Some tokens can also have attributes (these are no XML attributes). At the moment these tokens are "{MenuTitle}", "{MenuCurrent}" and all date/time-token. Attributes follow follow the token name seperated by a colon ":". Colons in the attribute content are escaped with a backslash. + + <text .....>{DateTime:%H\:%M}</text> + +For date/time-token the same rules as for strftime applies (see "man strftime") for "{MenuTitle}" and "{MenuCurrent}" only the attribute "clean" exists, which removes tabs and hotkey numbers from the text. + + +7. Complex Conditions and Block Objects +======================================= +Complex conditions are used to bound the display of elements to the existent of certain VDR information. Block objects group several element together for easier use of the complex condition. + +The following example shows the channel logo with a shadow only if the file exists, otherwise a transparent display is used. + + <rectangle x1="0" x2="67" y1="0" y2="51" color="#00000000" condition="not(file('logos/{ChannelName}.mng'))"/> + + <block condition="file('logos/{ChannelName}.mng')"> + <rectangle x1="4" x2="67" y1="4" y2="51" color="#AF000000"/> + <image x="0" y="0" path="logos/{ChannelName}.mng"/> + </block> + +Grouping of a long text with scroll-bars which are only shown if the text does not fit on one page. + + <block condition="{MenuText}"> + <scrolltext x1="30" y1="60" x2="519" y2="343" color="#FFFFFFFF" font="Sml">{MenuText}</scrolltext> + + <image condition="or({CanScrollUp},{CanScrollDown})" x="561" y="52" path="menu-scrollbar.png" /> + <scrollbar condition="or({CanScrollUp},{CanScrollDown})" x1="569" y1="69" x2="578" y2="315" color="#FF975000" bgColor="#DAB38D13" /> + + <image condition="and(not({CanScrollUp}),{CanScrollDown})" x="561" y="39" path="symbols/arrowup-off.png" /> + <image condition="and(not({CanScrollUp}),{CanScrollDown})" x="561" y="319" path="symbols/arrowdown-on.png" /> + + <image condition="and({CanScrollUp},not({CanScrollDown}))" x="561" y="39" path="symbols/arrowup-on.png" /> + <image condition="and({CanScrollUp},not({CanScrollDown}))" x="561" y="319" path="symbols/arrowdown-off.png" /> + + <image condition="and({CanScrollUp},{CanScrollDown})" x="561" y="39" path="symbols/arrowup-on.png" /> + <image condition="and({CanScrollUp},{CanScrollDown})" x="561" y="319" path="symbols/arrowdown-on.png" /> + </block> + + +8. List in the Main Menu +======================== +The special element <list> specifies the display area of a list of entries. The only attributes are "x1", "y1", "x2" and "y2". The first subelement has to be the special element <item> whose only attribute is "height". After <item> elements can be placed as normal. The "height" of <item> defines the dimension of the area a list entry can draw on. + + <list x1="24" y1="62" x2="569" y2="-82"> + <item height="28" /> + <text x1="25" x2="569" y1="3" y2="27" color="#AF00FFFF" font="Sml">{MenuGroup}</text> + <text x1="25" x2="569" y1="3" y2="27" color="#AFFFFFFF" font="Sml">{MenuItem}</text> + <rectangle x1="0" x2="579" y1="0" y2="27" color="#FF2B1B9E" condition="{IsMenuCurrent}" /> + <text x1="22" x2="569" y1="0" y2="27" color="#AFFFFFFF" font="Osd">{MenuCurrent}</text> + <text x1="0" x2="25" y1="0" y2="27" color="#AFFFFFFF" font="Osd" condition="{IsMenuCurrent}">-></text> + </list> + +It might be a bit demanding to understand how a list is rendered. Coordinates of objects inside a list is relative to the display area of the list itself. Every object in the list is draw several times, for each entry in the list one time. The Y-coordinates are incremented by one <item> "height" each time. The tokens "{MenuCurrent}", "{MenuItem}" and "{MenuGroup}" are draw per tab (in seperated menus like schedule), whereas "{IsMenuCurrent}", "{IsMenuGroup}" or "{IsMenuItem}" are drawn only one time per list element. + + <text x1="25" x2="569" y1="3" y2="27" color="#AF00FFFF" font="Sml">{MenuGroup}</text> + <text x1="25" x2="569" y1="3" y2="27" color="#AFFFFFFF" font="Sml">{MenuItem}</text> + <rectangle x1="0" x2="579" y1="0" y2="27" color="#FF2B1B9E" condition="{IsMenuCurrent}" /> + + +9. Creation of Image-Maps for Menu Logos +======================================== +To show a logo dependend on the currently selected element, the cleaned text (attribute "clean") of the element (e.g. "Aufzeichnungen") is compared with translations (here "Recordings"). With plugins the main menu entry (e.g. "MP3") of the plugin (here mp3) is compared to the translations. (Beware: This element is not part of the list and has also to be quoted outside the <list> container). + + <image x="25" y="100" path="logos/schedule.png" condition="equal({MenuCurrent:clean},trans('Schedule'))" /> + <image x="25" y="100" path="logos/channels.png" condition="equal({MenuCurrent:clean},trans('Channels'))" /> + <image x="25" y="100" path="logos/timers.png" condition="equal({MenuCurrent:clean},trans('Timers'))" /> + <image x="25" y="100" path="logos/music.png" condition="equal({MenuCurrent:clean},plugin('mp3'))" /> + +The same applies to "{MenuTitle:clean}" if a logo for the current menu page is wished, instead of current selected element. + + +10. List of all Functions +========================= +* not - negation of the term + (e.g. "not(equal({PresentStartDateTime},{PresentVPSDateTime}))" ) +* and - true, if all parameter are true + (e.g. "and({CanScrollUp},{CanScrollDown})" ) +* or - true, if one parameter is true + (e.g. see above) +* equal - true, if both parameters are true +* file - returns the parameter, if the file exists in the skin directory + (e.g. "file('logos/{ChannelName}.png')" ) +* trans - return the translation (i18n) of the parameter, false, if no translation is found + (e.g. "equal('Kanäle', trans('Channels'))" ) + +Normally strings in function are quoted in quotation marks, only if the simply consists of a token the quotation marks can be omitted. (e.g. "not({MenuText})" instead of "not('{MenuText}')" ) + + +11. Scaling of Images +===================== +With this function it is possible to scale images independently from the OSD settings. This function is activated when the attributes "x1", "x2", "y1" and "y2" with their relative readings are used instead of "x" and "y" (which disable this function). The attribute "color" specifies the maximum amount of colors the must have after scaling. + + +12. Colors +========== +Colors are given in RGB-format transparency information + + color=#AARRGGBB + +* A - alpha value (transparency 0-255) +* R - red value +* G - gree value +* B - blue value + +Some examples + + AARRGGBB + color=#00000000 = Black, fully transparent + color=#FF000000 = Black, full opacity + color=#7F000000 = Black, half translucent + color=#7FFFFFFF = White, half translucent + + +13. True-type Fonts +=================== +There are three predefined fonts + +* Osd +* Fix +* Sml + +If the freetype library is installed it is possible to use every True-Type font in the directories + /etc/vdr/plugins/text2skin/fonts/ +or + /etc/vdr/plugins/text2skin/SkinName/ + +In the skin file the font is defined with + + font="Osd" + +or with True-Type fonts with the desired size and if desirable width + + font="helmetr.ttf:size[,width]" |