1
0
Fork 0
forked from wry/wry

Merge pull request #842 from mahkoh/jorth/egui-34

egui: upgrade to 0.34
This commit is contained in:
mahkoh 2026-03-30 14:04:52 +02:00 committed by GitHub
commit 24293a53e7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 351 additions and 218 deletions

206
Cargo.lock generated
View file

@ -3,21 +3,14 @@
version = 4 version = 4
[[package]] [[package]]
name = "ab_glyph" name = "accesskit"
version = "0.2.32" version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" checksum = "5351dcebb14b579ccab05f288596b2ae097005be7ee50a7c3d4ca9d0d5a66f6a"
dependencies = [ dependencies = [
"ab_glyph_rasterizer", "uuid",
"owned_ttf_parser",
] ]
[[package]]
name = "ab_glyph_rasterizer"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
[[package]] [[package]]
name = "addr2line" name = "addr2line"
version = "0.25.1" version = "0.25.1"
@ -203,6 +196,20 @@ name = "bytemuck"
version = "1.25.0" version = "1.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]] [[package]]
name = "byteorder" name = "byteorder"
@ -300,6 +307,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "color"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a18ef4657441fb193b65f34dc39b3781f0dfec23d3bd94d0eeb4e88cde421edb"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "colorchoice" name = "colorchoice"
version = "1.0.5" version = "1.0.5"
@ -383,19 +399,20 @@ dependencies = [
[[package]] [[package]]
name = "ecolor" name = "ecolor"
version = "0.33.3" version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71ddb8ac7643d1dba1bb02110e804406dd459a838efcb14011ced10556711a8e" checksum = "137c0ce4ce4152ff7e223a7ce22ee1057cdff61fce0a45c32459c3ccec64868d"
dependencies = [ dependencies = [
"emath", "emath",
] ]
[[package]] [[package]]
name = "egui" name = "egui"
version = "0.33.3" version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a9b567d356674e9a5121ed3fedfb0a7c31e059fe71f6972b691bcd0bfc284e3" checksum = "f34aaf627da598dfadd64b0fee6101d22e9c451d1e5348157312720b7f459f0f"
dependencies = [ dependencies = [
"accesskit",
"ahash", "ahash",
"bitflags", "bitflags",
"emath", "emath",
@ -409,9 +426,9 @@ dependencies = [
[[package]] [[package]]
name = "egui_tiles" name = "egui_tiles"
version = "0.14.1" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef184e589f0a80560bd3b63017634642d1ba112a8a8d9b29341f7cafd04601f" checksum = "08e570b77f6cce3292eba4aee9b9c08cf11dfc68430f4dc9613d939628498647"
dependencies = [ dependencies = [
"ahash", "ahash",
"egui", "egui",
@ -427,24 +444,28 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]] [[package]]
name = "emath" name = "emath"
version = "0.33.3" version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "491bdf728bf25ddd9ad60d4cf1c48588fa82c013a2440b91aa7fc43e34a07c32" checksum = "0a05cd8bdf3b598488c627ca97c7fe8909448ffa26278dd3c7e535cdb554d721"
[[package]] [[package]]
name = "epaint" name = "epaint"
version = "0.33.3" version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "009d0dd3c2163823a0abdb899451ecbc78798dec545ee91b43aff1fa790bab62" checksum = "04f3017dd67f147a697ee0c8484fb568fd9553e2a0c114be5020dbbc11962841"
dependencies = [ dependencies = [
"ab_glyph",
"ahash", "ahash",
"ecolor", "ecolor",
"emath", "emath",
"font-types",
"log", "log",
"nohash-hasher", "nohash-hasher",
"parking_lot", "parking_lot",
"profiling", "profiling",
"self_cell",
"skrifa",
"smallvec",
"vello_cpu",
] ]
[[package]] [[package]]
@ -469,6 +490,15 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31ae425815400e5ed474178a7a22e275a9687086a12ca63ec793ff292d8fdae8" checksum = "31ae425815400e5ed474178a7a22e275a9687086a12ca63ec793ff292d8fdae8"
[[package]]
name = "euclid"
version = "0.22.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06"
dependencies = [
"num-traits",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.3.0" version = "2.3.0"
@ -484,6 +514,15 @@ dependencies = [
"simd-adler32", "simd-adler32",
] ]
[[package]]
name = "fearless_simd"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "find-msvc-tools" name = "find-msvc-tools"
version = "0.1.9" version = "0.1.9"
@ -506,6 +545,21 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "foldhash"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "font-types"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73829a7b5c91198af28a99159b7ae4afbb252fb906159ff7f189f3a2ceaa3df2"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.32" version = "0.3.32"
@ -618,7 +672,7 @@ version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [ dependencies = [
"foldhash", "foldhash 0.1.5",
] ]
[[package]] [[package]]
@ -626,6 +680,9 @@ name = "hashbrown"
version = "0.16.1" version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
dependencies = [
"foldhash 0.2.0",
]
[[package]] [[package]]
name = "heck" name = "heck"
@ -867,6 +924,17 @@ dependencies = [
"syn 2.0.117", "syn 2.0.117",
] ]
[[package]]
name = "kurbo"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7564e90fe3c0d5771e1f0bc95322b21baaeaa0d9213fa6a0b61c99f8b17b3bfb"
dependencies = [
"arrayvec",
"euclid",
"smallvec",
]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.5.0" version = "1.5.0"
@ -928,6 +996,12 @@ dependencies = [
"syn 2.0.117", "syn 2.0.117",
] ]
[[package]]
name = "linebender_resource_handle"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
[[package]] [[package]]
name = "linux-raw-sys" name = "linux-raw-sys"
version = "0.12.1" version = "0.12.1"
@ -1039,15 +1113,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "owned_ttf_parser"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
dependencies = [
"ttf-parser",
]
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.12.5" version = "0.12.5"
@ -1071,6 +1136,19 @@ dependencies = [
"windows-link", "windows-link",
] ]
[[package]]
name = "peniko"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2b6aadb221872732e87d465213e9be5af2849b0e8cc5300a8ba98fffa2e00a"
dependencies = [
"bytemuck",
"color",
"kurbo",
"linebender_resource_handle",
"smallvec",
]
[[package]] [[package]]
name = "phf" name = "phf"
version = "0.13.1" version = "0.13.1"
@ -1267,6 +1345,16 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba"
[[package]]
name = "read-fonts"
version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5"
dependencies = [
"bytemuck",
"font-types",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.5.18" version = "0.5.18"
@ -1392,6 +1480,12 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "self_cell"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89"
[[package]] [[package]]
name = "semver" name = "semver"
version = "1.0.27" version = "1.0.27"
@ -1484,6 +1578,16 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
[[package]]
name = "skrifa"
version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac"
dependencies = [
"bytemuck",
"read-fonts",
]
[[package]] [[package]]
name = "slab" name = "slab"
version = "0.4.12" version = "0.4.12"
@ -1649,12 +1753,6 @@ dependencies = [
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
[[package]]
name = "ttf-parser"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
[[package]] [[package]]
name = "uapi" name = "uapi"
version = "0.2.13" version = "0.2.13"
@ -1717,6 +1815,38 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9"
[[package]]
name = "vello_common"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bd1a4c633ce09e7d713df1a6e036644a125e15e0c169cfb5180ddf5836ca04b"
dependencies = [
"bytemuck",
"fearless_simd",
"hashbrown 0.16.1",
"log",
"peniko",
"skrifa",
"smallvec",
]
[[package]]
name = "vello_cpu"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0162bfe48aabf6a9fdcd401b628c7d9f260c2cbabb343c70a65feba6f7849edc"
dependencies = [
"bytemuck",
"hashbrown 0.16.1",
"vello_common",
]
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.5" version = "0.9.5"

View file

@ -68,8 +68,8 @@ opera = "1.0.1"
with_builtin_macros = "0.1.0" with_builtin_macros = "0.1.0"
blake3 = "1.8.2" blake3 = "1.8.2"
run-on-drop = "1.0.0" run-on-drop = "1.0.0"
egui = { version = "0.33.3", default-features = false } egui = { version = "0.34.1", default-features = false }
egui_tiles = { version = "0.14.1", default-features = false } egui_tiles = { version = "0.15.0", default-features = false }
[build-dependencies] [build-dependencies]
repc = "0.1.1" repc = "0.1.1"
@ -100,26 +100,38 @@ debug = "line-tables-only"
opt-level = 3 opt-level = 3
debug = "line-tables-only" debug = "line-tables-only"
[profile.dev.package."ab_glyph"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."ab_glyph_rasterizer"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."owned_ttf_parser"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."ttf-parser"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."ecolor"] [profile.dev.package."ecolor"]
opt-level = 3 opt-level = 3
debug = "line-tables-only" debug = "line-tables-only"
[profile.dev.package."font-types"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."skrifa"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."read-fonts"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."vello_cpu"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."vello_common"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."peniko"]
opt-level = 3
debug = "line-tables-only"
[profile.dev.package."kurbo"]
opt-level = 3
debug = "line-tables-only"
[features] [features]
rc_tracking = [] rc_tracking = []
it = [] it = []

View file

@ -25,10 +25,9 @@ use {
}, },
}, },
egui::{ egui::{
Align, CentralPanel, Checkbox, Color32, ComboBox, Context, CursorIcon, DragValue, Frame, Align, CentralPanel, Checkbox, Color32, ComboBox, CursorIcon, DragValue, Frame, Grid, Id,
Grid, InnerResponse, Label, Layout, Response, Rgba, RichText, ScrollArea, Sense, SidePanel, InnerResponse, Label, Layout, Panel, Response, Rgba, RichText, ScrollArea, Sense, Stroke,
Stroke, TextBuffer, TextEdit, Ui, UiBuilder, Visuals, Widget, WidgetText, emath::Numeric, TextBuffer, TextEdit, Ui, UiBuilder, Visuals, Widget, WidgetText, emath::Numeric, vec2,
vec2,
}, },
egui_tiles::{ResizeState, TabState, Tile, TileId, Tiles, Tree}, egui_tiles::{ResizeState, TabState, Tile, TileId, Tiles, Tree},
linearize::{Linearize, LinearizeExt}, linearize::{Linearize, LinearizeExt},
@ -248,7 +247,7 @@ impl egui_tiles::Behavior<Pane> for CcBehavior<'_> {
}); });
ui.separator(); ui.separator();
show_errors(ui, &mut pane.ps); show_errors(ui, &mut pane.ps);
ui.scope_builder(UiBuilder::new().id(("pane", pane.id)), |ui| { ui.scope_builder(UiBuilder::new().id(Id::new(("pane", pane.id))), |ui| {
ScrollArea::vertical().show(ui, |ui| { ScrollArea::vertical().show(ui, |ui| {
ui.allocate_space(vec2(ui.available_width(), 0.0)); ui.allocate_space(vec2(ui.available_width(), 0.0));
pane.show(self, ui); pane.show(self, ui);
@ -297,7 +296,7 @@ impl egui_tiles::Behavior<Pane> for CcBehavior<'_> {
fn on_tab_button( fn on_tab_button(
&mut self, &mut self,
_tiles: &Tiles<Pane>, _tiles: &mut Tiles<Pane>,
tile_id: TileId, tile_id: TileId,
button_response: Response, button_response: Response,
) -> Response { ) -> Response {
@ -338,16 +337,16 @@ impl EggWindowOwner for ControlCenterInner {
self.close(); self.close();
} }
fn render(self: Rc<Self>, ctx: &Context) { fn render(self: Rc<Self>, ui: &mut Ui) {
let settings = &mut *self.tree.borrow_mut(); let settings = &mut *self.tree.borrow_mut();
SidePanel::left("sidebar").show(ctx, |ui| self.show_sidebar(&mut settings.tree, ui)); Panel::left("sidebar").show_inside(ui, |ui| self.show_sidebar(&mut settings.tree, ui));
CentralPanel::default() CentralPanel::default()
.frame( .frame(
Frame::central_panel(&ctx.style()) Frame::central_panel(&ui.global_style())
.outer_margin(0.0) .outer_margin(0.0)
.inner_margin(0.0), .inner_margin(0.0),
) )
.show(ctx, |ui| { .show_inside(ui, |ui| {
let tree = &mut settings.tree; let tree = &mut settings.tree;
let mut behavior = CcBehavior { let mut behavior = CcBehavior {
cc: &self, cc: &self,
@ -358,11 +357,11 @@ impl EggWindowOwner for ControlCenterInner {
if let Some(close) = behavior.close { if let Some(close) = behavior.close {
tree.set_visible(close, false); tree.set_visible(close, false);
tree.remove_recursively(close); tree.remove_recursively(close);
ui.ctx().request_repaint(); ui.request_repaint();
} }
if let Some(ty) = behavior.open { if let Some(ty) = behavior.open {
self.open(tree, ty); self.open(tree, ty);
ui.ctx().request_repaint(); ui.request_repaint();
} }
}); });
} }
@ -515,7 +514,7 @@ fn show_errors(ui: &mut Ui, pane: &mut PaneState) {
} }
if let Some(idx) = to_remove { if let Some(idx) = to_remove {
pane.errors.remove(idx); pane.errors.remove(idx);
ui.ctx().request_repaint(); ui.request_repaint();
} }
ui.separator(); ui.separator();
} }

View file

@ -22,10 +22,7 @@ use {
text::LayoutJob, text::LayoutJob,
}, },
linearize::Linearize, linearize::Linearize,
std::{ std::rc::{Rc, Weak},
any::Any,
rc::{Rc, Weak},
},
}; };
pub enum ClientCrit { pub enum ClientCrit {
@ -456,8 +453,4 @@ impl CacheTrait for ClientWindowMatchersCache {
fn len(&self) -> usize { fn len(&self) -> usize {
self.matchers.len() self.matchers.len()
} }
fn as_any_mut(&mut self) -> &mut dyn Any {
self
}
} }

View file

@ -34,7 +34,7 @@ impl CompositorPane {
row(ui, "Repository", |ui| { row(ui, "Repository", |ui| {
let url = "https://github.com/mahkoh/jay"; let url = "https://github.com/mahkoh/jay";
if ui.link(url).clicked() { if ui.link(url).clicked() {
ui.ctx().open_url(OpenUrl::new_tab(url)); ui.open_url(OpenUrl::new_tab(url));
} }
}); });
label(ui, "Version", VERSION); label(ui, "Version", VERSION);
@ -66,7 +66,7 @@ impl CompositorPane {
.on_hover_text_at_pointer("Copy to clipboard") .on_hover_text_at_pointer("Copy to clipboard")
.clicked() .clicked()
{ {
ui.ctx().copy_text(path); ui.copy_text(path);
} }
}); });
} }

View file

@ -526,118 +526,121 @@ fn show_keymap(
map: Option<&Rc<KbvmMap>>, map: Option<&Rc<KbvmMap>>,
set_map: impl Fn(&Rc<KbvmMap>), set_map: impl Fn(&Rc<KbvmMap>),
) { ) {
ui.scope_builder(UiBuilder::new().id(("keymap-settings", ks.seed)), |ui| { ui.scope_builder(
ui.add_enabled_ui(map.is_some(), |ui| { UiBuilder::new().id(Id::new(("keymap-settings", ks.seed))),
if ui.button("Copy Keymap").clicked() |ui| {
&& let Some(map) = map
{
ui.ctx().copy_text(map.map_text.clone());
}
});
let backup = |ks: &mut KeymapState| {
ks.backup(map);
};
if ui.button("Load Default Keymap").clicked() {
backup(ks);
set_map(&state.default_keymap);
}
ui.horizontal(|ui| {
ui.add_enabled_ui(map.is_some(), |ui| { ui.add_enabled_ui(map.is_some(), |ui| {
if ui.button("Backup Keymap").clicked() { if ui.button("Copy Keymap").clicked()
ks.backup = None; && let Some(map) = map
backup(ks); {
ui.copy_text(map.map_text.clone());
} }
}); });
if let Some(backup) = &ks.backup let backup = |ks: &mut KeymapState| {
&& ui.button("Restore Keymap").clicked() ks.backup(map);
{ };
set_map(backup); if ui.button("Load Default Keymap").clicked() {
ks.backup = None;
}
});
let mut label = "Load Keymap from Clipboard".to_string();
if *paste_requested == Some(ui.id()) {
label.push_str(" ");
label.push_str(ICON_PENDING);
}
let button = ui.button(label);
if button.clicked() {
*paste_requested = Some(ui.id());
button.request_focus();
ui.ctx().send_viewport_cmd(ViewportCommand::RequestPaste);
} else if *paste_requested == Some(ui.id()) && button.has_focus() {
ui.input(|e| {
let map = e
.events
.iter()
.filter_map(|e| match e {
Event::Paste(s) => Some(s),
_ => None,
})
.next();
let Some(map) = map else {
return;
};
*paste_requested = None;
let map = match state.kb_ctx.parse_keymap(map.as_bytes()) {
Ok(m) => m,
Err(e) => {
let error = format!("Could not parse keymap: {}", ErrorFmt(e));
ps.errors.push(error);
return;
}
};
backup(ks); backup(ks);
set_map(&map); set_map(&state.default_keymap);
}
ui.horizontal(|ui| {
ui.add_enabled_ui(map.is_some(), |ui| {
if ui.button("Backup Keymap").clicked() {
ks.backup = None;
backup(ks);
}
});
if let Some(backup) = &ks.backup
&& ui.button("Restore Keymap").clicked()
{
set_map(backup);
ks.backup = None;
}
}); });
} else if *paste_requested == Some(ui.id()) { let mut label = "Load Keymap from Clipboard".to_string();
*paste_requested = None; if *paste_requested == Some(ui.id()) {
} label.push_str(" ");
ui.collapsing("Create Keymap from Names", |ui| { label.push_str(ICON_PENDING);
grid(ui, ("keymap-from-names", ui.id()), |ui| { }
let defaulted = let button = ui.button(label);
|ui: &mut Ui, name: &str, default: &mut bool, text: &mut dyn TextBuffer| { if button.clicked() {
let ui = &mut *ui.row(); *paste_requested = Some(ui.id());
grid_label(ui, name); button.request_focus();
ui.add_enabled_ui(!*default, |ui| { ui.send_viewport_cmd(ViewportCommand::RequestPaste);
text_edit(ui, text); } else if *paste_requested == Some(ui.id()) && button.has_focus() {
}); ui.input(|e| {
ui.checkbox(default, "Default"); let map = e
.events
.iter()
.filter_map(|e| match e {
Event::Paste(s) => Some(s),
_ => None,
})
.next();
let Some(map) = map else {
return;
}; };
let required = |ui: &mut Ui, name, text| { *paste_requested = None;
let ui = &mut *ui.row(); let map = match state.kb_ctx.parse_keymap(map.as_bytes()) {
grid_label(ui, name); Ok(m) => m,
text_edit(ui, text);
};
defaulted(ui, "Rules", &mut ks.rules_default, &mut ks.rules);
defaulted(ui, "Model", &mut ks.model_default, &mut ks.model);
required(ui, "Layouts", &mut ks.layouts);
required(ui, "Variants", &mut ks.variants);
required(ui, "Options", &mut ks.options);
});
if ui.button("Load").clicked() {
'set_map: {
let map = state.kb_ctx.keymap_from_rmlvo(
(!ks.rules_default).then_some(&ks.rules),
(!ks.model_default).then_some(&ks.model),
Some(&ks.layouts),
Some(&ks.variants),
Some(&ks.options),
);
let map = match map {
Ok(map) => map,
Err(e) => { Err(e) => {
let error = format!("Could not parse keymap: {}", ErrorFmt(e)); let error = format!("Could not parse keymap: {}", ErrorFmt(e));
ps.errors.push(error); ps.errors.push(error);
break 'set_map; return;
} }
}; };
backup(ks); backup(ks);
set_map(&map); set_map(&map);
} });
} else if *paste_requested == Some(ui.id()) {
*paste_requested = None;
} }
}); ui.collapsing("Create Keymap from Names", |ui| {
}); grid(ui, ("keymap-from-names", ui.id()), |ui| {
let defaulted =
|ui: &mut Ui, name: &str, default: &mut bool, text: &mut dyn TextBuffer| {
let ui = &mut *ui.row();
grid_label(ui, name);
ui.add_enabled_ui(!*default, |ui| {
text_edit(ui, text);
});
ui.checkbox(default, "Default");
};
let required = |ui: &mut Ui, name, text| {
let ui = &mut *ui.row();
grid_label(ui, name);
text_edit(ui, text);
};
defaulted(ui, "Rules", &mut ks.rules_default, &mut ks.rules);
defaulted(ui, "Model", &mut ks.model_default, &mut ks.model);
required(ui, "Layouts", &mut ks.layouts);
required(ui, "Variants", &mut ks.variants);
required(ui, "Options", &mut ks.options);
});
if ui.button("Load").clicked() {
'set_map: {
let map = state.kb_ctx.keymap_from_rmlvo(
(!ks.rules_default).then_some(&ks.rules),
(!ks.model_default).then_some(&ks.model),
Some(&ks.layouts),
Some(&ks.variants),
Some(&ks.options),
);
let map = match map {
Ok(map) => map,
Err(e) => {
let error = format!("Could not parse keymap: {}", ErrorFmt(e));
ps.errors.push(error);
break 'set_map;
}
};
backup(ks);
set_map(&map);
}
}
});
},
);
} }
fn matrix<T, const W: usize>( fn matrix<T, const W: usize>(

View file

@ -262,33 +262,36 @@ impl OutputsPane {
impl OutputsPaneInner { impl OutputsPaneInner {
fn show_main_area(&mut self, ps: &mut PaneState, ui: &mut Ui) { fn show_main_area(&mut self, ps: &mut PaneState, ui: &mut Ui) {
ui.scope_builder(UiBuilder::new().id(("main_area", self.seed)), |ui| { ui.scope_builder(
self.show_settings_bar(ps, ui); UiBuilder::new().id(Id::new(("main_area", self.seed))),
ScrollArea::vertical().show(ui, |ui| { |ui| {
match self.ui.view { self.show_settings_bar(ps, ui);
View::Connectors => self.show_connectors(ui), ScrollArea::vertical().show(ui, |ui| {
View::Settings => self.show_settings(ui), match self.ui.view {
} View::Connectors => self.show_connectors(ui),
ui.allocate_space(ui.available_size()); View::Settings => self.show_settings(ui),
}); }
}); ui.allocate_space(ui.available_size());
});
},
);
} }
fn show_settings_bar(&mut self, ps: &mut PaneState, ui: &mut Ui) { fn show_settings_bar(&mut self, ps: &mut PaneState, ui: &mut Ui) {
ui.horizontal_wrapped(|ui| { ui.horizontal_wrapped(|ui| {
if ui.button("Connectors").clicked() { if ui.button("Connectors").clicked() {
self.ui.view = View::Connectors; self.ui.view = View::Connectors;
ui.ctx().request_repaint(); ui.request_repaint();
} }
if ui.button("Settings").clicked() { if ui.button("Settings").clicked() {
self.ui.view = View::Settings; self.ui.view = View::Settings;
ui.ctx().request_repaint(); ui.request_repaint();
} }
if ui if ui
.checkbox(&mut self.ui.zoom_to_fit, "Zoom To Fit") .checkbox(&mut self.ui.zoom_to_fit, "Zoom To Fit")
.changed() .changed()
{ {
ui.ctx().request_repaint(); ui.request_repaint();
} }
{ {
let mut reset = !self.in_transaction.get(); let mut reset = !self.in_transaction.get();
@ -405,7 +408,7 @@ impl OutputsPaneInner {
} }
if changed { if changed {
ui.ctx().request_repaint(); ui.request_repaint();
} }
} }
@ -492,7 +495,7 @@ impl OutputsPaneInner {
self.ui.scale = new_scale; self.ui.scale = new_scale;
origin.x = new_ox; origin.x = new_ox;
origin.y = new_oy; origin.y = new_oy;
ui.ctx().request_repaint(); ui.request_repaint();
} }
} }
heads.sort_by_key(|h| *h.z); heads.sort_by_key(|h| *h.z);
@ -616,7 +619,7 @@ impl OutputsPaneInner {
if response.has_focus() { if response.has_focus() {
let mut dx = 0; let mut dx = 0;
let mut dy = 0; let mut dy = 0;
ui.ctx().input(|i| { ui.input(|i| {
if i.key_pressed(Key::ArrowUp) { if i.key_pressed(Key::ArrowUp) {
dy -= 1; dy -= 1;
} }
@ -639,14 +642,14 @@ impl OutputsPaneInner {
let pos = (x, y); let pos = (x, y);
if effective!(&*head.m, head.changed_state).position != pos { if effective!(&*head.m, head.changed_state).position != pos {
modify!(&*head.m, head.changed_state).position = pos; modify!(&*head.m, head.changed_state).position = pos;
ui.ctx().request_repaint(); ui.request_repaint();
} }
} }
} }
} }
} }
if let Some(pos) = response.hover_pos() { if let Some(pos) = response.hover_pos() {
let scroll = ui.ctx().input(|i| i.smooth_scroll_delta); let scroll = ui.input(|i| i.smooth_scroll_delta);
let mut new = scale; let mut new = scale;
if scroll.y != 0.0 { if scroll.y != 0.0 {
interacted!(); interacted!();
@ -659,16 +662,13 @@ impl OutputsPaneInner {
new = new.max(0.01); new = new.max(0.01);
if new != scale { if new != scale {
self.ui.scale = new; self.ui.scale = new;
ui.ctx().request_repaint(); ui.request_repaint();
let relative_pos = pos - clip_rect.min; let relative_pos = pos - clip_rect.min;
let real_pos = (relative_pos + *origin) / scale; let real_pos = (relative_pos + *origin) / scale;
*origin = real_pos * new - relative_pos; *origin = real_pos * new - relative_pos;
} }
} }
if ui if ui.input(|i| i.pointer.button_pressed(PointerButton::Primary)) {
.ctx()
.input(|i| i.pointer.button_pressed(PointerButton::Primary))
{
self.ui.focus += 1; self.ui.focus += 1;
if let Some(pos) = response.hover_pos() { if let Some(pos) = response.hover_pos() {
interacted!(); interacted!();
@ -678,7 +678,7 @@ impl OutputsPaneInner {
*head.z = self.ui.next_z; *head.z = self.ui.next_z;
self.ui.next_z += 1; self.ui.next_z += 1;
*head.focus = self.ui.focus; *head.focus = self.ui.focus;
ui.ctx().request_repaint(); ui.request_repaint();
break; break;
} }
} }
@ -708,9 +708,9 @@ impl OutputsPaneInner {
if let Some(origin_drag) = &mut self.ui.origin_drag { if let Some(origin_drag) = &mut self.ui.origin_drag {
*origin_drag -= drag_delta; *origin_drag -= drag_delta;
self.ui.origin = *origin_drag; self.ui.origin = *origin_drag;
ui.ctx().request_repaint(); ui.request_repaint();
} }
let snap = self.settings.snap_to_neighbor ^ ui.ctx().input(|i| i.modifiers.shift); let snap = self.settings.snap_to_neighbor ^ ui.input(|i| i.modifiers.shift);
let mut head_positions = vec![]; let mut head_positions = vec![];
struct HeadPosition { struct HeadPosition {
name: HeadName, name: HeadName,
@ -781,7 +781,7 @@ impl OutputsPaneInner {
let pos = (x_int, y_int); let pos = (x_int, y_int);
if effective!(&*head.m, head.changed_state).position != pos { if effective!(&*head.m, head.changed_state).position != pos {
modify!(&*head.m, head.changed_state).position = pos; modify!(&*head.m, head.changed_state).position = pos;
ui.ctx().request_repaint(); ui.request_repaint();
} }
*head.drag_pos = Some((x, y)); *head.drag_pos = Some((x, y));
} }
@ -793,7 +793,7 @@ impl OutputsPaneInner {
*head.drag_pos = None; *head.drag_pos = None;
} }
} }
ui.ctx().memory_mut(|mem| { ui.memory_mut(|mem| {
mem.set_focus_lock_filter( mem.set_focus_lock_filter(
response.id, response.id,
EventFilter { EventFilter {

View file

@ -52,7 +52,7 @@ impl ControlCenterInner {
|ui| { |ui| {
ui.add_space(6.0); ui.add_space(6.0);
if ui.button("Close").clicked() { if ui.button("Close").clicked() {
ui.ctx().send_viewport_cmd(ViewportCommand::Close); ui.send_viewport_cmd(ViewportCommand::Close);
} }
ui.separator(); ui.separator();
ScrollArea::vertical().show(ui, |ui| { ScrollArea::vertical().show(ui, |ui| {
@ -86,7 +86,7 @@ impl ControlCenterInner {
} }
}; };
self.open(tree, ty); self.open(tree, ty);
ui.ctx().request_repaint(); ui.request_repaint();
} }
} }
ui.add_space(3.0); ui.add_space(3.0);

View file

@ -42,7 +42,7 @@ impl VirtualOutputsPane {
ui.text_edit_singleline(&mut self.new); ui.text_edit_singleline(&mut self.new);
if ui.button("Add").clicked() { if ui.button("Add").clicked() {
s.virtual_outputs.get_or_create(s, &self.new); s.virtual_outputs.get_or_create(s, &self.new);
ui.ctx().request_repaint(); ui.request_repaint();
} }
}); });
} }

View file

@ -25,7 +25,6 @@ use {
}, },
linearize::Linearize, linearize::Linearize,
std::{ std::{
any::Any,
mem, mem,
rc::{Rc, Weak}, rc::{Rc, Weak},
}, },
@ -453,10 +452,6 @@ impl CacheTrait for WindowPropertyListeners {
fn len(&self) -> usize { fn len(&self) -> usize {
self.listeners.len() self.listeners.len()
} }
fn as_any_mut(&mut self) -> &mut dyn Any {
self
}
} }
fn show_content_types(ui: &mut Ui, ct: &mut ContentType) -> bool { fn show_content_types(ui: &mut Ui, ct: &mut ContentType) -> bool {

View file

@ -70,8 +70,8 @@ use {
}, },
egui::{ egui::{
CursorIcon, Event, FontData, FontDefinitions, FontFamily, FullOutput, Key, Modifiers, CursorIcon, Event, FontData, FontDefinitions, FontFamily, FullOutput, Key, Modifiers,
MouseWheelUnit, OutputCommand, PlatformOutput, PointerButton, Pos2, RawInput, Vec2, MouseWheelUnit, OutputCommand, PlatformOutput, PointerButton, Pos2, RawInput, TouchPhase,
ViewportCommand, ViewportEvent, ViewportId, ViewportInfo, pos2, vec2, Vec2, ViewportCommand, ViewportEvent, ViewportId, ViewportInfo, pos2, vec2,
}, },
futures_util::{FutureExt, select}, futures_util::{FutureExt, select},
isnt::std_1::primitive::{IsntCharExt, IsntSliceExt, IsntStrExt}, isnt::std_1::primitive::{IsntCharExt, IsntSliceExt, IsntStrExt},
@ -195,7 +195,7 @@ pub struct EggWindow {
pub trait EggWindowOwner { pub trait EggWindowOwner {
fn close(&self); fn close(&self);
fn render(self: Rc<Self>, ctx: &egui::Context); fn render(self: Rc<Self>, ui: &mut egui::Ui);
} }
struct EggWindowInner { struct EggWindowInner {
@ -768,8 +768,8 @@ impl EggWindowInner {
.raw_input .raw_input
.take() .take()
.unwrap_or_else(|| self.default_raw_input()); .unwrap_or_else(|| self.default_raw_input());
let full_output = self.egui.run(raw_input, |ctx| { let full_output = self.egui.run_ui(raw_input, |ui| {
owner.clone().render(ctx); owner.clone().render(ui);
}); });
let FullOutput { let FullOutput {
platform_output, platform_output,
@ -1098,6 +1098,7 @@ impl UsrWlPointerOwner for EggSeatInner {
window.event(Event::MouseWheel { window.event(Event::MouseWheel {
unit, unit,
delta, delta,
phase: TouchPhase::Move,
modifiers: self.kb_modifiers.get(), modifiers: self.kb_modifiers.get(),
}); });
} }