mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
scroll behaviour
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
/* border: heavy green;*/
|
||||
layout: vertical;
|
||||
text: on dark_green;
|
||||
overflow: hidden auto;
|
||||
overflow: auto auto;
|
||||
border: heavy white;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ class Screen(Widget):
|
||||
send_resize = shown | resized
|
||||
|
||||
for widget, region, unclipped_region, virtual_size in self._compositor:
|
||||
# widget._update_size(unclipped_region.size, virtual_size)
|
||||
widget.size_updated(unclipped_region.size, virtual_size)
|
||||
if widget in send_resize:
|
||||
widget.post_message_no_wait(
|
||||
events.Resize(self, unclipped_region.size, virtual_size)
|
||||
|
||||
@@ -113,7 +113,7 @@ class ScrollBarRender:
|
||||
blank = " " * width_thickness
|
||||
|
||||
foreground_meta = {"@mouse.up": "release", "@mouse.down": "grab"}
|
||||
if window_size and size and virtual_size:
|
||||
if window_size and size and virtual_size and size != virtual_size:
|
||||
step_size = virtual_size / size
|
||||
|
||||
start = int(position / step_size * 8)
|
||||
|
||||
@@ -172,28 +172,28 @@ class Widget(DOMNode):
|
||||
overflow_x = styles.overflow_x
|
||||
overflow_y = styles.overflow_y
|
||||
|
||||
width, height = self.scroll_size
|
||||
|
||||
if overflow_x == "hidden":
|
||||
self.show_horizontal_scrollbar = False
|
||||
elif overflow_x == "scroll":
|
||||
self.show_horizontal_scrollbar = True
|
||||
elif overflow_x == "auto":
|
||||
self.show_horizontal_scrollbar = (
|
||||
self.virtual_size.width > self.scroll_size.width
|
||||
)
|
||||
self.show_horizontal_scrollbar = self.virtual_size.width > width
|
||||
# height -= self.show_horizontal_scrollbar
|
||||
|
||||
if overflow_y == "hidden":
|
||||
self.show_vertical_scrollbar = False
|
||||
elif overflow_y == "scroll":
|
||||
self.show_vertical_scrollbar = True
|
||||
elif overflow_y == "auto":
|
||||
self.show_vertical_scrollbar = (
|
||||
self.virtual_size.height > self.scroll_size.height
|
||||
)
|
||||
self.show_vertical_scrollbar = self.virtual_size.height > height
|
||||
|
||||
self.log(
|
||||
"REFRESH_SCROLLBARS",
|
||||
self,
|
||||
self.virtual_size.height,
|
||||
self.scroll_size.height,
|
||||
self.virtual_size,
|
||||
self.scroll_size,
|
||||
)
|
||||
|
||||
@property
|
||||
@@ -413,7 +413,9 @@ class Widget(DOMNode):
|
||||
|
||||
@property
|
||||
def scroll_size(self) -> Size:
|
||||
return self._size - self.styles.gutter.totals
|
||||
scroll_size = self._size - self.styles.gutter.totals
|
||||
scroll_size -= (self.show_vertical_scrollbar, self.show_horizontal_scrollbar)
|
||||
return scroll_size
|
||||
|
||||
@property
|
||||
def virtual_size(self) -> Size:
|
||||
@@ -476,7 +478,7 @@ class Widget(DOMNode):
|
||||
if self._size != size or self._virtual_size != virtual_size:
|
||||
self._size = size
|
||||
self._virtual_size = virtual_size
|
||||
self._refresh_scrollbars()
|
||||
# self._refresh_scrollbars()
|
||||
width, height = self.scroll_size
|
||||
if self.show_vertical_scrollbar:
|
||||
self.vscroll.window_virtual_size = virtual_size.height
|
||||
@@ -577,8 +579,8 @@ class Widget(DOMNode):
|
||||
self.log(self, f"IS NOT RUNNING, {message!r} not sent")
|
||||
return await super().post_message(message)
|
||||
|
||||
async def on_resize(self, event: events.Resize) -> None:
|
||||
self.size_updated(event.size, event.virtual_size)
|
||||
# async def on_resize(self, event: events.Resize) -> None:
|
||||
# self.size_updated(event.size, event.virtual_size)
|
||||
|
||||
async def on_idle(self, event: events.Idle) -> None:
|
||||
repaint, layout = self.styles.check_refresh()
|
||||
|
||||
Reference in New Issue
Block a user