Skip to content

Commit ab89ac8

Browse files
committed
Use generic Slide<T>
1 parent eb1662e commit ab89ac8

File tree

12 files changed

+289
-118
lines changed

12 files changed

+289
-118
lines changed

samples/ControlsDemo/Demos/ScrollBarDemo.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,21 @@ public override Visual Build(DemoContext context)
1818
.Minimum(0)
1919
.Maximum(100)
2020
.ViewportSize(20)
21-
.ScrollValue(40);
21+
.Value(40);
2222

2323
var h = new HScrollBar(focusable: true)
2424
.Minimum(0)
2525
.Maximum(100)
2626
.ViewportSize(30)
27-
.ScrollValue(60);
27+
.Value(60);
2828

2929
return new VStack(
3030
DemoUi.Hint("ScrollBar exposes Minimum/Maximum/Value and a ValueChanged event."),
3131
new HStack(
3232
new VStack(v.MinHeight(20).MaxHeight(20)).HorizontalAlignment(HorizontalAlignment.Left).VerticalAlignment(VerticalAlignment.Top),
3333
new VStack(h).MinWidth(50).MaxWidth(50).HorizontalAlignment(HorizontalAlignment.Left).VerticalAlignment(VerticalAlignment.Top))
3434
.Spacing(2),
35-
new TextBlock(() => $"Vertical: {v.ScrollValue}, Horizontal: {h.ScrollValue}"))
35+
new TextBlock(() => $"Vertical: {v.Value}, Horizontal: {h.Value}"))
3636
.Spacing(1);
3737
}
3838
}

samples/ControlsDemo/Demos/SliderDemo.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ public SliderDemo() : base(DemoSource.Get())
1212

1313
public override Visual Build(DemoContext context)
1414
{
15-
var value = new State<double>(0.35);
15+
var value = new State<int>(35);
1616

1717
return new VStack(
1818
DemoUi.Hint("Slider can be controlled with keyboard or mouse drag."),
19-
new Slider
19+
new Slider<int>
2020
{
21-
Minimum = 0.0,
22-
Maximum = 1.0,
23-
Step = 0.05,
21+
Minimum = 0,
22+
Maximum = 100,
23+
Step = 5,
2424
ShowValueLabel = true,
25-
ValueFormatter = v => $"{(int)Math.Round(v * 100)}%",
25+
ValueFormatter = v => $"{v}%",
2626
}.Value(value),
27-
new TextBlock(() => $"Value: {value.Value:0.00}"),
28-
new Button("Log value").Click(() => context.Log($"Slider: {value.Value:0.00}")))
27+
new TextBlock(() => $"Value: {value.Value}%"),
28+
new Button("Log value").Click(() => context.Log($"Slider: {value.Value}%")))
2929
.Spacing(1);
3030
}
3131
}

samples/ControlsDemo/Demos/TextFigletDemo.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@ public override Visual Build(DemoContext context)
1919
_ = context;
2020

2121
var text = new State<string?>("XenoAtom");
22-
var spacing = new State<double>(1);
22+
var spacing = new State<int>(1);
2323

