diff --git a/CHANGELOG.md b/CHANGELOG.md index dad5c87e6f..1205be91da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## Unreleased + +### Added + +- Added experimental opt-in support for https://github.com/willmcgugan/textual-speedups + ## [3.3.0] - 2025-06-01 ### Fixed diff --git a/src/textual/_compositor.py b/src/textual/_compositor.py index 76103ec47c..245abf6ccb 100644 --- a/src/textual/_compositor.py +++ b/src/textual/_compositor.py @@ -419,7 +419,7 @@ def reflow(self, parent: Widget, size: Size) -> ReflowResult: resized_widgets = { widget for widget, (region, *_) in changes - if (widget in common_widgets and old_map[widget].region[2:] != region[2:]) + if (widget in common_widgets and old_map[widget].region.size != region.size) } return ReflowResult( hidden=hidden_widgets, diff --git a/src/textual/geometry.py b/src/textual/geometry.py index 9847052fa8..3a7ab64d3c 100644 --- a/src/textual/geometry.py +++ b/src/textual/geometry.py @@ -5,6 +5,7 @@ from __future__ import annotations +import os from functools import lru_cache from operator import attrgetter, itemgetter from typing import ( @@ -1315,6 +1316,13 @@ def grow_maximum(self, other: Spacing) -> Spacing: ) +if not TYPE_CHECKING and os.environ.get("TEXTUAL_SPEEDUPS") == "1": + try: + from textual_speedups import Offset, Region, Size, Spacing + except ImportError: + pass + + NULL_OFFSET: Final = Offset(0, 0) """An [offset][textual.geometry.Offset] constant for (0, 0)."""