You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Emil Ernerfeldt 2bd610cb5b Fix dubplicate itmes in Style menu 5 years ago
..
fonts New font: Comfortaa 6 years ago
src Fix dubplicate itmes in Style menu 5 years ago
Cargo.toml Update rusttype 5 years ago
README.md Rename Region to Ui (shorter, sweeter) 5 years ago

README.md

GUI implementation

This is the core library crate Emigui. It is fully platform independent without any backend. You give the Emigui library input each frame (mouse pos etc), and it outputs a triangle mesh for you to paint.

TODO:

Widgets

  • Label
  • Button
  • Checkbox
  • Radiobutton
  • Horizontal slider
  • Vertical slider
  • Collapsing header region
  • Tooltip
  • Movable/resizable windows
    • Kinetic windows
    • BUG FIX: Don't catch clicks on closed windows
    • Windows should open from Regions and be boxed by parent region.
      • Then we could open the example app inside a window in the example app, recursively.
  • Scroll areas
    • Vertical scrolling
    • Horizontal scrolling
    • Scroll-wheel input
    • Drag background to scroll
    • Kinetic scrolling
  • Add support for clicking links
  • Menu bar (File, Edit, etc)
  • Text input
    • Input events (key presses)
    • Text focus
    • Cursor movement
    • Text selection
    • Clipboard copy/paste
    • Move focus with tab
    • Handle leading/trailing space
  • Color picker
  • Style editor
  • Table with resizable columns
  • Layout
    • Generalize Layout (separate from Region)
    • Cascading layout: same lite if it fits, else next line. Like text.
    • Grid layout
  • Image support

Web version:

  • Scroll input
  • Change to resize cursor on hover
  • Make it a JS library for easily creating your own stuff
  • Read url fragment and redirect to a subpage (e.g. different examples apps)

Animations

Add extremely quick animations for some things, maybe 2-3 frames. For instance:

  • Animate collapsing headers with clip_rect

Clip rects

  • Separate Region::clip_rect from Region::rect
  • Use clip rectangles when painting
  • Use clip rectangles when interacting
  • Adjust clip rects so edges of child widgets aren't clipped
  • Use HW clip rects

Modularity

  • trait Widget (Label, Slider, Checkbox, ...)
  • trait Container (Frame, Resize, ScrollArea, ...)
  • widget::TextButton implemented as a container::Button which contains a widget::Label.
  • Easily chain Containers without nested closures.
    • e.g. region.containers((Frame::new(), Resize::new(), ScrollArea::new()), |ui| ...)

Input

  • Distinguish between clicks and drags
  • Double-click
  • Text

Debugability / Inspection

  • Widget debug rectangles
  • Easily debug why something keeps expanding

Other

  • Persist UI state in external storage
  • Pixel-perfect rendering (round positions to nearest pixel).
  • Build in a profiler which tracks which region in which window takes up CPU.
    • Draw as flame graph
    • Draw as hotmap

Names and structure

  • Rename things to be more consistent with Dear ImGui
  • Combine Emigui and Context?
  • Solve which parts of Context are behind a mutex
    • All of Context behind one mutex?
    • [ } Break up Context into Input, State, Output ?
  • Rename Region to Ui
  • Maybe find a shorter name for the library like egui?

Ability to do a search for any widget. The search works even for collapsed regions and closed windows and menus. This is implemented like this: while searching, all region are layed out and their add_content functions are run. If none of the contents matches the search, the layout is reverted and nothing is shown. So windows will get temporarily opened and run, but if the search is not a match in the window it is closed again. This means then when searching your whole GUI is being run, which may be a bit slower, but it would be a really awesome feature.