This project attempts to allow the creation of reusable egui-themes

Related tags

GUI egui-stylist
Overview

egui stylist

Latest version Documentation Build Status MIT

Note this project is considered to be experimental and -- while used in personal projects -- may have API breaking changes without warning until 0.1.0 where this repo will start following normal Cargo's Semantic Versioning for API changes.

This project is to help create reusable themes that can be serialized into and from egui. This way it should be much easier to track, design and skin egui natively inside of egui.

This library also strives to be embeddable into any existing application and was built with the intent of embedding itself as an editor script in Godot Engine leveraging godot-egui

While egui already has the ability to natively make changes to the settings directly by using Context::settings_ui() this is not necessarily optimal for theme creation. This tool seeks to optimize this process.

This library is available as a native application which can be built using cargo build or cargo build --release and run natively or embedded in a game engine, such as the sample available with godot-egui

Embedding in other applications

This library is built with egui and can be run as a widget in any egui application. To do so, include this application as a dependency in your Cargo.toml file and use the StylerState and EguiTheme types directly directly.

Road Map

  • Improve UX for the theme and font editor
  • Stablize the API for version 0.2.0
  • Enhance the Theme Previewer to move away from the using the Demo widget gallery and be more comprehensive
  • Theme inspector
  • Small set of selected default themes

Contributions

Contributions to should be made in the form of GitHub pull requests. I will be happy to review and include any additional changes that make sense for the project.

Please make sure to run cargo fmt and cargo clippy before submitting your pull requests. To keep the main repository as clean as possible, please also ensure that the repository has any warnings from the compiler fixed. Also, as egui does not require any use of unsafe at this moment, unsafe is considered to be forbidden

All contributions freely made to this projects are licensed as per the terms of the MIT License.

