Skip to content

Commit 85f3757

Browse files
authored
Merge pull request #27 from kas-gui/push-vqtuvntsvovy
Update [WIP]
2 parents eabbaf1 + bf1aed9 commit 85f3757

19 files changed

Lines changed: 526 additions & 485 deletions

.cargo/config.toml

Lines changed: 0 additions & 2 deletions
This file was deleted.

.github/workflows/gh-pages.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Setup mdBook
2424
uses: peaceiris/actions-mdbook@v2
2525
with:
26-
mdbook-version: '0.4.21'
26+
mdbook-version: '0.4.52'
2727
# mdbook-version: 'latest'
2828

2929
- name: Build book

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
name = "kas-tutorials"
33
version = "0.1.0"
44
authors = ["Diggory Hardy <git@dhardy.name>"]
5-
edition = "2021"
5+
edition = "2024"
66
resolver = "2"
77
publish = false
88

99
[dependencies]
10-
env_logger = "0.10"
11-
kas = "0.14.2"
12-
kas-wgpu = "0.14.1"
10+
env_logger = "0.11"
11+
kas = "0.16"
12+
kas-wgpu = "0.16"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Example apps can be found in the
1010

1111
Run examples like this:
1212
```sh
13-
cargo run --example simple-window
13+
cargo run --example hello
1414
```
1515

1616
## Licence

examples/calculator.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
use kas::event::NamedKey;
2-
use kas::prelude::*;
3-
use kas::widgets::{AccessLabel, Adapt, Button, EditBox};
41
use std::num::ParseFloatError;
52
use std::str::FromStr;
63

4+
use kas::event::NamedKey;
5+
use kas::prelude::*;
6+
use kas::widgets::{AccessLabel, Adapt, Button, EditBox, column, grid};
7+
78
type Key = kas::event::Key<kas::event::SmolStr>;
89

