Commit graph

1120 commits

Author SHA1 Message Date
Emil Ernerfeldt
1f93c7b0b6 Implement Clone & PartialEq on RichText WidgetTextJob WidgetTextGalley 2022-01-07 15:22:21 +01:00
Lampsitter
b0ea4dc0b5
Fix context menu styling (#1043) 2022-01-06 12:17:12 +01:00
Emil Ernerfeldt
7863f44111 Add demo of advanced TextEdit usage 2022-01-06 11:53:23 +01:00
Emil Ernerfeldt
79cfdaa1f9 Better docs and spelling fixes 2022-01-03 23:58:06 +01:00
Emil Ernerfeldt
b1fd6a44e8
Switch to using glow as the default renderer both on native and the web (#1020)
* Switch to using glow as the default renderer both on native and the web
* Simplify code to find WebGL context for glow
* egui_web: make webgl an opt-in feature
* Stop using deprecated WEBGL_debug_renderer_info
2021-12-31 15:17:55 +01:00
LordMZTE
8da592c6ab
Add Spinner widget (#1013)
* add spinner widget

* implement requested changes to spinner

- removed enabled field
- cleaned up math
- improved docs

* improve spinner docs & make spinner in demo always active
2021-12-31 14:32:48 +01:00
Emil Ernerfeldt
b5c119ef19
0.16.1 patch release: Add back CtxRef::begin_frame/end_frame (#1019)
`begin_frame`, `end_frame` is more convenient when using egui in a game engine. In particular, 0.16.0 was incompatible with https://github.com/mvlabat/bevy_egui>.
2021-12-31 11:45:57 +01:00
Emil Ernerfeldt
b00edfe97f Remove keyboard focus from a widget if something else is dragged
Closes https://github.com/emilk/egui/issues/618
2021-12-30 23:24:29 +01:00
Emil Ernerfeldt
4ef21380a2 Add Ui::add_visible and Ui::add_visible_ui
Also rename `Ui::visible` to `Ui::is_visible`.
2021-12-30 22:39:41 +01:00
Emil Ernerfeldt
db110b1690 Remove deprecated functions 2021-12-30 22:37:58 +01:00
Emil Ernerfeldt
0960f38552 Add inter-linking between different forms of documentations and examples 2021-12-29 21:44:48 +01:00
Emil Ernerfeldt
0146c7e7fc Release 0.16.0 - Context menus and rich text 2021-12-29 12:07:05 +01:00
Emil Ernerfeldt
84399cde83 Small tweaks to documentation and demo 2021-12-29 10:49:22 +01:00
Emil Ernerfeldt
190c85a40f Rename Texture to FontImage 2021-12-28 21:19:24 +01:00
Emil Ernerfeldt
68fca09df9 Improve documentation 2021-12-28 17:34:27 +01:00
Emil Ernerfeldt
00f965de87 Add Context::animate_bool_with_time
Closes https://github.com/emilk/egui/discussions/984
2021-12-28 17:34:27 +01:00
Rasmus Brönnegård
811b974003
Fix typo "the close" -> "this close" in style.rs (#887) 2021-12-28 16:42:22 +01:00
Emil Ernerfeldt
f919b0cc05 Clean up context menu documentation 2021-12-28 13:09:14 +01:00
Emil Ernerfeldt
369ce95bbd
Add CollapsingHeader::open to control if it is open or collapsed (#1006)
Closes https://github.com/emilk/egui/issues/978
2021-12-28 10:45:32 +01:00
Emil Ernerfeldt
2684929a5d Make Memory::lock_focus public
closes https://github.com/emilk/egui/issues/993
2021-12-28 10:08:28 +01:00
Emil Ernerfeldt
b88bec9ca3 Document that CtxRef is generational and shouldn't be stored
Related to https://github.com/emilk/egui/issues/1005
2021-12-28 10:05:10 +01:00
Emil Ernerfeldt
d5efa4bbca 1.56 fix: missing_crate_level_docs -> rusdoc::missing_crate_level_docs 2021-12-26 09:56:14 +01:00
Emil Ernerfeldt
c60d17b91b
Set MSRV to 1.56.0 and use rust edition 2021 (#998) 2021-12-25 19:32:25 +01:00
Ivgeni "Iv" Segal
26885c20d0
Add ability to customize the display of hover plot labels (#934)
* Add ability to customize the display of hover plot labels

* Ergonomic enhancement to plot hover label function

* Use Option instead of empty string for custom hover label name arg

* Revert "Use Option instead of empty string for custom hover label name arg"

This reverts commit 296caebb74b7ee993fbff97187791180d16708af.

Co-authored-by: Ivgeni Segal <ivgeni.segal@tovutiteam.com>
2021-12-25 16:29:29 +01:00
Victor Sergienko
d05379902c
#972: ScrollArea::stick_to_bottom() has no effect if ScrollArea is not initialized. (#973) 2021-12-25 16:29:11 +01:00
Jan Haller
5ec14867c8
OrderedFloat refactor (#918)
* Move egui/util/float_ord.rs -> epaint/util/ordered_float.rs

* Implement Hash on OrderedFloat

* Generic OrderedFloat<T>; impl Hash; documentation
2021-12-11 13:52:23 +01:00
Jan Haller
1088d950e9
Add bar charts and box plots (#863)
Changes:
* New `BarChart` and `BoxPlot` diagrams
* New `FloatOrd` trait for total ordering of float types
* Refactoring of existing plot items

Co-authored-by: niladic <git@nil.choron.cc>
2021-11-29 18:39:58 +01:00
Sven Niederberger
9d56bce592
Improved plot interaction methods (#892)
ctx plot_bounds plot_hovered screen_from_plot plot_from_screen etc
2021-11-27 23:59:32 +01:00
d10sfan
90757ca221
Add Button::image_and_text (#832)
* Support image button with text
* Add example (`cargo run --example native_texture`)
2021-11-13 13:17:02 +01:00
Emil Ernerfeldt
4d4c75c6f1 Fix vertical slider up/down keys and add a line in the changelog
Follow-up to https://github.com/emilk/egui/pull/875
2021-11-13 12:30:13 +01:00
Bruce Reif (Buswolley)
491739b580
implement vertical slider orientation (#875) 2021-11-13 12:03:10 +01:00
Sven Niederberger
0bad1d0c99
Plot interaction methods (#766)
* move to a basic plot builder with callback
* add some interaction methods
* move interaction demo to its own panel
2021-11-13 11:56:22 +01:00
Emil Ernerfeldt
6018c0e194
Area: automatically request a repaint when showing up for the first time (#866) 2021-11-07 21:14:13 +01:00
Emil Ernerfeldt
951ee4e142
Improve color picker cache (#886)
* colorpicker: try to maintain hue even when saturation goes to zero
* More consistent arguments to color types
* implement `Hash` for `Rgba`.
2021-11-07 21:11:42 +01:00
Emil Ernerfeldt
19d24bbebe
Don't clip popups to the parent cliprect (#885)
Closes https://github.com/emilk/egui/issues/825
2021-11-07 19:48:38 +01:00
Emil Ernerfeldt
878eddd546
When using a custom font you can now specify a font index (#873)
When using a custom font you can now specify a font index

Closes https://github.com/emilk/egui/issues/853
2021-11-07 19:47:52 +01:00
Emil Ernerfeldt
83e490fb6a Remove egui::math & egui::paint, replace with egui::emath & egui::epaint 2021-11-06 09:47:23 +01:00
Emil Ernerfeldt
0ab93576da Remove references to the old begin_frame 2021-11-03 23:00:00 +01:00
Emil Ernerfeldt
6d33beabb1 Replace scroll_delta and zoom_delta in RawInput with events
Part of https://github.com/emilk/egui/issues/843
2021-11-03 22:57:13 +01:00
Emil Ernerfeldt
49e43885ff
Replace Context::begin_frame/end_frame with fn run taking a closure (#872)
* Replace Context begin_frame/end_frame with `fn run` taking a closure
* Create `egui::__run_test_ui` to replace `Ui::__test`
* Add helper `egui::__run_test_ctx` for doctests
2021-11-03 20:11:25 +01:00
Emil Ernerfeldt
eda1d91654 Add culling of the painting for most widgets
This is a good early-out for widgets in `ScrollAreas`, but
also prepares for speeding up the first pass of a possible two-pass
version of egui: https://github.com/emilk/egui/issues/843
2021-11-01 22:08:23 +01:00
Emil Ernerfeldt
09b8269326
Rich text for all widgets (#855)
Introduce `RichText` and `WidgetText`
2021-11-01 21:30:10 +01:00
Emil Ernerfeldt
9378cd5c6e ScrollArea: add methods to control horizontal scroll offset
Closes https://github.com/emilk/egui/issues/864
2021-11-01 19:43:27 +01:00
Linus Behrbohm
b9368aba13
Fix Response::context_menu return type (#857) 2021-11-01 19:27:51 +01:00
Emil Ernerfeldt
78dfde40b2 Remove deprecated functions 2021-10-30 09:46:06 +02:00
Emil Ernerfeldt
b551dfec81 fix broken docstring link 2021-10-29 21:10:53 +02:00
Emil Ernerfeldt
081485bcaf Make it cheaper to clone Memory if there are a lot of persisted values 2021-10-27 16:49:08 +02:00
Emil Ernerfeldt
c7638ca7f5
Add read/write of TextEdit cursor state (#848)
* Rename `CursorPair` to `CursorRange`
* Easymark editor: add keyboard shortcuts to toggle bold, italics etc
* Split up TextEdit into separate files
* Add TextEdit::show that returns a rich TextEditOutput object with response, galley and cursor
* Rename text_edit::State to TextEditState
2021-10-27 16:30:14 +02:00
Emil Ernerfeldt
ddd52f47c5 Add tessellation option to toggle rounding text to pixel coordinates
On by default and only there for testing
2021-10-27 08:56:06 +02:00
Emil Ernerfeldt
8e4fd942a9
Refactor memory data (#836)
This refactors the widget state storage introduced by @optozorax in https://github.com/emilk/egui/pull/257

* Unify the four buckets (`data`, `data_temp`, `id_data` and `id_data_temp`) into a single `data`.
  * Less complexity, and also less chance of error (storing in one bucket, reading from another).
* Store data by `Id` and `TypeId`.
  * Users can thus reuse the same `Id` to store many types.
  * Uses a simple xor of id and typeid, which is fast and good since both id and typeid are already high-entropy hashes.
* Use different suffixes on the functions to pick if you want the data persisted or not (`get_temp`, `insert_persisted`, etc).
  * Writing with one suffix and reading with the other works.
* To store state not bound to a specific `Id` (i.e. only based on type), use the new `Id::null` as the key.
2021-10-27 08:51:34 +02:00
Emil Ernerfeldt
bbe0f6089c Context-menu: fix right-click edge-case
response.hovered() checks a larger rect which includes the item spacing,
and it always matches the hover effect.
2021-10-26 20:40:17 +02:00
Emil Ernerfeldt
41f77ba7d7 Clean up some of the new context menus
Follow-up to https://github.com/emilk/egui/pull/543

* Add entry to CHANGELOG.md
* Add entry to contributors in README.md
* Improve documentation
* Simplify demo
2021-10-26 20:16:46 +02:00
Linus Behrbohm
46fb9ff09b
Context menus (#543)
Main usage: `response.context_menu(…)` and `ui.menu_button`
2021-10-26 19:55:42 +02:00
Emil Ernerfeldt
08cc07bb2d Release 0.15.0 - Syntax highlighting, hscroll, egui-winit and egui_glow 2021-10-24 16:15:07 +02:00
Emil Ernerfeldt
316202c33a egui_web: improve text input on mobile and for IME 2021-10-24 15:57:36 +02:00
Emil Ernerfeldt
9a9b1b8746 On touch screens, prioritize drag-to-scroll over drag-to-select text
On mobile, click first, then edit the text.
Otherwise a lot of areas become difficult to scroll on mobile.
2021-10-24 15:26:40 +02:00
Emil Ernerfeldt
da09a5c69c Fix compilation with "serialize" feature without "persistence" feature 2021-10-23 15:12:39 +02:00
Emil Ernerfeldt
39c6c7e5c9 Small code cleanup 2021-10-23 06:03:45 +02:00
Emil Ernerfeldt
a3ba85dbb3 Improve docs 2021-10-23 06:03:45 +02:00
Emil Ernerfeldt
4194a83a5e Update ron 0.6 -> 0.7 2021-10-23 05:53:58 +02:00
Emil Ernerfeldt
5d463b2af7 Remove serde_json from egui dev-dependencies 2021-10-23 04:47:17 +02:00
Emil Ernerfeldt
dd50cba9a7 Optimize debug builds 2021-10-20 21:58:35 +02:00
Emil Ernerfeldt
d97a369c44 End statements with semicolon (clippy::semicolon_if_nothing_returned) 2021-10-20 16:46:57 +02:00
Emil Ernerfeldt
40445c450c use map_or and map_or_else 2021-10-20 16:46:57 +02:00
Emil Ernerfeldt
a0cd41755e Add more clippy lints 2021-10-20 16:30:39 +02:00
Emil Ernerfeldt
72d483ac22 repaint when pixels_per_point changes 2021-10-20 13:54:36 +02:00
Emil Ernerfeldt
8178d23d19
Deduplicate code found in both egui_glium and egui_glow (#819)
* Move window building to egui-winit

* Move icon loading to egui-winit

* `use glow::HasContext;` -> `use glow::HasContext as _;`

* Move FileStorage into epi behind a feature flag

* De-duplicate screen_size_in_pixels and native_pixels_per_point

* Move creation of FileStorage to epi

* Handle epi app output (window size changes etc) in egui-winit

* Move app and memory persistence and autosave logic to egui-winit

* fix check.sh

* Make the epi backend opt-in for egui_glium and egui_glow

* Fix persistence

* Add integration name to epi::IntegrationInfo and the demo

* Clean up Cargo.toml files and fix making egui_glium optional

* fix typo

* Make egui_glium compile without the `epi` feature
2021-10-19 21:40:55 +02:00
Emil Ernerfeldt
9f1a5dcb33 ui.label now take impl ToString as argument, not impl Into<Label> 2021-10-18 21:09:44 +02:00
Emil Ernerfeldt
ebd2c859ac Make multi-touch demo a bit nicer looking 2021-10-18 21:00:25 +02:00
Emil Ernerfeldt
96be848e42 rename egui_template to eframe_template 2021-10-18 20:19:43 +02:00
Emil Ernerfeldt
2af2e8bad5 Add ui.add_enabled and ui.add_enabled_ui, and remove Button::enabled 2021-10-17 22:17:50 +02:00
Emil Ernerfeldt
8a47019c1a Rename TextEdit::enabled to TextEdit::interactive. 2021-10-17 22:13:15 +02:00
Emil Ernerfeldt
7e0bb18152 More #[inline] 2021-10-17 20:56:37 +02:00
Emil Ernerfeldt
ef218e8ba8 Panels: make Side and TopBottomSide public
Closes https://github.com/emilk/egui/issues/799
2021-10-16 15:35:07 +02:00
Emil Ernerfeldt
6f699b3391 Replace every ... with … like some sort of crazy person
Also fix some small typos

Closes https://github.com/emilk/egui/pull/736
2021-10-13 11:52:34 +02:00
Emil Ernerfeldt
85941033e8 Simplify and improve http demo app
Move demo of POST to the ehttp crate instead
2021-10-13 11:47:57 +02:00
Emil Ernerfeldt
fe2094af14 Fix visual clipping of singleline TextEdit 2021-10-12 22:35:31 +02:00
Emil Ernerfeldt
c42afd3941 Fix missing spaces between labels in horizontal layouts 2021-10-12 22:23:53 +02:00
Cristian Dinu
1c4237097f
Slider, by default clamp to range (#789)
* Slider, by default clamp to range

* Update change log.
2021-10-12 21:15:32 +02:00
Emil Ernerfeldt
fc45b6fdf2 Fix scroll area size clipping to screen rect 2021-10-10 17:14:22 +02:00
Emil Ernerfeldt
e547b149ca Improve docs, especially of epaint, and add epaint/CHANGELOG.md 2021-10-10 15:35:13 +02:00
Emil Ernerfeldt
88d087b462 Fix bad docstring 2021-10-09 15:55:18 +02:00
Emil Ernerfeldt
bc54a49413 Optimization: use IdHasher for AnyMap 2021-10-09 15:55:18 +02:00
Emil Ernerfeldt
cca11ea9cc Optimization: less HashMap, more AHashMap 2021-10-09 15:22:36 +02:00
Emil Ernerfeldt
22a3a75eb5 Optimization: replace HashSet uses with AHashSet 2021-10-09 14:15:45 +02:00
Emil Ernerfeldt
4dcdd014d6 Optimization: introduce IdMap 2021-10-09 14:10:38 +02:00
Ben Postlethwaite
5799758c2b
implement stick-to-end scroll (#765)
* implement stick-to-end scroll

* improve comment grammar

* accept emilk suggestion for demo text tweak

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* request repaint on each frame to show incoming scroll demo rows

* simplify pub api + doc strings

* disable scroll_stuck_to_end when wheel-scrolling or dragging

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-10-09 12:59:42 +02:00
Stock84
cd2227814f
Implement bytemuck behind a feature (#775) 2021-10-07 22:30:15 +02:00
Emil Ernerfeldt
ce8d863249 auto-shrink ScrollArea to content size
Unless the user disables it with `ScollArea::auto_shrink([false; 2])`.
2021-10-06 23:51:03 +02:00
Emil Ernerfeldt
a1bf5aff47 Add Memory::caches for caching things from one frame to the next 2021-10-06 17:54:45 +02:00
Emil Ernerfeldt
613c0b29f6 TextEdit: replace monomorphization with &mut dyn TextBuffer 2021-10-02 21:50:24 +02:00
Emil Ernerfeldt
8d854391df TextEdit can now show immutable text 2021-10-02 21:43:17 +02:00
Emil Ernerfeldt
8ce7fadc9f TextEdit: make sure it is wide enough when wrap_width isn't respected 2021-10-02 21:33:07 +02:00
Emil Ernerfeldt
1537171205 AnyMap: print deserialization errors to stderr 2021-10-02 21:30:52 +02:00
Emil Ernerfeldt
f59abd9684 Clean up some macro syntax 2021-10-02 21:08:00 +02:00
Emil Ernerfeldt
f0868c2f07 Code editor demo: nice syntax highlighting with customizable theme 2021-10-01 21:29:33 +02:00
Emil Ernerfeldt
96557a4fa6 Add egui::widgets::global_dark_light_mode_buttons 2021-10-01 21:28:12 +02:00
Emil Ernerfeldt
4c78f61a96 egui any maps: add get_or + #[inline] 2021-10-01 21:08:17 +02:00
Emil Ernerfeldt
863e6cb07d expose egui::TextFormat 2021-10-01 19:25:15 +02:00
Emil Ernerfeldt
981b812f68 Smaller and nicer color picker 2021-10-01 19:24:36 +02:00
Emil Ernerfeldt
76cdbe2cf8 Add better documentation for epi::NativeOptions::drag_and_drop_support
Closes https://github.com/emilk/egui/issues/747
2021-09-30 19:40:21 +02:00
Simon Persson
7df2408482
Fix disabled textedit blocking focus shift. (#748)
* Fix disabled textedit blocking focus shift.

Fixes #732. Ui::interact was being called twice for the frame rect
regardless of enabled status which was causing problems for kb focus.
Now the interact function is called zero or one time.

* Apply clippy suggestion

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

Co-authored-by: Persson <Simon.Persson@nov.com>
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-09-30 18:54:19 +02:00
Emil Ernerfeldt
5539dbe620
Add separate serialize feature and better persitence control (#753)
* Rename epaint feature "persistence" to "serialize"

* Add separate "serialize" feature to egui

* egui_demo_lib: separate serialize and persistence features

* Add App::persist_native_window and App::persist_egui_memory

Controls what gets persisted
2021-09-29 08:45:13 +02:00
Emil Ernerfeldt
f2dd3dfdd9 Fix popups sometimes getting clipped by panels 2021-09-28 22:19:03 +02:00
Emil Ernerfeldt
711defddb8 Show tooltips above widgets on touch screens 2021-09-28 22:18:22 +02:00
Emil Ernerfeldt
2e83e36146 Use ahash for Id and other things that need hashing 2021-09-28 17:56:24 +02:00
Emil Ernerfeldt
1b36863248
Split out new crate egui-winit from egui_glium (#735) 2021-09-28 17:33:28 +02:00
Emil Ernerfeldt
ba0e3780a1 Add epaint::util::hash function for hashing a value 2021-09-26 03:16:12 +02:00
Emil Ernerfeldt
976260c2bd Better error if neither single_threaded or multi_threaded features is on 2021-09-25 05:26:45 +02:00
Emil Ernerfeldt
a5a5d6176d Improve the frame around ImageButton
Helps https://github.com/emilk/egui/issues/721
2021-09-20 22:37:21 +02:00
Emil Ernerfeldt
e7cfda4941
Shape refactor (#705)
* More introspection stats about vertices/indices etc

* more serde derive

* #[inline] to Shape constructors

* Introduce RectShape

* Introduce CircleShape

* Introduce PathShape

* More serde derive

* impl Copy for RectShape and CircleShape

* Simplify some code

* More serde derive

* Add helpers for appending more input or output

* Serde derives for RawInput

* Rename Fonts::from_definitions to Fonts::new

* Add Output::take

* refactor EguiGlium slightly

* Derive PartialEq for RawInput

* Improve egui::util::History interface

* tweaks

* Improve History filter: add minimum length

* Calculate galley bounding rect

* tessellator: cull line segments and paths

* tessellator: cull meshes

* Fix bug in History bandwidth estimator
2021-09-20 21:36:56 +02:00
Emil Ernerfeldt
67bf716b0e
Hide DragValue tooltips unless user set Style::explanation_tooltips (#708)
* Hide DragValue tooltips unless user set Style::explanation_tooltips

Closes https://github.com/emilk/egui/issues/548
Closes https://github.com/emilk/egui/pull/704

* Silence drag_angle_tau tooltip too
2021-09-12 23:05:23 +02:00
Emil Ernerfeldt
f37180f7dc
Bump MSRV (Minimum Supported Rust Version) to 1.54.0 (#703)
1.51.0 clippy has been giving me trouble (not reporting all problems),
and so I take the easy way out and just bump MSRV.

We will upgrade to 1.56.0 once it comes around anyway
to get access to that sweet disjoint capture in closures
(https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html)
2021-09-09 00:16:06 +02:00
Emil Ernerfeldt
ae6418edf3 clippy fix 2021-09-08 23:40:44 +02:00
Emil Ernerfeldt
a76b81647c Hide tooltips while dragging a widget
Also: don't register as click if the
pointer has been pressed for too long.
2021-09-08 23:26:21 +02:00
Emil Ernerfeldt
241667b078 Reduce monomorphization, reducing wasm size by around 3% 2021-09-07 21:33:10 +02:00
Emil Ernerfeldt
bb034e2e6c Improve documentation of different ui layout functions 2021-09-07 20:48:30 +02:00
Emil Ernerfeldt
acb5501fe4 Add justified and/or center- and right-aligned text
Label text will now be centered, right-aligned and/or
justified based on the layout.

Galleys are no longer always pivoted in the left top corner,
so now have a Rect rather than just a size.
2021-09-07 20:37:50 +02:00
Emil Ernerfeldt
d23982d83e Window bounds fix: handle infinite drag_bounds 2021-09-07 19:55:37 +02:00
Emil Ernerfeldt
aef23753ca Fix clip rectangle of windows that don't fit the central area. 2021-09-07 19:34:34 +02:00
Emil Ernerfeldt
5592124ad5 TextEdit: paint cursor on top of text
This is so that we see the cursor even when the text galley has
background colors, like `code` section in easymark do.
2021-09-05 18:59:35 +02:00
Emil Ernerfeldt
f9afdfa143 TextEdit: left/right arrows move cursor to start/end of selection
Closes https://github.com/emilk/egui/issues/611
2021-09-05 11:11:31 +02:00
Emil Ernerfeldt
d9f3596475 docs: explain auto-shrinking panels/windows and how to work around it
related to https://github.com/emilk/egui/issues/696
2021-09-05 09:40:25 +02:00
Emil Ernerfeldt
14c989fdfa Implement rotating text
Closes https://github.com/emilk/egui/issues/428
2021-09-05 09:06:53 +02:00
Emil Ernerfeldt
9598596bdc
Replace all http code in epi/eframe/egui_glium/egui_web with ehttp (#697)
I've extracted all the http request code and turned it
into its own crate at <https://github.com/emilk/ehttp>.

There was never a reason for the HTTP request library to be part of
`eframe`. Much better to have it as its own crate!
2021-09-03 21:04:43 +02:00
Emil Ernerfeldt
de1a1ba9b2
New text layout (#682)
This PR introduces a completely rewritten text layout engine which is simpler and more powerful. It allows mixing different text styles (heading, body, etc) and formats (color, underlining, strikethrough, …) in the same layout pass, and baked into the same `Galley`.

This opens up the door to having a syntax-highlighed code editor, or a WYSIWYG markdown editor.

One major change is the color is now baked in at layout time. However, many widgets changes text color on hovered. But we need to do the text layout before we know if it is hovered. Therefor the painter has an option to override the text color of a galley.


## Performance
Text layout alone is about 20% slower, but a lot of that is because more tessellation is done upfront. Text tessellation is now a lot faster, but text layout + tessellation still lands at a net loss of 5-10% in performance. There are however a few tricks to speed it up (like using `smallvec`) which I am saving for later. Text layout is also cached, meaning that in most cases (when all text isn't changing each frame) text tessellation is actually more important (and that's more than 2x faster!).

Sadly, the actual text cache lookup is significantly slower (300ns -> 600ns). That's because the `TextLayoutJob` is a lot bigger (it has more options, like underlining, fonts etc), so it is slower to hash and compare. I have an idea how to speed this up, but I need to do some other work before I can implement that.

All in all, the performance impact on `demo_with_tesselate__realistic` is about 5-6% in the red. Not great; not terrible. The benefits are worth it, but I also think with some work I can get that down significantly, hopefully down to the old levels.
2021-09-03 18:18:00 +02:00
Emil Ernerfeldt
36cffd7b84 Fix wrongly sized multiline TextEdit in justified layouts 2021-09-03 17:49:23 +02:00
Bradley Smith
931c3a9b6a
TextEdit option cursor_at_end to control initial position of cursor at beginning or end. (#687) 2021-09-02 19:37:55 +02:00
Emil Ernerfeldt
9def6ef6df All Ui:s must now have a finite max_rect
Deprecated `max_rect_finite`, `available_size_before_wrap_finite`
and `available_rect_before_wrap_finite`.
2021-08-28 16:02:16 +02:00
Emil Ernerfeldt
105b999cb6
Horizontal scrolling (#663)
* First pass (missing rendering the bar)

* Render horizontal bars, and change Window scroll API

* emath: add impl Index + IndexMut for Align2

* Scrolling: fix subtle sizing bugs

* Add horizontal scrolling to color test

* try to wrap content before showing scrollbars, + add auto-shrink option

* Add hscroll to the misc demo window

* Fix for putting wrapping labels in an infinitely wide layout

* Add a egui_asserts to protect against nans in the layout engine

* Add line about horizontal scrolling to changelog

* Add example to docs of ScrollArea

* code cleanup
2021-08-28 13:18:21 +02:00
Emil Ernerfeldt
776770cdcd
Publish 0.14.2 (#670)
* Fix window resize bug introduced in `0.14.1`.

* tweak plot demo layout to allow more narrow window

* Release 0.14.2 - Window resize fix
2021-08-28 12:19:35 +02:00
Emil Ernerfeldt
1fbce6b2c3 Remove everything marked deprecated 2021-08-28 11:46:30 +02:00
Emil Ernerfeldt
2ce99f3a12 Release 0.14.1 - Bug fixes and better web blending 2021-08-28 11:04:39 +02:00
Emil Ernerfeldt
fe2b3e26aa egui_glium: add bool to simulate touch screens to test egui 2021-08-28 10:34:05 +02:00
Emil Ernerfeldt
1a177f7ecd Improve area introspection panel 2021-08-28 10:28:50 +02:00
Emil Ernerfeldt
56913a9ae9 Fix sometimes not being able to click inside a combo box or popup menu 2021-08-28 10:28:05 +02:00
Emil Ernerfeldt
c6a0db8602 Docs: add link to on_disabled_hover_ui/text from on_hover_ui/text 2021-08-27 20:23:58 +02:00
Emil Ernerfeldt
906a798003 Add Ui::horizontal_top
Closes https://github.com/emilk/egui/issues/601
2021-08-26 21:32:11 +02:00
Emil Ernerfeldt
7e9c3291bd Tiny demo tweaks 2021-08-26 18:54:38 +02:00
Emil Ernerfeldt
693426d9c6
Layout fixes (#651)
* Fix incorrect max_width/height of panels

* Fix set_width/set_min_width/set_height/set_min_height

Closes https://github.com/emilk/egui/issues/647

Broke in https://github.com/emilk/egui/pull/629

* Fix expand_to_include_x/expand_to_include_y

* Make minimum grid column width propagate properly

* Expand cursor when max_rect expands

* Add ui.expand_to_include_y

* Only expand cursor in advance

* demo: clean up font_book code

* Fix: Make sure `TextEdit` contents expand to fill width if applicable

* ProgressBar: minimum width and fix for having it in an infinite layout

* clippy fix
2021-08-26 18:50:30 +02:00
Emil Ernerfeldt
c510899019 Revert "Fix set_width/set_min_width/set_height/set_min_height"
This reverts commit 01d3f53113.
2021-08-25 22:02:54 +02:00
Emil Ernerfeldt
c2d1034af3 Make Options::tessellation_options public
Closes https://github.com/emilk/egui/issues/644
2021-08-25 21:39:00 +02:00
Emil Ernerfeldt
01d3f53113 Fix set_width/set_min_width/set_height/set_min_height
Closes https://github.com/emilk/egui/issues/647

Broke in https://github.com/emilk/egui/pull/629
2021-08-25 17:28:22 +02:00
Emil Ernerfeldt
cb566fc295 Release 0.14.0 - Ui panels and bug fixes 2021-08-24 16:47:10 +02:00
Emil Ernerfeldt
a2082f226f Change an assert into an egui_assert 2021-08-24 16:00:55 +02:00
Emil Ernerfeldt
f11f9bd1fd Bug fix: fix horizontal layouts inside infinitely wide Ui:s. 2021-08-24 16:00:39 +02:00
Emil Ernerfeldt
d865852d24 Add a minimum width to TextEdit to prevent them from being tiny 2021-08-24 15:59:31 +02:00
Emil Ernerfeldt
ffbd094f53 Improve docs 2021-08-23 21:47:00 +02:00
Emil Ernerfeldt
f8a3042258 Fix for dragging widgets with non-primary mouse button
Broken in e31312cf7a
2021-08-22 21:16:54 +02:00
Emil Ernerfeldt
5a63419aa3 Bug fix: clicking the edge of a menu button would flicker the menu
There was a very annoying bug where clicking the edge of a menu button
would open the menu and immediately close it.
2021-08-21 21:59:25 +02:00
sigaloid
12fd4906de
Update dependencies and pass all clippy's (#636)
* Cargo update

https://pastebin.com/raw/KWNuJD9u

* Cargo clippy +nightly

* Remove deprecated clippy

* Fix unbalanced backtick (now passes cargo {+nightly,} clippy)
2021-08-20 22:31:20 +02:00
Emil Ernerfeldt
a256ca115b
Drag and drop files into egui_glium and egui_web (#637)
* Implement file drag-and-drop for egui_glium

* Implement file drag-and-drop into egui_web

* Cleanup
2021-08-20 22:20:45 +02:00
mitchmindtree
488b1f2462
Add methods for optionally displaying the background/axes of a Plot (#562)
* Add methods for optionally displaying the background/axes of a `Plot`

These are particularly useful when using the `Plot` widget as an overlay
over an existing grid or some other content.

* Allow for showing each axis of a `Plot` individually
2021-08-20 19:04:44 +02:00
gents83
68ed22ab6f
Add option to select collapsing headers (#623)
* Add collapsing header select as selectable label

* Modified Tree demo adding selectable example

* Update egui/src/containers/collapsing_header.rs

Selected is not linked to selectable

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/containers/collapsing_header.rs

Description example

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Changing example without name clashing

* Fixing merge issue (ah I miss P4 sometimes)

* Fixing doctest example

* Add possibility to show background to a single one

* Fixing clippy test

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-08-20 19:04:13 +02:00
Emil Ernerfeldt
3e2746a288
Make it easy to panels inside of Ui:s (#629)
* Allow using the layout cursor to restrict available area

* Avoid id clashes when putting panels inside a Ui

* Panels: Propagate height/width range to inner Ui

* Allow easy placement of panels inside of Ui:s

* demo: simplify Windows with Panels demo
2021-08-20 00:10:06 +02:00
gents83
ff8c4c0d38
Add possibility of panels inside UI (i.e. windows) (#624)
* Adding possibility to have panels inside UI

* Adding window with panels demo
2021-08-16 21:32:44 +02:00
Emil Ernerfeldt
2f46b0eb06 Fix lost_focus for TextEdit widgets
Closes https://github.com/emilk/egui/issues/565
2021-08-15 17:52:53 +02:00
Emil Ernerfeldt
e31312cf7a Only move/resize windows with primary mouse button
Closes #578
Closes #579
2021-08-15 17:26:48 +02:00
Emil Ernerfeldt
22a13c75bb Add Ui::available_height
Closes #553
2021-08-15 17:04:24 +02:00
Emil Ernerfeldt
a48c69d809 Improve UI docs, pointing to Ui::available_size
Closes #541
2021-08-15 17:03:24 +02:00
Linus Behrbohm
34a11fefd2
Only add resize radius for interactable areas (#577)
Fixes #576
2021-08-15 16:48:15 +02:00
Linus Behrbohm
6c18332424
Add helpers <pointerbutton>_down() in PointerState (#583) 2021-08-15 16:41:33 +02:00
Norbert Pozar
934dc42e58
Fix tooltips overlapping widgets (#566) (#568)
Tooltips are now shown above the widget if they do not fit under it.
2021-08-15 16:34:43 +02:00
mitchmindtree
7c1c775020
Fix case where Plot's min_auto_bounds can be ignored after first instantiation (#563)
* Fix case where `Plot`'s `min_auto_bounds` can be ignored after first

I ran into an issue using `Plot` within my timeline widget where if I
zoom in and out of the timeline (not the plot), the `Plot` instances
would ignore the necessary changes to the `include_x` calls and in turn
would become skewed and misaligned with the timeline below.

This changes the `Plot` to check whether or not `min_auto_bounds` have
changed and, if so, reset the memory and recalculate the bounds.

See #562 for an image of my current use case.

* Carry hidden_items when updating plot for changed bounds
2021-08-15 16:34:12 +02:00
Ezra Barrow
224af23fd1
Pass more inner return values (#557)
* add Window.show_with_return

* Fixed all missed opportunities to pass an inner return value
2021-07-21 11:43:02 +02:00
Emil Ernerfeldt
06fc9afb1d Add Frame setters for rounding, margin and shadow 2021-07-20 14:33:36 +02:00
Jay Oster
a9c004d16b
Fix custom font definitions getting replaced when pixels_per_point is changed (#564)
- This bug is most noticable when default fonts are disabled.
2021-07-20 14:06:27 +02:00
Sven Niederberger
7c5a2d60c5
Plot: Line styles (#482)
* added new line styles

* update changelog

* fix #524

Add missing functions to `HLine` and `VLine`

* add functions for creating points and dashes from a line

* apply suggestions

* clippy fix

* address comments
2021-07-06 20:15:04 +02:00
lucaspoffo
a6c3daff6f
TextEdit: Add visual clipping for singleline inputs when text is large. (#531)
* TextEdit: Add visual clipping for singleline inputs when text is large.

* TextEdit: Add reviewer suggestions.
2021-07-06 18:59:52 +02:00
Emil Ernerfeldt
faf104220b Grid::num_columns: allow the last column to take up the rest of the space
This allows for resizaeable grids, where the last column will be given the remainder of the width.
To demonstrate, the widget gallery window is now resizeable.
2021-07-02 09:55:57 +02:00
Simon Persson
9603bb4f85
Grid fixes (#473)
* Fix margin for grid layout nested inside grid

* Minor fix for grid layout

At time of end_row, current state is finished updating row_height.
Might as well use that instead of previous state.

* Fix horizontal advancing for nested layouts in grid

* Add back horizontal layout

* Add test for nested layouts in grids

* make test table striped

* Improve table test case with slider for dynamic text
2021-07-02 09:25:53 +02:00
Sven Niederberger
89cea7aca7
Progress bar (#519)
* add progress bar

* update changelog

* apply suggestions

* disable animation by default and tweak colors

* allow toggling the animation by clicking

* Update egui/src/widgets/progress_bar.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/progress_bar.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/progress_bar.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* address review comments

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-07-01 22:50:41 +02:00
Emil Ernerfeldt
52e3663958 Release egui 0.13.1: Plot fixes 2021-06-28 11:05:27 +02:00
Emil Ernerfeldt
cba840ec49
Small plot-relates fixes (#526)
* plot: take any id source as argument instead of ToString

* plot: allow user to set stroke on HLine/VLine

* Update changelog
2021-06-28 10:51:06 +02:00
Emil Ernerfeldt
d807451348 Release 0.13.0 - Better panels, plots and new visual style 2021-06-24 20:00:06 +02:00
Emil Ernerfeldt
8abd232854 Bug fix: accidentally resizing an area through a window 2021-06-24 17:52:15 +02:00
Emil Ernerfeldt
6e3604ee4b Bug fix: ui.scope(…) is now equivalent to ui.allocate_space(…) WRT IDs
Before a disabled and enabled button would leave the parent ui
in different states, which lead to a bug where a slider drag could be
aborted if it caused a button before it to switch between enabled
and disabled.

Repro: dragging slider in "Manual Layout Test"
2021-06-24 15:08:16 +02:00
Sven Niederberger
147e7a47aa
More plot items (#471)
* Added plot items:

* Arrows, also called "Quiver plots" in matplotlib etc.
* Convex polygons
* Text
* Images

Other changes:

* Make HLine/VLine into PlotItems as well.
* Add a "fill" property to Line so that we can fill/shade the area between a line and a horizontal reference line.
* Add stems to Points, which are lines between the points and a horizontal reference line.
* Allow using .. when specifying ranges for values generated by explicit callback functions, as an alias for f64::NEG_INFINITY..f64::INFINITY
* Allow using ranges with exclusive end bounds for values generated by parametric callback functions to generate values where the first and last value are not the same.

* update changelog

* add legend background
2021-06-24 12:29:51 +02:00
Emil Ernerfeldt
63bddb67f8 CollapsingHeader: only fill full width if it has a frame 2021-06-24 12:12:20 +02:00
Emil Ernerfeldt
c03caa663b Fix bug where clicking a TextEdit frame would not give it focus
Closes https://github.com/emilk/egui/issues/506
2021-06-23 16:49:07 +02:00
Emil Ernerfeldt
6e7e88ba80
Use old 1.51 toolchain instead of bleeding edge (#505)
* Use old 1.51 toolchain instead of bleeding edge

1.52 and 1.53 has problems with incremental compilation,
so some people chose to stay on 1.51 for now.

So let's make sure egui supports 1.51 for a while!

* Update to cint 0.2.2 to get rust 1.51.0 compatability
2021-06-23 09:16:39 +02:00
Emil Ernerfeldt
269a4538d9 clippy fixes for rust 1.53 2021-06-22 23:38:34 +02:00
Emil Ernerfeldt
ef36cac422 Improve misc docs 2021-06-12 22:12:45 +02:00
Zenithsiz
7f1123a54c
Expanded TextBuffer interface to allow borrowed values. (#444)
* Expanded `TextBuffer` interface to allow borrowed values.

* Removed superfluous `PartialEq` requirement on `TextBuffer`.

* Removed `std::fmt::Display` requirement for `TextBuffer`.
Now uses the `AsRef<str>` impl to format it where applicable.

Co-authored-by: Filipe Rodrigues <filipejacintorodrigues1@gmail.com>
2021-06-12 22:12:32 +02:00
Emil Ernerfeldt
778bcc1ef7
Style tweaks (#450)
* Tweak style

More compact, less round, less noisy

* Button text is now same size as body text
* The rounder corners are now less rounded
* Collapsing headers no longer have a frame around them
* Combo-boxes looks better when opened
* Slightly more muted colors
* Remove extra line spacing after `\n` (i.e. between paragraphs)

* Thinner scrollbars

* Tweak light mode

* Tweak shadows

* Fix broken doc link

* Add style tweak to CHANGELOG
2021-06-12 15:53:56 +02:00
Emil Ernerfeldt
a50ddc2703 TextEdit: Clean up password masking
Follow-up to https://github.com/emilk/egui/pull/412
2021-06-12 15:18:14 +02:00
Emil Ernerfeldt
f4a95b1e5f TextEdit: don't set response.changed() when cursor changes 2021-06-12 15:02:33 +02:00
Nolan Darilek
508f6d9bf5
Additional accessibility support (#412)
* Expose getter for currently focused widget.

* Remove a level of indirection, exposing the widget event on the top level.

* Align widget descriptions more closely with common screen reader conventions.

Note that this work isn't complete--I'll correct more cases as I add more widgets and become familiar with their structures.

* Add support for click and double-click events.

* Add `ValueChanged` events, with initial support for text.

* Add support for reporting cursor selection changes.

* Track enabled/disabled status.

* Move `prev_text` off of the widget struct.

* Get rid of `has_widget_info` and push events directly where it makes sense.

* Fix typo.

* s/text_value/current_text_value/

* Use a `RangeInclusive` for text selection.

* Invert parameters.

* Various fixes.

* Only dispatch `SelectionChanged` if the selection actually changes.
* Fix missing focus events.

* If values for `current_text` and `prev_text` are unchanged, filter out the previous value.

* No need to pass in `&mut prev_text` everywhere

* Appease Clippy.

* Mask password fields in generated events.

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-06-12 14:54:01 +02:00
Sven Niederberger
2b4d3fa5b1
apply suggested fix (#481) 2021-06-12 14:36:39 +02:00
Emil Ernerfeldt
998e07d865
Make sure the scroll bar is never outside the screen rectangle (#475)
* Make sure the scroll bar is never outside the screen rectangle

This is an alternative attempt to fix the bug mentioned in
https://github.com/emilk/egui/pull/392

egui expects that the container can always be made wider,
which is true for all egui Ui:s, but not true for the outer
frame/chrome that egui ultimately needs to sit within.

* Clamp scroll to screen rect rather than available rect

* Fix scrollbar spacing when shrinking too small

* Update changelog
2021-06-12 14:30:42 +02:00
edko99
e007afc3c3
Freeze scroll area (#472)
* added ScrollArea::enable_scrolling

* also freeze dragging and scroll-bar

* fixed styling of inactive scrollbar

* fixed docs (backtick-quoted TextEdit)

Co-authored-by: edko99 <edko@jouzz.com>
2021-06-12 14:30:14 +02:00
Sven Niederberger
02db9ee583
Plot: Legend improvements (#410)
* initial work on markers

* clippy fix

* simplify marker

* use option for color

* prepare for more demo plots

* more improvements for markers

* some small adjustments

* better highlighting

* don't draw transparent lines

* use transparent color instead of option

* don't brighten curves when highlighting

* Initial changes to lengend:
* Font options
* Position options
* Internal cleanup

* draw legend on top of curves

* update changelog

* fix legend checkboxes

* simplify legend

* remove unnecessary derives

* remove config from legend entries

* avoid allocations and use line_segment

* compare against transparent color

* create new Points primitive

* fix doctest

* some cleanup and fix hover

* common interface for lines and points

* clippy fixes

* reduce visibilities

* update legend

* clippy fix

* change instances of "curve" to "item"

* change visibility

* Update egui/src/widgets/plot/mod.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/plot/mod.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui_demo_lib/src/apps/demo/plot_demo.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui_demo_lib/src/apps/demo/plot_demo.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* changes based on review

* add legend to demo

* fix test

* move highlighted items to front

* dynamic plot size

* add legend again

* remove height

* clippy fix

* update changelog

* minor changes

* Update egui/src/widgets/plot/legend.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/plot/legend.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/plot/legend.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* changes based on review

* add functions to mutate legend config

* use horizontal_align

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-06-07 22:36:13 +02:00
Emil Ernerfeldt
ece25ee7f3 Add Ui::set_visible as a way to hide widgets
Closes https://github.com/emilk/egui/issues/460
2021-06-07 22:12:49 +02:00
Emil Ernerfeldt
3c603c55b8 Make Layouts:: horizontal/vertial align/justify pub 2021-06-07 21:06:29 +02:00
Emil Ernerfeldt
2af86cd2c7
Revert "Fix scroll bar position (#392)" (#458)
This reverts commit 2932ff0e53.
2021-06-04 00:11:35 +02:00
Jay Oster
2932ff0e53
Fix scroll bar position (#392)
* Fix scroll bar position

* Always position scroll bar on the right side of the ScrollArea inner rect

* Fix the clipping rect
2021-06-03 18:54:34 +02:00
Emil Ernerfeldt
6468b2b84e
Implement efficent scrolling of large content (#457) 2021-06-03 18:48:45 +02:00
Tiago Ferreira
2cdd90b111
Allow alternate shortcuts on Windows (#456) 2021-06-03 17:39:55 +02:00
Emil Ernerfeldt
4964d762a7 Move WidgetType from output.rs to lib.rs 2021-05-30 22:53:10 +02:00
Emil Ernerfeldt
3b807e1ad6 Add Context::set_debug_on_hover and egui::trace!(ui) 2021-05-27 19:30:08 +02:00
Sven Niederberger
8623909d82
Plotting: Add line markers (#363)
* initial work on markers

* clippy fix

* simplify marker

* use option for color

* prepare for more demo plots

* more improvements for markers

* some small adjustments

* better highlighting

* don't draw transparent lines

* use transparent color instead of option

* don't brighten curves when highlighting

* update changelog

* avoid allocations and use line_segment

* compare against transparent color

* create new Points primitive

* fix doctest

* some cleanup and fix hover

* common interface for lines and points

* clippy fixes

* reduce visibilities

* Update egui/src/widgets/plot/mod.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui/src/widgets/plot/mod.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui_demo_lib/src/apps/demo/plot_demo.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Update egui_demo_lib/src/apps/demo/plot_demo.rs

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* changes based on review

* fix test

* dynamic plot size

* remove height

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-05-27 18:40:20 +02:00
Emil Ernerfeldt
c9766f8a7b
Resizable panels + right and bottom panels (#438)
* Side panel resizing and add right panels

* Add resizable top/bottom panels

* Deprecate TopPanel

* Final tweaks and update CHANGELOG.md
2021-05-26 22:06:10 +02:00
Emil Ernerfeldt
196ddff499 Rename Shape::polygon to Shape::convex_polygon
epaint only supports filling convex polygons (for now)
2021-05-20 22:14:08 +02:00
Emil Ernerfeldt
085233f907 Improve various documentation 2021-05-20 22:12:17 +02:00
Emil Ernerfeldt
2dea4d8db2 Color picker: fix rare infinite loop in very weird situtations 2021-05-20 22:05:44 +02:00
Emil Ernerfeldt
f4ddc21740 Simplify IME cursor pos handling in TextEdit 2021-05-20 22:01:59 +02:00
Emil Ernerfeldt
6a576f4c34 Rename Output::text_cursor to text_cursor_pos 2021-05-20 21:58:44 +02:00
Emil Ernerfeldt
8cce09687f Expose text layout functions in Painter 2021-05-20 21:53:39 +02:00
Emil Ernerfeldt
94479317b3 Add #[must_use] to container types: remind to call show() 2021-05-20 21:45:00 +02:00
Emil Ernerfeldt
a892519297 Add Style::override_text_style
Add Style::override_text_style to easily change the text style
of everything in a `Ui` (or globally).

You can now change `TextStyle` on checkboxes,
radio buttons and `SelectableLabel`.

Closes https://github.com/emilk/egui/issues/406
Closes https://github.com/emilk/egui/pull/407
2021-05-20 21:31:34 +02:00
Zenithsiz
57981d49ee
Add support for buffers other than a String in TextEdit (#399)
* Initial design for `TextBuffer` trait, to allow `TextEdit` to edit types other than `String`.

* Moved `insert_text` implementation into `TextBuffer`.
This allows the user to implement text inserting depedent on their type instead of using a `String` and converting back to `S`, which may be a lossless convertion.

* Moved part of `delete_selected_ccursor_range` implementation into `TextBuffer::delete_range`.

* `TextBuffer::insert_text` not returns how many characters were inserted into the buffer.
This allows implementations to "saturate" the buffer, only allowing for a limited length of characters to be inserted.

* Now using `byte_index_from_char_index` instead of custom implementation.

* `decrease_identation` impl now modified the string in-place.
Removed `From<String>` bound for `TextBuffer`.

* Added changes to changelog.

* Moved updated changelog to .

* Updated documentation on `TextBuffer`.

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* Renamed `TextBuffer::delete_text_range` to `delete_char_range`.

Co-authored-by: Filipe Rodrigues <filipejacintorodrigues1@gmail.com>
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-05-20 21:00:50 +02:00
Wojciech Kępka
d292b831a1
Add an option to overwrite frame of SidePanel and TopPanel (#418)
* Add an option to overwrite frame of SidePanel and TopPanel

* Update CHANGELOG
2021-05-20 20:10:30 +02:00
Gray Olson
c0929014bf
Add support for cint (conversions to and from color types) (#393)
* implement cint for color types under feature flag

* upgrade to cint 0.2, remove from default features

* upgrade to cint 0.2.1, add a couple more from/into implementations

* changelog entry

* fix typo in changelog

* sort dependency

* fmt
2021-05-20 20:09:52 +02:00
St John Giddy
ac82cc7be3
fix(plot): expose VLine and HLine (#422) 2021-05-20 19:56:45 +02:00
Emil Ernerfeldt
5bc53ce069 Improve panel docs
Related to https://github.com/emilk/egui/issues/421
2021-05-20 19:48:34 +02:00
Violeta Hernández
de02f7d042
Value of DragValue correctly clamped (#405)
* Update drag_value.rs

* `value` → `old_value`
2021-05-18 20:03:04 +02:00
Emil Ernerfeldt
dd4ac43b13 Make sure egui can handle zero-sized screen rect
This would previously hit a debug assert

Fixes https://github.com/emilk/egui/issues/395
2021-05-17 22:53:52 +02:00
Emil Ernerfeldt
6e5b52e3bc Add features extra_asserts and extra_debug_asserts for more asserts
This replaces all debug_asserts with these opt-in asserts

Related: https://github.com/emilk/egui/issues/395
2021-05-17 22:38:39 +02:00
Sven Niederberger
bfabb70cba
Fix BottomUp layout (#386) 2021-05-15 09:37:33 +02:00
Emil Ernerfeldt
2f46c975a5 Fix wrong vertical align in default layout
Only seen when having unusually high buttons
2021-05-13 23:15:44 +02:00
Emil Ernerfeldt
7b0f991b20 Improve docs concerning custom fonts, themes and accessibility
Closes https://github.com/emilk/egui/pull/370
Closes https://github.com/emilk/egui/issues/372
2021-05-11 14:56:27 +02:00
Emil Ernerfeldt
8f8ba16696 Release 0.12.0 - Multitouch, user memory, window pivots, and improved plots 2021-05-10 18:27:39 +02:00
Emil Ernerfeldt
1423bac3aa Smooth fading of plot grid and tick labels 2021-05-10 18:13:22 +02:00
Emil Ernerfeldt
cf3d12669c Fix misc typos
Closes https://github.com/emilk/egui/pull/366
Closes https://github.com/emilk/egui/pull/365
2021-05-10 10:52:49 +02:00
Emil Ernerfeldt
b1559963bf Enable a bunch more clippy lints 2021-05-09 14:13:09 +02:00
Emil Ernerfeldt
4022b84ae7 group rustdoc lints under rustdoc:: prefix 2021-05-09 14:01:57 +02:00
Emil Ernerfeldt
fb5176c133 #![allow(clippy::float_cmp)] everywhere
it has always been an annoyance, never a help
2021-05-09 14:00:53 +02:00
Emil Ernerfeldt
38186fe23e Add a TODO 2021-05-09 13:20:27 +02:00
Emil Ernerfeldt
5a21bc78a6 minor code simplification 2021-05-09 13:19:09 +02:00
Emil Ernerfeldt
a8c3deaf08 Rename ui.wrap to ui.scope 2021-05-09 13:17:32 +02:00
Emil Ernerfeldt
9dc092b778 Clean up demos 2021-05-09 13:07:56 +02:00
Emil Ernerfeldt
aa3c40c49f bug fix: don't lock focus by default 2021-05-09 11:17:32 +02:00
Emil Ernerfeldt
4bb79a7047 Move normalize_angle to emath 2021-05-08 23:42:17 +02:00
Emil Ernerfeldt
dd6980bacb Implement non-proportional multitouch pinch zooming 2021-05-08 23:31:31 +02:00
Emil Ernerfeldt
04d9ce227b Tidy up multitouch code: remove double spaces after full stop
Weirdest thing I've seen in my life.
2021-05-08 22:49:40 +02:00
follower
a5e41f275c
Typo: CollpasingHeaders -> CollapsingHeaders (#359) 2021-05-08 16:24:22 +02:00
Emil Ernerfeldt
5e46bd404c Some documentation improvements 2021-05-08 09:25:52 +02:00
Luis Wirth
87bc26fb5a
implement mint conversions (#352)
* Implement mint conversions

Implement conversions for [mint](https://docs.rs/mint) (math interoperability standard types).

- `impl {From, Into}<mint::Point2> for Pos2`
- `impl {From, Into}<mint::Vector2> for Vec2`

* Forward `mint` feature: egui -> epaint -> emath
2021-05-08 08:17:01 +02:00
Sven Niederberger
838f3e4ff2
Add plot legends (#349)
* add plot legends

* don't show crosshairs when hovering over legend

* add a toggle for the legend

* changes based on review

* improve legend behavior when curves share names
2021-05-07 10:32:17 +02:00
Emil Ernerfeldt
d862ff66ac Add Image::sense to let an image respond to clicks and drags 2021-05-06 22:10:05 +02:00
Ivo Vollrath
03721dbfd8
Basic multi touch support (issue #279) (#306)
* translate touch events from glium to egui

Unfortunately, winit does not seem to create _Touch_ events for the touch pad
on my mac.  Only _TouchpadPressure_ events are sent.

Found some issues (like
[this](https://github.com/rust-windowing/winit/issues/54)), but I am not sure
what they exactly mean:  Sometimes, touch events are mixed with
touch-to-pointer translation in the discussions.

* translate touch events from web_sys to egui

The are a few open topics:
- egui_web currently translates touch events into pointer events.
  I guess this should change, such that egui itself performs this kind of
  conversion.
- `pub fn egui_web::pos_from_touch_event` is a public function, but I
  would like to change the return type to an `Option`.  Shouldn't this
  function be private, anyway?

* introduce `TouchState` and `Gesture`

InputState.touch was introduced with type `TouchState`, just as
InputState.pointer is of type `Pointer`.

The TouchState internally relies on a collection of `Gesture`s.  This commit
provides the first rudimentary implementation of a Gesture, but has no
functionality, yet.

* add method InputState::zoom()

So far, the method always returns `None`, but it should work as soon as the
`Zoom` gesture is implemented.

* manage one `TouchState` per individual device

Although quite unlikely, it is still possible to connect more than one touch
device. (I have three touch pads connected to my MacBook in total, but
unfortunately `winit` sends touch events for none of them.)

We do not want to mix-up the touches from different devices.

* implement control loop for gesture detection

The basic idea is that each gesture can focus on detection logic and does not
have to care (too much) about managing touch state in general.

* streamline `Gesture` trait, simplifying impl's

* implement first version of Zoom gesture

* fix failing doctest

a simple `TODO` should be enough

* get rid of `Gesture`s

* Provide a Zoom/Rotate window in the demo app

For now, it works for two fingers only.  The third finger interrupts the
gesture.

Bugs:
- Pinching in the demo window also moves the window -> Pointer events must be
  ignored when touch is active
- Pinching also works when doing it outside the demo window -> it would be nice
  to return the touch info in the `Response` of the painter allocation

* fix comments and non-idiomatic code

* update touch state *each frame*

* change egui_demo to use *relative* touch data

* support more than two fingers

This commit includes an improved Demo Window for egui_demo, and a complete
re-write of the gesture detection.  The PR should be ready for review, soon.

* cleanup code and comments for review

* minor code simplifications

* oops – forgot the changelog

* resolve comment fee8ed83db (r623226656)

* accept suggestion https://github.com/emilk/egui/pull/306#discussion_r623229228

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

* fix syntax error (dough!)

* remove `dbg!` (why didnt clippy see this?)

* apply suggested diffs from review

* fix conversion of physical location to Pos2

* remove redundanct type `TouchAverages`

* remove trailing space

* avoid initial translation jump in plot demo

* extend the demo so it shows off translation

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-05-06 21:01:10 +02:00
Emil Ernerfeldt
0d71017ad4 clippy fixes for rust 1.52 2021-05-06 20:49:22 +02:00
Emil Ernerfeldt
29668b5128 Minor documentation improvements 2021-05-02 22:02:26 +02:00
Emil Ernerfeldt
1394205f52 Document and demonstrate how to expand a TextEdit to fill a Ui 2021-05-02 21:57:51 +02:00
Emil Ernerfeldt
66122e4c9a Decrease indentation with shift-tab 2021-05-02 20:09:11 +02:00
Emil Ernerfeldt
7da9928548 Clean up new code editor code 2021-05-02 19:28:02 +02:00
Cristian Dinu
35c7b09285
Tab identation for multiline text edit (#246)
Lock focus on multiline text edit, and insert tabs on tab char

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2021-05-02 18:56:28 +02:00
ilya sheprut
101eed0d67
memory: add Send + Sync reqirement, fix #337 (#341)
* memory: add `Send + Sync` reqirement, fix #337

* Update egui/src/memory.rs

Co-authored-by: Lucien Greathouse <me@lpghatguy.com>

Co-authored-by: Lucien Greathouse <me@lpghatguy.com>
2021-04-30 10:03:45 +02:00
David Pedersen
02a62d1986
Replace impl Into<String> with impl ToString (#302)
* Replace `impl Into<String>` with `impl ToString`

This is something I ran into today. Types that implement
`std::fmt::Display` cannot be passed to functions that take `impl
Into<String>`. You have to call `display_thing.to_string()`. Its a small
thing but would be fixed by instead taking `impl ToString`.

Afaik `impl ToString` is a superset of `impl Into<String>`, unless users
manually implement `Into<String> for T` (or `From<T> for String`) for
their own types. However I think its more common to implement `Display`
as that works with `println` and friends. The main difference is that
`Display::fmt` can return errors but thats also quite rare in my
experience.

I did some testing in a [playground] and seems to work.

[playground]: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1111e071f6ae416ae2688d58d2e9b575

* Silence warnings
2021-04-29 19:49:49 +02:00
Emil Ernerfeldt
6f01577d5f Tab only selects labels if the screen_reader option is turned on. 2021-04-25 18:20:10 +02:00