scroll behaviour

This commit is contained in:
Will McGugan
2022-03-21 14:13:10 +00:00
parent 89033238c4
commit 2dd362e10c
4 changed files with 17 additions and 15 deletions

View File

@@ -2,7 +2,7 @@
/* border: heavy green;*/
layout: vertical;
text: on dark_green;
overflow: hidden auto;
overflow: auto auto;
border: heavy white;
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()