CSS correctly applies

This commit is contained in:
Will McGugan
2021-11-19 22:12:38 +00:00
parent b5f3f367ac
commit ab443c3614
5 changed files with 28 additions and 26 deletions

View File

@@ -9,32 +9,33 @@ class BasicApp(App):
App > DockView {
layout: dock;
docks: sidebar=left | widgets=top;
docks: sidebar=left widgets=top;
}
#sidebar {
dock-group: sidebar;
width: 40;
}
#widget1 {
text-background: blue;
text: on blue;
dock-group: widgets;
height: 1fr;
}
#widget2 {
text: on red;
dock-group: widgets;
height: 1fr;
}
"""
async def on_mount(self) -> None:
"""Build layout here."""
self.log("MOUNT")
await self.view.mount(
sidebar=Placeholder(), widget1=Placeholder(), widget2=Placeholder()
)
self.log("MOUNTED CHILDREN", self.view.children)
BasicApp.run(log="textual.log")

View File

@@ -380,6 +380,7 @@ class App(DOMNode):
if widget not in self.registry:
if widget_id is not None:
widget.id = widget_id
self._register(parent, widget)
apply_stylesheet(widget)
widget.post_message_no_wait(events.Mount(sender=parent))

View File

@@ -24,7 +24,9 @@ class ScalarProperty:
def __set_name__(self, owner: Styles, name: str) -> None:
self.internal_name = f"_rule_{name}"
def __get__(self, obj: Styles, objtype: type[Styles] | None = None) -> Scalar:
def __get__(
self, obj: Styles, objtype: type[Styles] | None = None
) -> Scalar | None:
value = getattr(obj, self.internal_name)
return value

View File

@@ -48,18 +48,14 @@ class DockLayout(Layout):
self._docks: list[Dock] | None = None
def get_docks(self, view: View) -> list[Dock]:
log("CHILDREN", view.children)
groups: dict[str, list[Widget]] = defaultdict(list)
for child in view.children:
assert isinstance(child, Widget)
groups[child.styles.dock_group].append(child)
log("GROUPS", groups)
docks: list[Dock] = []
append_dock = docks.append
log("STYLES.DOCKS", view.styles)
for name, edge in view.styles.docks:
append_dock(Dock(edge, groups[name], 0))
log("DOCKS", docks)
return docks
def get_widgets(self, view: View) -> Iterable[DOMNode]:
@@ -77,24 +73,26 @@ class DockLayout(Layout):
docks = self.get_docks(view)
def make_dock_options(widget) -> DockOptions:
styles = widget.styles
return (
DockOptions(
styles.width.cells if styles.width is not None else None,
styles.width.fraction if styles.width is not None else 1,
styles.min_width.cells if styles.min_width is not None else 1,
)
if dock.edge in ("left", "right")
else DockOptions(
styles.height.cells if styles.height is not None else None,
styles.height.fraction if styles.height is not None else 1,
styles.min_height.cells if styles.min_height is not None else 1,
)
)
for index, dock in enumerate(docks):
dock_options = [
(
DockOptions(
widget.styles.width.cells,
widget.styles.width.fraction or 1,
widget.styles.min_width.cells or 1,
)
if dock.edge in ("left", "right")
else DockOptions(
widget.styles.height.cells,
widget.styles.height.fraction or 1,
widget.styles.min_height.cells or 1,
)
)
for widget in dock.widgets
]
dock_options = [make_dock_options(widget) for widget in dock.widgets]
region = layers[dock.z]
if not region:
# No space left

View File

@@ -135,7 +135,7 @@ class Widget(DOMNode):
Returns:
RenderableType: A new renderable.
"""
renderable = self.render()
renderable = Styled(self.render(), self.styles.text)
if self.padding is not None:
renderable = Padding(renderable, self.padding)
if self.border not in ("", "none"):