Проигрыватель: управление мышью

Создавать под каждое действие кнопку на плейере — места жалко. Да и эффективность такого управления близка к нулю. Вместо этого мы воспользуемся тем, что на мышке есть много кнопок, колесо, да её ещё и двигать можно.

В Винаме использование этого многообразия возможностей находится в зачаточном состоянии. Там можно менять громкость, вращая колёсико, а если колёсико нажать и вращать, то это работает как перемотка. Последнее, кстати, спасает от дурацкого зацеплятельного поведения бегунка, из-за которого невозможно сдвинуться на чуть-чуть назад или вперёд. Даблклик переключает винамп из маленького режима в большой. По правой кнопке дают контекстное меню. Левой кнопкой можно перемещать окно или изменять его размеры, если зацепить за правый край. Кажется, это всё.

Начнём с изменения размеров окна. Поскольку предполагается размещение окна в правом углу заголовка развёрнутого окна, то вряд ли кто-то захочет изменять его размеры, двигая туда-сюда правый край окна. Правый край раз и навсегда упирается так, чтобы оставалось место под кнопки управления окном. А вот размер мы будем менять за левый край:

Изменение размеров окна

Теперь займёмся колёсиком. Для начала, конечно, сделаем, чтобы с его помощью можно было как в Винампе менять громкость, однако шаг сделаем настраиваемым. Далее, держать колесо нажатым и при этом вращать — довольно трудно: периодически отпускаешь его, и иногда получается, что, не желая того, меняешь громкость. Сначала я повесил туда выбор трека. Чаще всего не нужно прыгать сразу на 7 треков вперёд, а нужно только либо просто на предыдущий, либо просто на следующий. А прокрутить нажатое колесо на 1 шаг совсем не трудно. Однако в таком варианте я несколько раз сбился, потому, что уже привык в Винампе к тому, что это перемотка. В результате остановился на таком варианте:

Выбор действия при нажатии и вращении колеса

Каждый сможет выбрать то, то ему удобнее. Обратите внимание, что для перемотки настраивается скорость. Можно выбрать настройку громкости, и тогда шаг тоже настраивается, причём, независимо от шага в случае вращения ненажатого колеса — это позволяет сделать, например, чтобы при нажатом колесе громкость менялась более стремительно.

Опера нам подарила гениальную комбинацию: вращение скроллинга при нажатой правой кпонке. Этой находкой мы воспользуемся для нормальной организации перемотки. Нажал правую кнопку — и крути колесо сколько душе угодно в любую сторону. Естественно, скорость перемотки сделаем настраиваемой.

Cделаем настраиваемым и даблклик:

Выбор действия по даблклику

Мне удобнее всего вешать на даблклик плей/паузу, но если вы повесите что-то другое, у вас по-прежнему есть выбор того, как именно сделать плей/паузу:

Выбор способа приостановки/продолжения воспроизведения

Если вы повесите паузу на правую кнопку в бегунке, то контекстное меню, конечно, вываливаться на нём не будет. Однако вся остальная площадь плейера в вашем распоряжении для этих целей.

Ладно, как же нам перейти на предыдущий или следующий трек, если на нажатие-и-поворот колеса мы повесили какое-то другое действие? Очевидно, здесь мы воспользуемся жестами. (Вы не пользуетесь жестами в Опере? Тогда мы идём к вам!) Жест влево — предыдущий трек, жест вправо — следующий трек. Легко, логично, и, главное, не требует прицеливания к чему бы то ни было.

Кстати, если на вашей мыши есть кнопки Back и Forward по бокам, то вот вам ещё один способ — они работают как Prev/Next без дополнительных ухищрений.

Осталось лишь определиться с тем, как вызвать плейлист, если на даблклик вы повесили что-то другое. Что ж пускай это будет жест вниз. А жест вверх мы не используем вообще, так как при выбранном расположении плейера выполнить его довольно трудно.

Кое-какие тонкие настройки, связанные с мышью, можно также найти в исходнике интерфейса, в самых первых строчках:

  • snap_gap = 10 — за сколько пикселей до края экрана плейер будет к нему пытаться прилипнуть;
  • gesture_insensitivity = 10 — на сколько пикселей можно сдвинуть мышь с нажатой правой кнопкой, чтобы это не считалось жестом;
  • playlist_scroll_step = 1 — на сколько позиций будет скроллиться плейлист за один шаг поворота колеса;
  • o_gestures = true — жесты здесь можно вообще отключить, если они вам не нужны или, например, если вы пользуетесь каким-нибудь полномасштабным жестикулятором (вроде StrokeIt) и хотите настроить их в нём.

Подведём итоги:

Управление мышью

Пять минут привыкания — и более непонятно, как без этого жить.

В следующей заметке — про отображение, скины и плейлист.

Дальше
4 комментария
Pure_BY 2006

Здорово вы всё придумали! Но если у вас другое окно selected, то, получается, по-любому надо сначала кликнуть по плееру, а уже потом будут активированы все keyboard shortcuts и mouse gestures. Не было бы в таком случае удобнее сделать маленькие кнопки (почти не пожирающие места) для наиболее часто используемых фуккций (play/pause, next/previous, и т. п.), чтобы в один клик добиться нужного действия?

Илья Бирман

!!по-любому надо сначала кликнуть по плееру, а уже потом будут активированы все keyboard shortcuts и mouse gestures.!!

С чего вы взяли?

Гадёныш 2006

По-видимому, плейер будет always on top.
А переключение треков, имхо, удобнее делать не жестами а кнопками:
hold right button, click left button — предыдущий трек
hold left button, click right button — следующий трек

Илья Бирман

Да, это называется FlipBack и FlipForward в Опере. Я так и хотел сначала. К сожалению, мне это не удалось реализовать. Я не разобрался как в этой штуки сделать распространения событий. Если на LDown (нажатие левой кнопки) вешаешь хоть какой-то обработчик, перестаёт работать таскание окна.

Pure_BY 2006

!!С чего вы взяли?!!
С картинки:
!!Колесо > просто вращение => громкость!!
Если вы в другой программе колесом вращать начнёте, чтобы screen scroll up/down, у вас же не звук будет становиться громче/тише? Или я какой-то важный момент пропустил?

Илья Бирман

Не станет, всё верно. Громкость чтобы менять, нужно крутить колесо, когда окно Фубара активно. Все остальные мышинные действия не требуют отдельной активации окна плейера. Нужно просто их делать над его окном.

И естественно все горячие главиши делаются глобальными, иначе какой в них толк?

Pure_BY 2006

Понятно :)
!!И естественно все горячие главиши делаются глобальными, иначе какой в них толк?!!
Малый. Но Microsoft всё равно так порешила для Windows Media Player’а :)
Знаете, чего я не могу понять? Как самая богатая компания в мире, которая может нанять и оплатить любую голову любого супер-пупер программиста, может делать такое говно, как они делают??

Мои книги