// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; export 'dart:ui' show FlutterView; /// The device specific gesture settings scaled into logical pixels. /// /// This configuration can be retrieved from the window, or more commonly from a /// [MediaQuery] widget. /// /// See also: /// /// * [ui.GestureSettings], the configuration that this is derived from. @immutable class DeviceGestureSettings { /// Create a new [DeviceGestureSettings] with configured settings in logical /// pixels. const DeviceGestureSettings({ this.touchSlop, }); /// Create a new [DeviceGestureSettings] from the provided [view]. factory DeviceGestureSettings.fromView(ui.FlutterView view) { final double? physicalTouchSlop = view.gestureSettings.physicalTouchSlop; return DeviceGestureSettings( touchSlop: physicalTouchSlop == null ? null : physicalTouchSlop / view.devicePixelRatio ); } /// The touch slop value in logical pixels, or `null` if it was not set. final double? touchSlop; /// The touch slop value for pan gestures, in logical pixels, or `null` if it /// was not set. double? get panSlop => touchSlop != null ? (touchSlop! * 2) : null; @override int get hashCode => Object.hash(touchSlop, 23); @override bool operator ==(Object other) { if (other.runtimeType != runtimeType) { return false; } return other is DeviceGestureSettings && other.touchSlop == touchSlop; } @override String toString() => 'DeviceGestureSettings(touchSlop: $touchSlop)'; }