CircularWinder[Dynamic[\[Theta]_]] :=
DynamicModule[{},
Deploy[EventHandler[
Graphics[{GrayLevel[0.97], Disk[{0, 0}, 1], GrayLevel[0.5],
Circle[{0, 0}, 1], GrayLevel[0.8], Circle[{0, 0}, 0.98], Black,
Disk[{0, 0}, 0.01], Arrowheads[0.1],
Arrow[{{0, 0}, Dynamic[{Cos[\[Theta]], Sin[\[Theta]]}]}],
Darker[Cyan, 0.5],
Dynamic[First[
ParametricPlot[
Evaluate[((Sign[\[Theta]] t)/50)*{Cos[t], Sin[t]}], {t,
0, \[Theta] + 0.001}]]]}, ImageSize -> 200,
PlotRange -> 1.1],
"MouseDragged" :>
Module[{\[Alpha], dir,
r = MousePosition["Graphics"], \[Beta] =
ArcTan[Cos[\[Theta]], Sin[\[Theta]]] +
If[Sin[\[Theta]] < 0, 2 \[Pi], 0]},
If[r == {0, 0}, r = {1, 0}];
If[! VectorQ[r, NumericQ], r = {Cos[\[Theta]], Sin[\[Theta]]}];
\[Alpha] = ArcTan @@ r + If[r[[2]] < 0, 2 \[Pi], 0];
dir = Mod[\[Alpha] - \[Beta], 2 \[Pi]];
\[Theta] +=
If[dir < 5, dir, -Mod[-\[Alpha] + \[Beta], 2 \[Pi]]];]]],
Initialization :> If[! NumericQ[\[Theta]], \[Theta] = 0]]