3333from textual ._cells import cell_len
3434from textual ._context import visible_screen_stack
3535from textual ._loop import loop_last
36- from textual .geometry import NULL_OFFSET , NULL_SPACING , Offset , Region , Size , Spacing
36+ from textual .geometry import NULL_SPACING , Offset , Region , Size , Spacing
3737from textual .map_geometry import MapGeometry
3838from textual .strip import Strip , StripRenderable
3939
@@ -535,8 +535,6 @@ def _arrange_root(
535535 Compositor map and set of widgets.
536536 """
537537
538- ORIGIN = NULL_OFFSET
539-
540538 map : CompositorMap = {}
541539 widgets : set [Widget ] = set ()
542540 add_new_widget = widgets .add
@@ -580,15 +578,9 @@ def add_widget(
580578 add_new_widget (widget )
581579 else :
582580 add_new_invisible_widget (widget )
583- styles_offset = styles .offset
584- layout_offset = (
585- styles_offset .resolve (region .size , clip .size )
586- if styles_offset
587- else ORIGIN
588- )
589581
590582 # Container region is minus border
591- container_region = region .shrink (styles .gutter ). translate ( layout_offset )
583+ container_region = region .shrink (styles .gutter )
592584 container_size = container_region .size
593585
594586 # Widgets with scrollbars (containers or scroll view) require additional processing
@@ -643,15 +635,25 @@ def add_widget(
643635 )
644636
645637 # Add all the widgets
646- for sub_region , _ , sub_widget , z , fixed , overlay in reversed (
647- placements
648- ):
638+ for (
639+ sub_region ,
640+ sub_region_offset ,
641+ _ ,
642+ sub_widget ,
643+ z ,
644+ fixed ,
645+ overlay ,
646+ ) in reversed (placements ):
649647 layer_index = get_layer_index (sub_widget .layer , 0 )
650648 # Combine regions with children to calculate the "virtual size"
651649 if fixed :
652- widget_region = sub_region + placement_offset
650+ widget_region = (
651+ sub_region + sub_region_offset + placement_offset
652+ )
653653 else :
654- widget_region = sub_region + placement_scroll_offset
654+ widget_region = (
655+ sub_region + sub_region_offset + placement_scroll_offset
656+ )
655657
656658 widget_order = order + ((layer_index , z , layer_order ),)
657659
@@ -699,7 +701,7 @@ def add_widget(
699701 )
700702
701703 map [widget ] = _MapGeometry (
702- region + layout_offset ,
704+ region ,
703705 order ,
704706 clip ,
705707 total_region .size ,
@@ -711,27 +713,23 @@ def add_widget(
711713 elif visible :
712714 # Add the widget to the map
713715
714- widget_region = region + layout_offset
715-
716716 if widget .absolute_offset is not None :
717717 margin = styles .margin
718- widget_region = widget_region .at_offset (
719- widget .absolute_offset + margin .top_left
720- )
721- widget_region = widget_region .translate (
722- styles .offset .resolve (widget_region .grow (margin ).size , size )
718+ region = region .at_offset (widget .absolute_offset + margin .top_left )
719+ region = region .translate (
720+ styles .offset .resolve (region .grow (margin ).size , size )
723721 )
724722 has_rule = styles .has_rule
725723 if has_rule ("constrain_x" ) or has_rule ("constrain_y" ):
726- widget_region = widget_region .constrain (
724+ region = region .constrain (
727725 styles .constrain_x ,
728726 styles .constrain_y ,
729727 styles .margin ,
730728 size .region ,
731729 )
732730
733731 map [widget ._render_widget ] = _MapGeometry (
734- widget_region ,
732+ region ,
735733 order ,
736734 clip ,
737735 region .size ,
0 commit comments