[core] Added min-width and alignment themeing

Added theme-options ("minwidth" and "align") for setting the minimum
width and the alignment of a widget.

Also, allow widget to provide defaults for the theme options by setting
an attribute in their store called "theme-<name of the theme option>".

For example, a widget can now define a default alignment by using:
widget.set("theme-align", "default-value").
This commit is contained in:
Tobias Witek 2017-04-22 08:24:52 +02:00
parent 430c9f5e93
commit 5db5e02086
2 changed files with 11 additions and 0 deletions

View file

@ -89,6 +89,8 @@ class I3BarOutput(object):
"background": self._theme.bg(widget), "background": self._theme.bg(widget),
"separator_block_width": self._theme.separator_block_width(widget), "separator_block_width": self._theme.separator_block_width(widget),
"separator": True if separator is None else False, "separator": True if separator is None else False,
"min_width": self._theme.minwidth(widget),
"align": self._theme.align(widget),
"instance": widget.id, "instance": widget.id,
"name": module.id, "name": module.id,
}) })

View file

@ -74,6 +74,14 @@ class Theme(object):
"""Return the background color for this widget""" """Return the background color for this widget"""
return self._get(widget, "bg", None) return self._get(widget, "bg", None)
def align(self, widget):
"""Return the widget alignment"""
return self._get(widget, "align", None)
def minwidth(self, widget):
"""Return the minimum width string for this widget"""
return self._get(widget, "minwidth", "")
def separator(self, widget): def separator(self, widget):
"""Return the separator between widgets""" """Return the separator between widgets"""
return self._get(widget, "separator", None) return self._get(widget, "separator", None)
@ -131,6 +139,7 @@ class Theme(object):
state_themes.append(self._get(widget, state, {})) state_themes.append(self._get(widget, state, {}))
value = self._defaults.get(name, default) value = self._defaults.get(name, default)
value = widget.get("theme-{}".format(name), value)
value = self._cycle.get(name, value) value = self._cycle.get(name, value)
value = module_theme.get(name, value) value = module_theme.get(name, value)