Bartłomiej Dach
e5943e460d
Unify ConfigureAwait()
calls across method
2025-02-05 10:28:42 +01:00
Bartłomiej Dach
c5deb9f36b
Use alternative lockless solution for atomic cancellation token recreation
2025-02-05 10:28:25 +01:00
Dean Herbert
5c9e84caf0
Add lock object
2025-02-05 17:31:54 +09:00
Dean Herbert
14273824dc
Fix Carousel.FilterAsync
not working when called from a non-update thread
...
I was trying to be smart about things and make use of our
`SynchronisationContext` setup, but it turns out to not work in all
cases due to the context being missing depending on where you are
calling the method from.
For now let's prefer the "works everywhere" method of scheduling the
final work back to update.
2025-02-05 16:40:11 +09:00
Dean Herbert
599b59cb14
Add expanded state to sample drawable representations
2025-02-04 18:06:16 +09:00
Dean Herbert
58560f8acf
Add tracking of expansion states for groups and sets
2025-02-04 17:51:51 +09:00
Bartłomiej Dach
6e59cab928
Merge pull request #31764 from peppy/beatmap-carousel-v2-grouping
...
Add group support to beatmap carousel v2
2025-02-04 08:13:54 +01:00
Dean Herbert
e454fa558c
Adjust group traversal logic to handle cases where keyboard selection redirects
2025-02-04 02:55:59 +09:00
Dean Herbert
b433eef138
Remove redundant conditional check
2025-02-04 02:41:39 +09:00
Dean Herbert
c7780c9fdc
Refactor how grouping is performed
2025-02-03 20:40:52 +09:00
Salman Alshamrani
c587958f38
Apply depth ordering relative to selected item
2025-02-03 02:34:29 -05:00
Dean Herbert
6a18d18feb
Fix null handling when no items are populated but a selection is made
2025-02-03 02:39:45 +09:00
Dean Herbert
9c34819ff4
Add test coverage for grouped selection
2025-02-03 02:39:45 +09:00
Dean Herbert
645c26ca19
Simplify keyboard traversal logic
2025-02-03 02:24:27 +09:00
Dean Herbert
d74939e6e9
Fix backwards traversal of groupings and allow toggling groups without updating selection
2025-02-03 02:24:27 +09:00
Dean Herbert
764f799dcb
Improve selection flow using early exit and invalidation
2025-02-03 02:24:27 +09:00
Dean Herbert
d5dc55149d
Add initial difficulty grouping support
2025-02-03 02:24:27 +09:00
Dean Herbert
3cde11ab77
Re-enable masking by default
2025-02-03 02:24:26 +09:00
Bartłomiej Dach
55ab3c72f6
Remove unused field
2025-01-24 15:15:50 +01:00
Dean Herbert
82c5f37c2c
Remove selection animation on set panel
2025-01-24 22:45:08 +09:00
Dean Herbert
175eb82ccf
Split out beatmaps and set panels into two separate classes
2025-01-24 20:10:41 +09:00
Dean Herbert
0164a2e4dc
Move pool item preparation / cleanup duties to Carousel
2025-01-24 20:10:41 +09:00
Dean Herbert
9366bfbf0d
Move activation drawable flow portion to ICarouselPanel
2025-01-24 18:40:48 +09:00
Dean Herbert
92429b2ed9
Adjust comments on ICarouselPanel
to imply external use
2025-01-24 18:34:04 +09:00
Dean Herbert
f4270ab3b9
Simplify selection handling logic
2025-01-23 23:58:51 +09:00
Dean Herbert
d5369d3508
Add regions to BeatmapCarousel
2025-01-23 23:53:09 +09:00
Dean Herbert
0716b73d2a
ActivateSelection
-> TryActivateSelection
2025-01-23 22:44:39 +09:00
Dean Herbert
2feab31426
Adjust inline commentary based on review feedback
2025-01-23 22:41:20 +09:00
Dean Herbert
ffca90779f
Fix sort direction being flipped
2025-01-23 18:51:24 +09:00
Dean Herbert
2f94456a06
Add selection and activation flow
2025-01-23 18:51:24 +09:00
Dean Herbert
ecef5e5d71
Add set-difficulty tracking in BeatmapCarouselFilterGrouping
...
Rather than tracking inside individual items, let's just maintain a
single dictionary which is refreshed every time we regenerate filters.
2025-01-23 18:48:44 +09:00
Dean Herbert
980f6cf18e
Make CarouselItem
sealed
and remove BeatmapCarouselItem
concept
...
Less abstraction is better. As far as I can tell, we don't need a custom
model for this. If there's any tracking to be done, it should be done
within `BeatmapCarousel`'s implementation (or a filter).
2025-01-23 18:48:44 +09:00
Dean Herbert
c67c0a7fc0
Move Selected
status to drawables
...
Basically, I don't want bindables in `CarouselItem`. It means there
needs to be a bind-unbind process on pooling. By moving these to the
drawable and just updating every frame, we can simplify things a lot.
2025-01-23 18:48:43 +09:00
Dean Herbert
ded1d9f019
displayedCarouselItems
-> carouselItems
2025-01-23 15:58:35 +09:00
Dean Herbert
d526835627
Only show loading when doing a user triggered filter
2025-01-23 15:51:54 +09:00
Dean Herbert
6ac2dbc818
Reorder carousel methods into logical regions
2025-01-23 15:50:57 +09:00
Dean Herbert
6c27e87714
Add back explicit right click handling of carousel absolute scrolling
2025-01-21 17:24:42 +09:00
Dean Herbert
43b54623d9
Add required padding on either side of panels so selection can remain centered
2025-01-17 18:08:20 +09:00
Dean Herbert
54f9cb7f68
Add overlapping spacing support
2025-01-17 18:07:54 +09:00
Dean Herbert
a1c5fad6d4
Add curvature to new carousel implementation
2025-01-17 18:07:54 +09:00
Dean Herbert
a6057a9f54
Move absolute scroll support local to carousel and allow custom bindings
2025-01-16 20:47:59 +09:00
Dean Herbert
1c2621d88e
Add support to CarouselV2 for right mouse button scrolling
2025-01-16 20:27:38 +09:00
Dean Herbert
6027947657
Move animation handling to Carousel
implementation to better handle add/removes
...
With the animation logic being external, it was going to make it very
hard to apply the scroll offset when a new panel is added or removed
before the current selection.
There's no real reason for the animations to be local to beatmap
carousel. If there's a usage in the future where the animation is to
change, we can add more customisation to `Carousel` itself.
2025-01-15 17:01:07 +09:00
Dean Herbert
0b764e6372
Fix substring of GetHashCode
potentially failing
2025-01-15 16:18:34 +09:00
Dean Herbert
e871f02350
Fix inspections that don't show in rider
2025-01-14 20:43:03 +09:00
Dean Herbert
900237c1ed
Add loading overlay and refine filter flow
2025-01-14 20:23:53 +09:00
Dean Herbert
cc8941a94a
Add animation and depth control
2025-01-14 20:12:09 +09:00
Dean Herbert
7e8a80a0e5
Add difficulty, artist and title sort examples
...
Also:
- Adds hinting at grouping and header status of items
- Passes through criteria and prepare for grouping tests.
- Makes `Filters` list `protected` because naming clash with `Filter()`
on `BeatmapCarousel`.
2025-01-14 19:52:48 +09:00
Dean Herbert
d97a3270a5
Split out BeatmapCarousel
classes and drop V2
suffix
2025-01-14 19:18:02 +09:00
Dean Herbert
cf55fe16ab
Generic type instead of raw object
?
2025-01-11 01:43:47 +09:00