# gpui_transitions.
This crate provides an API for interpolating between values in [gpui](https://www.gpui.rs).
Transitions can be constructed via `window.use_transition` or `window.use_keyed_transition`. It's very similar to the `use_state` API.
```rs
let my_transition = window
.use_keyed_transition(
"my_transition",
cx,
Duration::from_millis(400),
|_window, _cx| rgb(0xFF0000)),
);
```
<br>
They can also be constructed more granularly via `Transition::new`:
```rs
let my_transition = Transition::new(
cx.new(|_cx| TransitionState::new(rgb(0xFF0000))),
Duration::from_millis(400),
);
```
<br>
To get the value of a transition you can use `evaluate`. This is the equivilant of `use_state`'s `read` method.
```rs
let value = my_transition.evaluate(window, cx);
```
If the transition is not finished when `evaluate` is called then an animation frame will be requested.
<br>
Updating the transition's goal is identical to updating state:
```rs
my_transition.update(cx, |this, cx| {
*this = rgb(0x00FF00);
cx.notify();
});
```
- - -
Examples can be found [here](https://github.com/astrum-chat/gpui_transitions/tree/main/examples).