@@ -78,7 +78,7 @@ void StoreUtils::ProcessReleaseNotes(std::string releaseNotes) {
78
78
} while (splitPos != std::string::npos);
79
79
}
80
80
81
- void StoreUtils::DrawReleaseNotes (const int &scrollOffset, const std::unique_ptr<StoreEntry> &entry) {
81
+ void StoreUtils::DrawReleaseNotes (const float &scrollOffset, const std::unique_ptr<StoreEntry> &entry) {
82
82
if (entry && StoreUtils::store) {
83
83
Gui::ScreenDraw (Bottom);
84
84
Gui::Draw_Rect (0 , 26 , 320 , 214 , UIThemes->BGColor ());
@@ -106,33 +106,38 @@ void StoreUtils::DrawReleaseNotes(const int &scrollOffset, const std::unique_ptr
106
106
/*
107
107
As the name says: Release notes logic.
108
108
109
- int &scrollOffset: The scroll offset for the Release Notes text.
110
- int &scrollDelta: The scroll delta for the Release Notes text.
109
+ float &scrollOffset: The scroll offset for the Release Notes text.
110
+ float &scrollDelta: The scroll delta for the Release Notes text.
111
111
int &storeMode: The store mode to properly return back.
112
112
*/
113
- void StoreUtils::ReleaseNotesLogic (int &scrollOffset, int &scrollDelta, int &storeMode) {
113
+ void StoreUtils::ReleaseNotesLogic (float &scrollOffset, float &scrollDelta, int &storeMode) {
114
114
int linesPerScreen = ((240 .0f - 25 .0f ) / Gui::GetStringHeight (0 .5f , " " , font));
115
115
scrollOffset += scrollDelta;
116
- if (scrollDelta != 0 ) {
117
- scrollDelta > 0 ? scrollDelta-- : scrollDelta++;
116
+ if (scrollDelta > 0 ) {
117
+ scrollDelta = std::max (scrollDelta - 1 .0f , 0 .0f );
118
+ } else if (scrollDelta < 0 ) {
119
+ scrollDelta = std::min (scrollDelta + 1 .0f , 0 .0f );
118
120
}
119
121
120
122
if ((int )wrappedNotes.size () > linesPerScreen) {
121
123
// D-Pad
122
- if (hHeld & KEY_DDOWN && scrollDelta < 10 ) scrollDelta += 2 ;
123
- if (hHeld & KEY_DUP && scrollDelta > -10 ) scrollDelta -= 2 ;
124
- if (hHeld & KEY_DRIGHT && scrollDelta < 20 ) scrollDelta += 5 ;
125
- if (hHeld & KEY_DLEFT && scrollDelta > -20 ) scrollDelta -= 5 ;
124
+ if (hHeld & KEY_DDOWN && scrollDelta < 10 . 0f ) scrollDelta += 2 . 0f ;
125
+ if (hHeld & KEY_DUP && scrollDelta > -10 . 0f ) scrollDelta -= 2 . 0f ;
126
+ if (hHeld & KEY_DRIGHT && scrollDelta < 20 . 0f ) scrollDelta += 5 . 0f ;
127
+ if (hHeld & KEY_DLEFT && scrollDelta > -20 . 0f ) scrollDelta -= 5 . 0f ;
126
128
127
129
// Circle Pad
128
130
circlePosition circlePad;
129
131
hidCircleRead (std::addressof (circlePad));
130
- if (scrollDelta < 10 && scrollDelta > -10 ) scrollDelta -= circlePad.dy / 60 ;
132
+ float deltaCircle = -circlePad.dy / 60 .0f ;
133
+ if (deltaCircle >= 0 .5f || deltaCircle <= -0 .5f ) {
134
+ if (scrollDelta < 10 .0f && scrollDelta > -10 .0f ) scrollDelta += deltaCircle;
135
+ }
131
136
132
137
// Touch
133
138
if (hDown & KEY_TOUCH && touch.py > 25 ) {
134
139
touches[1 ] = touch;
135
- scrollDelta = 0 ;
140
+ scrollDelta = 0 . 0f ;
136
141
}
137
142
if (hHeld & KEY_TOUCH) {
138
143
if (touch.py > 25 ) {
@@ -148,20 +153,20 @@ void StoreUtils::ReleaseNotesLogic(int &scrollOffset, int &scrollDelta, int &sto
148
153
}
149
154
150
155
/* Ensure it doesn't scroll off screen. */
151
- if (scrollOffset < 0 ) {
152
- scrollOffset = 0 ;
153
- scrollDelta = 0 ;
156
+ if (scrollOffset < 0 . 0f ) {
157
+ scrollOffset = 0 . 0f ;
158
+ scrollDelta = 0 . 0f ;
154
159
}
155
160
int maxScroll = wrappedNotes.size () * Gui::GetStringHeight (0 .5f , " " , font) - (240 .0f - 25 .0f );
156
161
if (scrollOffset > maxScroll && ((int )wrappedNotes.size () > linesPerScreen)) {
157
162
scrollOffset = maxScroll;
158
- scrollDelta = 0 ;
163
+ scrollDelta = 0 . 0f ;
159
164
}
160
165
161
166
if (hDown & KEY_B || (hDown & KEY_TOUCH && touching (touch, back))) {
162
167
if (config->changelog ()) config->changelog (false );
163
- scrollOffset = 0 ;
164
- scrollDelta = 0 ;
168
+ scrollOffset = 0 . 0f ;
169
+ scrollDelta = 0 . 0f ;
165
170
storeMode = 0 ;
166
171
}
167
172
}
0 commit comments