2424
return new VStack(
2525
DemoUi.Hint("TextFiglet renders multi-line banner text. Bind Text to a State to update live."),
2626
new HStack(
2727
new TextBlock("Text:"),
2828
new TextBox().Text(text).MinWidth(20).MaxWidth(20),
2929
new TextBlock("Spacing:"),
30-
new Slider().Minimum(1).Maximum(8).Value(spacing).MinWidth(16).MaxWidth(16),
31-
new TextBlock(() => $"{(int)spacing.Value}"))
30+
new Slider<int>().Minimum(1).Maximum(8).Value(spacing).MinWidth(16).MaxWidth(16),
31+
new TextBlock(() => $"{spacing.Value}"))
3232
.Spacing(1).VerticalAlignment(VerticalAlignment.Top),
3333
new Border(
3434
new TextFiglet()
3535
.Text(text)
3636
.Font(FigletFont.Standard)
37-
.LetterSpacing(() => (int)spacing.Value)
37+
.LetterSpacing(spacing)
3838
.TextAlignment(TextAlignment.Left)
3939
.Style(TextFigletStyle.Default with
4040
{

samples/FullscreenDemo/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ void ShowModalDialog()
175175
.HorizontalAlignment(HorizontalAlignment.Stretch),
176176
new HStack(
177177
"Slider:",
178-
new Slider()
178+
new Slider<double>()
179179
.Minimum(0)
180180
.Maximum(1)
181181
.Step(0.05)

src/XenoAtom.Terminal.UI.SourceGen/TerminalUiGenerator.cs

Lines changed: 177 additions & 15 deletions
Large diffs are not rendered by default.

src/XenoAtom.Terminal.UI.Tests/ScrollViewerLayoutTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public sealed class ScrollViewerLayoutTests
1515
[TestMethod]
1616
public void ScrollViewer_Stretches_Content_To_Viewport_When_NoHorizontalScrolling()
1717
{
18-
var content = new VStack("Hello");
18+
var content = new VStack("Hello").VerticalAlignment(VerticalAlignment.Stretch);
1919
var scroll = new ScrollViewer(content);
2020

2121
var root = new DockLayout().Content(scroll);

src/XenoAtom.Terminal.UI.Tests/SliderValueTests.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public sealed class SliderValueTests
1111
[TestMethod]
1212
public void Value_Is_Clamped_To_Range()
1313
{
14-
var slider = new Slider
14+
var slider = new Slider<int>
1515
{
1616
Minimum = 0,
1717
Maximum = 10,
@@ -28,7 +28,7 @@ public void Value_Is_Clamped_To_Range()
2828
[TestMethod]
2929
public void Value_Snaps_To_Step()
3030
{
31-
var slider = new Slider
31+
var slider = new Slider<int>
3232
{
3333
Minimum = 0,
3434
Maximum = 10,
@@ -43,7 +43,7 @@ public void Value_Snaps_To_Step()
4343
[TestMethod]
4444
public void Range_Is_Kept_Consistent()
4545
{
46-
var slider = new Slider();
46+
var slider = new Slider<int>();
4747
slider.Maximum = 0;
4848
slider.Minimum = 5;
4949

@@ -52,4 +52,3 @@ public void Range_Is_Kept_Consistent()
5252
Assert.AreEqual(5, slider.Value);
5353
}
5454
}
55-

src/XenoAtom.Terminal.UI/Controls/ScrollBar.cs

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,7 @@ protected ScrollBar(bool focusable = true)
3838
HorizontalAlignment = HorizontalAlignment.Stretch;
3939
}
4040

41-
this.Minimum(0);
42-
this.Maximum(0);
43-
this.ScrollValue(0);
44-
this.ViewportSize(0);
45-
this.SmallChange(1);
46-
this.LargeChange(0);
41+
this.SmallChange = 1;
4742
}
4843

4944
/// <summary>
@@ -67,7 +62,7 @@ protected ScrollBar(bool focusable = true)
6762
/// Gets or sets the current value.
6863
/// </summary>
6964
[Bindable]
70-
public partial int ScrollValue { get; set; }
65+
public partial int Value { get; set; }
7166

7267
/// <summary>
7368
/// Gets or sets the viewport size, used to compute the thumb length.
@@ -93,13 +88,13 @@ protected ScrollBar(bool focusable = true)
9388

9489
partial void OnLargeChangeChanging(ref int value) => ArgumentOutOfRangeException.ThrowIfNegative(value);
9590

96-
partial void OnScrollValueChanging(ref int value)
91+
partial void OnValueChanging(ref int value)
9792
{
98-
_oldValueForEvent = _scrollValue;
93+
_oldValueForEvent = _value;
9994
value = Clamp(value);
10095
}
10196

102-
partial void OnScrollValueChanged(int value)
97+
partial void OnValueChanged(int value)
10398
{
10499
if (_oldValueForEvent != value)
105100
{
@@ -248,7 +243,7 @@ private void RenderHorizontal(CellBuffer buffer, Rectangle rect, ScrollBarGlyphs
248243
thumbLength = Math.Clamp(thumbLength, minThumb, trackLength);
249244

250245
var trackAvail = Math.Max(1, trackLength - thumbLength);
251-
var offset = Math.Clamp(ScrollValue - min, 0, range);
246+
var offset = Math.Clamp(Value - min, 0, range);
252247
var thumbStart = (int)Math.Round((double)offset * trackAvail / range);
253248
thumbStart = Math.Clamp(thumbStart, 0, trackLength - thumbLength);
254249

@@ -278,7 +273,7 @@ protected override void OnPointerPressed(PointerEventArgs e)
278273
_dragging = true;
279274
_dragStartUiX = e.UiX;
280275
_dragStartUiY = e.UiY;
281-
_dragStartValue = ScrollValue;
276+
_dragStartValue = Value;
282277
e.Handled = true;
283278
return;
284279
}
@@ -290,7 +285,7 @@ protected override void OnPointerPressed(PointerEventArgs e)
290285
page = Math.Max(1, ViewportSize);
291286
}
292287

293-
ScrollValue = local < thumbStart ? ScrollValue - page : ScrollValue + page;
288+
Value = local < thumbStart ? Value - page : Value + page;
294289
e.Handled = true;
295290
}
296291

@@ -327,7 +322,7 @@ protected override void OnPointerMoved(PointerEventArgs e)
327322

328323
var delta = Orientation == Orientation.Vertical ? (e.UiY - _dragStartUiY) : (e.UiX - _dragStartUiX);
329324
var deltaValue = (int)Math.Round((double)delta * range / trackAvail);
330-
ScrollValue = Math.Clamp(_dragStartValue + deltaValue, min, max);
325+
Value = Math.Clamp(_dragStartValue + deltaValue, min, max);
331326
e.Handled = true;
332327
}
333328

@@ -355,7 +350,7 @@ protected override void OnPointerWheel(PointerEventArgs e)
355350
}
356351

357352
var step = Math.Max(1, SmallChange);
358-
ScrollValue = e.WheelDelta > 0 ? ScrollValue - step : ScrollValue + step;
353+
Value = e.WheelDelta > 0 ? Value - step : Value + step;
359354
e.Handled = true;
360355
}
361356

@@ -370,27 +365,27 @@ protected override void OnKeyDown(KeyEventArgs e)
370365
switch (e.Key)
371366
{
372367
case TerminalKey.Up:
373-
ScrollValue -= step;
368+
Value -= step;
374369
e.Handled = true;
375370
return;
376371
case TerminalKey.Down:
377-
ScrollValue += step;
372+
Value += step;
378373
e.Handled = true;
379374
return;
380375
case TerminalKey.PageUp:
381-
ScrollValue -= page;
376+
Value -= page;
382377
e.Handled = true;
383378
return;
384379
case TerminalKey.PageDown:
385-
ScrollValue += page;
380+
Value += page;
386381
e.Handled = true;
387382
return;
388383
case TerminalKey.Home:
389-
ScrollValue = Minimum;
384+
Value = Minimum;
390385
e.Handled = true;
391386
return;
392387
case TerminalKey.End:
393-
ScrollValue = Maximum;
388+
Value = Maximum;
394389
e.Handled = true;
395390
return;
396391
}
@@ -400,27 +395,27 @@ protected override void OnKeyDown(KeyEventArgs e)
400395
switch (e.Key)
401396
{
402397
case TerminalKey.Left:
403-
ScrollValue -= step;
398+
Value -= step;
404399
e.Handled = true;
405400
return;
406401
case TerminalKey.Right:
407-
ScrollValue += step;
402+
Value += step;
408403
e.Handled = true;
409404
return;
410405
case TerminalKey.PageUp:
411-
ScrollValue -= page;
406+
Value -= page;
412407
e.Handled = true;
413408
return;
414409
case TerminalKey.PageDown:
415-
ScrollValue += page;
410+
Value += page;
416411
e.Handled = true;
417412
return;
418413
case TerminalKey.Home:
419-
ScrollValue = Minimum;
414+
Value = Minimum;
420415
e.Handled = true;
421416
return;
422417
case TerminalKey.End:
423-
ScrollValue = Maximum;
418+
Value = Maximum;
424419
e.Handled = true;
425420
return;
426421
}

src/XenoAtom.Terminal.UI/Controls/ScrollViewer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,15 +598,15 @@ private void OnHorizontalBarValueChanged(object? sender, ScrollValueChangedEvent
598598

599599
private void SetBarValue(ScrollBar bar, int value)
600600
{
601-
if (bar.ScrollValue == value)
601+
if (bar.Value == value)
602602
{
603603
return;
604604
}
605605

606606
_syncingOffsets = true;
607607
try
608608
{
609-
bar.ScrollValue = value;
609+
bar.Value = value;
610610
}
611611
finally
612612
{

0 commit comments

Comments
 (0)