Merge fix/718

This commit is contained in:
bflatastic
2026-10-17 15:20:31 +07:00
3 changed files with 75 additions and 3 deletions
+7 -1
View File
@@ -162,6 +162,8 @@ mod proto_reorder_tests;
#[cfg(test)]
mod proto_responsive_tests;
#[cfg(test)]
mod resources_tests;
#[cfg(test)]
mod select_all_tests;
#[cfg(test)]
mod shortcut_keys_tests;
@@ -810,7 +812,11 @@ impl FigApp {
}
"focus.region" => self.ui.nav.step(r.data.get("step").and_then(Value::as_i64).unwrap_or(1).clamp(-4, 4) as i32),
"panel.layers" => self.ui.left_tab = LeftTab::File,
"panel.assets" => self.ui.left_tab = LeftTab::Assets,
"panel.assets" => {
self.ui.left_tab = LeftTab::Assets;
self.ui.left_collapsed = false;
self.ui.versions = Default::default();
}
"panel.versionHistory" => versions::open(self),
"view.devCompare" => {
self.ui.dev.compare = r.data.get("id").and_then(figcraft_engine::params::id_of).map(dev_compare::CompareView::new);
+67
View File
@@ -0,0 +1,67 @@
//! The toolbar's Resources button and Shift+I open the Assets panel (#710), from a collapsed
//! sidebar and from the version history too.
use egui::accesskit::Role;
use egui::{Event, Key, Modifiers, Pos2, pos2};
use figcraft_engine::Session;
use crate::LeftTab;
use crate::layers_drag_tests::Ui;
fn click(u: &mut Ui, p: Pos2) {
u.button(p, true);
u.button(p, false);
u.frame(vec![]);
}
fn shift_i(u: &mut Ui) {
let modifiers = Modifiers::SHIFT;
u.frame(vec![
Event::Key { key: Key::I, physical_key: None, pressed: true, repeat: false, modifiers },
Event::Key { key: Key::I, physical_key: None, pressed: false, repeat: false, modifiers },
]);
u.frame(vec![]);
}
/// The middle of the toolbar's Resources button, found in the AccessKit tree.
fn resources_button(u: &mut Ui) -> Pos2 {
u.ctx.enable_accesskit();
u.frame(vec![]);
let out = u.frame_output(vec![]);
let nodes = out.platform_output.accesskit_update.expect("an AccessKit update").nodes;
let n = nodes.iter().map(|(_, n)| n).find(|n| n.role() == Role::Button && n.label() == Some("Resources")).expect("Resources");
let b = n.bounds().expect("bounds");
pos2(((b.x0 + b.x1) / 2.0) as f32, ((b.y0 + b.y1) / 2.0) as f32)
}
fn assets_shown(u: &Ui) -> bool {
u.app.ui.left_tab == LeftTab::Assets && !u.app.ui.left_collapsed && !u.app.ui.versions.open
}
/// The three states the sidebar can be in when Resources is asked for.
fn starts() -> Vec<(&'static str, Ui)> {
let shown = Ui::new(Session::new());
let mut collapsed = Ui::new(Session::new());
collapsed.app.ui.left_collapsed = true;
let mut versions = Ui::new(Session::new());
crate::versions::open(&mut versions.app);
vec![("layers", shown), ("collapsed", collapsed), ("version history", versions)]
}
#[test]
fn the_resources_button_opens_the_assets_panel() {
for (name, mut u) in starts() {
let at = resources_button(&mut u);
click(&mut u, at);
assert!(assets_shown(&u), "{name}: the Assets panel is open");
}
}
#[test]
fn shift_i_opens_the_assets_panel() {
for (name, mut u) in starts() {
u.frame(vec![]);
shift_i(&mut u);
assert!(assets_shown(&u), "{name}: the Assets panel is open");
}
}
+1 -2
View File
@@ -137,8 +137,7 @@ pub fn show(app: &mut FigApp, ui: &mut Ui) {
if id == "actions" {
app.ui.palette = Some(String::new());
} else {
app.ui.left_tab = crate::LeftTab::Assets;
app.ui.left_collapsed = false;
app.run("view.assets", json!({}));
}
}
x += cell + 4.0;