// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Microsoft.MixedReality.Toolkit.Utilities;
namespace Microsoft.MixedReality.Toolkit.Input
{
///
/// Provides interface for getting and setting behaviors and
/// possible other settings for pointers in the input system.
/// Behaviors are described based on pointer type and input type,
/// not per pointer. This is to ensure that new pointers that appear
/// maintain consistent behavior.
///
public interface IPointerPreferences
{
///
/// Gets the for a given pointer
///
PointerBehavior GetPointerBehavior(IMixedRealityPointer pointer);
///
/// Gets the for a given pointer type,
/// handedness, and input type
///
/// All pointers that are of this type, or a subclass of this type, will have the given behavior
/// Specify Handedness.Any to apply to all handedness, or specify a specific handedness to just disable, right, left.
/// Allows specification of pointer behavior per input source, so that pointers can be disabled for hands but not controllers, and vice versa.
PointerBehavior GetPointerBehavior(
Handedness handedness,
InputSourceType sourceType) where T : class, IMixedRealityPointer;
///
/// Sets the for a given pointer type,
/// handedness, and input type
///
/// All pointers that are of this type, or a subclass of this type, will have the given behavior
/// Specify Handedness.Any to apply to all handedness, or specify a specific handedness to just disable, right, left.
/// Allows specification of pointer behavior per input source, so that pointers can be disabled for hands but not controllers, and vice versa.
void SetPointerBehavior(Handedness handedness, InputSourceType inputType, PointerBehavior pointerBehavior) where T : class, IMixedRealityPointer;
///
/// Pointer behavior for the gaze pointer.
/// We make gaze pointer unique because the internal
/// gaze pointer actually cannot be referenced from here
/// since it's an internal class.
///
///
/// This does not control if the gaze provider is used for raycasting, just its use as an MRTK pointer. Set CoreServices.InputSystem.GazeProvider.Enabled
/// to false if you do not wish to use Gaze data in your project
///
PointerBehavior GazePointerBehavior { get; set; }
}
}