Vitorboschi (Talk | contribs) (→Image Access: fixed typo) |
(→Current Theme Elements) |
||
| Line 154: | Line 154: | ||
***''button-small-hover'': small button background on cursor hover | ***''button-small-hover'': small button background on cursor hover | ||
*'''/widgets''': generic desktop widget background | *'''/widgets''': generic desktop widget background | ||
| − | + | ||
| − | **'''/ | + | ** '''/action-overlays.svgz''': overlays for icons to indicate actions (since KDE 4.4) |
| − | + | *** ''add-normal'': icon used to add the parent icon to a selection of elements (used for instance in folderview), normal state, there are also ''add-hover'' and ''add-pressed'' | |
| − | + | *** ''remove-normal'': icon used to remove the parent icon to a selection of elements, normal state, there are also ''remove-hover'' and ''remove-pressed'' | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | * | + | |
| − | ** '' | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | ** '' | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
** '''/analog_meter.svg''': an analog gauge widget. | ** '''/analog_meter.svg''': an analog gauge widget. | ||
***''background'': the body of the analog instrument | ***''background'': the body of the analog instrument | ||
| Line 215: | Line 166: | ||
***''label0'': the rect for the first label | ***''label0'': the rect for the first label | ||
***''label1'': the rect for the second label | ***''label1'': the rect for the second label | ||
| + | |||
| + | **'''/arrows.svg''': arrows that match the theme. Four elements should exist in this svg: up-arrow, down-arrow, left-arrow, right-arrow. | ||
| + | |||
| + | **'''/background.svg''': a background image for plasmoids. See the section on backgrounds above for information on the required elements in this file. | ||
| + | |||
** '''/bar_meter_horizontal.svg''': an horizontal meter like a progressbar | ** '''/bar_meter_horizontal.svg''': an horizontal meter like a progressbar | ||
***''background'': background of the progressbar | ***''background'': background of the progressbar | ||
| Line 223: | Line 179: | ||
***''bar-active'' and ''bar-inactive'': 9 pieces svgs with the ''bar-active'' and ''bar-inactive'' prefixes, they replace the bar element when available, they will be drawn tiled (KDE4.2 and later) | ***''bar-active'' and ''bar-inactive'': 9 pieces svgs with the ''bar-active'' and ''bar-inactive'' prefixes, they replace the bar element when available, they will be drawn tiled (KDE4.2 and later) | ||
***''label0'', ''label1'' and ''label2'': rects for 3 labels to be placed around | ***''label0'', ''label1'' and ''label2'': rects for 3 labels to be placed around | ||
| + | |||
** '''/bar_meter_vertical.svg''': a vertical meter like a vertical progressbar. It has the same format of ''/bar_meter_horizontal.svg'' | ** '''/bar_meter_vertical.svg''': a vertical meter like a vertical progressbar. It has the same format of ''/bar_meter_horizontal.svg'' | ||
| − | ** '''/ | + | |
| − | *** ''border'': a border | + | ** '''/branding.svgz''': a little KDE logo that can be customized by distributors as a branding element. Contains a single element called ''brilliant'' |
| + | |||
| + | ** ''''/busywidget.svgz''': Used to indicate a busy state, it's a circular image that will be animated with a rotation. | ||
| + | *** ''busywidget'': the main spinner | ||
| + | *** ''paused'': the paused state | ||
| + | |||
| + | ** '''/button.svg''': graphics elements for a button widget (KDE 4.2 and later), it needs the followin prefixes: | ||
| + | *** ''normal'' normal button | ||
| + | *** ''pressed'' pressed button | ||
| + | *** ''active'' button under mouse. Active can have ticker borders that would be rendered outside the widget. It's useful to do a glowing effect DEPRECATED: use ''hover'' instead | ||
| + | *** ''hover'' element that will be in the background of the widget, will act as a border (useful for glow effects) since KDE 4.5 | ||
| + | *** ''shadow'' a shadow for the button, can be bigger than the button itself since KDE 4.5 | ||
| + | *** ''focus'' keyboard focus rectangle superimposed to the button graphics | ||
| + | |||
| + | ** '''/calendar.svg''': graphics for a calendar widget, since 4.3 | ||
| + | *** ''weeksColumn'': background for the vertical column with week numbers in it. | ||
| + | *** ''weekDayHeader'': background for the row with week day names in it. | ||
| + | *** ''active'': background for the day numbers of the current month. | ||
| + | *** ''inactive'': background for the day numbers of the next and previous months. | ||
| + | *** ''hoverHighlight'': background for the day under the mouse cursor. | ||
| + | *** ''today'': border for the current day cell. | ||
| + | *** ''selected'': border for the selected day cell. | ||
| + | *** ''red'': border for holidays on sundays | ||
| + | *** ''green'': border for holidays during week days | ||
| + | |||
| + | **'''/clock.svg''': an analog clock face. it must have the following named elements: | ||
| + | *** ''ClockFace'': the background of the clock, usually containing the numbers, etc | ||
| + | *** ''HourHand'': the hour hand, pointing down in the svg | ||
| + | *** ''MinuteHand'': the minute hand, pointing down in the svg | ||
| + | *** ''SecondHand'': the second hand, pointing down in the svg | ||
| + | *** ''HourHandShadow'', ''MinuteHandShadow'' and ''SecondHandShadow'': drop shadows for the hands (optional, KDE 4.1 and later) | ||
| + | *** ''HandCenterScrew'': the "pin" that holds the hands together in the center | ||
| + | *** ''Glass'': a final overlay which allows for things such as the appearance of glass | ||
| + | *** ''hint-square-clock'': if present the shape of the clock will be square rather than round | ||
| + | *** Note: In the svg, the Hand elements must be placed in a position that indicates the time 6:30:30. The y-axis position of the Hand elements with respect to the center of ClockFace is the one they will have in the rendered applet. The x-axis position of the Hand elements does not matter. The Shadow elements should have the same y-axis position as their Hand element counterpart. | ||
| + | |||
** '''/configuration-icons''': it's a set of simple icons that are meant to be shortcuts for configuration actions (KDE 4.2 and later). Must contain the following elements: | ** '''/configuration-icons''': it's a set of simple icons that are meant to be shortcuts for configuration actions (KDE 4.2 and later). Must contain the following elements: | ||
*** ''close'': a close icon | *** ''close'': a close icon | ||
| Line 235: | Line 227: | ||
*** ''size-diagonal-tr2bl'': resize diagonal, usually an arrow from top-right to bottom-left | *** ''size-diagonal-tr2bl'': resize diagonal, usually an arrow from top-right to bottom-left | ||
*** ''rotate'' | *** ''rotate'' | ||
| − | *** '' | + | *** ''help'' |
| − | *** ''status'' refers to a status of something, logging or system monitoring in general | + | *** ''maximize'' |
| − | ** '''/ | + | *** ''unmaximize'' |
| − | *** '' | + | *** ''collapse'': set something in a minimized, collapsed status |
| − | *** '' | + | *** ''restore'': restore from ''collapse'' status |
| − | ** '''/ | + | *** ''status'': refers to a status of something, logging or system monitoring in general |
| − | *** '' | + | *** ''retourn-to-source'': make detached extender items return to their owner applet |
| − | *** '' | + | |
| − | ** '''/ | + | ** '''/containment-controls.svg''': handles for the control used to resize the panel (KDE 4.1 and later). The following elements are required. |
| + | *** ''maxslider'' maximum size slider, south position | ||
| + | *** ''minslider'' minimum size slider, south position | ||
| + | *** ''offsetslider'' positioning slider, south position | ||
| + | *** Each of the above elements must be present with ''north'', ''south'', ''east'' and ''west'' prefixes for each panel position. | ||
| + | *** There are also four backgrounds (north, south, east and west orientations) for the ruler widget itself in the "Backgrounds format", since the width of the widget is 100% the elements of left and right (or north and bottom if vertical) are not needed | ||
| + | |||
| + | ** '''/dragger.svgz''': meant to be a generic drag handle (not currently used but available). It needs to contain the same elements as other backgrounds, see the section about backgrounds above. In addition it needs the following element: | ||
| + | *** ''hint-preferred-icon-size'': the size icons within the drag handle should get. The vertical size of the dragger is also derived from this: this size hint + the dragger's margins. | ||
| + | |||
| + | ** '''/extender-background.svgz''': background for extenders. It needs the same elements as other backgrounds. | ||
| + | |||
| + | ** '''/extender-dragger.svgz''': Same as dragger.svgz. Drag handle for extenders (like the popup date of clock applets, KDE 4.2 and later). It needs to contain the same elements as other backgrounds, see the section about backgrounds above. In addition it needs the following element: | ||
| + | *** ''hint-preferred-icon-size'': the size icons within the drag handle should get. The vertical size of the dragger is also derived from this: this size hint + the dragger's margins. | ||
| + | |||
| + | ** '''/frame.svgz''' : a generic frame, used mostly for widget containers, to visually group widgets together. It must contain the following prefixes, for different 3d looks: | ||
| + | *** ''sunken'' | ||
| + | *** ''plain'' | ||
| + | *** ''raised'' | ||
| + | |||
| + | ** '''/glowbar.svgz''' : a frame without a prefix, it represents a glow, it's used for instance in Plasma Desktop for the panel autohide unhide hint. | ||
| + | |||
| + | ** '''/identiconshapes.svgz''' : shapes for the auto-generation of the activity icons, they must be named from ''Shape1'' to ''Shape32''. Since KDE SC 4.5 | ||
| + | |||
| + | ** '''/line.svgz''' : a simple line use to separate items in layouts, containe ''vertical-line'' and ''horizzontal-line'' elements (since KDE 4.3) | ||
| + | |||
| + | ** '''/lineedit.svgz''': it's a framesvg, used to style line edits, spinboxes and other similar fields (since KDE 4.4) it must have the following prefixes | ||
*** ''base'': the background of the line edit | *** ''base'': the background of the line edit | ||
*** ''focus'': will be drawn outside base, when the line edit has input focus | *** ''focus'': will be drawn outside base, when the line edit has input focus | ||
*** ''hover'': will be drawn outside base, when the line edit is under the mouse | *** ''hover'': will be drawn outside base, when the line edit is under the mouse | ||
| + | |||
| + | |||
| + | ** '''/monitor.svgz''' : represents a screen, it's used in places such as the wallpaper config dialog. It contains a frame without prefixes and the following extra elements: | ||
| + | *** ''glass'' : glass reflection effect over the screen | ||
| + | *** ''base'' : a stand for the monitor | ||
| + | |||
| + | ** '''/pager.svgz''' : graphic elements for the little screens of the pager, it must have 3 frames with the following prefixes: | ||
| + | *** ''normal'' : all virtual desktops | ||
| + | *** ''active'' : active virtual desktop | ||
| + | *** ''hover'' : virtual desktop under mouse | ||
| + | |||
| + | **'''/panel-background.svg''': the background image for panels. | ||
| + | *** If you want to create different background for panels located at the top, bottom, left or right, then also create sets of background elements with the following prefixes: ''north'', ''south'', ''west'' and ''east'' respectively. For example the center element of the left positioned panel's background should be named ''west-center''. (KDE 4.1 and later) | ||
| + | *** When the panel is not 100% wide/tall the north, south etch prefixes becomes ''north-mini'' etc. (KDE 4.2 and later) | ||
| + | *** All prefixes fallback to a no prefix version when not available | ||
| + | |||
| + | ** '''/plot-background.svg''': a background for plotter (graph) widgets, such as the plots in ksysguard | ||
| + | |||
| + | ** '''/scrollbar.svgz''' : the classical ''elevator'' scrollbar, must have the following elemens : ''arrow-up'', ''mouseover-arrow-up'', ''sunken-arrow-up'', same 3 elements for ''arrow-left'', ''arrow-right'' and ''arrow-bottom'. It must also have frames with the following prefixes: | ||
| + | *** ''slider'' | ||
| + | *** ''mouseover-slider'' | ||
| + | *** ''sunken-slider'' | ||
| + | *** ''background-vertical'' | ||
| + | *** ''background-horizontal'' | ||
| + | |||
| + | ** '''/scrollwidget''': used by Plasma::ScrollWidget, it has a single prefix (KDE4.4 and later) | ||
| + | *** ''border'': a border used when the scrollbar is enabled | ||
| + | |||
** '''/slider.svgz''': used to theme sliders (since KDE 4.3) it must have the following elements: | ** '''/slider.svgz''': used to theme sliders (since KDE 4.3) it must have the following elements: | ||
*** ''vertical-slider-line'': the background for vertical sliders, it indicates how much the indicator can scroll | *** ''vertical-slider-line'': the background for vertical sliders, it indicates how much the indicator can scroll | ||
| Line 256: | Line 302: | ||
*** ''horizontal-slider-focus'': background for the handle when it has input focus (since KDE 4.4) | *** ''horizontal-slider-focus'': background for the handle when it has input focus (since KDE 4.4) | ||
*** ''horizontal-slider-hover'': background for the handle when it is under the mouse (since KDE 4.4) | *** ''horizontal-slider-hover'': background for the handle when it is under the mouse (since KDE 4.4) | ||
| + | |||
| + | ** '''/systemtray.svg''': a background for the system tray (KDE 4.1 and later). See the section on backgrounds above for information on the required elements in this file. Since KDE 4.2 it contains also the '''lastelements''' prefix, used for elements in the last position of the systray and the four elements '''expander-right''' up, left and bottom, used for the icon that shows/hides the other systray icons. Since KDE 4.3 there are the '''horizontal-separator''' and '''vertical-separator''' used as a border to separe the last elements. | ||
| + | |||
| + | **'''/tasks.svg''': task item backgrounds for tasks (KDE 4.1 and later). See the section on backgrounds above for information on the required elements in this file. The following element prefixes are required: | ||
| + | *** ''focus'': background of focused task item | ||
| + | *** ''hover'': background when the pointer hovers the task item. From KDE 4.2 focus and hover can have ticker borders that will be painted outside the task button, useful to make a glow effect. | ||
| + | *** ''attention'': background when tasks item is trying to get attention | ||
| + | *** ''normal'': background of normal, unfocused task item | ||
| + | *** ''minimized'': background for minimized tasks | ||
| + | *** The svg should contain elements of all five prefixes, if a prefix is missing that element will be not be drawn. | ||
| + | |||
| + | ** '''/toolbox.svgz''' : graphical elements for the desktop toolbox, it must have a frame without prefixes plus those following elements: | ||
| + | *** ''desktop-northwest'', ''desktop-northeast'', ''desktop-southwest'', ''desktop-southeast'': the 4 corners for the desktop toolbox. | ||
| + | *** ''panel-north'', ''panel-south'', ''panel-west'', ''panel-east'' : elements for the panel toolbox. | ||
| + | |||
| + | ** '''/tooltip.svg''': background for tooltips used for instance in the taskbar and with icons. See the section on backgrounds above for information on the required elements in this file. | ||
| + | |||
| + | ** '''/translucentbackground.svg''': a standard background image for plasmoids that for their nature are bigger and with not much text. In this case a translucent background looks better. It needs the same elements of background.svg in it. If this file is not present, the plasmoids that uses this will use background.svg instead. | ||
=="Opaque" folder== | =="Opaque" folder== | ||
libplasma provides the Theme class so Plasma elements and other applications, such as KRunner, that need to graphically hint or theme interface elements. This is not a replacement for qstyle, but rather provides standard elements for things such as box backgrounds.
This allows for easy re-theming of the desktop while also keeping elements on the desktop more consistent with each other.
See also Creating a Plasma Theme.
Contents |
Themes are stored in share/apps/desktoptheme. A theme is described by a .desktop file in share/apps/desktoptheme. The contents of which might look like this:
[Desktop Entry]
Name=Oxygen
Comment=Theme done in the Oxygen style
X-KDE-PluginInfo-Author=The Oxygen Project X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=default X-KDE-PluginInfo-Version=pre0.1 X-KDE-PluginInfo-Website=http://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true
The X-KDE-PluginInfo-Name entry must contain the name of the subdirectory in share/apps/desktoptheme where the SVG files for this theme exist.
Beneath this directory one will find the following file structure:
Theme elements are accessed by path. Whether this maps to literal paths on disk or not is not guaranteed and considered an implementation detail of Plasma::Theme.
Therefore, to access the dialog background, one might create an svg in this manner:
Plasma::Theme theme;
QSvgRenderer svg(theme.image("dialogs/background"));
It is generally recommended to use Plasma::Svg instead of QSvgRenderer directly, however. Remember to call resize() on the Plasma::Svg before painting with it!
Plasma::Svg svg("dialogs/background");
svg.resize(size());
Themes may optionally provide wallpapers to be used with the theme. These wallpapers must appear in the wallpapers/ directory within the theme.
A theme may also define a default wallpaper, wallpaper size and wallpaper file extension to be used in conjunction with the theme. The default wallpaper may either be installed in the standard location for wallpapers or may be shipped with the theme itself. The default wallpaper settings should appear in the theme's metadata.desktop file and contain the following entries:
[Wallpaper]
defaultTheme=<name of default wallpaper package>
defaultFileSuffix=<wallpaper file suffix, e.g. .jpg>
defaultWidth=<width in pixels of default wallpaper file>
defaultHeight=<height in pixels of default wallpaper file>
Animations written in Javascript can be included in the animations directory within the theme. To learn how to create such animations and expose them in your theme, visit the Javascript Animations tutorial.
If you use Plasma::Svg, changes to the theme are automatically picked up. Otherwise, you can connect to the changed() signal in the Plasma::Theme class. This signal is emitted whenever the theme is changed, which may be triggered by the user switching the theme used or system changes such as a composite manager becoming available.
The colors file follows the standard KDE colorscheme file format and allows a theme to define what colors work best with its theme elements. The colors in this file can be edited with the default color scheme module.
The most common use of the colors file is to ensure that text is readable on various backgrounds.
Here is a list of color entries in the colors file that are currently actively used in a Plasma theme:
Other colors in the file may be used by individual widgets or used in the future, so it doesn't hurt to provide a complete colorscheme file and is probably a safer strategy.
Currently also used by individual widgets, which should give a good idea of additional usage patterns:
Note that some of these may end up folded back into Plasma::Theme properly at some point.
All background svg's (except for desktop wallpapers) must have the following named elements, all of which will be painted at the native size (and can therefore be bitmaps), except for the center which will be scaled:
Some plasma components may use the above named elements with prefixes. For example the panel placed on the left side of the screen uses the "west" prefix (west-topleft, west-topright, etc.).
Additionally, the following elements can be used to control the rendering of the backgrounds:
From KDE 4.3 can exists an element called overlay (or prefix-overlay if to be appled to a frame with a different prefix) it will be rendered over the frame as a filigrane effects, with the rules given from the following mutually exclusive hints:
Themes get installed to share/apps/desktoptheme. Each theme is stored in a subdirectory with the following file structure
In the folder share/apps/desktoptheme/opaque the same hierarchy can be found: when compositing is disabled files in this folder are preferred over the corresponding ones listed above. Only background for top level windows are appropriate to go in this folder.
Since top-level windows will be shaped according to the transparency of the svg and window shapes don't support alpha-blending, if the svg has rounded borders they should have a shape that don't require antialiasing, like the following example.