Reasons to use relm instead of gtk-rs directly
As you have seen in the previous chapters, we used concepts that were not really obvious, and doing certain things that would normally be easy to do aren't that easy when using GTK+ with Rust. These are some of the many reasons to use relm
.
State mutation
It might not be clear from the previous chapter, but we indirectly used Rc<RefCell<T>>
to do state mutation. Indeed, our Playlist
type contains a RefCell<Option<String>>
and we wrapped our Playlist
inside a reference-counted pointer. This was to be able to mutate the state in reaction to events, for instance playing the song when clicking the play button:
let playlist = self.playlist.clone(); let play_image = self.toolbar.play_image.clone(); let cover = self.cover.clone(); let state = self.state.clone(); self.toolbar.play_button.connect_clicked(move |_| { if state.lock().unwrap().stopped { if playlist.play() { set_image_icon(&play_image, PAUSE_ICON...