Draw terrains within their relevant positions on the hex grid #22
|
@ -197,14 +197,19 @@ impl ObjectImpl for HexGridWindowPrivate {
|
|||
|
||||
context.set_line_width(2.);
|
||||
|
||||
let clip_path = hexagon_path(context, 100., 88.);
|
||||
context.set_source_pixbuf(&image_deep_water, 0., 0.);
|
||||
context.append_path(&clip_path);
|
||||
context.save().unwrap();
|
||||
context.append_path(&hexagon_path(context, 0., 0., 100., 88.));
|
||||
context.clip();
|
||||
context.set_source_pixbuf(&image_deep_water, 0., 0.);
|
||||
context.paint().expect("paint should succeed");
|
||||
context.restore().unwrap();
|
||||
|
||||
context.save().unwrap();
|
||||
context.append_path(&hexagon_path(context, 150., 0., 100., 88.));
|
||||
context.clip();
|
||||
context.set_source_pixbuf(&image_shallow_water, 150., 0.);
|
||||
context.paint().expect("paint should succeed");
|
||||
context.restore().unwrap();
|
||||
|
||||
context.set_source_pixbuf(&image_grasslands, 300., 0.);
|
||||
context.paint().expect("paint should succeed");
|
||||
|
@ -275,15 +280,21 @@ fn draw_hexagon(context: &Context, center_x: f64, center_y: f64, radius: f64) {
|
|||
context.close_path();
|
||||
}
|
||||
|
||||
fn hexagon_path(context: &Context, width: f64, height: f64) -> Path {
|
||||
fn hexagon_path(
|
||||
context: &Context,
|
||||
translate_x: f64,
|
||||
translate_y: f64,
|
||||
width: f64,
|
||||
height: f64,
|
||||
) -> Path {
|
||||
context.new_path();
|
||||
let points = hexagon(width, height);
|
||||
context.move_to(points[0].0, points[0].1);
|
||||
context.line_to(points[1].0, points[1].1);
|
||||
context.line_to(points[2].0, points[2].1);
|
||||
context.line_to(points[3].0, points[3].1);
|
||||
context.line_to(points[4].0, points[4].1);
|
||||
context.line_to(points[5].0, points[5].1);
|
||||
context.move_to(translate_x + points[0].0, translate_y + points[0].1);
|
||||
context.line_to(translate_x + points[1].0, translate_y + points[1].1);
|
||||
context.line_to(translate_x + points[2].0, translate_y + points[2].1);
|
||||
context.line_to(translate_x + points[3].0, translate_y + points[3].1);
|
||||
context.line_to(translate_x + points[4].0, translate_y + points[4].1);
|
||||
context.line_to(translate_x + points[5].0, translate_y + points[5].1);
|
||||
context.copy_path().expect("to successfully copy a path")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue