Commit graph

432 commits

Author SHA1 Message Date
Jonathan Johnson
e0df3b0017
Image opacity support 2024-09-16 14:15:49 -07:00
Jonathan Johnson
01b764de0b
File drop events 2024-09-16 09:15:29 -07:00
Jonathan Johnson
e7ccbac18c
Support immediately resizing without refreshing
On some platforms, notably Wayland, the window immediately responds to
resize requests. This means that if the window resizes itself during the
prepare operation, the current graphics context is no longer the correct
size for the window. Before this change, Kludgine was working around
this by noticing the discrepency and forcing an extra refresh. This
workaround is still in place in Kludgine, but now Cushy supports
restarting redrawing upon resize.
2024-09-16 08:22:30 -07:00
Jonathan Johnson
b4058fc55b
Honoring request_inner_size results 2024-09-16 07:04:36 -07:00
Jonathan Johnson
229bbd4913
Window::on_init 2024-09-14 10:33:42 -07:00
Jonathan Johnson
b5cdb93bb5
Resize ranges fix 2024-09-14 08:35:26 -07:00
Jonathan Johnson
e34d06ac13
Actually fixing the Resize layout fill bug 2024-09-14 08:07:32 -07:00
Jonathan Johnson
e4b8a73943
Resize layout fix for flexible children 2024-09-14 08:05:02 -07:00
Jonathan Johnson
5f832c304f
Window shortcuts
Due to complexities in input routing and how that interacts with layers,
it seemed prudent to support installing shortcuts directly on the
window.

This also enables overriding default shortcuts like Primary+W to close
the window.
2024-09-13 16:18:30 -07:00
Jonathan Johnson
7fc902a5a2
Dynamic<T>/Owned<T> serde support 2024-09-13 15:55:44 -07:00
Jonathan Johnson
20ab1ad029
Fixed initial window settings
These aren't entries in the changelog since they're bug fixes for new
code since the last release -- the entries on the changelog are
unaffected.

- focused and occluded no longer is explicitly set to false. Now, once
  the window has been fully initialized, the values are read from winit
  which will cause callbacks to be fired if the value has changed.
- The automatic_layout parameter if outer_position had its meaning
  inverted. Passing true now properly ensures the window is
  automatically positioned.
2024-09-13 10:12:01 -07:00
Jonathan Johnson
444fbbe4ed
Modal DialogBuilder 2024-09-12 14:49:37 -07:00
Jonathan Johnson
09790039af
App::prevent_shutdown() 2024-09-12 07:40:59 -07:00
Jonathan Johnson
8d082ab77f
Modal layer 2024-09-11 20:54:08 -07:00
Jonathan Johnson
71f699ccda
WindowHandle::execute 2024-09-11 16:29:04 -07:00
Jonathan Johnson
2becb92f04
WrapperWidget::root_behavior default passthrough 2024-09-11 14:44:47 -07:00
Jonathan Johnson
8eaf0f414f
serde feature 2024-09-11 06:19:35 -07:00
Jonathan Johnson
7e69846909
Shortcut fallback, ShortcutMap 2024-09-10 07:46:34 -07:00
Jonathan Johnson
aa7e526965
Standardizing on SharedCallback 2024-09-09 16:37:04 -07:00
Jonathan Johnson
c2d07344d9
Keyboard shortcut handling 2024-09-09 15:05:02 -07:00
Jonathan Johnson
448482e7bf
Fullscreen example 2024-09-09 08:12:59 -07:00
Jonathan Johnson
0f866009b8
app_name, fullscreen, focused
Finally finished removing WindowAttributes.
2024-09-09 07:49:21 -07:00
Jonathan Johnson
8d653c2d6c
Modifiers support
Closes #162
2024-09-09 06:49:04 -07:00
Jonathan Johnson
1cb93e2af2
Moving non-generic code to its own function. 2024-09-08 13:29:44 -07:00
Jonathan Johnson
14d2069fec
MakeWindow + easy window centering 2024-09-08 13:19:55 -07:00
Jonathan Johnson
dd4c544ba6
Window sync edge cases
- synchronize_platform_window is now called prior to the first redraw.
  This allows the `visible` attribute to be changed from false to true.
- Some window attributes are automatically set based on the incoming
  dynamic.
- Some initial window values are delayed until after the first layout to
  minimze "noisy" values.

