input: Implement two-fingers natural scrolling (enabled by default)
input touchpad settings header: - Implement two-fingers natural scrolling (enabled by default) - Sets scrolling with 2 fingers on the touchpad making the content to move in the same direction as the finger. input preflet: - Implement 2 fingers natural scrolling input mouse: - Handle and provide new settings for 2 finger natural scrolling input mouse mm: - Implement two-finger natural scrolling feature - Implement natural scrolling for two-finger scrolling completely separated from reverse scrolling for egde scrolling only. Change-Id: Idf673ec34a424b20183ed90761f297340d521526 Reviewed-on: https://review.haiku-os.org/c/haiku/+/9919 Reviewed-by: Adrien Destugues <[email protected]> Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
f7598f6461
commit
6d4c0985d4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2009, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2001-2025, Haiku, Inc. All Rights Reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef TOUCHPAD_SETTINGS_H
|
||||
@@ -25,6 +25,7 @@ typedef struct {
|
||||
int32 trackpad_acceleration;
|
||||
|
||||
bool scroll_reverse;
|
||||
bool scroll_twofinger_natural_scrolling;
|
||||
} touchpad_settings;
|
||||
|
||||
|
||||
@@ -40,7 +41,8 @@ const static touchpad_settings kDefaultTouchpadSettings = {
|
||||
30,
|
||||
65536,
|
||||
65536,
|
||||
false
|
||||
false,
|
||||
true
|
||||
};
|
||||
|
||||
#define TOUCHPAD_SETTINGS_FILE "Touchpad_settings"
|
||||
|
||||
@@ -604,6 +604,9 @@ MouseDevice::_UpdateTouchpadSettings(BMessage* message)
|
||||
message->FindInt8("tapgesture_sensibility",
|
||||
(int8*)&settings.tapgesture_sensibility);
|
||||
|
||||
message->FindBool("scroll_twofinger_natural_scrolling",
|
||||
&settings.scroll_twofinger_natural_scrolling);
|
||||
|
||||
if (fIsTouchpad)
|
||||
fTouchpadMovementMaker.SetSettings(settings);
|
||||
|
||||
|
||||
@@ -158,12 +158,12 @@ MovementMaker::GetMovement(uint32 posX, uint32 posY)
|
||||
|
||||
|
||||
void
|
||||
MovementMaker::GetScrolling(uint32 posX, uint32 posY)
|
||||
MovementMaker::GetScrolling(uint32 posX, uint32 posY, bool reverse)
|
||||
{
|
||||
CALLED();
|
||||
|
||||
int32 stepsX = 0, stepsY = 0;
|
||||
int32 directionMultiplier = fSettings.scroll_reverse ? -1 : 1;
|
||||
int32 directionMultiplier = reverse ? -1 : 1;
|
||||
|
||||
_GetRawMovement(posX, posY);
|
||||
_ComputeAcceleration(fSettings.scroll_acceleration);
|
||||
@@ -619,8 +619,9 @@ TouchpadMovement::_CheckScrollingToMovement(const touchpad_movement *event,
|
||||
|| fSettings.scroll_bottomrange > 0.999999) {
|
||||
isSideScrollingH = true;
|
||||
}
|
||||
if (two_fingers(event)
|
||||
&& fSettings.scroll_twofinger) {
|
||||
bool isTwoFingerScrolling = two_fingers(event)
|
||||
&& fSettings.scroll_twofinger;
|
||||
if (isTwoFingerScrolling) {
|
||||
// two finger scrolling is enabled
|
||||
isSideScrollingV = true;
|
||||
isSideScrollingH = fSettings.scroll_twofinger_horizontal;
|
||||
@@ -641,7 +642,9 @@ TouchpadMovement::_CheckScrollingToMovement(const touchpad_movement *event,
|
||||
fScrollingStarted = true;
|
||||
StartNewMovment();
|
||||
}
|
||||
GetScrolling(event->xPosition, event->yPosition);
|
||||
GetScrolling(event->xPosition, event->yPosition, isTwoFingerScrolling
|
||||
? fSettings.scroll_twofinger_natural_scrolling
|
||||
: fSettings.scroll_reverse);
|
||||
movement->wheel_ydelta = make_small(yDelta);
|
||||
movement->wheel_xdelta = make_small(xDelta);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
protected:
|
||||
void StartNewMovment();
|
||||
void GetMovement(uint32 posX, uint32 posY);
|
||||
void GetScrolling(uint32 posX, uint32 posY);
|
||||
void GetScrolling(uint32 posX, uint32 posY, bool reverse);
|
||||
|
||||
touchpad_specs fSpecs;
|
||||
touchpad_settings fSettings;
|
||||
|
||||
@@ -70,6 +70,7 @@ TouchpadPref::BuildSettingsMessage()
|
||||
msg.AddInt16("padblocker_threshold", fSettings.padblocker_threshold);
|
||||
msg.AddInt32("trackpad_speed", fSettings.trackpad_speed);
|
||||
msg.AddInt32("trackpad_acceleration", fSettings.trackpad_acceleration);
|
||||
msg.AddBool("scroll_twofinger_natural_scrolling", fSettings.scroll_twofinger_natural_scrolling);
|
||||
|
||||
return msg;
|
||||
}
|
||||
@@ -152,6 +153,10 @@ TouchpadPref::LoadSettings()
|
||||
settingsMsg.FindInt32("trackpad_acceleration", &fSettings.trackpad_acceleration);
|
||||
settingsMsg.FindPoint("window_position", &fWindowPosition);
|
||||
|
||||
fSettings.scroll_twofinger_natural_scrolling = settingsMsg.GetBool(
|
||||
"scroll_twofinger_natural_scrolling",
|
||||
kDefaultTouchpadSettings.scroll_twofinger_natural_scrolling);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -298,10 +298,13 @@ TouchpadPrefView::MessageReceived(BMessage* message)
|
||||
settings.scroll_twofinger = fTwoFingerBox->Value() == B_CONTROL_ON;
|
||||
settings.scroll_twofinger_horizontal
|
||||
= fTwoFingerHorizontalBox->Value() == B_CONTROL_ON;
|
||||
settings.scroll_twofinger_natural_scrolling
|
||||
= fTwoFingerNaturalScrollingBox->Value() == B_CONTROL_ON;
|
||||
settings.scroll_acceleration = fScrollAccelSlider->Value();
|
||||
settings.scroll_xstepsize = (20 - fScrollStepXSlider->Value()) * 3;
|
||||
settings.scroll_ystepsize = (20 - fScrollStepYSlider->Value()) * 3;
|
||||
fTwoFingerHorizontalBox->SetEnabled(settings.scroll_twofinger);
|
||||
fTwoFingerNaturalScrollingBox->SetEnabled(settings.scroll_twofinger);
|
||||
fRevertButton->SetEnabled(true);
|
||||
fTouchpadPref.UpdateRunningSettings();
|
||||
break;
|
||||
@@ -361,15 +364,19 @@ TouchpadPrefView::AttachedToWindow()
|
||||
fScrollReverseBox->SetTarget(this);
|
||||
fTwoFingerBox->SetTarget(this);
|
||||
fTwoFingerHorizontalBox->SetTarget(this);
|
||||
fTwoFingerNaturalScrollingBox->SetTarget(this);
|
||||
fScrollStepXSlider->SetTarget(this);
|
||||
fScrollStepYSlider->SetTarget(this);
|
||||
fScrollAccelSlider->SetTarget(this);
|
||||
|
||||
fPadBlockerSlider->SetTarget(this);
|
||||
fTapSlider->SetTarget(this);
|
||||
fSpeedSlider->SetTarget(this);
|
||||
fAccelSlider->SetTarget(this);
|
||||
|
||||
fDefaultButton->SetTarget(this);
|
||||
fRevertButton->SetTarget(this);
|
||||
|
||||
BSize size = PreferredSize();
|
||||
Window()->ResizeTo(size.width, size.height);
|
||||
|
||||
@@ -438,6 +445,8 @@ TouchpadPrefView::SetupView()
|
||||
new BMessage(SCROLL_CONTROL_CHANGED));
|
||||
fTwoFingerHorizontalBox = new BCheckBox(B_TRANSLATE("Horizontal scrolling"),
|
||||
new BMessage(SCROLL_CONTROL_CHANGED));
|
||||
fTwoFingerNaturalScrollingBox = new BCheckBox(B_TRANSLATE("Natural scrolling"),
|
||||
new BMessage(SCROLL_CONTROL_CHANGED));
|
||||
|
||||
float spacing = be_control_look->DefaultItemSpacing();
|
||||
|
||||
@@ -447,10 +456,11 @@ TouchpadPrefView::SetupView()
|
||||
.AddStrut(spacing)
|
||||
.Add(fScrollReverseBox)
|
||||
.Add(fTwoFingerBox)
|
||||
.AddGroup(B_HORIZONTAL, 0)
|
||||
.AddStrut(spacing * 2)
|
||||
.AddGroup(B_VERTICAL, 0)
|
||||
.SetInsets(spacing * 2, 0, 0, 0)
|
||||
.Add(fTwoFingerHorizontalBox)
|
||||
.End()
|
||||
.Add(fTwoFingerNaturalScrollingBox)
|
||||
.End()
|
||||
.AddGlue()
|
||||
.View();
|
||||
|
||||
@@ -529,6 +539,9 @@ TouchpadPrefView::SetValues(touchpad_settings* settings)
|
||||
fTwoFingerHorizontalBox->SetValue(
|
||||
settings->scroll_twofinger_horizontal ? B_CONTROL_ON : B_CONTROL_OFF);
|
||||
fTwoFingerHorizontalBox->SetEnabled(settings->scroll_twofinger);
|
||||
fTwoFingerNaturalScrollingBox->SetValue(
|
||||
settings->scroll_twofinger_natural_scrolling ? B_CONTROL_ON : B_CONTROL_OFF);
|
||||
fTwoFingerNaturalScrollingBox->SetEnabled(settings->scroll_twofinger);
|
||||
fScrollStepXSlider->SetValue(20 - settings->scroll_xstepsize / 2);
|
||||
fScrollStepYSlider->SetValue(20 - settings->scroll_ystepsize / 2);
|
||||
fScrollAccelSlider->SetValue(settings->scroll_acceleration);
|
||||
|
||||
@@ -98,6 +98,7 @@ private:
|
||||
BCheckBox* fScrollReverseBox;
|
||||
BCheckBox* fTwoFingerBox;
|
||||
BCheckBox* fTwoFingerHorizontalBox;
|
||||
BCheckBox* fTwoFingerNaturalScrollingBox;
|
||||
BSlider* fScrollStepXSlider;
|
||||
BSlider* fScrollStepYSlider;
|
||||
BSlider* fScrollAccelSlider;
|
||||
|
||||
Reference in New Issue
Block a user