Comments
  • Investigate using snap to decrease stored theme sizes.

    Investigate using snap to decrease stored theme sizes.

    Snap may be a good format for the Egui-Theme to allow it to be compressible.

    This should be a feature flag as it may not be necessary in all applications.

    In addition to the necessary feature flags, the EguiTheme should store an extra field mentioning the version it was created with and whether or not it is compressed.

    If the compression is not enabled for a compressed EguiTheme emit an error letting the parser know that it cannot decompress it without the feature flag, otherwise if compression is enabled it can optionally decompress if it is indicated to be compressed.

    Tasks

    • [ ] Test to see space savings, no point in implementing it if there's no savings.
    • [ ] Determine if the runtime data can be stored as compressed memory.
    • [ ] Implement snap as feature flag
    • [ ] Implement additional meta-data to the Ron file.
    • [ ] Add all the compression information as an inner type.
    enhancement 
    opened by jacobsky 3
  • egui version is outdated

    egui version is outdated

    egui has changed a few things around in 0.16 and will change a few more things like font families in 0.17 . this library doesn't work with egui 0.16 or the present master (0.17 in future) branch.

    any chance that this will get updated to work with those versions?

    I really like the style editor btw. feels so clean when editing a style.

    opened by coderedart 2
  • Clean up dependencies

    Clean up dependencies

    While it is currently fine one thing that is bothering me is that anyone embedding egui-stylist into an application will get stuck with all the other dependences like eframe/epi and rfd when building the library. Since this is essentially useless for anyone, I need to find someway to strip out those dependencies where possible.

    Option 1 - Feature flags. I can create a feature called "native" or something like that which will be used to select conditionally compiled dependencies.

    Option 2 - Strip the binary out of the egui-stylist crate entirely and put all that stuff into a "egui-stylist-native" crate where the dependencies are added. The dependencies would be "egui-stylist-native" depends on "egui-stylist" depends on "egui-theme" and then anyone using egui-stylist will only have egui as a dependency.

    I'll give option 1 a try first since it would be the smallest code change. Option 2 will happen if I can't get it to work at all.

    opened by jacobsky 2
  • Theme output in wasm32

    Theme output in wasm32

    Currently wasm32 doesn't have support for saving due to rfd not supporting saving of files.

    Instead wasm32 should allow for downloading. I need to figure out how to make this work.

    duplicate enhancement 
    opened by jacobsky 2
  • build.rs panic during build from another library

    build.rs panic during build from another library

    Compiling egui-theme v0.2.0 Compiling egui-theme v0.2.0 error: failed to run custom build command for egui-theme v0.2.0 (https://github.com/jacobsky/egui-stylist/?branch=master#fd07db17)

    Caused by: process didn't exit successfully: target\debug\build\egui-theme-5d36fe45501b0c36\build-script-build (exit code: 101) --- stderr thread 'main' panicked at 'cargo egui-stylist-e6bf6e53cf74bd30\fd07db1\egui-theme/../Cargo.lock should exist before the build kicks off: Io(NotFound)', C:\Users\Kyle.cargo\git\checkouts\egui-stylist-e6bf6e53cf74bd30\fd07db1\egui-theme\build.rs:12:10 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace warning: build failed, waiting for other jobs to finish...

    opened by jacobsky 1
  • Add a version tag to theme

    Add a version tag to theme

    This may break existing themes, but we can probably keep it optional. There should be a few optional tags that should be added to the themes. Themes should indicate which version of the theme they were created as, and it should be possible to convert older themes into newer theme formats.

    I will need to do some research to determine how best to work on this.

    • [x] Research how this is generally done in specifications.
    • [x] Determine how to best support compatibility between versions in rust
    • [x] Add the necessary parameters to the EguiTheme struct.
    opened by jacobsky 1
  • Preview enhancements

    Preview enhancements

    The preview is currently just using most of the widget demo.

    It needs some additional widgets, windows and other demo stuff so that you can get a better handle on just how the theme configuration is working.

    In addition, it would be nice if you could watch the demo change as you tweak the settings.

    enhancement 
    opened by jacobsky 1
  • Set up crate publishing CI task

    Set up crate publishing CI task

    See title. I don't want to do anymore crate publishing by hand. Using a CI runner will be the best way to ensure that I don't make any silly mistakes, like trying to publish the binary.

    opened by jacobsky 0
  • Support WASM32

    Support WASM32

    Currently WASM32 is not supported due to no good way to save data. This will not be fixed before 0.1.0 as the native gui and the embeddable GUI are

    • [ ] Support wasm32 build
    • [ ] Support EguiTheme export in wasm32
    • [ ] Support EguiTheme importing in wasm32
    enhancement wontfix 
    opened by jacobsky 1
Releases(0.2.0)
  • 0.2.0(Jun 4, 2022)

    The focus on this release is supporting egui 0.18 as well as reworking the EguiTheme format. This results in breaking changes that will require any exported fonts to be completely recreated. This should be the last time that this is required.

    In addition egui-stylist has made the necessary changes to support the new text_styles formats and text option changes.

    Supported version of egui is 0.18

    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Oct 30, 2021)

    This release is intended to bump the version of godot-egui to v0.15.0

    While there should be no API breaking changes, there is a change egui-themes created for egui 0.14.2, will have references to the old font that changed, they will need to be migrated using the new migrations module.

    A migrations tool in egui-stylist will be released at a later date.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Sep 24, 2021)

    This release marks that the initial experimentation phase of this crate is now completed and that this crate will strive to follow Cargo SemVer Compatibility to the best of it's ability.

    Change Log:

    • Side by Side preview to enable actively viewing the theme changes.
    • Stablized Egui Theme API with future migration support in mind.
    • Various bug fixes.
    • Better UX for the theme editor.
    Source code(tar.gz)
    Source code(zip)
Owner
Jacobsky
Software developer currently residing near Tokyo, Japan. 日本の東京都内に住んでいるソフトウェア開発者
Jacobsky
Egui node graph is a featureful, customizable library to create node graph applications using egui

Egui node graph is a featureful, customizable library to create node graph applications using egui. The library takes care of presenting a node graph to your users, and allows customizing many aspects of the interaction, creating the semantics you want for your specific application.

null 367 Jan 8, 2023
A presentation about egui, implemented in egui

egui presentation A presentation about egui, implemented in egui. You can view the presentation at https://emilk.github.io/egui_presentation/. TODO Li

