[css] Address PR feedback for our new "scrollbar-size" CSS properties

This commit is contained in:
Olivier Philippon
2022-05-20 15:15:56 +01:00
parent 9e6140af7c
commit a55b122967
6 changed files with 40 additions and 35 deletions

View File

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

View File

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

View File

@@ -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;"),
],

View File

@@ -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:
"""

View File

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

View File

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