Overview of perfect_cursors
mainperfect_cursors is a Rust port of the perfect-cursors library by Steve Ruiz. It is designed to work with egui (specifically targeting egui version 0.35.0 based on badges).repository·main·Indexed 20 days ago
https://github.com/lucasmerlin/hello_eguiA collection of specialized utility crates for the egui library. Includes egui_dnd for drag-and-drop, egui_flex for a single-pass flexbox layout system, egui_form for form validation using garde or validator, egui_inbox for async message passing to views, egui_infinite_scroll for virtualized infinite lists, and egui_material_icons for Material Symbols integration.
perfect_cursors is a Rust port of the perfect-cursors library by Steve Ruiz. It is designed to work with egui (specifically targeting egui version 0.35.0 based on badges).egui_router is a single-page application (SPA) router designed for use with egui. It provides routing capabilities similar to the Axum web framework, including route matching and handler functions. It also supports customizable animations for transitions between routes.hello_egui_utils crate provides shared helper methods and structs used across the hello_egui ecosystem. It is designed to support various crates within the project by providing common utilities.The following crates are experimental. Use them with caution. If you need an experimental crate released to crates.io, please open an issue in the repository.
egui_dnd.wry. Warning: Currently uses unsafe to bypass Send/Sync limitations; may have safety issues. Currently unreleased.egui_webview is a proof-of-concept crate designed to integrate a webview into an egui application.
How it works:
Instead of direct embedding, it functions by taking screenshots of the webview and rendering those screenshots as an egui texture. This rendering occurs whenever content is displayed above the webview layer.
Requirements:
This implementation relies on a specific feature in the wry crate (specifically the screenshot PR: https://github.com/tauri-apps/wry/pull/266) to capture the webview content.
The following crates are considered mature and are released on crates.io:
egui_dnd.egui_virtual_list.egui_thumbhash crate provides an image loader for egui to handle thumbhashes. It includes a ThumbhashImage widget designed to display a thumbhash placeholder while the actual high-resolution image is loading. This crate uses the thumbhash crate internally for the decoding process.egui_dnd is a drag and drop library designed specifically for use with the egui framework. It allows users to implement drag-and-drop functionality within egui applications.
To implement drag and drop, refer to the simple example for a baseline implementation pattern.
/* See simple.rs for implementation details */egui_infinite_scroll is a widget for egui that enables infinite scrolling functionality. It supports loading items with varying heights and allows scrolling to load content from either the top or the bottom of a list. It is built on top of the egui_virtual_list crate to provide efficient virtualized rendering.
For practical implementations, refer to the Gallery and Chat examples in the hello_egui project.
egui_pull_to_refresh crate provides a way to implement pull-to-refresh behavior in egui applications. It works by wrapping an existing UI section within a PullToRefresh widget. When a user performs a pull-down gesture on the wrapped widget, a refresh indicator is displayed.The egui_form crate provides form validation capabilities for egui applications. It supports two primary validation engines:
Because these are standard Rust crates, you can share the same validation logic between your client (egui) and your server.
If you use a different validation crate, you can still use egui_form by implementing the EguiValidationReport trait for your validation result.
The egui_virtual_list crate provides an enhanced virtual list widget for egui. While egui's built-in ScrollArea::show_rows provides basic virtualization, egui_virtual_list is designed for more complex scenarios including:
When NOT to use this crate:
egui::ScrollArea instead.egui_infinite_scroll crate instead.