All of these changes now allow a window that is resize_to_fit to be
initially hidden and show itself centered after being initially resized
without any flashing or on-screen movement/resizing.
2024-09-08 11:29:29 -07:00
Jonathan Johnson
bbbc8151c4
cushy::main attribute macro 2024-09-08 09:31:35 -07:00
Jonathan Johnson
0953e5ab40
Window::icon 2024-09-07 10:13:48 -07:00
Jonathan Johnson
531e6c9ab6
Window positioning properties
Closes #165
2024-09-07 09:31:40 -07:00
Jonathan Johnson
bf78da333d
App::monitors + run()/on_startup()
Closes #163
2024-09-06 11:50:35 -07:00
Jonathan Johnson
a3c57d50d3
Fixing book example generation 2024-09-05 20:47:07 -07:00
Jonathan Johnson
634a4b7af8
Added most window settings from winit
Refs #160
2024-09-05 20:31:01 -07:00
Jonathan Johnson
9304165981
PendingWindow in PendingApp fix + resize_to_fit 2024-09-04 08:29:13 -07:00
Jonathan Johnson
6a346ea3ef
Added Watcher type 2024-09-02 09:23:52 -07:00
Jonathan Johnson
0dd18826c9
Switcher unmounts in all windows
Fixes #139
2024-08-28 08:49:26 -07:00
Jonathan Johnson
53d3c58cbb
Added missing to_ variants 2024-08-28 07:42:11 -07:00
Jonathan Johnson
20366698a6
Clippy
Apparently I had missed some warnings due to how I was editing this
through another project using Cushy.
2024-08-28 07:03:56 -07:00
Jonathan Johnson
94e473cdd3
Fixing nested collapse animations 2024-08-27 09:56:14 -07:00
Jonathan Johnson
9a148b8765
Making all easing functions themable 2024-08-27 08:32:51 -07:00
Jonathan Johnson
457962cc48
Removed dbg! statement 2024-08-20 12:03:09 -07:00
Jonathan Johnson
9b3e6c13f4
Fixed remounting WidgetInstances 2024-08-20 10:31:47 -07:00
Jonathan Johnson
df748a991d
Extracting easing functions + Clippy 2024-08-17 17:44:12 -07:00
Jonathan Johnson
6726855ed0
Cleaning up figures usage in examples 2024-07-26 10:34:30 -07:00
Jonathan Johnson
530f50e53c
Removing extra dbg statement 2024-07-26 09:53:26 -07:00
Jonathan Johnson
b33e06ac4e
Attempting to tweak glyph calculation 2024-07-26 09:51:29 -07:00
Jonathan Johnson
4c9dd5d7ca
Allowing partial glyph to be considered start 2024-07-26 09:46:50 -07:00
Jonathan Johnson
4a55a42011
More selection fixing 2024-07-26 09:44:41 -07:00
Jonathan Johnson
f0c1aec40e
Fixing selecting before/after the text 2024-07-26 09:33:33 -07:00
Jonathan Johnson
459dc3f96a
Renaming CushyWindowBuilder to Standalone
Closes #155
2024-07-26 09:20:39 -07:00
Jonathan Johnson
48133cdac3
Fixing an edge case in computing tab order
Removing widgets would affect the visual order, and sometimes nodes just
aren't available anymore. It might be that this should be cleaned up
more aggressively during widget removal, but by ignoring the removed
nodes, the code just becomes more resilliant to similar edge cases in
the future.
2024-07-26 08:59:23 -07:00
Jonathan Johnson
ffb1475e30
Fixing padding/shadow calculations on Container
Fixes #158
2024-07-26 08:58:59 -07:00
Jonathan Johnson
ba3a4b9b02
Added Zoom factor
Closes #146
2024-07-25 11:31:38 -07:00
Jonathan Johnson
553c4ab959
Updating Kludgine for wgpu
The dependence on git is just to let CI run before releasing a kludgine
update with wgpu 22.0.0 support.
2024-07-22 07:19:58 -07:00
Jonathan Johnson
60c7ef8859
Honoring Window::inner_size's initial value
Refs #160
2024-07-08 16:50:50 -07:00
Jonathan Johnson
4d6196f4e7
Fixing default for no close-requested handler 2024-07-08 16:22:15 -07:00
Jonathan Johnson
24291772de
Added Window::on_close_requested
Closes #161
2024-07-08 16:06:45 -07:00
Jonathan Johnson
6a1f7f5462
Fixed deadlock with DynamicMutexGuard::unlocked
During the change callback process, unlocked is called to allow the
change callbacks to run while the dynamic is unlocked. The error with
the previous version of this code is that the during_callback_state was
always overwritten when being returned. The problem is that another
thread could currently have the mutex locked and could have stored its
own state -- which can happen if two threads are both trying to invoke
change callbacks at the same time.

