A chessboard widget for Relm/GTK. Inspired by chessground.js.
Only a minimum of the features is exposed in the public API. Feel free to request more.
A board that lets the user freely move pieces. Run with cargo run --example editor
.
```rust
extern crate gtk; extern crate chessground;
extern crate relm; extern crate relm_attributes;
extern crate relm_derive; extern crate shakmaty;
use gtk::prelude::*; use relm::Widget; use relm_attributes::widget;
use shakmaty::{Square, Board}; use chessground::{Ground, UserMove, SetBoard};
use self::Msg::*;
pub enum Msg { Quit, PieceMoved(Square, Square), }
impl Widget for Win { fn model() -> Board { Board::default() }
fn update(&mut self, event: Msg) {
match event {
Quit => gtk::main_quit(),
PieceMoved(orig, dest) => {
if let Some(piece) = self.model.remove_piece_at(orig) {
self.model.set_piece_at(dest, piece, false);
self.ground.emit(SetBoard(self.model.clone()));
}
}
}
}
view! {
gtk::Window {
title: "Chessground",
#[name="ground"]
Ground {
UserMove(orig, dest, _) => PieceMoved(orig, dest),
},
delete_event(_, _) => (Quit, Inhibit(false)),
}
}
}
fn main() { Win::run(()).expect("initialized gtk"); } ```
Set | Author | License --- | --- | --- Merida | Armando Hernandez Marroquin | GPL-2+
Chessground is licensed under the GPL-3.0 (or any later version at your option). See the COPYING file for the full license.