Emil Ernerfeldt 9 Aug 24, 2023
A simple GUI version of the pH calibration tool written in egui, based on the eframe template.

caliphui A simple GUI version of the pH calibration tool written in egui, based on the eframe template. Usage Native binaries are provided under relea

Peter Dunne 0 Dec 29, 2021
FLTK frontend for Egui WGPU backend.

Egui FLTK Frontend FLTK Frontend for Egui WGPU Backend On linux Debian/Ubuntu, make sure to install the latest main requirements: sudo apt-get update

Adia Robbie 5 Oct 25, 2022
egui: an easy-to-use immediate mode GUI in pure Rust

?? egui: an easy-to-use GUI in pure Rust egui is a simple, fast, and highly portable immediate mode GUI library for Rust. egui runs on the web, native

Emil Ernerfeldt 12.6k Jan 3, 2023
D3D11 backend for egui library. Presumably for mods/cheats development

D3D11 backend for egui library. Presumably for mods/cheats development. Currently few features from egui are missing. WIP.

sy1ntexx 24 Jan 4, 2023
Egui bindings for macroquad

egui bindings for macroquad This is the easiest way to use egui. Just two functions! Web demo. Usage You need to call ui when you need to get informat

ilya sheprut 54 Dec 28, 2022
Egui bindings for miniquad

egui bindings for miniquad native On Linux you first must run apt install libx11-dev libxi-dev libgl1-mesa-dev (miniquad dependencies). cargo run --re

Fedor Logachev 48 Dec 28, 2022
Render egui with skia!

Skia backend for egui This is a drawing backend for egui that uses skia-safe. Usage Have a look at the metal or cpu examples to get started. Run the e

null 14 Dec 19, 2022
a day-planner/calendar app based on egui

Malakal Malakal is a day planner application. I crafted it because I was not able to find a comfortable calendar application for Linux. I myself have

null 5 Dec 21, 2022
Example showing how to use tokio and egui together.

Example using tokio with egui This example uses reqwest to send an HTTP request to httpbin. The parsed response contains an increment value (as provid

Jay Oster 10 Dec 25, 2022
A render-backend independant egui backend for sdl2

A Sdl2 + Egui Backend An egui backend for sdl2 unbound to any renderer-backend. You can include it like so: [dependencies] egui_sdl2_platform = "0.1.0

null 4 Dec 16, 2022
egui backend for D3D9.

egui-d3d9 egui backend for D3D9. Primarily intended for source games like CS:GO and GMod. It's not perfect by far, but it'll do. This is a rewrite of

unknowntrojan 6 Dec 25, 2022
egui port to Car Thing (and maybe an alternative Car Thing UI?)

tt This project contains a port of egui to the Spotify Car Thing although in the future I also plan for it to contain a custom Car Thing UI. Technical

Andy Bao 7 Dec 30, 2022
Create dynamic grid-based layouts for egui

egui_grid Create dynamic grid layouts for egui. Grids are flexible, easy to create, with behavior similar to egui_extra's strip creation. They're comp

null 6 Apr 18, 2023
Provides event handling for egui in SDL2 window applications.

egui-sdl2-event Provides event handling for egui when SDL2 is used as the windowing system. This crate does not perform any rendering, but it can be c

Valtteri Vallius 8 Feb 15, 2023
An interactive JSON tree visualiser for egui, with search and highlight functionality.

egui_json_tree An interactive JSON tree visualiser for egui, with search and highlight functionality. Usage use egui::{Color32}; use egui_json_tree::{

null 13 Sep 1, 2023
egui integration for ash (Vulkan).

egui-ash egui integration for ash (Vulkan). This crate natively supports the multi-viewports feature added since version 0.24 of egui. You can use gpu

Orito Itsuki 6 Dec 24, 2023
A Vulkan renderer for egui using Ash.

egui-ash-renderer A Vulkan renderer for egui using Ash. This is meant to add support for egui in your existing Vulkan/ash applications. Not a full efr

Adrien Bennadji 4 Apr 10, 2024