By moving the state saving and reloading to only happen when the mutex
guard is acquired, we can ensure that interleaving threads will work
correctly.
2024-06-13 09:16:13 -07:00
Jonathan Johnson
f61cb2b91b
Fixing deadlock in debug window cleanup 2024-06-07 11:01:53 -07:00
Jonathan Johnson
a6d5b078f5
Added ForEach::for_each_subsequent
Refs #153

This turned out to be "needed" by the debug window due to how dynamic
locking was nested when a for_each call was being invoked. To keep the
code simple, for_each_subsequent was added.
2024-06-07 10:27:07 -07:00
Jonathan Johnson
7bd13e2a0a
Added for_each_subsequent
Refs #156

The ForEach trait currently doesn't have a subsequent version, but given
the discussion in the related issue I think that's OK.
2024-06-07 09:08:14 -07:00
Jonathan Johnson
8c8dca63ba
Clarified some window builder documentation
Really the functions should be renamed -- see #155
2024-05-17 15:00:24 -07:00
Jonathan Johnson
3da08bca62
Fixed a crash in Switcher
I'm not sure exactly what caused this that other simpler cases were not,
but essentially nodes were already removed once by the time this loop is
evaluated, so we can skip adding them back to the list again.
2024-05-13 08:39:43 -07:00
Jonathan Johnson
774a846210
animate_mouse_button + more example recordings 2024-05-12 19:12:01 -07:00
Jonathan Johnson
568f2ca327
Added plotters example capture + animate_keypress 2024-05-12 14:23:29 -07:00
Jonathan Johnson
15b8b3e452
Moved example generation into cushy
Undocumented and unsupported, but this allows generating example images.

This push is testing that the image makes it through CI.

Refs #125
2024-05-12 07:58:09 -07:00
Jonathan Johnson
997cc9586f
Simplifying drop shadow
Also making example regeneration automatic in CI for the guide
2024-05-12 06:57:41 -07:00
Jonathan Johnson
b57188f80f
Added optional tokio integration
Closes #147
2024-05-11 21:25:54 -07:00
Jonathan Johnson
7f55b352b4
Export Menu + Finish Guide Stubs 2024-05-11 19:30:36 -07:00
Jonathan Johnson
07f1febe9f
Removed ChosenMenuItem
Also updated the changelog
2024-05-10 12:15:33 -07:00
Jonathan Johnson
c5f1832b3e
Disabled menu item support 2024-05-10 10:16:47 -07:00
Jonathan Johnson
b8410cd4ba
Separators in menus 2024-05-10 09:51:02 -07:00
Jonathan Johnson
38cdea9816
Submenu support in context menus 2024-05-10 09:10:39 -07:00
Jonathan Johnson
8b96966031
Basic context menus
Missing a ton of functionality (separators, keyboard accessibility,
submenus), but the basic concept is working.
2024-05-09 08:16:34 -07:00
Jonathan Johnson
1c8d4e0176
ButtonClick + Overlays at locations
The overlay example now supports right-clicking to open overlays at the
clicked location, showing how a context menu widget can begin being
built.
2024-05-08 08:38:26 -07:00
Jonathan Johnson
46c4eb9ed8
winit 0.30 2024-05-01 12:49:03 -07:00
Jonathan Johnson
5e266f1551
Optimizing label text recaching
I had previously had similar logic in here, but I realized I couldn't
reliably detect if cosmic_text had done any wrapping or not. After a
discussion prompted me to see if recaching was happening while
scrolling, I realized I could at least allow the width to be >= the
measured text size and <= the requested layout width.

This prevents recaching while scrolling.
2024-04-07 14:33:50 -07:00
Jonathan Johnson
20ae2b7c72
map_each deadlock prevention
map_each previously was written such that if a chain of mappings fed
each other, a deadlock could occur because while the first one was
mapped, the second callback gets invoked and tries to update the first
value while it's still being held.

This refactor switches from std Mutex to parking_lot, allowing me to
remove a workaround for needing to run drop callbacks in a separate
thread during the drop of a DynamicGuard.

In addition to that change, the lower level `map_generational` calls now
take a DynamicGuard as their parameter. This allows these functions to
drop ownership of the referenced data during the callback.

