diff --git a/CHANGELOG.md b/CHANGELOG.md index e79accbb..5e7f4da7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. * Allow structs implementing `Provider` to use larger tile sizes. * Add optional logos to `Attribution` struct. * Add `Mapbox` provider. + * `Plugin::draw` now has a `Response` parameter, allowing plugins to be interactive. ## 0.12.0 diff --git a/demo/src/lib.rs b/demo/src/lib.rs index 5cd5ff8f..0e111603 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -1,4 +1,4 @@ -use egui::{Color32, Context, Painter}; +use egui::{Color32, Context, Painter, Response}; use walkers::{ extras::{Image, Images, Place, Places, Style, Texture}, Map, MapMemory, Plugin, Projector, Tiles, @@ -191,7 +191,7 @@ mod places { struct CustomShapes {} impl Plugin for CustomShapes { - fn draw(&self, painter: Painter, projector: &Projector) { + fn draw(&self, _response: &Response, painter: Painter, projector: &Projector) { // Position of the point we want to put our shapes. let position = places::capitol(); diff --git a/walkers/src/extras/images.rs b/walkers/src/extras/images.rs index 0c39b312..047298b0 100644 --- a/walkers/src/extras/images.rs +++ b/walkers/src/extras/images.rs @@ -1,7 +1,7 @@ use crate::tiles::Texture; use crate::{Plugin, Position}; use egui::epaint::emath::Rot2; -use egui::{Rect, Vec2}; +use egui::{Painter, Rect, Response, Vec2}; /// An image to be drawn on the map. pub struct Image { @@ -47,7 +47,7 @@ impl Images { } impl Plugin for Images { - fn draw(&self, painter: egui::Painter, projector: &crate::Projector) { + fn draw(&self, _response: &Response, painter: Painter, projector: &crate::Projector) { for image in &self.images { let rect = Rect::from_center_size( projector.project(image.position).to_pos2(), diff --git a/walkers/src/extras/places.rs b/walkers/src/extras/places.rs index c5232c54..da7c0498 100644 --- a/walkers/src/extras/places.rs +++ b/walkers/src/extras/places.rs @@ -1,4 +1,4 @@ -use egui::{vec2, Align2, Color32, FontId, Stroke}; +use egui::{vec2, Align2, Color32, FontId, Painter, Response, Stroke}; use crate::{Plugin, Position}; @@ -56,7 +56,7 @@ impl Places { } impl Plugin for Places { - fn draw(&self, painter: egui::Painter, projector: &crate::Projector) { + fn draw(&self, _response: &Response, painter: Painter, projector: &crate::Projector) { for place in &self.places { let screen_position = projector.project(place.position); diff --git a/walkers/src/map.rs b/walkers/src/map.rs index c26d0cba..4579cde4 100644 --- a/walkers/src/map.rs +++ b/walkers/src/map.rs @@ -13,7 +13,7 @@ use crate::{ /// you can add it to the map with [`Map::with_plugin`] pub trait Plugin { /// Function called at each frame. - fn draw(&self, painter: Painter, projector: &Projector); + fn draw(&self, response: &Response, painter: Painter, projector: &Projector); } /// The actual map widget. Instances are to be created on each frame, as all necessary state is @@ -171,7 +171,7 @@ impl Widget for Map<'_, '_> { my_position: self.my_position, }; - plugin.draw(painter.to_owned(), &projector); + plugin.draw(&response, painter.to_owned(), &projector); } response