Releases: ppy/osu-framework
2024.129.1
What's Changed
- Fix
IBindableList.GetEnumerator()
boxing and allocating by @smoogipoo in #6155 - Reduce allocations when calling BeginAbsoluteSequence() by @smoogipoo in #6156
- Fix build warning by @smoogipoo in #6158
- Implement
Padding
property inGridContainer
by @EVAST9919 in #6145 - Reduce mouse move overhead when
IRequireHighFrequencyMousePosition
are present by @peppy in #6147 - Fix nested absolute sequences by @smoogipoo in #6160
Full Changelog: 2024.127.0...2024.129.1
2024.127.0
What's Changed
- Fix allocation overhead in
TabFillFlowContainer
when it can't fit all the items by @EVAST9919 in #6148 - Write log header later to ensure game identifiers are present by @peppy in #6138
- Add the ability to solo a test in visual testing using
[Solo]
attribute by @peppy in #6137
Full Changelog: 2024.121.1...2024.127.0
2024.121.1
Breaking Changes
DrawablePool.Get()
wil now throw if the DrawablePool
did not begin load
Previously the pool would return drawables correctly before load, but it would not initialise the pool to correct default size, causing overheads on drawable retrieval (usually on update thread).
HostOptions.BindIPC
has been superseded by HostOptions.IPCPort
Previously, the IPC port used for multiple instances of a single osu!framework app was hardcoded in the IPC host itself, effectively making it so that all osu!framework apps would share the same IPC port, which obviously cannot work.
To allow multiple osu!framework apps to utilise IPC concurrently, BindIPC
has thus been replaced by IPCPort
.
- Setting
IPCPort = null
is equivalent toBindIPC = false
. - Setting
IPCPort
to a non-null value is equivalent toBindIPC = true
and will force the use the specific port provided.
Note that it is advised to use a "user port" (in the range of 1024-49151) as per RFC 6335.
What's Changed
- Include rounded corner radius in android safe area implementation by @bdach in #6143
- Ignore autogenerated .idea android file by @Susko3 in #6144
Full Changelog: 2024.121.0...2024.121.1
2024.114.0
What's Changed
- Fix
KeyCombination
throwing when duplicates are fed in by @peppy in #6130 - Fix incorrect implementation of
OsuTKWindow.Displays
by @bdach in #6132
Full Changelog: 2024.113.0...2024.114.0
2024.113.0
What's Changed
- Reduce input processing overheads in
PassThroughInputManager
by @peppy in #6120 - Avoid creating a new texture in
SmoothPath
if the existing one is already the correct size by @peppy in #6119 - Remove allocations when checking if mouse outside all displays by @peppy in #6123
- Reduce string allocations during shader creation by @peppy in #6121
- Remove delegate allocation in jitter calculation in
FramedClock
by @peppy in #6122 - Remove
VeldridTexture.Bind()
by @smoogipoo in #6128 - Remove overheads of MIDI device polling by @peppy in #6125
- Remove allocations during bass device sync polling operation by @peppy in #6124
- Reduce allocation overhead for keyboard / binding / button handling by @peppy in #6126
Full Changelog: 2024.110.0...2024.113.0
2024.110.0
What's Changed
- Add setting to control automatic minimising on focus loss in fullscreen mode by @Susko3 in #6094
- add window hide/show methods (preliminary work for boss key) by @adryzz in #6085
- Fix android storage path on .NET 8 by @i3ym in #6100
- Fix dropdown header handling platform actions when not hovered by @frenzibyte in #6096
- Make
Insert
forSlimReadOnlyListWrapper
unsupported by @Terochi in #6103 - Update year references by @bastianpedersen in #6107
- Set process priority of framework window to high when focused by @peppy in #6104
- Use
HashSet
instead ofList
for temporary check in transform handling by @peppy in #6106 - Reduce allocs when setting value on
BindableNumber
with precision by @smoogipoo in #6109 - Remove per-call array allocations from
InputSampler
by @peppy in #6108 - Simplify
SpriteIcon
by @EVAST9919 in #6111 - Remove alloc overhead for
NormalizedValue
by @peppy in #6116 - Fix insane joystick allocations overhead by @peppy in #6115
- Fix frame statistics display GC boxes not correctly being cleaned up by @peppy in #6118
- Expose
RunTestsFromNUnit
aspublic
by @peppy in #6113
New Contributors
- @adryzz made their first contribution in #6085
- @i3ym made their first contribution in #6100
- @Terochi made their first contribution in #6103
- @bastianpedersen made their first contribution in #6107
Full Changelog: 2023.1227.1...2024.110.0
2023.1227.1
What's Changed
- Disable WASAPI initialisation mode for now by @peppy in #6093
- Fix Windows Ink events being handled as touch events by @Susko3 in #5309
Full Changelog: 2023.1227.0...2023.1227.1
2023.1227.0
What's Changed
- Fix audio device names not being populated in time for bass device initialisation by @peppy in #6090
- Bump OpenTabletDriver to 0.6.4.0 by @X9VoiD in #6086
- Rename concept of "global" mixer with "fallback" by @peppy in #6091
- Add basic global statistics for input handler events by @Susko3 in #6087
- Add low latency initialisation support on windows by directly interacting with WASAPI by @peppy in #6088
Full Changelog: 2023.1219.0...2023.1227.0
2023.1219.0
What's Changed
- Fix dropdowns showing popup keyboard on mobile even when search bar is initially hidden by @peppy in #6080
Full Changelog: 2023.1213.0...2023.1219.0
2023.1213.0
Breaking changes
IParseable.Parse()
has received an IFormatProvider
argument
This is provided to better treat input when typed by end users, by allowing the ability to respect their regional number settings.
Existing usages of IParseable.Parse()
should pass CultureInfo.InvariantCulture
to preserve behaviour, including usages of IBindable.Parse()
:
Bindable<int> bindable = new Bindable<int>();
- bindable.Parse(5);
+ bindable.Parse(5, CultureInfo.InvariantCulture);
DrawNode.Draw()
is no longer exposed publicly
Draw()
is now protected
to match the signature of DrawOpaqueInternal()
. DrawNode
s which draw others no need to do so via a separate (provided) method.
- public override void Draw(IRenderer renderer)
+ protected override void Draw(IRenderer renderer)
{
base.Draw(renderer);
- other.Draw(renderer);
+ DrawOther(other, renderer);
}
Dropdown
requires a search bar to be implemented
All Dropdown
s may now be searched, which requires them to implement a search bar component. Sample implementation:
public partial class MyDropdownHeader : DropdownHeader
{
protected override DropdownSearchBar CreateSearchBar() => new MyDropdownSearchBar();
public partial class MyDropdownSearchBar : DropdownSearchBar
{
protected override void PopIn() => this.FadeIn();
protected override void PopOut() => this.FadeOut();
protected override TextBox CreateTextBox() => new MyTextBox
{
PlaceholderText = "type to search"
};
}
}
What's Changed
- Request
READ_EXTERNAL_STORAGE
permission on older android versions by @Susko3 in #6071 - Cleanup
DrawNode
drawing methods by @smoogipoo in #6073 - FFmpeg: Add VP6 and WMV2 video formats by @FreezyLemon in #6074
- Add a session timestamp prefix to log files (and retain 7 days of logs) by @peppy in #6063
- Update FFmpeg binaries by @github-actions in #6076
- Add format provider argument to
IParseable.Parse()
by @Neuheit in #6065 - Add proper handling for
BindableList
collection changes in dropdown by @frenzibyte in #6061 - Add method to convert piecewise linear curves to spline control points by @OliBomby in #6056
- Improve incremental B-spline builder via stochastic optimisation by @OliBomby in #6066
- Implement dropdown searching by @frenzibyte in #6072
New Contributors
Full Changelog: 2023.1201.1...2023.1213.0