Skip to content

Commit fc9a1c9

Browse files
committed
Release v0.13.0
- The `livesplit-hotkey` crate is now documented. (@CryZe) [#479](#479) - Not every key press emits a scan code on Windows. For those the virtual key code is now translated to a scan code. (@CryZe) [#480](#480) - Time parsing is now a lot more robust, handles more edge cases, and is also a lot more accurate. (@CryZe) [#483](#483) and [#578](#578) - When parsing a GDI based font name, platforms other than Windows now don't attempt to parse "normal" as part of the font name anymore as it is too ambigious. It could either refer to a font weight or stretch. (@kadiwa4) [#487](#487) - The text engine can now be customized. You can either provide your own text engine or use the one provided by `livesplit-core`. The one provided is now behind the `path-based-text-engine` and converts all glyphs to paths that can easily be drawn. (@CryZe) [#495](#495) - The path based text engine now caches the width of digits for tabular numbers, as well as the ellipsis glyph and its width, so that they can be layed out faster. (@kadiwa4) [#490](#490) and [#499](#499) - On Windows GDI is now used to resolve GDI based font names. (@CryZe) [#500](#500) - (Total) Possible Time Save now properly indicates that it's updating frequently. This results in faster rendering times. (@kadiwa4) [#501](#501) - Initial support for auto splitting has landed in `livesplit-core`. Auto splitters are provided as WebAssembly modules. Support can be activated via the `auto-splitting` feature. (@P1n3appl3) [#477](#477) - Auto splitting is also supported via the C API when activating its `auto-splitting` feature. (@DarkRTA) [#503](#503) - A watchdog for the Auto Splitting Runtime was added which unloads scripts that aren't responsive. (@CryZe) [#528](#528) - Splits and layouts can now be parsed and saved on `no_std` platforms. (@CryZe) [#532](#532) - The splits component column labels can now be queried via the C API. (@MichaelJBerk) [#526](#526) - The Software Renderer is now supported on `no_std` platforms. (@CryZe) [#536](#536) - The parsers are now faster because they don't allocate as much memory anymore. (@CryZe) [#546](#546) - The auto splitters have unstable support the `WebAssembly System Interface` via the `unstable-auto-splitting` feature. (@CryZe) [#547](#547) - The Timer component can now use the color of the delta for its background. (@Hurricane996) [#539](#539) - The splits component now takes the font into account when calculating the width of the columns. (@Hurricane996) [#550](#550) - The `Resource Allocator` now decodes the images, allowing the underlying renderer to do the encoding by itself. (@CryZe) [#562](#562) - Cargo's `--crate-type` parameter is now used to build the C API. (@CryZe) [#565](#565) - The columns of the splits component can now show the custom variables. (@CryZe) [#566](#566) - On the web, the `keydown` event may not always pass a `KeyboardEvent` despite the specification saying that this should be the case. This is now properly handled. (@CryZe) [#567](#567) - An integer overflow in the `FuzzyList` used for searching game and category names has been fixed. (@CryZe) [#569](#569) - The way the background is handled in the Detailed Timer component has been fixed. (@CryZe) [#572](#572) - The times are now formatted as strings without going through floating point numbers which increases both the correctness and the performance. (@CryZe) [#576](#576) - Instead of using `core::fmt` formatting machinery to format the times as strings, we now use a custom implementation that's much faster. (@CryZe) [#577](#577) and [#580](#580) - Holding down a hotkey on Windows now doesn't cause it to be triggered over and over again. Other platforms already behaved this way. (@CryZe) [#584](#584) - The `base64` crate is now replaced with `base64-simd` which uses SIMD to speed up the decoding of the images. (@CryZe) [#585](#585) - Splits from `SpeedRunIGT`, which is a Minecraft speedruning mod, can now be parsed. (@CryZe) [#591](#591) - It turns out using `evdev` for the hotkeys on Linux requires the user to be in the `input` group, which is not always the case. Therefore we now fall back to `X11` if `evdev` is not usable. (@CryZe) [#592](#592) - When an auto splitter wants to attach to a Process by name, the start time and process id are now used to prioritize duplicate processes. (@Eein) [#589](#589) - It is now possible to resolve the key codes to the particular name of the key based on the current keyboard layout on Linux and the web. This was already the case on Windows and macOS. (@CryZe) [#594](#594) and [#595](#595) - It is now possible to trust the user of the C API to always pass valid UTF-8 strings to the C API via the optional `assume-str-parameters-are-utf8` feature. This is also always the case when using WebAssembly on the web. This improves the performance because no validation of the strings is necessary. (@CryZe) [#597](#597) - There is now a new `max-opt` cargo profile that can be used to maximally optimize the resulting executable. The release profile is now using its default configuration again. (@CryZe) [#598](#598) - When encountering images `livesplit-core` checks their dimensions to potentially automatically shrink them if they are larger than necessary. It turns out that checking the dimensions of PNG images was a lot less efficient than it could have been. This even improves parsing speed of entire splits files by up to 30%. (@CryZe) [#600](#600) - The documentation now uses links to types mentioned. (@Eein) [#596](#596) - Auto splitters can now query size of the modules of a process. (@CryZe) [#602](#602) - The log messages emitted by auto splitters can now be consumed directly instead of always being emitted via the `log` crate. (@CryZe) [#603](#603) - The auto splitters can provide settings that can be configured. For now the auto splitters need to be reloaded when the settings change. (@CryZe) [#606](#606) - The file path used to be tracked in the `Run`, but no frontend even used this. So it has been removed. (@CryZe) [#616](#616) - The documentation states that the title component's lines store the unabbreviated line as their last element. This was not actually the case and has been fixed. (@DarkRTA) [#615](#615)
1 parent b1998d5 commit fc9a1c9

File tree

7 files changed

+165
-11
lines changed

7 files changed

+165
-11
lines changed

.github/workflows/build.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ jobs:
259259
cross: skip
260260
tests: skip
261261
dylib: skip
262+
release: skip
262263
install_target: true
263264

264265
- label: WebAssembly Web
@@ -619,7 +620,7 @@ jobs:
619620

620621
steps:
621622
- name: Checkout Commit
622-
uses: actions/checkout@v2
623+
uses: actions/checkout@v3
623624

624625
- name: Install Rust
625626
uses: hecrj/setup-rust-action@v1
@@ -683,7 +684,7 @@ jobs:
683684
runs-on: ubuntu-latest
684685
steps:
685686
- name: Checkout Commit
686-
uses: actions/checkout@v2
687+
uses: actions/checkout@v3
687688

688689
- name: Install Rust
689690
uses: hecrj/setup-rust-action@v1
@@ -699,7 +700,7 @@ jobs:
699700
runs-on: ubuntu-latest
700701
steps:
701702
- name: Checkout Commit
702-
uses: actions/checkout@v2
703+
uses: actions/checkout@v3
703704

704705
- name: Install Rust
705706
uses: hecrj/setup-rust-action@v1
@@ -714,7 +715,7 @@ jobs:
714715
runs-on: ubuntu-latest
715716
steps:
716717
- name: Checkout Commit
717-
uses: actions/checkout@v2
718+
uses: actions/checkout@v3
718719

719720
- name: Install Rust
720721
uses: hecrj/setup-rust-action@v1
@@ -731,7 +732,7 @@ jobs:
731732
CRITERION_TOKEN: ${{ secrets.CRITERION_TOKEN }}
732733
steps:
733734
- name: Checkout
734-
uses: actions/checkout@v2
735+
uses: actions/checkout@v3
735736

736737
- name: Install Rust
737738
uses: hecrj/setup-rust-action@v1

CHANGELOG.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,136 @@
11
# Changelog
22

3+
## [0.13.0] - 2022-12-29
4+
5+
- The `livesplit-hotkey` crate is now documented. (@CryZe)
6+
[#479](https://github.com/LiveSplit/livesplit-core/pull/479)
7+
- Not every key press emits a scan code on Windows. For those the virtual key
8+
code is now translated to a scan code. (@CryZe)
9+
[#480](https://github.com/LiveSplit/livesplit-core/pull/480)
10+
- Time parsing is now a lot more robust, handles more edge cases, and is also a
11+
lot more accurate. (@CryZe)
12+
[#483](https://github.com/LiveSplit/livesplit-core/pull/483) and
13+
[#578](https://github.com/LiveSplit/livesplit-core/pull/578)
14+
- When parsing a GDI based font name, platforms other than Windows now don't
15+
attempt to parse "normal" as part of the font name anymore as it is too
16+
ambigious. It could either refer to a font weight or stretch. (@kadiwa4)
17+
[#487](https://github.com/LiveSplit/livesplit-core/pull/487)
18+
- The text engine can now be customized. You can either provide your own text
19+
engine or use the one provided by `livesplit-core`. The one provided is now
20+
behind the `path-based-text-engine` and converts all glyphs to paths that can
21+
easily be drawn. (@CryZe)
22+
[#495](https://github.com/LiveSplit/livesplit-core/pull/495)
23+
- The path based text engine now caches the width of digits for tabular numbers,
24+
as well as the ellipsis glyph and its width, so that they can be layed out
25+
faster. (@kadiwa4)
26+
[#490](https://github.com/LiveSplit/livesplit-core/pull/490) and
27+
[#499](https://github.com/LiveSplit/livesplit-core/pull/499)
28+
- On Windows GDI is now used to resolve GDI based font names. (@CryZe)
29+
[#500](https://github.com/LiveSplit/livesplit-core/pull/500)
30+
- (Total) Possible Time Save now properly indicates that it's updating
31+
frequently. This results in faster rendering times. (@kadiwa4)
32+
[#501](https://github.com/LiveSplit/livesplit-core/pull/501)
33+
- Initial support for auto splitting has landed in `livesplit-core`. Auto
34+
splitters are provided as WebAssembly modules. Support can be activated via
35+
the `auto-splitting` feature. (@P1n3appl3)
36+
[#477](https://github.com/LiveSplit/livesplit-core/pull/477)
37+
- Auto splitting is also supported via the C API when activating its
38+
`auto-splitting` feature. (@DarkRTA)
39+
[#503](https://github.com/LiveSplit/livesplit-core/pull/503)
40+
- A watchdog for the Auto Splitting Runtime was added which unloads scripts that
41+
aren't responsive. (@CryZe)
42+
[#528](https://github.com/LiveSplit/livesplit-core/pull/528)
43+
- Splits and layouts can now be parsed and saved on `no_std` platforms. (@CryZe)
44+
[#532](https://github.com/LiveSplit/livesplit-core/pull/532)
45+
- The splits component column labels can now be queried via the C API.
46+
(@MichaelJBerk) [#526](https://github.com/LiveSplit/livesplit-core/pull/526)
47+
- The Software Renderer is now supported on `no_std` platforms. (@CryZe)
48+
[#536](https://github.com/LiveSplit/livesplit-core/pull/536)
49+
- The parsers are now faster because they don't allocate as much memory anymore.
50+
(@CryZe) [#546](https://github.com/LiveSplit/livesplit-core/pull/546)
51+
- The auto splitters have unstable support the `WebAssembly System Interface`
52+
via the `unstable-auto-splitting` feature. (@CryZe)
53+
[#547](https://github.com/LiveSplit/livesplit-core/pull/547)
54+
- The Timer component can now use the color of the delta for its background.
55+
(@Hurricane996) [#539](https://github.com/LiveSplit/livesplit-core/pull/539)
56+
- The splits component now takes the font into account when calculating the
57+
width of the columns. (@Hurricane996)
58+
[#550](https://github.com/LiveSplit/livesplit-core/pull/550)
59+
- The `Resource Allocator` now decodes the images, allowing the underlying
60+
renderer to do the encoding by itself. (@CryZe)
61+
[#562](https://github.com/LiveSplit/livesplit-core/pull/562)
62+
- Cargo's `--crate-type` parameter is now used to build the C API. (@CryZe)
63+
[#565](https://github.com/LiveSplit/livesplit-core/pull/565)
64+
- The columns of the splits component can now show the custom variables.
65+
(@CryZe) [#566](https://github.com/LiveSplit/livesplit-core/pull/566)
66+
- On the web, the `keydown` event may not always pass a `KeyboardEvent` despite
67+
the specification saying that this should be the case. This is now properly
68+
handled. (@CryZe) [#567](https://github.com/LiveSplit/livesplit-core/pull/567)
69+
- An integer overflow in the `FuzzyList` used for searching game and category
70+
names has been fixed. (@CryZe)
71+
[#569](https://github.com/LiveSplit/livesplit-core/pull/569)
72+
- The way the background is handled in the Detailed Timer component has been
73+
fixed. (@CryZe) [#572](https://github.com/LiveSplit/livesplit-core/pull/572)
74+
- The times are now formatted as strings without going through floating point
75+
numbers which increases both the correctness and the performance. (@CryZe)
76+
[#576](https://github.com/LiveSplit/livesplit-core/pull/576)
77+
- Instead of using `core::fmt` formatting machinery to format the times as
78+
strings, we now use a custom implementation that's much faster. (@CryZe)
79+
[#577](https://github.com/LiveSplit/livesplit-core/pull/577) and
80+
[#580](https://github.com/LiveSplit/livesplit-core/pull/580)
81+
- Holding down a hotkey on Windows now doesn't cause it to be triggered over and
82+
over again. Other platforms already behaved this way. (@CryZe)
83+
[#584](https://github.com/LiveSplit/livesplit-core/pull/584)
84+
- The `base64` crate is now replaced with `base64-simd` which uses SIMD to speed
85+
up the decoding of the images. (@CryZe)
86+
[#585](https://github.com/LiveSplit/livesplit-core/pull/585)
87+
- Splits from `SpeedRunIGT`, which is a Minecraft speedruning mod, can now be
88+
parsed. (@CryZe) [#591](https://github.com/LiveSplit/livesplit-core/pull/591)
89+
- It turns out using `evdev` for the hotkeys on Linux requires the user to be in
90+
the `input` group, which is not always the case. Therefore we now fall back to
91+
`X11` if `evdev` is not usable. (@CryZe)
92+
[#592](https://github.com/LiveSplit/livesplit-core/pull/592)
93+
- When an auto splitter wants to attach to a Process by name, the start time and
94+
process id are now used to prioritize duplicate processes. (@Eein)
95+
[#589](https://github.com/LiveSplit/livesplit-core/pull/589)
96+
- It is now possible to resolve the key codes to the particular name of the key
97+
based on the current keyboard layout on Linux and the web. This was already
98+
the case on Windows and macOS. (@CryZe)
99+
[#594](https://github.com/LiveSplit/livesplit-core/pull/594) and
100+
[#595](https://github.com/LiveSplit/livesplit-core/pull/595)
101+
- It is now possible to trust the user of the C API to always pass valid UTF-8
102+
strings to the C API via the optional `assume-str-parameters-are-utf8`
103+
feature. This is also always the case when using WebAssembly on the web. This
104+
improves the performance because no validation of the strings is necessary.
105+
(@CryZe) [#597](https://github.com/LiveSplit/livesplit-core/pull/597)
106+
- There is now a new `max-opt` cargo profile that can be used to maximally
107+
optimize the resulting executable. The release profile is now using its
108+
default configuration again. (@CryZe)
109+
[#598](https://github.com/LiveSplit/livesplit-core/pull/598)
110+
- When encountering images `livesplit-core` checks their dimensions to
111+
potentially automatically shrink them if they are larger than necessary. It
112+
turns out that checking the dimensions of PNG images was a lot less efficient
113+
than it could have been. This even improves parsing speed of entire splits
114+
files by up to 30%. (@CryZe)
115+
[#600](https://github.com/LiveSplit/livesplit-core/pull/600)
116+
- The documentation now uses links to types mentioned. (@Eein)
117+
[#596](https://github.com/LiveSplit/livesplit-core/pull/596)
118+
- Auto splitters can now query size of the modules of a process. (@CryZe)
119+
[#602](https://github.com/LiveSplit/livesplit-core/pull/602)
120+
- The log messages emitted by auto splitters can now be consumed directly
121+
instead of always being emitted via the `log` crate. (@CryZe)
122+
[#603](https://github.com/LiveSplit/livesplit-core/pull/603)
123+
- The auto splitters can provide settings that can be configured. For now the
124+
auto splitters need to be reloaded when the settings change. (@CryZe)
125+
[#606](https://github.com/LiveSplit/livesplit-core/pull/606)
126+
- The file path used to be tracked in the `Run`, but no frontend even used this.
127+
So it has been removed. (@CryZe)
128+
[#616](https://github.com/LiveSplit/livesplit-core/pull/616)
129+
- The documentation states that the title component's lines store the
130+
unabbreviated line as their last element. This was not actually the case and
131+
has been fixed. (@DarkRTA)
132+
[#615](https://github.com/LiveSplit/livesplit-core/pull/615)
133+
3134
## [0.12.0] - 2021-11-14
4135

5136
- Runs now support custom variables that are key value pairs that either the
@@ -121,5 +252,6 @@ scenario.
121252
- Hotkeys can now be edited.
122253
[#152](https://github.com/LiveSplit/livesplit-core/pull/152)
123254

255+
[0.13.0]: https://github.com/linebender/druid/compare/v0.12.0...v0.13.0
124256
[0.12.0]: https://github.com/linebender/druid/compare/v0.11.0...v0.12.0
125257
[0.11.0]: https://github.com/linebender/druid/compare/v0.10.0...v0.11.0

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "livesplit-core"
3-
version = "0.12.0"
3+
version = "0.13.0"
44
authors = ["Christopher Serr <[email protected]>"]
55
documentation = "https://docs.rs/livesplit-core/"
66
repository = "https://github.com/LiveSplit/livesplit-core"
@@ -41,8 +41,8 @@ itoa = { version = "1.0.3", default-features = false }
4141
time = { version = "0.3.3", default-features = false }
4242
hashbrown = "0.13.1"
4343
libm = "0.2.1"
44-
livesplit-hotkey = { path = "crates/livesplit-hotkey", version = "0.6.0", default-features = false }
45-
livesplit-title-abbreviations = { path = "crates/livesplit-title-abbreviations", version = "0.2.0" }
44+
livesplit-hotkey = { path = "crates/livesplit-hotkey", version = "0.7.0", default-features = false }
45+
livesplit-title-abbreviations = { path = "crates/livesplit-title-abbreviations", version = "0.3.0" }
4646
memchr = { version = "2.3.4", default-features = false }
4747
simdutf8 = { version = "0.1.4", default-features = false, features = ["aarch64_neon"] }
4848
serde = { version = "1.0.98", default-features = false, features = [
@@ -78,7 +78,7 @@ tiny-skia = { version = "0.8.2", default-features = false, features = [
7878
tiny-skia-path = { version = "0.8.2", default-features = false, optional = true }
7979

8080
# Networking
81-
splits-io-api = { version = "0.2.0", optional = true }
81+
splits-io-api = { version = "0.3.0", optional = true }
8282

8383
# Auto Splitting
8484
livesplit-auto-splitting = { path = "crates/livesplit-auto-splitting", version = "0.1.0", optional = true }

crates/livesplit-auto-splitting/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
name = "livesplit-auto-splitting"
33
version = "0.1.0"
44
authors = ["Christopher Serr <[email protected]>"]
5+
documentation = "https://docs.rs/livesplit-auto-splitting/"
6+
repository = "https://github.com/LiveSplit/livesplit-core/tree/master/crates/livesplit-auto-splitting"
7+
license = "Apache-2.0/MIT"
8+
description = "livesplit-auto-splitting is a library that provides a runtime for running auto splitters that can control a speedrun timer. These auto splitters are provided as WebAssembly modules."
9+
keywords = ["speedrun", "timer", "livesplit", "auto-splitting"]
510
edition = "2021"
611

712
[dependencies]

crates/livesplit-auto-splitting/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,28 @@ extern "C" {
100100
name_ptr: *const u8,
101101
name_len: usize,
102102
) -> Option<NonZeroAddress>;
103+
/// Gets the size of a module in a process.
104+
pub fn process_get_module_size(
105+
process: ProcessId,
106+
name_ptr: *const u8,
107+
name_len: usize,
108+
) -> Option<NonZeroU64>;
103109

104110
/// Sets the tick rate of the runtime. This influences the amount of
105111
/// times the `update` function is called per second.
106112
pub fn runtime_set_tick_rate(ticks_per_second: f64);
107113
/// Prints a log message for debugging purposes.
108114
pub fn runtime_print_message(text_ptr: *const u8, text_len: usize);
115+
116+
/// Adds a new setting that the user can modify. This will return either
117+
/// the specified default value or the value that the user has set.
118+
pub fn user_settings_add_bool(
119+
key_ptr: *const u8,
120+
key_len: usize,
121+
description_ptr: *const u8,
122+
description_len: usize,
123+
default_value: bool,
124+
) -> bool;
109125
}
110126
```
111127

crates/livesplit-hotkey/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "livesplit-hotkey"
3-
version = "0.6.0"
3+
version = "0.7.0"
44
authors = ["Christopher Serr <[email protected]>"]
55
documentation = "https://docs.rs/livesplit-hotkey/"
66
repository = "https://github.com/LiveSplit/livesplit-core/tree/master/crates/livesplit-hotkey"

crates/livesplit-title-abbreviations/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "livesplit-title-abbreviations"
3-
version = "0.2.0"
3+
version = "0.3.0"
44
authors = ["Christopher Serr <[email protected]>"]
55
documentation = "https://docs.rs/livesplit-title-abbreviations/"
66
repository = "https://github.com/LiveSplit/livesplit-core/tree/master/crates/livesplit-title-abbreviations"

0 commit comments

Comments
 (0)