rust-chessground

crates.io

A chessboard widget for Relm/GTK. Inspired by chessground.js.

Features

Only a minimum of the features is exposed in the public API. Feel free to request more.

Documentation

Read the documentation

Example

A board that lets the user freely move pieces. Run with cargo run --example editor.

```rust

![feature(proc_macro)]

extern crate gtk; extern crate chessground;

[macro_use]

extern crate relm; extern crate relm_attributes;

[macro_use]

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::*;

[derive(Msg)]

pub enum Msg { Quit, PieceMoved(Square, Square), }

[widget]

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"); } ```

Piece sets

Set | Author | License --- | --- | --- Merida | Armando Hernandez Marroquin | GPL-2+

License

Chessground is licensed under the GPL-3.0 (or any later version at your option). See the COPYING file for the full license.