mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 16:31:18 +00:00
ui: switch component
This commit is contained in:
parent
68f3e2ec2d
commit
3953ebecfb
@ -1,5 +1,5 @@
|
||||
use eframe::egui;
|
||||
use egui::{Label, Sense, Ui};
|
||||
use egui::{Label, Response, Sense, Ui};
|
||||
|
||||
pub fn emoji_picker(ui: &mut Ui) -> Option<char> {
|
||||
let mut emojis = "😀😁😆😅😂🤣\
|
||||
@ -39,3 +39,30 @@ pub fn emoji_picker(ui: &mut Ui) -> Option<char> {
|
||||
|
||||
output
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn switch(ui: &mut Ui, on: &mut bool) -> Response {
|
||||
let desired_size = ui.spacing().interact_size.y * egui::vec2(2.0, 1.0);
|
||||
let (rect, mut response) = ui.allocate_exact_size(desired_size, egui::Sense::click());
|
||||
if response.clicked() {
|
||||
*on = !*on;
|
||||
response.mark_changed();
|
||||
}
|
||||
response.widget_info(|| egui::WidgetInfo::selected(egui::WidgetType::Checkbox, *on, ""));
|
||||
|
||||
if ui.is_rect_visible(rect) {
|
||||
let how_on = ui.ctx().animate_bool(response.id, *on);
|
||||
let visuals = ui.style().interact_selectable(&response, *on);
|
||||
let rect = rect.expand(visuals.expansion);
|
||||
let radius = 0.5 * rect.height();
|
||||
// bg_fill, bg_stroke, fg_stroke, expansion
|
||||
ui.painter()
|
||||
.rect(rect, radius, visuals.bg_fill, visuals.bg_stroke);
|
||||
let circle_x = egui::lerp((rect.left() + radius)..=(rect.right() - radius), how_on);
|
||||
let center = egui::pos2(circle_x, rect.center().y);
|
||||
ui.painter()
|
||||
.circle(center, 0.875 * radius, visuals.bg_fill, visuals.fg_stroke);
|
||||
}
|
||||
|
||||
response
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user