Flesh out bgmap viewer
This commit is contained in:
+3
-66
@@ -6,9 +6,8 @@ use crate::{
|
||||
persistence::Persistence,
|
||||
};
|
||||
use egui::{
|
||||
ecolor::HexColor, menu, Align2, Button, CentralPanel, Color32, Context, Direction, Frame,
|
||||
Layout, Response, Sense, TopBottomPanel, Ui, Vec2, ViewportBuilder, ViewportCommand,
|
||||
ViewportId, WidgetText, Window,
|
||||
menu, Align2, Button, CentralPanel, Color32, Context, Direction, Frame, TopBottomPanel, Ui,
|
||||
Vec2, ViewportBuilder, ViewportCommand, ViewportId, Window,
|
||||
};
|
||||
use egui_toast::{Toast, Toasts};
|
||||
use serde::{Deserialize, Serialize};
|
||||
@@ -16,6 +15,7 @@ use winit::event_loop::EventLoopProxy;
|
||||
|
||||
use super::{
|
||||
game_screen::{DisplayMode, GameScreen},
|
||||
utils::UiExt as _,
|
||||
AppWindow,
|
||||
};
|
||||
|
||||
@@ -397,69 +397,6 @@ impl AppWindow for GameWindow {
|
||||
}
|
||||
}
|
||||
|
||||
trait UiExt {
|
||||
fn selectable_button(&mut self, selected: bool, text: impl Into<WidgetText>) -> Response;
|
||||
fn selectable_option<T: Eq>(
|
||||
&mut self,
|
||||
current_value: &mut T,
|
||||
selected_value: T,
|
||||
text: impl Into<WidgetText>,
|
||||
) -> Response {
|
||||
let response = self.selectable_button(*current_value == selected_value, text);
|
||||
if response.clicked() {
|
||||
*current_value = selected_value;
|
||||
}
|
||||
response
|
||||
}
|
||||
|
||||
fn color_pair_button(&mut self, left: Color32, right: Color32) -> Response;
|
||||
|
||||
fn color_picker(&mut self, color: &mut Color32, hex: &mut String) -> Response;
|
||||
}
|
||||
|
||||
impl UiExt for Ui {
|
||||
fn selectable_button(&mut self, selected: bool, text: impl Into<WidgetText>) -> Response {
|
||||
self.style_mut().visuals.widgets.inactive.bg_fill = Color32::TRANSPARENT;
|
||||
self.style_mut().visuals.widgets.hovered.bg_fill = Color32::TRANSPARENT;
|
||||
self.style_mut().visuals.widgets.active.bg_fill = Color32::TRANSPARENT;
|
||||
let mut selected = selected;
|
||||
self.checkbox(&mut selected, text)
|
||||
}
|
||||
|
||||
fn color_pair_button(&mut self, left: Color32, right: Color32) -> Response {
|
||||
let button_size = Vec2::new(60.0, 20.0);
|
||||
let (rect, response) = self.allocate_at_least(button_size, Sense::click());
|
||||
let center_x = rect.center().x;
|
||||
let left_rect = rect.with_max_x(center_x);
|
||||
self.painter().rect_filled(left_rect, 0.0, left);
|
||||
let right_rect = rect.with_min_x(center_x);
|
||||
self.painter().rect_filled(right_rect, 0.0, right);
|
||||
|
||||
let style = self.style().interact(&response);
|
||||
self.painter().rect_stroke(rect, 0.0, style.fg_stroke);
|
||||
response
|
||||
}
|
||||
|
||||
fn color_picker(&mut self, color: &mut Color32, hex: &mut String) -> Response {
|
||||
self.allocate_ui_with_layout(
|
||||
Vec2::new(100.0, 130.0),
|
||||
Layout::top_down_justified(egui::Align::Center),
|
||||
|ui| {
|
||||
let (rect, _) = ui.allocate_at_least(Vec2::new(100.0, 100.0), Sense::hover());
|
||||
ui.painter().rect_filled(rect, 0.0, *color);
|
||||
let resp = ui.text_edit_singleline(hex);
|
||||
if resp.changed() {
|
||||
if let Ok(new_color) = HexColor::from_str_without_hash(hex) {
|
||||
*color = new_color.color();
|
||||
}
|
||||
}
|
||||
resp
|
||||
},
|
||||
)
|
||||
.inner
|
||||
}
|
||||
}
|
||||
|
||||
struct ColorPickerState {
|
||||
color_codes: [String; 2],
|
||||
just_opened: bool,
|
||||
|
||||
Reference in New Issue
Block a user