mirror of
https://github.com/jwinterm/grim.git
synced 2026-10-29 17:58:33 +01:00
ui: wallet list content
This commit is contained in:
+45
-43
@@ -28,10 +28,10 @@ pub struct View;
|
||||
impl View {
|
||||
/// Default stroke around views.
|
||||
pub const DEFAULT_STROKE: Stroke = Stroke { width: 1.0, color: Colors::STROKE };
|
||||
/// Stroke around list items.
|
||||
/// Stroke for items.
|
||||
pub const ITEM_STROKE: Stroke = Stroke { width: 1.0, color: Colors::ITEM_STROKE };
|
||||
/// Stroke around list items.
|
||||
pub const ITEM_HOVER_STROKE: Stroke = Stroke { width: 1.0, color: Colors::ITEM_HOVER_STROKE };
|
||||
/// Stroke for hovered items and buttons.
|
||||
pub const ITEM_HOVER_STROKE: Stroke = Stroke { width: 1.0, color: Colors::ITEM_HOVER };
|
||||
|
||||
/// Callback on Enter key press event.
|
||||
pub fn on_enter_key(ui: &mut egui::Ui, cb: impl FnOnce()) {
|
||||
@@ -161,45 +161,6 @@ impl View {
|
||||
}
|
||||
}
|
||||
|
||||
/// Draw round [`Button`] with icon.
|
||||
pub fn round_button(ui: &mut egui::Ui, icon: &'static str, action: impl FnOnce()) {
|
||||
ui.scope(|ui| {
|
||||
// Setup colors.
|
||||
ui.visuals_mut().widgets.inactive.bg_fill = Colors::BUTTON;
|
||||
ui.visuals_mut().widgets.hovered.bg_fill = Colors::FILL;
|
||||
ui.visuals_mut().widgets.active.bg_fill = Colors::FILL_DARK;
|
||||
|
||||
// Setup radius.
|
||||
let mut r = 44.0 * 0.5;
|
||||
let size = egui::Vec2::splat(2.0 * r + 5.0);
|
||||
let (rect, br) = ui.allocate_at_least(size, Sense::click_and_drag());
|
||||
|
||||
let mut icon_color = Colors::GRAY;
|
||||
|
||||
// Increase radius and change icon size and color on-hover.
|
||||
if br.hovered() {
|
||||
r = r * 1.05;
|
||||
icon_color = Colors::TEXT_BUTTON;
|
||||
}
|
||||
|
||||
let visuals = ui.style().interact(&br);
|
||||
ui.painter().add(CircleShape {
|
||||
center: rect.center(),
|
||||
radius: r,
|
||||
fill: visuals.bg_fill,
|
||||
stroke: Self::DEFAULT_STROKE,
|
||||
});
|
||||
ui.allocate_ui_at_rect(rect, |ui| {
|
||||
ui.centered_and_justified(|ui| {
|
||||
ui.label(RichText::new(icon).color(icon_color).size(25.0));
|
||||
});
|
||||
});
|
||||
if Self::touched(ui, br) {
|
||||
(action)();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Draw list item [`Button`] with given vertical padding and rounding on left and right sides.
|
||||
pub fn item_button(ui: &mut egui::Ui, r: [bool; 2], icon: &'static str, action: impl FnOnce()) {
|
||||
let rounding = Self::get_rounding([r[0], r[1], r[1], r[0]]);
|
||||
@@ -235,6 +196,47 @@ impl View {
|
||||
});
|
||||
}
|
||||
|
||||
/// Draw circle [`Button`] with icon.
|
||||
pub fn circle_button(ui: &mut egui::Ui, icon: &'static str, action: impl FnOnce()) {
|
||||
ui.scope(|ui| {
|
||||
// Setup colors.
|
||||
ui.visuals_mut().widgets.inactive.bg_fill = Colors::BUTTON;
|
||||
ui.visuals_mut().widgets.hovered.bg_fill = Colors::FILL;
|
||||
ui.visuals_mut().widgets.active.bg_fill = Colors::FILL_DARK;
|
||||
|
||||
// Setup radius.
|
||||
let mut r = 44.0 * 0.5;
|
||||
let size = egui::Vec2::splat(2.0 * r + 5.0);
|
||||
let (rect, br) = ui.allocate_at_least(size, Sense::click_and_drag());
|
||||
|
||||
let mut icon_color = Colors::GRAY;
|
||||
let mut stroke = Self::DEFAULT_STROKE;
|
||||
|
||||
// Increase radius and change icon size and color on-hover.
|
||||
if br.hovered() {
|
||||
r = r * 1.04;
|
||||
icon_color = Colors::TEXT_BUTTON;
|
||||
stroke = Self::ITEM_HOVER_STROKE;
|
||||
}
|
||||
|
||||
let visuals = ui.style().interact(&br);
|
||||
ui.painter().add(CircleShape {
|
||||
center: rect.center(),
|
||||
radius: r,
|
||||
fill: visuals.bg_fill,
|
||||
stroke,
|
||||
});
|
||||
ui.allocate_ui_at_rect(rect, |ui| {
|
||||
ui.centered_and_justified(|ui| {
|
||||
ui.label(RichText::new(icon).color(icon_color).size(25.0));
|
||||
});
|
||||
});
|
||||
if Self::touched(ui, br) {
|
||||
(action)();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Get rounding for provided corners clockwise.
|
||||
fn get_rounding(corners: [bool; 4]) -> Rounding {
|
||||
Rounding {
|
||||
@@ -276,7 +278,7 @@ impl View {
|
||||
se: if r[3] { 8.0 } else { 0.0 },
|
||||
},
|
||||
fill: Colors::WHITE,
|
||||
stroke: Stroke { width: 1.0, color: Colors::ITEM_STROKE },
|
||||
stroke: Self::ITEM_STROKE,
|
||||
};
|
||||
let bg_idx = ui.painter().add(bg_shape);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user