The map_each implementation takes advantage of this by ensuring that the
guard is dropped before set is invoked, minimizing potential lock overlaps.

With this refactor, some old code of mine with complex validations now works
again.
2024-04-05 16:14:26 -07:00
Jonathan Johnson
beede55f0a
Added winit accessor
I originally removed this API to ensure no Cushy widgets were using
winit directly, but I've reintroduced it so that third party widgets can
still interact with winit if needed.
2024-04-03 09:13:36 -07:00
Jonathan Johnson
44759d4812
Fix when replacing an overlay
When an overlay handle dropped directly after pushing a new overlay, it
was possible for new overlays to be popped off improperly, causing a
subtraction overflow panic later.
2024-03-21 11:26:34 -07:00
Jonathan Johnson
abbf8d94d8
More Modifier helpers 2024-03-21 11:26:23 -07:00
Jonathan Johnson
173fb2d540
Allowing changing multisampling on all windows 2024-03-21 09:02:07 -07:00
Jonathan Johnson
74034760ce
OverlayLayer::dismiss_all 2024-03-20 11:40:20 -07:00
Jonathan Johnson
a63af0f9de
Exposing ModifiersExt 2024-03-19 10:17:28 -07:00
Jonathan Johnson
18abfc66f2
Added ability to disable vsync 2024-03-17 08:44:02 -07:00
Jonathan Johnson
3762bc6dc1
Dynamic font loading
Closes #145
2024-03-06 16:53:36 -08:00
Jonathan Johnson
9c4ae939e1
Implemented nested widget unmounted events
Closes #138

This implementation works around most of the locking issues that arose
the first few times I tried fixing this. Unfortunately it's been just
long enough for me to forget how I triggered some catastrophic issues in
the past, but all of the current examples that would invoke this
behavior continue to work, and some of the side projects that have some
weird usages also still work.
2024-03-06 09:50:29 -08:00
Jonathan Johnson
0e02a513bb
Updating dependencies
This makes the lockfile build against the new release of wgpu.
2024-03-06 09:21:43 -08:00
Roland Fredenhagen
641f4bf52d
Add MakeWidgetList
Adds functions to convert `impl IntoIterator<Item = impl MakeWidget>`
directly into `Stack`, `Layers`, etc.
2024-02-05 23:17:33 +01:00
Jonathan Johnson
0e5976de10
Dynamic::try_lock
Plus other minor changes.
2024-01-26 18:13:42 -08:00
Jonathan Johnson
3f8fed65c3
Added Chinese ListStyles
This may seem like a lot of options, but here's the reasoning:

- The CSS spec offers four variations: Simplified/Traditional and
  Formal/Informal. This spec defines a character set for all for
  variations, and it also associates rules for omitting digits in the
  informal variants.
- The chinese_number crate does not implement a variant that includes
  the tens digit, as required by the cSS spec for the formal variants.

To be able to provide the enumerations that the CSS spec offers *and* to
provide the variations that the chinese_number crate supports, I've aded
8 total list styles for selecting a specific Chinese variation.

Technically nominals supports even more options, but the myriad counting
scale coveres u128::MAX and seems to be the most common counting style.
2024-01-18 15:06:54 -08:00
Jonathan Johnson
e2e5085b1f
Added List widget 2024-01-18 13:29:50 -08:00
Jonathan Johnson
76a42e2788
Updated to wgpu 0.19.0
Most of the changes were figures-related. Go figure.
2024-01-18 06:37:29 -08:00
Jonathan Johnson
570cfc6d94
Missing docs 2024-01-13 06:10:36 -08:00
Jonathan Johnson
c2bd9911ca
Started a List widget
a la HTML's <ul> tag.
2024-01-13 06:04:41 -08:00
Jonathan Johnson
1b97b39857
Label for CowString 2024-01-13 06:02:22 -08:00
Jonathan Johnson
0c36abf28e
Remving debugs 2024-01-13 06:02:10 -08:00
Jonathan Johnson
9bd78c648b
Switcher now unmounts
This isn't quite perfect, as a Switcher shared with multiple windows
will only unmount in one window.
2024-01-13 05:55:07 -08:00
Jonathan Johnson
02e90e48c6
Image aspect scaling now requests sizes 2024-01-13 05:54:51 -08:00
Jonathan Johnson
c242009cb8
Fixing set_font_family to not be sticky 2024-01-13 05:52:27 -08:00
Jonathan Johnson
f8cb7e7f32
Added the Delimiter widget 2024-01-12 15:44:18 -08:00