A chessboard widget for Relm/GTK
Clone or download
Latest commit e2a835d Dec 30, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples update dependencies Sep 13, 2018
src Fix vertical text position of coordinates Nov 14, 2018
.gitignore factor out drawing into its own file Aug 24, 2017
.travis.yml build is expected to fail Aug 28, 2017
COPYING add COPYING file Aug 28, 2017
Cargo.toml bump deps Dec 30, 2018
README.md update dependencies Sep 13, 2018
screenshot.png tweak screenshot Aug 28, 2017

README.md

rust-chessground

crates.io docs.rs

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

Features

  • Uses vocabulary from Shakmaty but is chess rule agnostic
  • Can show legal move hints
  • Check hints
  • Move pieces by click
  • Move pieces by drag and drop
    • Minimum distance
    • Piece ghosts
  • Draw circles and arrows on the board
  • Integrated promotion dialog
  • Smooth animations

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.

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.