mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
[css] Address PR feedback for our new "scrollbar-size" CSS properties
This commit is contained in:
@@ -74,7 +74,7 @@ App > Screen {
|
||||
|
||||
|
||||
Tweet {
|
||||
height: auto;
|
||||
height: 12;
|
||||
width: 80;
|
||||
|
||||
margin: 1 3;
|
||||
@@ -90,6 +90,15 @@ Tweet {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
Tweet.scrollbar-size-custom {
|
||||
scrollbar-size-vertical: 2;
|
||||
}
|
||||
|
||||
|
||||
Tweet.scroll-horizontal {
|
||||
scrollbar-size-horizontal: 2;
|
||||
}
|
||||
|
||||
.scrollable {
|
||||
width: 80;
|
||||
overflow-y: scroll;
|
||||
@@ -114,12 +123,15 @@ TweetHeader {
|
||||
}
|
||||
|
||||
TweetBody {
|
||||
width: 130%;
|
||||
width: 100%;
|
||||
background: $panel;
|
||||
color: $text-panel;
|
||||
height: auto;
|
||||
padding: 0 1 0 0;
|
||||
}
|
||||
|
||||
Tweet.scroll-horizontal TweetBody {
|
||||
width: 130%;
|
||||
}
|
||||
|
||||
.button {
|
||||
|
||||
@@ -107,15 +107,15 @@ class BasicApp(App, css_path="basic.css"):
|
||||
),
|
||||
),
|
||||
content=Widget(
|
||||
Tweet(TweetBody(), classes="scrollbar-size-test"),
|
||||
Tweet(TweetBody()),
|
||||
Widget(
|
||||
Static(Syntax(CODE, "python"), classes="code"),
|
||||
classes="scrollable",
|
||||
),
|
||||
Error(),
|
||||
Tweet(TweetBody()),
|
||||
Tweet(TweetBody(), classes="scrollbar-size-custom"),
|
||||
Warning(),
|
||||
Tweet(TweetBody()),
|
||||
Tweet(TweetBody(), classes="scroll-horizontal"),
|
||||
Success(),
|
||||
),
|
||||
footer=Widget(),
|
||||
|
||||
@@ -646,7 +646,9 @@ def scrollbar_size_property_help_text(context: StylingContext) -> HelpText:
|
||||
),
|
||||
],
|
||||
).get_by_context(context),
|
||||
Bullet("<horizontal> and <vertical> must be positive integers"),
|
||||
Bullet(
|
||||
"<horizontal> and <vertical> must be positive integers, greater than zero"
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
@@ -664,7 +666,7 @@ def scrollbar_size_single_axis_help_text(property_name: str) -> HelpText:
|
||||
summary=f"Invalid value for [i]{property_name}[/]",
|
||||
bullets=[
|
||||
Bullet(
|
||||
markup=f"The [i]{property_name}[/] property can only be set to a positive integer",
|
||||
markup=f"The [i]{property_name}[/] property can only be set to a positive integer, greather than zero",
|
||||
examples=[
|
||||
Example(f"{property_name}: 2;"),
|
||||
],
|
||||
|
||||
@@ -802,7 +802,12 @@ class StylesBuilder:
|
||||
if token2.name != "number" or not token2.value.isdigit():
|
||||
scrollbar_size_error(name, token2)
|
||||
|
||||
horizontal, vertical = int(token1.value), int(token2.value)
|
||||
horizontal = int(token1.value)
|
||||
if horizontal == 0:
|
||||
scrollbar_size_error(name, token1)
|
||||
vertical = int(token2.value)
|
||||
if vertical == 0:
|
||||
scrollbar_size_error(name, token2)
|
||||
self.styles._rules["scrollbar_size_horizontal"] = horizontal
|
||||
self.styles._rules["scrollbar_size_vertical"] = vertical
|
||||
|
||||
@@ -815,7 +820,10 @@ class StylesBuilder:
|
||||
token = tokens[0]
|
||||
if token.name != "number" or not token.value.isdigit():
|
||||
self.error(name, token, scrollbar_size_single_axis_help_text(name))
|
||||
self.styles._rules["scrollbar_size_vertical"] = int(token.value)
|
||||
value = int(token.value)
|
||||
if value == 0:
|
||||
self.error(name, token, scrollbar_size_single_axis_help_text(name))
|
||||
self.styles._rules["scrollbar_size_vertical"] = value
|
||||
|
||||
def process_scrollbar_size_horizontal(self, name: str, tokens: list[Token]) -> None:
|
||||
if not tokens:
|
||||
@@ -826,7 +834,10 @@ class StylesBuilder:
|
||||
token = tokens[0]
|
||||
if token.name != "number" or not token.value.isdigit():
|
||||
self.error(name, token, scrollbar_size_single_axis_help_text(name))
|
||||
self.styles._rules["scrollbar_size_horizontal"] = int(token.value)
|
||||
value = int(token.value)
|
||||
if value == 0:
|
||||
self.error(name, token, scrollbar_size_single_axis_help_text(name))
|
||||
self.styles._rules["scrollbar_size_horizontal"] = value
|
||||
|
||||
def _get_suggested_property_name_for_rule(self, rule_name: str) -> str | None:
|
||||
"""
|
||||
|
||||
@@ -288,13 +288,9 @@ class Widget(DOMNode):
|
||||
|
||||
if self._vertical_scrollbar is not None:
|
||||
return self._vertical_scrollbar
|
||||
thickness = (
|
||||
1
|
||||
if self.styles.scrollbar_size_vertical is None
|
||||
else int(self.styles.scrollbar_size_vertical.value)
|
||||
)
|
||||
(vertical_scrollbar_thickness, _) = self._get_scrollbar_thicknesses()
|
||||
self._vertical_scrollbar = scroll_bar = ScrollBar(
|
||||
vertical=True, name="vertical", thickness=thickness
|
||||
vertical=True, name="vertical", thickness=vertical_scrollbar_thickness
|
||||
)
|
||||
self.app.start_widget(self, scroll_bar)
|
||||
return scroll_bar
|
||||
@@ -310,13 +306,9 @@ class Widget(DOMNode):
|
||||
|
||||
if self._horizontal_scrollbar is not None:
|
||||
return self._horizontal_scrollbar
|
||||
thickness = (
|
||||
1
|
||||
if self.styles.scrollbar_size_horizontal is None
|
||||
else int(self.styles.scrollbar_size_horizontal.value)
|
||||
)
|
||||
(_, horizontal_scrollbar_thickness) = self._get_scrollbar_thicknesses()
|
||||
self._horizontal_scrollbar = scroll_bar = ScrollBar(
|
||||
vertical=False, name="horizontal", thickness=thickness
|
||||
vertical=False, name="horizontal", thickness=horizontal_scrollbar_thickness
|
||||
)
|
||||
|
||||
self.app.start_widget(self, scroll_bar)
|
||||
@@ -330,9 +322,6 @@ class Widget(DOMNode):
|
||||
styles = self.styles
|
||||
overflow_x = styles.overflow_x
|
||||
overflow_y = styles.overflow_y
|
||||
scrollbar_size_horizontal = styles.scrollbar_size_horizontal
|
||||
scrollbar_size_vertical = styles.scrollbar_size_vertical
|
||||
overflow_y = styles.overflow_y
|
||||
width, height = self.container_size
|
||||
|
||||
show_horizontal = self.show_horizontal_scrollbar
|
||||
@@ -342,11 +331,6 @@ class Widget(DOMNode):
|
||||
show_horizontal = True
|
||||
elif overflow_x == "auto":
|
||||
show_horizontal = self.virtual_size.width > width
|
||||
if (
|
||||
scrollbar_size_horizontal is not None
|
||||
and scrollbar_size_horizontal.value == 0
|
||||
):
|
||||
show_horizontal = False
|
||||
|
||||
show_vertical = self.show_vertical_scrollbar
|
||||
if overflow_y == "hidden":
|
||||
@@ -355,8 +339,6 @@ class Widget(DOMNode):
|
||||
show_vertical = True
|
||||
elif overflow_y == "auto":
|
||||
show_vertical = self.virtual_size.height > height
|
||||
if scrollbar_size_vertical is not None and scrollbar_size_vertical.value == 0:
|
||||
show_vertical = False
|
||||
|
||||
self.show_horizontal_scrollbar = show_horizontal
|
||||
self.show_vertical_scrollbar = show_vertical
|
||||
|
||||
@@ -266,8 +266,6 @@ async def test_border_edge_types_impact_on_widget_size(
|
||||
("overflow: auto", "scrollbar-size: 3 3"),
|
||||
Size(20, 17),
|
||||
],
|
||||
# edge case: scrollbars should not be displayed at all if their size is set to 0
|
||||
[Size(30, 30), ("overflow: auto", "scrollbar-size: 0 0"), Size(20, 20)],
|
||||
),
|
||||
)
|
||||
async def test_scrollbar_size_impact_on_the_layout(
|
||||
|
||||
Reference in New Issue
Block a user