padding and margin

This commit is contained in:
Will McGugan
2021-11-25 16:43:59 +00:00
parent 172eeb787b
commit a73c921198
4 changed files with 29 additions and 10 deletions

View File

@@ -37,9 +37,13 @@ class BasicApp(App):
#footer { #footer {
dock-group: header; dock-group: header;
height: 3;
border-top: hkey #0f2b41; /* border-top: hkey #0f2b41; */
text: #3a3009 on #f6d55c; text: #3a3009 on #f6d55c;
/*padding: 2;*/
border: heavy red;
margin: 2;
} }
#content { #content {

View File

@@ -112,8 +112,8 @@ class StylesBuilder:
space: list[int] = [] space: list[int] = []
append = space.append append = space.append
for token in tokens: for token in tokens:
_, _, location, token_name, value = token (token_name, value, _, _, location) = token
if token_name == "number": if token_name == "scalar":
append(int(value)) append(int(value))
else: else:
self.error(name, token, f"unexpected token {value!r} in declaration") self.error(name, token, f"unexpected token {value!r} in declaration")
@@ -123,7 +123,7 @@ class StylesBuilder:
) )
setattr( setattr(
self.styles, self.styles,
f"_{name}", f"_rule_{name}",
Spacing.unpack(cast(SpacingDimensions, tuple(space))), Spacing.unpack(cast(SpacingDimensions, tuple(space))),
) )

View File

@@ -131,6 +131,14 @@ class Styles:
"""Check in a border is present.""" """Check in a border is present."""
return any(edge for edge, _style in self.border) return any(edge for edge, _style in self.border)
@property
def has_padding(self) -> bool:
return self._rule_padding is not None
@property
def has_margin(self) -> bool:
return self._rule_margin is not None
@property @property
def has_outline(self) -> bool: def has_outline(self) -> bool:
"""Check if an outline is present.""" """Check if an outline is present."""

View File

@@ -138,15 +138,22 @@ class Widget(DOMNode):
renderable = self.render() renderable = self.render()
styles = self.styles styles = self.styles
if self.padding is not None:
renderable = Padding(renderable, self.padding) if styles.has_padding:
renderable = Padding(renderable, styles.padding)
if styles.has_border: if styles.has_border:
renderable = Border(renderable, styles.border) renderable = Border(renderable, styles.border)
if self.margin is not None: if styles.has_outline:
renderable = Padding(renderable, self.margin) renderable = Border(renderable, styles.outline, outline=True)
renderable = Styled(renderable, styles.text)
if styles.has_margin:
renderable = Padding(renderable, styles.margin)
if styles.text:
renderable = Styled(renderable, styles.text)
return renderable return renderable
@property @property