Skip to content

Commit ad804f1

Browse files
committed
Add scroll sensitivity setting
1 parent 44fa9c8 commit ad804f1

File tree

15 files changed

+122
-29
lines changed

15 files changed

+122
-29
lines changed

app/lib/api/settings.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'dart:ui';
22

33
import 'package:flutter/material.dart';
44

5-
import '../pages/settings/page.dart';
5+
import '../pages/settings/home.dart';
66

77
Future<void> openSettings(BuildContext context) => showGeneralDialog<void>(
88
context: context,

app/lib/bloc/settings.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class SetonixSettings with SetonixSettingsMappable implements LeapSettings {
2525
final double zoom;
2626
final bool highContrast;
2727
final List<String> swamps;
28+
final double scrollSensitivity;
2829

2930
const SetonixSettings({
3031
this.localeTag = '',
@@ -40,6 +41,7 @@ class SetonixSettings with SetonixSettingsMappable implements LeapSettings {
4041
this.highContrast = false,
4142
this.zoom = 1,
4243
this.swamps = const [],
44+
this.scrollSensitivity = 1,
4345
});
4446

4547
Locale? get locale {
@@ -72,6 +74,7 @@ class SetonixSettings with SetonixSettingsMappable implements LeapSettings {
7274
highContrast: prefs.getBool('highContrast') ?? false,
7375
zoom: prefs.getDouble('zoom') ?? 1,
7476
swamps: prefs.getStringList('swamps') ?? [],
77+
scrollSensitivity: prefs.getDouble('scrollSensitivity') ?? 1,
7578
);
7679

7780
Future<void> save() async {
@@ -96,6 +99,7 @@ class SetonixSettings with SetonixSettingsMappable implements LeapSettings {
9699
await prefs.setBool('highContrast', highContrast);
97100
await prefs.setDouble('zoom', zoom);
98101
await prefs.setStringList('swamps', swamps);
102+
await prefs.setDouble('scrollSensitivity', scrollSensitivity);
99103
}
100104
}
101105

@@ -204,4 +208,9 @@ class SettingsCubit extends Cubit<SetonixSettings>
204208
emit(state.copyWith(swamps: [swamp]));
205209
return save();
206210
}
211+
212+
Future<void> changeScrollSensitivity(double value) {
213+
emit(state.copyWith(scrollSensitivity: value));
214+
return save();
215+
}
207216
}

app/lib/bloc/settings.mapper.dart

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ class SetonixSettingsMapper extends ClassMapperBase<SetonixSettings> {
6262
static List<String> _$swamps(SetonixSettings v) => v.swamps;
6363
static const Field<SetonixSettings, List<String>> _f$swamps =
6464
Field('swamps', _$swamps, opt: true, def: const []);
65+
static double _$scrollSensitivity(SetonixSettings v) => v.scrollSensitivity;
66+
static const Field<SetonixSettings, double> _f$scrollSensitivity =
67+
Field('scrollSensitivity', _$scrollSensitivity, opt: true, def: 1);
6568

6669
@override
6770
final MappableFields<SetonixSettings> fields = const {
@@ -78,6 +81,7 @@ class SetonixSettingsMapper extends ClassMapperBase<SetonixSettings> {
7881
#highContrast: _f$highContrast,
7982
#zoom: _f$zoom,
8083
#swamps: _f$swamps,
84+
#scrollSensitivity: _f$scrollSensitivity,
8185
};
8286

8387
static SetonixSettings _instantiate(DecodingData data) {
@@ -94,7 +98,8 @@ class SetonixSettingsMapper extends ClassMapperBase<SetonixSettings> {
9498
servers: data.dec(_f$servers),
9599
highContrast: data.dec(_f$highContrast),
96100
zoom: data.dec(_f$zoom),
97-
swamps: data.dec(_f$swamps));
101+
swamps: data.dec(_f$swamps),
102+
scrollSensitivity: data.dec(_f$scrollSensitivity));
98103
}
99104

100105
@override
@@ -168,7 +173,8 @@ abstract class SetonixSettingsCopyWith<$R, $In extends SetonixSettings, $Out>
168173
List<ListGameServer>? servers,
169174
bool? highContrast,
170175
double? zoom,
171-
List<String>? swamps});
176+
List<String>? swamps,
177+
double? scrollSensitivity});
172178
SetonixSettingsCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
173179
Then<$Out2, $R2> t);
174180
}
@@ -207,7 +213,8 @@ class _SetonixSettingsCopyWithImpl<$R, $Out>
207213
List<ListGameServer>? servers,
208214
bool? highContrast,
209215
double? zoom,
210-
List<String>? swamps}) =>
216+
List<String>? swamps,
217+
double? scrollSensitivity}) =>
211218
$apply(FieldCopyWithData({
212219
if (localeTag != null) #localeTag: localeTag,
213220
if (theme != null) #theme: theme,
@@ -221,7 +228,8 @@ class _SetonixSettingsCopyWithImpl<$R, $Out>
221228
if (servers != null) #servers: servers,
222229
if (highContrast != null) #highContrast: highContrast,
223230
if (zoom != null) #zoom: zoom,
224-
if (swamps != null) #swamps: swamps
231+
if (swamps != null) #swamps: swamps,
232+
if (scrollSensitivity != null) #scrollSensitivity: scrollSensitivity
225233
}));
226234
@override
227235
SetonixSettings $make(CopyWithData data) => SetonixSettings(
@@ -238,7 +246,9 @@ class _SetonixSettingsCopyWithImpl<$R, $Out>
238246
servers: data.get(#servers, or: $value.servers),
239247
highContrast: data.get(#highContrast, or: $value.highContrast),
240248
zoom: data.get(#zoom, or: $value.zoom),
241-
swamps: data.get(#swamps, or: $value.swamps));
249+
swamps: data.get(#swamps, or: $value.swamps),
250+
scrollSensitivity:
251+
data.get(#scrollSensitivity, or: $value.scrollSensitivity));
242252

243253
@override
244254
SetonixSettingsCopyWith<$R2, SetonixSettings, $Out2> $chain<$R2, $Out2>(

app/lib/board/cell.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ class GameCell extends PositionComponent
396396
if (game.isShifting) {
397397
delta = Vector2(delta.y, delta.x);
398398
}
399-
game.camera.moveBy(delta);
399+
game.camera.moveBy(delta / game.settingsCubit.state.scrollSensitivity);
400400
return false;
401401
}
402402
}

app/lib/board/hand/view.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart'
99
import 'package:flutter/painting.dart';
1010
import 'package:setonix/bloc/world/bloc.dart';
1111
import 'package:setonix/bloc/world/state.dart';
12+
import 'package:setonix/board/game.dart';
1213
import 'package:setonix/board/hand/board.dart';
1314
import 'package:setonix/board/hand/deck.dart';
1415
import 'package:setonix/board/hand/figure.dart';
@@ -46,7 +47,8 @@ class GameHand extends CustomPainterComponent
4647
TapCallbacks,
4748
ScrollCallbacks,
4849
CollisionCallbacks,
49-
HandItemDropZone {
50+
HandItemDropZone,
51+
HasGameRef<BoardGame> {
5052
final _scrollView =
5153
ScrollViewComponent(direction: Axis.horizontal, spacing: 16);
5254

@@ -220,7 +222,7 @@ class GameHand extends CustomPainterComponent
220222
delta = info.scrollDelta.global.y;
221223
}
222224
delta /= 4;
223-
scroll(-delta);
225+
scroll(-delta / game.settingsCubit.state.scrollSensitivity);
224226
return true;
225227
}
226228

app/lib/helpers/scroll.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:math';
33
import 'package:flame/components.dart';
44
import 'package:flame/events.dart';
55
import 'package:flutter/widgets.dart';
6+
import 'package:setonix/board/game.dart';
67

78
mixin ScrollCallbacks on Component {
89
bool onScroll(PointerScrollInfo info) => false;
@@ -27,7 +28,8 @@ class _ScrollViewport extends PositionComponent {
2728
}
2829
}
2930

30-
class ScrollViewComponent extends PositionComponent with ScrollCallbacks {
31+
class ScrollViewComponent extends PositionComponent
32+
with ScrollCallbacks, HasGameRef<BoardGame> {
3133
final Axis direction;
3234
final double spacing;
3335
final _ScrollViewport _view = _ScrollViewport();
@@ -88,7 +90,7 @@ class ScrollViewComponent extends PositionComponent with ScrollCallbacks {
8890
: info.scrollDelta.global.x;
8991
}
9092
final scrollDelta = delta / 4;
91-
scroll(-scrollDelta);
93+
scroll(-scrollDelta / game.settingsCubit.state.scrollSensitivity);
9294
return true;
9395
}
9496
}

app/lib/l10n/app_en.arb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,5 +240,7 @@
240240
"example": "1"
241241
}
242242
}
243-
}
243+
},
244+
"inputs": "Inputs",
245+
"scroll": "Scroll"
244246
}

app/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import 'package:window_manager/window_manager.dart';
2222
import 'package:setonix_plugin/setonix_plugin.dart';
2323

2424
import 'bloc/settings.dart';
25-
import 'pages/settings/page.dart';
25+
import 'pages/settings/home.dart';
2626

2727
import 'setup.dart'
2828
if (dart.library.html) 'setup_web.dart'

app/lib/pages/settings/data.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:lw_sysapi/lw_sysapi.dart';
88
import 'package:material_leap/material_leap.dart';
99
import 'package:phosphor_flutter/phosphor_flutter.dart';
1010
import 'package:setonix/services/file_system.dart';
11+
import 'package:setonix/theme.dart';
1112

1213
import '../../bloc/settings.dart';
1314

@@ -39,9 +40,9 @@ class DataSettingsPage extends StatelessWidget {
3940
return ListView(children: [
4041
if (!kIsWeb)
4142
Card(
42-
margin: const EdgeInsets.all(8),
43+
margin: settingsCardMargin,
4344
child: Padding(
44-
padding: const EdgeInsets.all(32),
45+
padding: settingsCardPadding,
4546
child: Column(
4647
crossAxisAlignment: CrossAxisAlignment.stretch,
4748
children: [

app/lib/pages/settings/general.dart

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:package_info_plus/package_info_plus.dart';
88
import 'package:phosphor_flutter/phosphor_flutter.dart';
99
import 'package:setonix/src/generated/i18n/app_localizations.dart';
1010
import 'package:setonix/bloc/settings.dart';
11+
import 'package:setonix/theme.dart';
1112
import 'package:url_launcher/url_launcher.dart';
1213
import 'package:http/http.dart' as http;
1314

@@ -64,15 +65,18 @@ class _GeneralSettingsPageState extends State<GeneralSettingsPage> {
6465
final currentVersion = snapshot.data?.version ?? '?';
6566
return ListView(children: [
6667
Card(
67-
margin: const EdgeInsets.all(8),
68+
margin: settingsCardMargin,
6869
child: Padding(
69-
padding: const EdgeInsets.all(32),
70+
padding: settingsCardPadding,
7071
child: Column(
7172
crossAxisAlignment: CrossAxisAlignment.stretch,
7273
children: [
73-
Text(
74-
AppLocalizations.of(context).update,
75-
style: Theme.of(context).textTheme.headlineSmall,
74+
Padding(
75+
padding: settingsCardTitlePadding,
76+
child: Text(
77+
AppLocalizations.of(context).update,
78+
style: Theme.of(context).textTheme.headlineSmall,
79+
),
7680
),
7781
const SizedBox(height: 16),
7882
ListTile(
@@ -174,9 +178,9 @@ class _GeneralSettingsPageState extends State<GeneralSettingsPage> {
174178
),
175179
),
176180
Card(
177-
margin: const EdgeInsets.all(8),
181+
margin: settingsCardMargin,
178182
child: Padding(
179-
padding: const EdgeInsets.all(32),
183+
padding: settingsCardPadding,
180184
child: Column(
181185
crossAxisAlignment: CrossAxisAlignment.stretch,
182186
children: [
@@ -229,9 +233,9 @@ class _GeneralSettingsPageState extends State<GeneralSettingsPage> {
229233
),
230234
),
231235
Card(
232-
margin: const EdgeInsets.all(8),
236+
margin: settingsCardMargin,
233237
child: Padding(
234-
padding: const EdgeInsets.all(32),
238+
padding: settingsCardPadding,
235239
child: Column(
236240
crossAxisAlignment: CrossAxisAlignment.stretch,
237241
children: [

0 commit comments

Comments
 (0)