910
fn key_button(label: &str) -> Button<AccessLabel> {
@@ -15,15 +16,15 @@ fn key_button_with(label: &str, key: Key) -> Button<AccessLabel> {
1516
Button::label_msg(label, key.clone()).with_access_key(key)
1617
}
1718

18-
fn calc_ui() -> impl Widget<Data = ()> {
19+
fn calc_ui() -> Window<()> {
1920
// We could use kas::widget::Text, but EditBox looks better.
2021
let display = EditBox::string(|calc: &Calculator| calc.display())
2122
.with_multi_line(true)
22-
.with_lines(3, 3)
23+
.with_lines(3.0, 3.0)
2324
.with_width_em(5.0, 10.0);
2425

2526
// We use map_any to avoid passing input data (not wanted by buttons):
26-
let buttons = kas::grid! {
27+
let buttons = grid! {
2728
// Key bindings: C, Del
2829
(0, 0) => Button::label_msg("&clear", Key::Named(NamedKey::Clear))
2930
.with_access_key(NamedKey::Delete.into()),
@@ -49,22 +50,22 @@ fn calc_ui() -> impl Widget<Data = ()> {
4950
}
5051
.map_any();
5152

52-
Adapt::new(kas::column![display, buttons], Calculator::new())
53-
.on_message(|_, calc, key| calc.handle(key))
54-
.on_configure(|cx, _| {
55-
cx.disable_nav_focus(true);
56-
cx.enable_alt_bypass(true);
57-
})
53+
let ui = Adapt::new(column![display, buttons], Calculator::new())
54+
.on_message(|_, calc, key| calc.handle(key));
55+
56+
Window::new(ui, "Calculator")
57+
.escapable()
58+
.with_alt_bypass()
59+
.without_nav_focus()
5860
}
5961

60-
fn main() -> kas::app::Result<()> {
62+
fn main() -> kas::runner::Result<()> {
6163
env_logger::init();
6264

63-
let theme = kas_wgpu::ShadedTheme::new().with_font_size(16.0);
64-
kas::app::Default::with_theme(theme)
65-
.build(())?
66-
.with(Window::new(calc_ui(), "Calculator"))
67-
.run()
65+
let theme = kas_wgpu::ShadedTheme::new();
66+
let mut app = kas::runner::Runner::with_theme(theme).build(())?;
67+
let _ = app.config_mut().font.set_size(24.0);
68+
app.with(calc_ui()).run()
6869
}
6970

7071
#[derive(Clone, Copy, Debug, PartialEq)]

examples/counter.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
use kas::prelude::*;
2-
use kas::widgets::{format_value, Adapt, Button};
2+
use kas::widgets::{Button, column, format_value, row};
33

44
#[derive(Clone, Debug)]
55
struct Increment(i32);
66

77
fn counter() -> impl Widget<Data = ()> {
8-
let tree = kas::column![
9-
align!(center, format_value!("{}")),
10-
kas::row![
11-
Button::label_msg("−", Increment(-1)),
12-
Button::label_msg("+", Increment(1)),
13-
]
14-
.map_any(),
8+
let buttons = row![
9+
Button::label_msg("−", Increment(-1)),
10+
Button::label_msg("+", Increment(1)),
11+
];
12+
let tree = column![
13+
format_value!("{}").align(AlignHints::CENTER),
14+
buttons.map_any(),
1515
];
1616

17-
Adapt::new(tree, 0).on_message(|_, count, Increment(add)| *count += add)
17+
tree.with_state(0)
18+
.on_message(|_, count, Increment(add)| *count += add)
1819
}
1920

20-
fn main() -> kas::app::Result<()> {
21+
fn main() -> kas::runner::Result<()> {
2122
env_logger::init();
2223

23-
let theme = kas::theme::SimpleTheme::new().with_font_size(24.0);
24-
kas::app::Default::with_theme(theme)
25-
.build(())?
26-
.with(Window::new(counter(), "Counter"))
27-
.run()
24+
let theme = kas::theme::SimpleTheme::new();
25+
let mut app = kas::runner::Runner::with_theme(theme).build(())?;
26+
let _ = app.config_mut().font.set_size(24.0);
27+
let window = Window::new(counter(), "Counter").escapable();
28+
app.with(window).run()
2829
}

examples/custom-widget.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
use kas::prelude::*;
2-
use kas::widgets::{format_value, AccessLabel, Button, Row, Text};
2+
use kas::widgets::{AccessLabel, Button, Row, Text, format_value};
33

44
#[derive(Clone, Debug)]
55
struct Increment(i32);
66

7-
impl_scope! {
8-
#[widget{
9-
layout = column![
10-
align!(center, self.display),
11-
self.buttons,
12-
];
13-
}]
7+
#[impl_self]
8+
mod Counter {
9+
#[widget]
10+
#[layout(column![
11+
self.display.align(AlignHints::CENTER),
12+
self.buttons,
13+
])]
1414
struct Counter {
1515
core: widget_core!(),
1616
#[widget(&self.count)]
1717
display: Text<i32, String>,
1818
#[widget]
19-
buttons: Row<Button<AccessLabel>>,
19+
buttons: Row<[Button<AccessLabel>; 2]>,
2020
count: i32,
2121
}
2222
impl Self {
@@ -44,12 +44,13 @@ impl_scope! {
4444
}
4545
}
4646

47-
fn main() -> kas::app::Result<()> {
47+
fn main() -> kas::runner::Result<()> {
4848
env_logger::init();
4949

50-
let theme = kas::theme::SimpleTheme::new().with_font_size(24.0);
51-
kas::app::Default::with_theme(theme)
52-
.build(())?
53-
.with(Window::new(Counter::new(0), "Counter"))
54-
.run()
50+
let window = Window::new(Counter::new(0), "Counter");
51+
52+
let theme = kas::theme::SimpleTheme::new();
53+
let mut app = kas::runner::Runner::with_theme(theme).build(())?;
54+
let _ = app.config_mut().font.set_size(24.0);
55+
app.with(window).run()
5556
}

examples/hello.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
use kas::widgets::dialog::MessageBox;
1+
use kas::widgets::{Button, column};
2+
use kas::window::Window;
23

3-
fn main() -> kas::app::Result<()> {
4-
env_logger::init();
4+
fn main() -> kas::runner::Result<()> {
5+
let ui = column![
6+
"Hello, world!",
7+
Button::label("&Close").with(|cx, _| cx.exit())
8+
];
9+
let window = Window::new(ui, "Hello").escapable();
510

6-
let window = MessageBox::new("Message").into_window("Hello world");
7-
8-
kas::app::Default::new(())?.with(window).run()
11+
kas::runner::Runner::new(())?.with(window).run()
912
}

examples/sync-counter.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
1-
use kas::widgets::{format_data, label_any, Adapt, Button, Slider};
2-
use kas::{messages::MessageStack, Action, Window};
1+
use kas::widgets::{AdaptWidget, Button, Label, Slider, column, format_data, row};
2+
use kas::window::Window;
33

44
#[derive(Clone, Debug)]
55
struct Increment(i32);
66

77
#[derive(Clone, Copy, Debug)]
88
struct Count(i32);
9-
10-
impl kas::app::AppData for Count {
11-
fn handle_messages(&mut self, messages: &mut MessageStack) -> Action {
9+
impl kas::runner::AppData for Count {
10+
fn handle_messages(&mut self, messages: &mut kas::runner::MessageStack) {
1211
if let Some(Increment(add)) = messages.try_pop() {
1312
self.0 += add;
14-
Action::UPDATE
15-
} else {
16-
Action::empty()
1713
}
1814
}
1915
}
2016

21-
fn counter() -> impl kas::Widget<Data = Count> {
17+
fn counter(title: &str) -> Window<Count> {
2218
// Per window state: (count, increment).
2319
type Data = (Count, i32);
2420
let initial: Data = (Count(0), 1);
@@ -27,28 +23,32 @@ fn counter() -> impl kas::Widget<Data = Count> {
2723
struct SetValue(i32);
2824

2925
let slider = Slider::right(1..=10, |_, data: &Data| data.1).with_msg(SetValue);
30-
let ui = kas::column![
26+
let ui = column![
3127
format_data!(data: &Data, "Count: {}", data.0.0),
3228
row![slider, format_data!(data: &Data, "{}", data.1)],
3329
row![
34-
Button::new(label_any("Sub")).with(|cx, data: &Data| cx.push(Increment(-data.1))),
35-
Button::new(label_any("Add")).with(|cx, data: &Data| cx.push(Increment(data.1))),
30+
Button::new(Label::new_any("Sub")).with(|cx, data: &Data| cx.push(Increment(-data.1))),
31+
Button::new(Label::new_any("Add")).with(|cx, data: &Data| cx.push(Increment(data.1))),
3632
],
3733
];
3834

39-
Adapt::new(ui, initial)
35+
let ui = ui
36+
.with_state(initial)
4037
.on_update(|_, state, count| state.0 = *count)
41-
.on_message(|_, state, SetValue(v)| state.1 = v)
38+
.on_message(|_, state, SetValue(v)| state.1 = v);
39+
Window::new(ui, title).escapable()
4240
}
4341

44-
fn main() -> kas::app::Result<()> {
42+
fn main() -> kas::runner::Result<()> {
4543
env_logger::init();
4644

47-
let theme = kas_wgpu::ShadedTheme::new().with_font_size(24.0);
45+
let count = Count(0);
46+
let theme = kas_wgpu::ShadedTheme::new();
4847

49-
kas::app::Default::with_theme(theme)
50-
.build(Count(0))?
51-
.with(Window::new(counter(), "Counter 1"))
52-
.with(Window::new(counter(), "Counter 2"))
48+
let mut runner = kas::runner::Runner::with_theme(theme).build(count)?;
49+
let _ = runner.config_mut().font.set_size(24.0);
50+
runner
51+
.with(counter("Counter 1"))
52+
.with(counter("Counter 2"))
5353
.run()
5454
}

src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- [Hello: push button](hello.md)
55
- [Counter: an interactive widget](counter.md)
66
- [Sync-counter: Adapt'ing AppData](sync-counter.md)
7+
- [Configuration](config.md)
78
- [Calculator: make_widget and grid](calculator.md)
89
- [Custom widgets](custom-widget.md)
910
- [Data models](data-models.md)

0 commit comments

Comments
 (0)