mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
narrow updates
This commit is contained in:
@@ -714,14 +714,17 @@ class App(Generic[ReturnType], DOMNode):
|
||||
"""
|
||||
return self.screen.get_child(id)
|
||||
|
||||
def update_styles(self) -> None:
|
||||
def update_styles(self, node: DOMNode | None = None) -> None:
|
||||
"""Request update of styles.
|
||||
|
||||
Should be called whenever CSS classes / pseudo classes change.
|
||||
|
||||
"""
|
||||
self._require_stylesheet_update = True
|
||||
self.check_idle()
|
||||
if node is None:
|
||||
self._require_stylesheet_update = True
|
||||
self.check_idle()
|
||||
else:
|
||||
self.stylesheet.update(node, animate=True)
|
||||
|
||||
def update_visible_styles(self) -> None:
|
||||
"""Update visible styles only."""
|
||||
|
||||
@@ -27,6 +27,8 @@ from .types import Specificity3, Specificity6
|
||||
from ..dom import DOMNode
|
||||
from .. import messages
|
||||
|
||||
from .._profile import timer
|
||||
|
||||
|
||||
class StylesheetParseError(StylesheetError):
|
||||
def __init__(self, errors: StylesheetErrors) -> None:
|
||||
@@ -354,7 +356,6 @@ class Stylesheet:
|
||||
for name, specificity_rules in rule_attributes.items()
|
||||
},
|
||||
)
|
||||
|
||||
self.replace_rules(node, node_rules, animate=animate)
|
||||
|
||||
node._component_styles.clear()
|
||||
@@ -433,6 +434,7 @@ class Stylesheet:
|
||||
|
||||
node.post_message_no_wait(messages.StylesUpdated(sender=node))
|
||||
|
||||
@timer("update")
|
||||
def update(self, root: DOMNode, animate: bool = False) -> None:
|
||||
"""Update styles on node and its children.
|
||||
|
||||
@@ -440,8 +442,10 @@ class Stylesheet:
|
||||
root (DOMNode): Root note to update.
|
||||
animate (bool, optional): Enable CSS animation. Defaults to False.
|
||||
"""
|
||||
self.update_nodes(root.walk_children())
|
||||
print("update", root)
|
||||
self.update_nodes(root.walk_children(), animate=animate)
|
||||
|
||||
@timer("update_nodes")
|
||||
def update_nodes(self, nodes: Iterable[DOMNode], animate: bool = False) -> None:
|
||||
"""Update styles for nodes.
|
||||
|
||||
@@ -450,6 +454,8 @@ class Stylesheet:
|
||||
animate (bool, optional): Enable CSS animation. Defaults to False.
|
||||
"""
|
||||
apply = self.apply
|
||||
nodes = list(nodes)
|
||||
print(len(nodes), "NODES")
|
||||
for node in nodes:
|
||||
apply(node, animate=animate)
|
||||
if isinstance(node, Widget) and node.is_scrollable:
|
||||
|
||||
@@ -1227,11 +1227,11 @@ class Widget(DOMNode):
|
||||
|
||||
def watch_mouse_over(self, value: bool) -> None:
|
||||
"""Update from CSS if mouse over state changes."""
|
||||
self.app.update_visible_styles()
|
||||
self.app.update_styles(self)
|
||||
|
||||
def watch_has_focus(self, value: bool) -> None:
|
||||
"""Update from CSS if has focus state changes."""
|
||||
self.app.update_styles()
|
||||
self.app.update_styles(self)
|
||||
|
||||
def size_updated(
|
||||
self, size: Size, virtual_size: Size, container_size: Size
|
||||
|
||||
Reference in New Issue
Block a user