Ускорение мыши на Mac – что это такое и как его настроить или отключить
Ускорение мыши – это то, о чем большинство пользователей Mac не задумываются дважды, многие даже не подозревают об этом. По умолчанию драйверы мыши подсчитывают движение вашей мыши, и в зависимости от ваших настроек чувствительности курсор будет перемещаться по экрану на такое же и постоянное расстояние.
Ускорение мыши – это, по сути, установка порогового значения поверх этого, поэтому, когда мышь перемещается через определенную точку или с определенной скоростью, сам курсор перемещается быстрее и идет дальше, тем самым увеличивая скорость и скорость движения курсора мыши.
Как отключить или настроить ускорение мыши
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Есть несколько способов отключить или настроить кривую ускорения мыши в Mac OS X, вот 3 простых способа отключить или настроить кривую:
1 – Отключить ускорение мыши по умолчанию
Следующая команда записи по умолчанию отключит кривую ускорения мыши в Mac OS X. Она вводится в Терминал один раз, и ее можно отменить или отрегулировать, изменив -1 в конце. Обычно вы должны выйти из системы, чтобы изменения вступили в силу:
defaults write .GlobalPreferences com.apple.mouse.scaling -1
Нажмите Return, чтобы изменить масштаб мыши, затем выйдите из системы и войдите в систему или перезагрузитесь, чтобы изменения вступили в силу. Вы можете технически изменить число масштабирования практически на все, что захотите, отрегулировав число на конце.
Вы также можете прочитать текущую настройку ускорения мыши, выполнив следующую команду:
defaults read .GlobalPreferences com.apple.mouse.scaling
Для большинства мышей в Mac OS X по умолчанию установлено значение «2» или «3», но некоторые пользователи найдут значения от 0,125 до 0,25, это действительно зависит от того, какой тип мыши вы используете, и от вашей версии Mac OS. X. Таким образом, если вы хотите восстановить настройки по умолчанию для ускорения мыши, вы должны использовать эту команду:
defaults write .GlobalPreferences com.apple.mouse.scaling 2
Обычно вам нужно выйти и снова войти, чтобы изменения вступили в силу.
2 – Использование сценария командной строки для остановки ускорения мыши
Другой альтернативой является написанный chrisk небольшой скрипт под названием «killmouseaccel», он работает на Mac и отключает ускорение мыши во время работы, а перезагрузка включает и выключает его. Узнайте больше о скрипте для отключения ускорения мыши Mac OS X через командную строку здесь.
Этот простой в использовании сценарий полностью отключит ускорение мыши в Mac OS X. Настройки можно изменить, перезагрузив компьютер. Это фаворит для геймеров Windows.
3 – Отрегулируйте ускорение мыши вручную с помощью панели настроек
Для пользователей, которым нужен точный контроль ускорения мыши на Mac, вы можете загрузить бесплатную панель настроек, чтобы включить такую функцию. Панель настроек ускорения мыши находится здесь – вы можете вручную настроить или отключить ускорение мыши через эту панель предпочтений в Mac OS X, это удобно, если вы хотите вручную настроить кривую, а не просто отключить ее.
Если вы ищете только мгновенные изменения и отключаете их, я бы порекомендовал методы командной строки, если вы хотите точный контроль над кривой ускорения, панель предпочтений очень полезна.
Почему людям не нравится ускорение мыши?
Многие новые пользователи Mac не привыкли к ускорению мыши или более высокой кривой ускорения Mac OS X по сравнению с Windows.
Ускорение мыши может привести к потере точности курсора, особенно при попытке рисовать курсором в определенных приложениях или, что чаще всего, в играх. Наиболее частые жалобы на ускорение мыши исходят из игрового мира, где кривая ускорения может привести к непредвиденным движениям мыши в таких играх, как Team Fortress 2 и Starcraft 2 , среди многих других.
Лично я совсем не возражаю против ускорения мыши, но я давно использую Mac, поэтому кривая мне не кажется чужеродной.
Многие переключатели Mac из мира Windows приходят в Mac OS X и находят, что курсор кажется забавным и более отзывчивым, обычно это люди, которые хотели бы настроить кривую или отключить эту функцию. Для справки, в Windows есть ускорение мыши, просто с другим порогом и чувствительностью.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Как можно отключить увеличение курсора при «тряске» в Mac OSX El Capitan?
Когда на одно месте быстро подергать мышкой он увеличивается (курсор), как это отключить?
- Вопрос задан более трёх лет назад
- 16863 просмотра
Комментировать
Решения вопроса 1
AlexandrLight @AlexandrLight
Отключается эта фишка и очень просто.
Заходим в Универсальный доступ->Монитор->Shake mouse pointer to locate
->
Ответ написан более трёх лет назад
Комментировать
Нравится 11 Комментировать
Ответы на вопрос 1
Никак, эта фича на данный момент не отключаемая.
Ответ написан более трёх лет назад
Нравится 2 2 комментария
Как поменять параметры ускорения движения курсора мыши в Мак ОС
Те, кто пробовал играть в игры с использованием мыши на маке, наверняка замечали «замечательный» эффект, который когда то давно придумали в недрах компании Эппл для медленных компьютеров — а именно динамическое изменение ускорения курсора мыши.
К чему это приводит — если вы перемещаете мышь незначительно — то все работает как и обычно. Но, стоит вам только передвинуть мышь на 1-1.5 см и начинаются чудеса — вместо ожидаемого линейного перемещения — мы наблюдаем резкий скачок.
Например, в игре Counter Strike это приводит к тому, что вместо прицеливания вы разворачиваетесь на 180 градусов.
Я достаточно долго изучал этот вопрос. Существует множество страниц в интернете, где этот эффект описывается, но не дается простого решения проблемы. Предлагается воспользоваться различными платными и не очень утилитами.
Компания Эппл отписывается на этот вопрос в своем стиле, т.е. проблема надумана и не существует.
Однако, все можно решить значительно проще. Обновлением единственного параметра в списке при помощи командной строки.
Я не видел ни одного описания правильного решения проблемы на русском языке, поэтому решил написать эту статью.
На решение проблемы сообществу потребовалось несколько лет.
Решение работает на последней ОС Yosemite.
Проверено мной.
Выполните следующую команду в терминале Мак ОС:
defaults write .GlobalPreferences com.apple.mouse.scaling -1
Все, мои поздравления. Наконец можно спокойно работать и играть.
Чтобы не быть голословным — вот ссылки на описание проблемы и предложением по ее решению.
Мышиные гонки: что делать со скоростью скролла PC-мыши на MacOS
Привет, Хабр! Меня зовут Евгений Гудков. Я работаю в компании VK, где мы дружной командой делаем VK Teams — классный (не реклама) корпоративный мессенджер.
Но сегодня не об этом. Сегодня я хочу сыграть с тобой в одну игру…
Представим, что вышла новая популярная игра Scroll Master. Ее суть — проскроллить как можно больше контента за отведенное время. Разработчики сделали игру при помощи Qt и раздали на все основные Desktop-платформы. Правила игры не запрещают использовать тачпады, Magic Mouse и тому подобное. Также правилами не запрещается менять системную скорость прокрутки. Используй все, что можешь, чтобы стать лучшим!
С ростом популярности игры начали приходить жалобы от пользователей MacOS, которые играли в игру с PC-мышью. Как бы они ни пытались изменить системную скорость скролла, она оставалась такой же. Из-за этого новые рекорды не установить, а разбитые от злости маки и мышки никому не нужны. Поэтому нужно разобраться, почему Qt не реагирует на системные настройки скролла на MacOS, и как-то решить эту проблему.
Вводные условия
Саму игру-пример вы можете скачать с GitHub. По умолчанию в настройках стоит галочка Game Mode. Как только вы начнете скроллить контент, запустится таймер на пять секунд. Когда время истечет, скролл остановится и вы увидите свой результат. Чтобы начать заново, нажмите кнопку Reset. Галочка «Modify scroll event», включающая учет системной скорости скролла, по умолчанию снята.
Советую сначала изучить поведение скролла в режиме игры. Сравните, сколько строк вы сможете прокрутить за отведенное время, используя девайсы мака и PC-мышь. Поменяйте системную скоростью скролла (помните, все для победы). Затем установите галочку «Modify scroll event» и попробуйте снова. В этот раз вы не будете чувствовать себя обделенным, используя PC-мышь.
Если режим игры вам надоест, просто уберите галочку GameMode. Без нее не будет таймера на пять секунд.
Ниже представлены последние две секунды скролла: без учета системной скорости скролла и с ее учетом.
Почему скорость скролла для PC-мыши не меняется
Убедиться в том, что системная скорость скролла никак не влияет на скорость в вашем приложении, написанном на Qt, достаточно легко. Вы можете сделать это тремя способами:
- Если у вас установлен Qt Creator, просто измените системную скорость скролла и убедитесь, что в IDE все по-прежнему.
- Откройте свое любимое (или нет) приложение, написанное на Qt, и убедитесь, что скорость скролла не меняется.
- Скачайте пример с GitHub и запустите его. Чтобы увидеть, как учитывается системная скорость скролла, поставьте галочку «Modify scroll event».
void QScrollBar::wheelEvent(QWheelEvent *event) < event->ignore(); bool horizontal = qAbs(event->angleDelta().x()) > qAbs(event->angleDelta().y()); // The vertical wheel can be used to scroll a horizontal scrollbar, but only if // there is no simultaneous horizontal wheel movement. This is to avoid chaotic // scrolling on touchpads. if (!horizontal && event->angleDelta().x() != 0 && orientation() == Qt::Horizontal) return; // scrollbar is a special case - in vertical mode it reaches minimum // value in the upper position, however QSlider's minimum value is on // the bottom. So we need to invert the value, but since the scrollbar is // inverted by default, we need to invert the delta value only for the // horizontal orientation. int delta = horizontal ? -event->angleDelta().x() : event->angleDelta().y(); Q_D(QScrollBar); if (d->scrollByDelta(horizontal ? Qt::Horizontal : Qt::Vertical, event->modifiers(), delta)) event->accept(); if (event->phase() == Qt::ScrollBegin) d->setTransient(false); else if (event->phase() == Qt::ScrollEnd) d->setTransient(true); >
Qt обрабатывает только составляющую angleDelta() из полученного QWheelEvent . Что же это за составляющая и что в ней передается для PC-мыши? Вот что говорится в документации:
Returns the relative amount that the wheel was rotated, in eighths of a degree. Most mouse types work in steps of 15 degrees, in which case the delta value is a multiple of 120; i.e., 120 units * 1/8 = 15 degrees.
Так как мы работаем с обычной PC-мышью, значение дельты при повороте колесика мыши кратно 120 и константно. Теперь понятно, почему Qt никак не реагирует на системные настройки скорости скролла в MacOS. А как же тогда Qt реагирует на скорость в Windows или Linux?
bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers, int delta) < . // Calculate how many lines to scroll. Depending on what delta is (and // offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can // only scroll whole lines, so we keep the reminder until next event. qreal stepsToScrollF = #if QT_CONFIG(wheelevent) QApplication::wheelScrollLines() * #endif offset * effectiveSingleStep(); . >
В Windows или Linux QApplication::wheelScrollLines напрямую связан с системной скоростью скролла, что обеспечивает ускорение в наших приложениях, а в MacOS QApplication::wheelScrollLines константен и по умолчанию равен трем.
Складывается ощущение, что ничего не поделать. Найдем в документации к QWheelEvent метод pixelDelta() :
Returns the scrolling distance in pixels on screen. This value is provided on platforms that support high-resolution pixel-based delta values, such as MacOS. The value should be used directly to scroll content on screen.
И вот наше спасение. Этот метод возвращает неконстантные значения для дельты прокрутки, которые зависят от системной скорости скролла. Выглядит словно то, что нам нужно.
Можно убедиться в том, что angleDelta и pixelDelta возвращают разные значения, если вывести отладочную информацию от какого-либо QWheelEvent .
Зная, что Qt работает только с angleDelta() , а pixelDelta() возвращает неконстантные значения, зависящие от системной скорости скролла, можно сформулировать нашу цель.
Чего мы хотим: учитывать системную скорость скролла для PC-мыши в MacOS.
Что нам для этого нужно:
- определить, что мы работаем с PC-мышью;
- модифицировать QWheelEvent так, чтобы вместо константного angleDelta передавался pixelDelta , зависящий от системной скорости.
- гибкость в управлении,
- гибкость при написании нового кода.
Варианты решения задачи
Вариант 1
Базовый класс, унаследованный от QAbstractScrollArea , с переопределенным методом wheelEvent .
#pragma once #include class CustomView : public QAbstractScrollArea < public: explicit CustomView(QWidget* _parent = nullptr); protected: void wheelEvent(QWheelEvent* _event) < // Handle wheel event >>;
Достоинства:
- Модификация события прокрутки в одном месте.
- Дополнительный базовый класс. Учитывая, что в программе могут использоваться кастомные View, унаследованные от чего-либо, это приведет к еще большему разбуханию кода.
- Маленькая гибкость. При добавлении или изменении чего-либо придется убирать наследование.
Вариант 2
Переопределение метода QApplication::notify и использование динамических свойств объектов.
Достоинства:
- Модификация скролла в одном месте.
- Нет лишних наследований у различных View.
- Гибкость в управлении свойствами объектов.
- Наследование от QApplication и переопределение метода notify .
- Модификация QWheelEvent для QScrollBar , у которого задано динамическое свойство, разрешающее модификацию QWheelEvent .
class MyApp : public QApplication < public: MyApp(int& argc, char** argv, int = ApplicationFlags); static void setRequireCustomWheelEvent(QScrollBar* _slider, bool _on = true); public: bool notify(QObject* _obj, QEvent* _event); >;
setRequireCustomWheelEvent(QScrollBar* _slider, bool _on = true) используется для того, чтобы выставить динамическое свойство объекту для определения необходимости модифицировать QwheelEvent .
void MyApp::setRequireCustomWheelEvent(QScrollBar* _slider, bool _on) < _slider->setProperty(Utils::Scroll::wheelEventModificationProperty.data(), _on); >
Рассмотрим реализацию метода MyApp::notify(QObject* _obj, QEvent* _event) :
bool MyApp::notify(QObject* _obj, QEvent* _event) < #ifdef __APPLE__ if (_event->type() != QEvent::Wheel) return QApplication::notify(_obj, _event); if (auto scrollbar = qobject_cast(_obj)) < const QVariant value = _obj->property(Utils::Scroll::wheelEventModificationProperty.data()); if (value.isValid() && value.toBool()) < QWheelEvent wheelEvent = Utils::Scroll::modify(static_cast(_event)); scrollbar->event(&wheelEvent); return true; > > #endif return QApplication::notify(_obj, _event); >
Рассмотрим реализацию метода Utils::Scroll::modify(static_cast(_event)) , который создает новый QWheelEvent , если мы используем PC-мышь в MacOS. Метод mofidy(QWheelEvent* _event) делает следующее:
- определяет, что мы работаем с PC-мышью;
- рассчитывает новое значение дельты прокрутки;
- создает и возвращает новый QWheelEvent .
QWheelEvent modify(QWheelEvent* _event) < #ifdef __APPLE__ if (isPcMouse(_event)) < const QPoint numPixels = _event->pixelDelta(); const QPoint numDegrees = _event->angleDelta(); QPoint delta <>; if (!numPixels.isNull()) < delta = numPixels; delta *= qApp->wheelScrollLines(); > else if (!numDegrees.isNull()) delta = numDegrees; return < _event->position(), _event->globalPosition(), <>, delta, _event->buttons(), _event->modifiers(), _event->phase(), _event->inverted(), _event->source() >; > #endif return < _event->position(), _event->globalPosition(), _event->pixelDelta(), _event->angleDelta(), _event->buttons(), _event->modifiers(), _event->phase(), _event->inverted(), _event->source() >; >
Определение использования PC-мыши:
bool isPcMouse(QWheelEvent* _e) < if (_e->source() == Qt::MouseEventSynthesizedBySystem) return false; return getPcMouseWheelDelta(_e) % QWheelEvent::DefaultDeltasPerStep == 0; >
В этом методе мы проверяем два условия:
- Источник события не синтезирован системой: не Touchpad, Magic Mouse или другие девайсы Apple.
- Значение дельты от поворота колесика мышки кратно 120.
int getPcMouseWheelDelta(QWheelEvent* _e) < int delta < 0 >; const QPoint scrollDelta = _e->angleDelta(); if (scrollDelta.x() != 0 && scrollDelta.y() != 0) delta = std::max(qAbs(scrollDelta.x()), qAbs(scrollDelta.y())); else delta = scrollDelta.x() != 0 ? scrollDelta.x() : scrollDelta.y(); return delta; >
Определение нового значения дельты:
if (!numPixels.isNull()) < delta = numPixels; delta *= qApp->wheelScrollLines(); > else if (!numDegrees.isNull()) delta = numDegrees;
Как говорилось выше, pixelDelta зависит от системной скорости прокрутки. Но при использовании сырых данных pixelDelta скорость очень низкая. Поэтому домножим pixelDelta на qApp->wheelScrollLines() , который по умолчанию равен трем. Да, это легкий визуальный подгон. Вы можете использовать любую другую константу, которая вам покажется более подходящей.
Теперь создадим новый QWheelEvent. В конструктор вместо angleDelta
передадим рассчитанную дельту, а вместо pixelDelta передадим пустой QPoint :
return < _event->position(), _event->globalPosition(), <>, delta, _event->buttons(), _event->modifiers(), _event->phase(), _event->inverted(), _event->source() >;
Добавление динамических свойств. Как говорилось ранее, обрабатывать события мы будем для QScrollBar . Следовательно, мы должны выставлять динамическое свойство для скроллбара QAbstractScrollArea . В классе MyApp сделан статический метод:
static void setRequireCustomWheelEvent(QScrollBar* _slider, bool _on = true) < _slider->setProperty("RequireCustomWheelEvent", _on); >
Чтобы добавить динамическое свойство для вашего View , просто передайте в этот метод указатель на горизонтальный или вертикальный скроллбар и булев флаг.
Заключение
При создании кросс-платформенных приложений всегда стоит быть готовым к нестандартным ситуациям. К сожалению или к счастью, не все сделано за нас. Нужно уметь находить выходы из различных ситуаций.
В этой статье мы разработали элегантное решение, которое устраняет проблему системной скорости скролла на MacOS при использовании PC-мыши. Теперь игроки с PC-мышью не сломают себе указательный палец, усердно скролля контент и пытаясь попасть в топы. Они будут наслаждаться теми же благами, что и люди с девайсами от Apple.