defmodule FloUI.Scrollable.Wheel do @type drag_state :: :idle | :scrolling @type t :: %__MODULE__{ wheel_state: drag_state, offset: FloUI.Scrollable.Direction.t } defstruct wheel_state: :idle, offset: {:horizontal, 0} @spec scrolling?(t) :: boolean def scrolling?(%{wheel_state: :idle}), do: false def scrolling?(%{wheel_state: :scrolling}), do: true @spec start_scrolling(t, FloUI.Scrollable.Direction.t) :: t def start_scrolling(state, offset) do state |> Map.put(:wheel_state, :scrolling) |> Map.put(:offset, offset) end @spec stop_scrolling(t, FloUI.Scrollable.Direction.t) :: t def stop_scrolling(state, offset) do state |> Map.put(:wheel_state, :idle) |> Map.put(:offset, offset) end end