Convert glade components to Rust and add the palette #26
|
@ -1,99 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<template class="HexGridWindow" parent="GtkApplicationWindow">
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="spacing">8</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkDrawingArea" id="drawing_area">
|
|
||||||
<property name="width-request">1024</property>
|
|
||||||
<property name="height-request">768</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="margin-start">8</property>
|
|
||||||
<property name="margin-end">8</property>
|
|
||||||
<property name="margin-top">8</property>
|
|
||||||
<property name="margin-bottom">8</property>
|
|
||||||
<property name="hexpand">True</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="width-request">100</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="margin-start">4</property>
|
|
||||||
<property name="margin-end">4</property>
|
|
||||||
<property name="margin-top">4</property>
|
|
||||||
<property name="margin-bottom">4</property>
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">8</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="hexpand">True</property>
|
|
||||||
<property name="spacing">8</property>
|
|
||||||
<property name="homogeneous">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="label" translatable="yes">Canvas Address</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="canvas_address">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="margin-start">4</property>
|
|
||||||
<property name="margin-end">4</property>
|
|
||||||
<property name="margin-top">4</property>
|
|
||||||
<property name="margin-bottom">4</property>
|
|
||||||
<property name="label" translatable="yes">-----</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="hexpand">True</property>
|
|
||||||
<property name="spacing">8</property>
|
|
||||||
<property name="homogeneous">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="label" translatable="yes">Hexagon Address</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="hex_address">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can-focus">False</property>
|
|
||||||
<property name="margin-start">4</property>
|
|
||||||
<property name="margin-end">4</property>
|
|
||||||
<property name="margin-top">4</property>
|
|
||||||
<property name="margin-bottom">4</property>
|
|
||||||
<property name="label" translatable="yes">-----</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</template>
|
|
||||||
</interface>
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<gresources>
|
<gresources>
|
||||||
<gresource prefix="/com/luminescent-dreams/hex-grid/">
|
<gresource prefix="/com/luminescent-dreams/hex-grid/">
|
||||||
<file>main.glade</file>
|
|
||||||
<file>terrain.ppm</file>
|
<file>terrain.ppm</file>
|
||||||
<file>map.txt</file>
|
<file>map.txt</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
|
|
|
@ -110,15 +110,13 @@ fn main() {
|
||||||
app.run();
|
app.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(CompositeTemplate, Default)]
|
#[derive(Default)]
|
||||||
#[template(resource = "/com/luminescent-dreams/hex-grid/main.glade")]
|
|
||||||
pub struct HexGridWindowPrivate {
|
pub struct HexGridWindowPrivate {
|
||||||
#[template_child]
|
layout: gtk::Box,
|
||||||
pub drawing_area: TemplateChild<DrawingArea>,
|
|
||||||
#[template_child]
|
drawing_area: DrawingArea,
|
||||||
pub hex_address: TemplateChild<Label>,
|
hex_address: Label,
|
||||||
#[template_child]
|
canvas_address: Label,
|
||||||
pub canvas_address: TemplateChild<Label>,
|
|
||||||
|
|
||||||
current_coordinate: Rc<RefCell<Option<AxialAddr>>>,
|
current_coordinate: Rc<RefCell<Option<AxialAddr>>>,
|
||||||
}
|
}
|
||||||
|
@ -129,12 +127,89 @@ impl ObjectSubclass for HexGridWindowPrivate {
|
||||||
type Type = HexGridWindow;
|
type Type = HexGridWindow;
|
||||||
type ParentType = gtk::ApplicationWindow;
|
type ParentType = gtk::ApplicationWindow;
|
||||||
|
|
||||||
fn class_init(c: &mut Self::Class) {
|
fn new() -> Self {
|
||||||
c.bind_template();
|
let current_coordinate = Rc::new(RefCell::new(None));
|
||||||
}
|
|
||||||
|
|
||||||
fn instance_init(obj: &InitializingObject<Self>) {
|
let drawing_area = DrawingArea::builder()
|
||||||
obj.init_template();
|
.width_request(1024)
|
||||||
|
.height_request(768)
|
||||||
|
.margin_start(8)
|
||||||
|
.margin_end(8)
|
||||||
|
.margin_top(8)
|
||||||
|
.margin_bottom(8)
|
||||||
|
.hexpand(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let layout = gtk::Box::builder()
|
||||||
|
.homogeneous(false)
|
||||||
|
.spacing(8)
|
||||||
|
.can_focus(false)
|
||||||
|
.visible(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let sidebar = gtk::Box::builder()
|
||||||
|
.orientation(gtk::Orientation::Vertical)
|
||||||
|
.width_request(100)
|
||||||
|
.visible(true)
|
||||||
|
.can_focus(false)
|
||||||
|
.margin_start(4)
|
||||||
|
.margin_end(4)
|
||||||
|
.margin_top(4)
|
||||||
|
.margin_bottom(4)
|
||||||
|
.spacing(8)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let canvas_address_row = gtk::Box::builder()
|
||||||
|
.hexpand(true)
|
||||||
|
.spacing(8)
|
||||||
|
.homogeneous(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
canvas_address_row.append(>k::Label::builder().label("Canvas Address").build());
|
||||||
|
|
||||||
|
let canvas_address = gtk::Label::builder()
|
||||||
|
.label("-----")
|
||||||
|
.margin_start(4)
|
||||||
|
.margin_end(4)
|
||||||
|
.margin_top(4)
|
||||||
|
.margin_bottom(4)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
canvas_address_row.append(&canvas_address);
|
||||||
|
|
||||||
|
let hex_address_row = gtk::Box::builder()
|
||||||
|
.hexpand(true)
|
||||||
|
.spacing(8)
|
||||||
|
.homogeneous(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
hex_address_row.append(>k::Label::builder().label("Hex Address").build());
|
||||||
|
|
||||||
|
let hex_address = gtk::Label::builder()
|
||||||
|
.label("-----")
|
||||||
|
.margin_start(4)
|
||||||
|
.margin_end(4)
|
||||||
|
.margin_top(4)
|
||||||
|
.margin_bottom(4)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
hex_address_row.append(&hex_address);
|
||||||
|
|
||||||
|
sidebar.append(&canvas_address_row);
|
||||||
|
sidebar.append(&hex_address_row);
|
||||||
|
|
||||||
|
layout.append(&drawing_area);
|
||||||
|
layout.append(&sidebar);
|
||||||
|
|
||||||
|
layout.show();
|
||||||
|
|
||||||
|
Self {
|
||||||
|
drawing_area,
|
||||||
|
hex_address,
|
||||||
|
canvas_address,
|
||||||
|
current_coordinate,
|
||||||
|
layout,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,16 +276,6 @@ impl ObjectImpl for HexGridWindowPrivate {
|
||||||
|
|
||||||
context.set_line_width(2.);
|
context.set_line_width(2.);
|
||||||
|
|
||||||
/*
|
|
||||||
deep_water.render_on_context(&context, 0., 0.);
|
|
||||||
shallow_water.render_on_context(&context, 150., 0.);
|
|
||||||
grasslands.render_on_context(&context, 300., 0.);
|
|
||||||
desert.render_on_context(&context, 450., 0.);
|
|
||||||
mountain.render_on_context(&context, 0., 100.);
|
|
||||||
badlands.render_on_context(&context, 150., 100.);
|
|
||||||
swamp.render_on_context(&context, 0., 200.);
|
|
||||||
*/
|
|
||||||
|
|
||||||
for coordinate in vec![AxialAddr::origin()]
|
for coordinate in vec![AxialAddr::origin()]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.chain(AxialAddr::origin().addresses(MAP_RADIUS))
|
.chain(AxialAddr::origin().addresses(MAP_RADIUS))
|
||||||
|
@ -235,7 +300,6 @@ impl ObjectImpl for HexGridWindowPrivate {
|
||||||
_ => panic!("unhandled terrain type"),
|
_ => panic!("unhandled terrain type"),
|
||||||
};
|
};
|
||||||
tile.render_on_context(context, translate_x, translate_y);
|
tile.render_on_context(context, translate_x, translate_y);
|
||||||
// draw_hexagon(context, center_x, center_y, HEX_RADIUS);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -254,7 +318,9 @@ glib::wrapper! {
|
||||||
|
|
||||||
impl HexGridWindow {
|
impl HexGridWindow {
|
||||||
pub fn new(app: &Application) -> Self {
|
pub fn new(app: &Application) -> Self {
|
||||||
Object::builder().property("application", app).build()
|
let window: Self = Object::builder().property("application", app).build();
|
||||||
|
window.set_child(Some(&window.imp().layout));
|
||||||
|
window
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue