019f95be8150546170a0a1f87581a024558bcd9d
- Author
- outfoxxed <outfoxxed@outfoxxed.me>
- Committer
- outfoxxed <outfoxxed@outfoxxed.me>
- Date
Message
Fix `updateAnimations` warp init logic
Diff
1diff --git a/src/TabGroup.cpp b/src/TabGroup.cpp
2index 1ba86295b4439e381a83b24d258a36193f73d5f1..7ad8334aeb95499b0cd7d95b8eba8dd1267aff1c 100644
3--- a/src/TabGroup.cpp
4+++ b/src/TabGroup.cpp
5@@ -110,22 +110,31 @@ void Hy3TabBar::updateAnimations(bool warp) {
6
7 auto entry = this->entries.begin();
8 while (entry != this->entries.end()) {
9- if (warp && entry->width.goalf() == 0.0) {
10- this->entries.erase(entry++);
11- continue;
12- }
13+ if (warp) {
14+ if (entry->width.goalf() == 0.0) {
15+ this->entries.erase(entry++);
16+ continue;
17+ }
18+
19+ entry->offset.setValueAndWarp(offset);
20+ entry->width.setValueAndWarp(entry_width);
21+ } else {
22+ auto warp_init = entry->offset.goalf() == -1.0;
23
24- auto warp_init = entry->offset.goalf() == -1.0;
25- if (entry->offset.goalf() != offset) entry->offset = offset;
26+ if (warp_init) {
27+ float start_offset = offset;
28+ if (entry == std::prev(this->entries.end())) start_offset += entry_width;
29+ else if (entry != this->entries.begin()) start_offset += (entry_width * 0.5);
30
31- if (warp_init) {
32- entry->offset.warp();
33- entry->width.setValueAndWarp(0.0);
34+ entry->offset.setValueAndWarp(start_offset);
35+ entry->width.setValueAndWarp(0.0);
36+ }
37+
38+ if (entry->offset.goalf() != offset) entry->offset = offset;
39+ if (entry->width.goalf() != entry_width) entry->width = entry_width;
40 }
41
42- if (entry->width.goalf() != entry_width) entry->width = entry_width;
43 offset += entry_width;
44-
45 entry = std::next(entry);
46 }
47 }