更新ui中
This commit is contained in:
77
src/app.rs
77
src/app.rs
@@ -3,7 +3,7 @@ use crate::connection::ConnectionManager;
|
||||
use crate::force::{ForceEstimatorState, HudSpatialForce};
|
||||
use crate::recording::Recorder;
|
||||
use crate::render::{ActiveMode, FingerMode, HandGatewayMode};
|
||||
use crate::style::{ONE_DARK_PRO, apply_fonts, apply_theme, layout};
|
||||
use crate::style::{self, ONE_DARK_PRO, apply_fonts, apply_theme, dim_text, layout};
|
||||
use crate::ui::SerialMode;
|
||||
use crate::{
|
||||
matrix::{MATRIX_COLS, MATRIX_ROWS},
|
||||
@@ -13,8 +13,8 @@ use crate::{
|
||||
},
|
||||
ui::{
|
||||
ConfigPanelState, ConnectPanelState, FloatingPanelState, MatrixConfigState,
|
||||
draw_config_panel, draw_export_panel, draw_hand_force_panels, draw_matrix_config_panel,
|
||||
draw_stats_panel, panel_restore_item,
|
||||
draw_config_panel, draw_export_panel, draw_hand_force_panels, draw_stats_panel,
|
||||
panel_restore_item,
|
||||
},
|
||||
};
|
||||
use eframe::{egui, egui_wgpu};
|
||||
@@ -159,15 +159,15 @@ impl EskinDesktopApp {
|
||||
let color = egui::Color32::from_rgb(255, 196, 54);
|
||||
let glow = egui::Color32::from_rgba_unmultiplied(255, 196, 54, 58);
|
||||
|
||||
painter.line_segment([center, end], egui::Stroke::new(9.0, glow));
|
||||
painter.line_segment([center, end], egui::Stroke::new(2.4, color));
|
||||
painter.line_segment([center, end], egui::Stroke::new(9.0_f32, glow));
|
||||
painter.line_segment([center, end], egui::Stroke::new(2.4_f32, color));
|
||||
painter.line_segment(
|
||||
[end, end - direction * 14.0 + side * 7.0],
|
||||
egui::Stroke::new(2.4, color),
|
||||
egui::Stroke::new(2.4_f32, color),
|
||||
);
|
||||
painter.line_segment(
|
||||
[end, end - direction * 14.0 - side * 7.0],
|
||||
egui::Stroke::new(2.4, color),
|
||||
egui::Stroke::new(2.4_f32, color),
|
||||
);
|
||||
painter.circle_filled(center, 4.2, color);
|
||||
}
|
||||
@@ -265,7 +265,7 @@ impl EskinDesktopApp {
|
||||
);
|
||||
ui.painter().line_segment(
|
||||
[title_bar_rect.left_bottom(), title_bar_rect.right_bottom()],
|
||||
egui::Stroke::new(1.0, ONE_DARK_PRO.border),
|
||||
egui::Stroke::new(1.0_f32, ONE_DARK_PRO.border),
|
||||
);
|
||||
|
||||
// Drag-to-move: double-click to maximize, drag to move
|
||||
@@ -306,14 +306,14 @@ impl EskinDesktopApp {
|
||||
btn_close_center + egui::vec2(-3.0, -3.0),
|
||||
btn_close_center + egui::vec2(3.0, 3.0),
|
||||
],
|
||||
egui::Stroke::new(1.5, egui::Color32::from_rgb(80, 0, 0)),
|
||||
egui::Stroke::new(1.5_f32, egui::Color32::from_rgb(80, 0, 0)),
|
||||
);
|
||||
ui.painter().line_segment(
|
||||
[
|
||||
btn_close_center + egui::vec2(3.0, -3.0),
|
||||
btn_close_center + egui::vec2(-3.0, 3.0),
|
||||
],
|
||||
egui::Stroke::new(1.5, egui::Color32::from_rgb(80, 0, 0)),
|
||||
egui::Stroke::new(1.5_f32, egui::Color32::from_rgb(80, 0, 0)),
|
||||
);
|
||||
}
|
||||
if close_resp.clicked() {
|
||||
@@ -332,7 +332,7 @@ impl EskinDesktopApp {
|
||||
btn_min_center + egui::vec2(-3.0, 0.0),
|
||||
btn_min_center + egui::vec2(3.0, 0.0),
|
||||
],
|
||||
egui::Stroke::new(1.5, egui::Color32::from_rgb(120, 80, 0)),
|
||||
egui::Stroke::new(1.5_f32, egui::Color32::from_rgb(120, 80, 0)),
|
||||
);
|
||||
}
|
||||
if min_resp.clicked() {
|
||||
@@ -351,7 +351,7 @@ impl EskinDesktopApp {
|
||||
ui.painter().rect_stroke(
|
||||
egui::Rect::from_center_size(btn_max_center, egui::vec2(s * 2.0, s * 2.0)),
|
||||
egui::CornerRadius::same(1),
|
||||
egui::Stroke::new(1.5, egui::Color32::from_rgb(0, 80, 10)),
|
||||
egui::Stroke::new(1.5_f32, egui::Color32::from_rgb(0, 80, 10)),
|
||||
egui::StrokeKind::Outside,
|
||||
);
|
||||
}
|
||||
@@ -362,7 +362,11 @@ impl EskinDesktopApp {
|
||||
}
|
||||
}
|
||||
|
||||
fn draw_floating_panels(&mut self, ctx: &egui::Context) {
|
||||
fn draw_floating_panels(
|
||||
&mut self,
|
||||
ctx: &egui::Context,
|
||||
stats: crate::serial_core::serial::SerialIoStats,
|
||||
) {
|
||||
// draw_scene_panel(ctx, &mut self.scene_panel);
|
||||
// if self.config_state.mode == SerialMode::Hand && self.stats_panel.visible {
|
||||
// self.config_panel.visible = false;
|
||||
@@ -376,6 +380,9 @@ impl EskinDesktopApp {
|
||||
&mut self.config_state,
|
||||
&self.connection,
|
||||
&self.recorder,
|
||||
stats,
|
||||
100.0,
|
||||
100.0,
|
||||
) {
|
||||
self.switch_mode(next_mode);
|
||||
}
|
||||
@@ -398,7 +405,7 @@ impl EskinDesktopApp {
|
||||
&self.recorder,
|
||||
&mut self.export_path,
|
||||
);
|
||||
draw_matrix_config_panel(ctx, &mut self.matrix_config_panel, &mut self.matrix_config);
|
||||
// draw_matrix_config_panel(ctx, &mut self.matrix_config_panel, &mut self.matrix_config);
|
||||
}
|
||||
|
||||
fn draw_panel_context_menu(&mut self, ctx: &egui::Context) {
|
||||
@@ -590,7 +597,7 @@ fn paint_split_viewport_shell(
|
||||
painter.rect_stroke(
|
||||
rect,
|
||||
egui::CornerRadius::same(8),
|
||||
egui::Stroke::new(1.0, ONE_DARK_PRO.border_soft),
|
||||
egui::Stroke::new(1.0_f32, ONE_DARK_PRO.border_soft),
|
||||
egui::StrokeKind::Outside,
|
||||
);
|
||||
painter.line_segment(
|
||||
@@ -598,7 +605,7 @@ fn paint_split_viewport_shell(
|
||||
rect.left_top() + egui::vec2(12.0, 34.0),
|
||||
rect.right_top() + egui::vec2(-12.0, 34.0),
|
||||
],
|
||||
egui::Stroke::new(1.0, ONE_DARK_PRO.border_soft),
|
||||
egui::Stroke::new(1.0_f32, ONE_DARK_PRO.border_soft),
|
||||
);
|
||||
painter.text(
|
||||
rect.left_top() + egui::vec2(14.0, 16.0),
|
||||
@@ -660,14 +667,50 @@ fn normalize_pressure_value(value: u32) -> [f32; 2] {
|
||||
[mapped, display_value]
|
||||
}
|
||||
|
||||
fn draw_config_bar_mode(ui: &mut egui::Ui, config: &mut ConfigPanelState) -> Option<SerialMode> {
|
||||
let mut changed_to = None;
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
ui.colored_label(dim_text(), "单面指尖");
|
||||
if mode_button(ui, &mut config.mode, SerialMode::Finger, "单面指尖") {
|
||||
changed_to = Some(SerialMode::Finger);
|
||||
}
|
||||
// if mode_button(ui, &mut config.mode, SerialMode::Finger3D, "3D指尖") {
|
||||
// changed_to = Some(SerialMode::Finger3D);
|
||||
// }
|
||||
if mode_button(ui, &mut config.mode, SerialMode::Hand, "展示手掌") {
|
||||
changed_to = Some(SerialMode::Hand);
|
||||
}
|
||||
});
|
||||
|
||||
changed_to
|
||||
}
|
||||
|
||||
fn mode_button(
|
||||
ui: &mut egui::Ui,
|
||||
mode: &mut SerialMode,
|
||||
value: SerialMode,
|
||||
label: &'static str,
|
||||
) -> bool {
|
||||
let clicked = ui.add(style::mode_button(label, *mode == value)).clicked();
|
||||
|
||||
if clicked && *mode != value {
|
||||
*mode = value;
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
impl eframe::App for EskinDesktopApp {
|
||||
fn ui(&mut self, ui: &mut egui::Ui, frame: &mut eframe::Frame) {
|
||||
let ctx = ui.ctx().clone();
|
||||
let stats = self.connection.stats();
|
||||
|
||||
self.update_pressure_matrix();
|
||||
self.draw_workspace(ui);
|
||||
self.draw_title_bar(ui, frame);
|
||||
self.draw_floating_panels(&ctx);
|
||||
self.draw_floating_panels(&ctx, stats);
|
||||
self.draw_panel_context_menu(&ctx);
|
||||
|
||||
// Keep repainting while the wgpu background is a realtime viewport.
|
||||
|
||||
Reference in New Issue
Block a user