Compare commits
4 Commits
1b61689de6
...
f328f4023d
Author | SHA1 | Date |
---|---|---|
Savanni D'Gerinel | f328f4023d | |
Savanni D'Gerinel | fa8cdf4492 | |
Savanni D'Gerinel | 75c3c5c42d | |
Savanni D'Gerinel | 7afae36b0d |
|
@ -1,8 +0,0 @@
|
||||||
use gtk::prelude::*;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
gtk::init();
|
|
||||||
for name in gtk::IconTheme::new().icon_names() {
|
|
||||||
println!("{}", name);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -44,13 +44,15 @@ fn main() {
|
||||||
|
|
||||||
pub struct HexGridWindowPrivate {
|
pub struct HexGridWindowPrivate {
|
||||||
layout: gtk::Box,
|
layout: gtk::Box,
|
||||||
palette: gtk::Box,
|
paintbrush_icon: gtk::Box,
|
||||||
|
palette: gtk::ListBox,
|
||||||
|
|
||||||
drawing_area: DrawingArea,
|
drawing_area: DrawingArea,
|
||||||
hex_address: labeled_field::LabeledField,
|
hex_address: labeled_field::LabeledField,
|
||||||
canvas_address: labeled_field::LabeledField,
|
canvas_address: labeled_field::LabeledField,
|
||||||
|
|
||||||
current_coordinate: Rc<RefCell<Option<AxialAddr>>>,
|
current_coordinate: Rc<RefCell<Option<AxialAddr>>>,
|
||||||
|
paintbrush: Rc<RefCell<Option<tile::Tile>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[glib::object_subclass]
|
#[glib::object_subclass]
|
||||||
|
@ -95,14 +97,12 @@ impl ObjectSubclass for HexGridWindowPrivate {
|
||||||
let canvas_address = labeled_field::LabeledField::new("Canvas Address", "-----");
|
let canvas_address = labeled_field::LabeledField::new("Canvas Address", "-----");
|
||||||
let hex_address = labeled_field::LabeledField::new("Hex Address", "-----");
|
let hex_address = labeled_field::LabeledField::new("Hex Address", "-----");
|
||||||
|
|
||||||
let palette = gtk::Box::builder()
|
let paintbrush_icon = gtk::Box::new(gtk::Orientation::Horizontal, 0);
|
||||||
.spacing(8)
|
let palette = gtk::ListBox::builder().hexpand(true).build();
|
||||||
.orientation(gtk::Orientation::Vertical)
|
|
||||||
.hexpand(true)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
sidebar.append(&canvas_address);
|
sidebar.append(&canvas_address);
|
||||||
sidebar.append(&hex_address);
|
sidebar.append(&hex_address);
|
||||||
|
sidebar.append(&paintbrush_icon);
|
||||||
sidebar.append(&palette);
|
sidebar.append(&palette);
|
||||||
|
|
||||||
layout.append(&drawing_area);
|
layout.append(&drawing_area);
|
||||||
|
@ -117,6 +117,8 @@ impl ObjectSubclass for HexGridWindowPrivate {
|
||||||
current_coordinate,
|
current_coordinate,
|
||||||
layout,
|
layout,
|
||||||
palette,
|
palette,
|
||||||
|
paintbrush_icon,
|
||||||
|
paintbrush: Rc::new(RefCell::new(None)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,6 +156,12 @@ impl ObjectImpl for HexGridWindowPrivate {
|
||||||
let shallow_water = tile::Tile::new(&image, tile::Terrain::ShallowWater);
|
let shallow_water = tile::Tile::new(&image, tile::Terrain::ShallowWater);
|
||||||
let swamp = tile::Tile::new(&image, tile::Terrain::Swamp);
|
let swamp = tile::Tile::new(&image, tile::Terrain::Swamp);
|
||||||
|
|
||||||
|
let paintbrush_image = gtk::Image::from_pixbuf(Some(&grasslands.image));
|
||||||
|
paintbrush_image.set_width_request(100);
|
||||||
|
paintbrush_image.set_height_request(88);
|
||||||
|
self.paintbrush_icon.append(&paintbrush_image);
|
||||||
|
*self.paintbrush.borrow_mut() = Some(grasslands.clone());
|
||||||
|
|
||||||
self.palette
|
self.palette
|
||||||
.append(&palette_entry::PaletteEntry::new(&badlands));
|
.append(&palette_entry::PaletteEntry::new(&badlands));
|
||||||
self.palette
|
self.palette
|
||||||
|
@ -169,6 +177,27 @@ impl ObjectImpl for HexGridWindowPrivate {
|
||||||
self.palette
|
self.palette
|
||||||
.append(&palette_entry::PaletteEntry::new(&swamp));
|
.append(&palette_entry::PaletteEntry::new(&swamp));
|
||||||
|
|
||||||
|
{
|
||||||
|
let paintbrush = self.paintbrush.clone();
|
||||||
|
let image = image.clone();
|
||||||
|
let paintbrush_icon = self.paintbrush_icon.clone();
|
||||||
|
self.palette.connect_selected_rows_changed(move |palette| {
|
||||||
|
let row: Option<palette_entry::PaletteEntry> =
|
||||||
|
palette.selected_row().and_then(|r| r.downcast().ok());
|
||||||
|
if let Some(row) = row {
|
||||||
|
let new_tile = tile::Tile::new(&image, row.terrain());
|
||||||
|
*paintbrush.borrow_mut() = Some(new_tile.clone());
|
||||||
|
while let Some(icon) = paintbrush_icon.first_child() {
|
||||||
|
paintbrush_icon.remove(&icon);
|
||||||
|
}
|
||||||
|
let image = gtk::Image::from_pixbuf(Some(&new_tile.image));
|
||||||
|
image.set_width_request(100);
|
||||||
|
image.set_height_request(88);
|
||||||
|
paintbrush_icon.append(&image);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let motion_controller = gtk::EventControllerMotion::new();
|
let motion_controller = gtk::EventControllerMotion::new();
|
||||||
{
|
{
|
||||||
let canvas_address = self.canvas_address.clone();
|
let canvas_address = self.canvas_address.clone();
|
||||||
|
@ -228,7 +257,13 @@ impl ObjectImpl for HexGridWindowPrivate {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
let click_controller = gtk::GestureClick::new();
|
||||||
|
click_controller.connect_released(|_, press, x, y| {
|
||||||
|
println!("key pressed: {} {} {}", press, x, y);
|
||||||
|
});
|
||||||
|
|
||||||
self.drawing_area.add_controller(&motion_controller);
|
self.drawing_area.add_controller(&motion_controller);
|
||||||
|
self.drawing_area.add_controller(&click_controller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,4 +49,8 @@ impl PaletteEntry {
|
||||||
|
|
||||||
row
|
row
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn terrain(&self) -> tile::Terrain {
|
||||||
|
self.imp().terrain.borrow().clone()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ impl From<&Terrain> for String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
pub terrain: Terrain,
|
pub terrain: Terrain,
|
||||||
pub image: Pixbuf,
|
pub image: Pixbuf,
|
||||||
|
|
Loading…
Reference in New Issue