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 }