https://github.com/niklasf/rust-chessground
An experimental chessboard widget for Relm/GTK
https://github.com/niklasf/rust-chessground
Last synced: about 1 year ago
JSON representation
An experimental chessboard widget for Relm/GTK
- Host: GitHub
- URL: https://github.com/niklasf/rust-chessground
- Owner: niklasf
- License: gpl-3.0
- Created: 2017-08-23T09:34:33.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-10-05T17:22:47.000Z (over 3 years ago)
- Last Synced: 2025-03-26T14:56:05.163Z (about 1 year ago)
- Language: Rust
- Homepage: https://docs.rs/chessground
- Size: 396 KB
- Stars: 66
- Watchers: 3
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: COPYING
Awesome Lists containing this project
README
rust-chessground
================
[](https://crates.io/crates/chessground)
[](https://docs.rs/chessground)
An *experimental* chessboard widget for [Relm/GTK](https://github.com/antoyo/relm).
Inspired by [chessground.js](https://github.com/ornicar/chessground).

Requirements
------------
Needs [GTK+ installed](https://www.gtk.org/docs/installations/) on your operating system.
Features
--------
* Uses vocabulary from [Shakmaty](https://github.com/niklasf/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](https://docs.rs/chessground)
Example
-------
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;
#[macro_use]
extern crate relm_derive;
extern crate shakmaty;
use gtk::prelude::*;
use relm::Widget;
use relm_derive::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);
self.components.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+](https://www.gnu.org/licenses/gpl-2.0.txt)
License
-------
Chessground is licensed under the GPL-3.0 (or any later version at your
option). See the COPYING file for the full license.