Skip to content

Commit

Permalink
Fix drag-and-drop (bluecherrydvr#117)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdlukaa authored Jul 8, 2023
2 parents 5d5a524 + 58366dc commit eb546e7
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 29 deletions.
51 changes: 35 additions & 16 deletions lib/widgets/hover_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ class HoverButton extends StatefulWidget {
this.focusEnabled = true,
this.forceEnabled = false,
this.hitTestBehavior = HitTestBehavior.opaque,
this.listenTo = const {
ButtonStates.pressing,
ButtonStates.hovering,
ButtonStates.focused,
ButtonStates.disabled,
},
});

/// {@template fluent_ui.controls.inputs.HoverButton.mouseCursor}
Expand Down Expand Up @@ -138,6 +144,9 @@ class HoverButton extends StatefulWidget {
/// This defaults to [HitTestBehavior.opaque]
final HitTestBehavior hitTestBehavior;

/// The gestures that this widget will listen to.
final Set<ButtonStates> listenTo;

@override
State<HoverButton> createState() => HoverButtonState();

Expand Down Expand Up @@ -237,6 +246,10 @@ class HoverButtonState extends State<HoverButton> {
};
}

bool listenTo(ButtonStates state) {
return widget.listenTo.contains(state);
}

/// Used in INteractiveViewer to block the first gesture recognition
bool hasInteractionStarted = false;

Expand All @@ -245,22 +258,28 @@ class HoverButtonState extends State<HoverButton> {
Widget w = GestureDetector(
behavior: widget.hitTestBehavior,
onTap: enabled ? widget.onPressed : null,
onTapDown: (_) {
if (!enabled) return;
if (mounted) setState(() => _pressing = true);
widget.onTapDown?.call();
},
onTapUp: (_) async {
if (!enabled) return;
widget.onTapUp?.call();
await Future.delayed(const Duration(milliseconds: 100));
if (mounted) setState(() => _pressing = false);
},
onTapCancel: () {
if (!enabled) return;
widget.onTapCancel?.call();
if (mounted) setState(() => _pressing = false);
},
onTapDown: !listenTo(ButtonStates.pressing)
? null
: (_) {
if (!enabled) return;
if (mounted) setState(() => _pressing = true);
widget.onTapDown?.call();
},
onTapUp: !listenTo(ButtonStates.pressing)
? null
: (_) async {
if (!enabled) return;
widget.onTapUp?.call();
await Future.delayed(const Duration(milliseconds: 100));
if (mounted) setState(() => _pressing = false);
},
onTapCancel: !listenTo(ButtonStates.pressing)
? null
: () {
if (!enabled) return;
widget.onTapCancel?.call();
if (mounted) setState(() => _pressing = false);
},
onLongPress: enabled ? widget.onLongPress : null,
onLongPressStart: widget.onLongPressStart != null
? (_) {
Expand Down
2 changes: 2 additions & 0 deletions lib/widgets/ptz.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class _PTZControllerState extends State<PTZController> {
if (!widget.enabled) {
return HoverButton(
forceEnabled: true,
hitTestBehavior: HitTestBehavior.translucent,
listenTo: const {ButtonStates.hovering},
builder: (context, _) => widget.builder(context, commands),
);
}
Expand Down
34 changes: 21 additions & 13 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ packages:
dependency: transitive
description:
name: collection
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev"
source: hosted
version: "1.17.1"
version: "1.17.2"
console:
dependency: transitive
description:
Expand Down Expand Up @@ -346,10 +346,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev"
source: hosted
version: "0.18.0"
version: "0.18.1"
js:
dependency: transitive
description:
Expand Down Expand Up @@ -378,18 +378,18 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.15"
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.5.0"
media_kit:
dependency: "direct overridden"
description:
Expand Down Expand Up @@ -679,10 +679,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -727,10 +727,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
version: "0.6.0"
typed_data:
dependency: transitive
description:
Expand Down Expand Up @@ -855,6 +855,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
win32:
dependency: transitive
description:
Expand Down Expand Up @@ -904,5 +912,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.0.0-0 <4.0.0"
dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=3.7.0"

0 comments on commit eb546e7

Please sign in to comment.