да тут без всякого хаммера можно обстряпать.
обычный драг-н-дроп.
при nousedown запоминаешь в переменную Х, где был курсор мыши, и в переменную A - угол поворота, который был в этот момент.
при mousemove - берешь разницу текущего Х и сохраненного при старте (допустим, это число D), и делаешь текущий угол поворота равным A + k*D, где вещественное k подобрать по вкусу (чем больше, тем быстрее вращается).
mouseup - отписка от событий mousemove и mouseup, прекращение драгндропа.
всё как всегда, в общем.