Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/contour/TerminalSession.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,11 @@ class TerminalSession: public QAbstractItemModel, public vtbackend::Terminal::Ev

int getScrollX() const noexcept { return _accumulatedScrollX; }
void addScrollX(int v) noexcept { _accumulatedScrollX += v; }
void resetScrollX() noexcept { _accumulatedScrollX = 0; }
void resetScrollX(int value) noexcept { _accumulatedScrollX = value; }

int getScrollY() const noexcept { return _accumulatedScrollY; }
void addScrollY(int v) noexcept { _accumulatedScrollY += v; }
void resetScrollY() noexcept { _accumulatedScrollY = 0; }
void resetScrollY(int value) noexcept { _accumulatedScrollY = value; }

QString title() const;
void setTitle(QString const& value) { terminal().setWindowTitle(value.toStdString()); }
Expand Down
27 changes: 14 additions & 13 deletions src/contour/helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ namespace
session.getScrollX() > 0 ? VTMouseButton::WheelRight
: VTMouseButton::WheelLeft,
position);
session.resetScrollX();
session.resetScrollX(session.getScrollX() % unbox<int>(session.terminal().cellPixelSize().width));
}

if (std::abs(session.getScrollY()) > unbox<int>(session.terminal().cellPixelSize().height))
Expand All @@ -154,7 +154,8 @@ namespace
session.getScrollY() > 0 ? VTMouseButton::WheelUp
: VTMouseButton::WheelDown,
position);
session.resetScrollY();
session.resetScrollY(session.getScrollY()
% unbox<int>(session.terminal().cellPixelSize().height));
}
}

Expand Down Expand Up @@ -431,26 +432,26 @@ void sendWheelEvent(QWheelEvent* event, TerminalSession& session)

auto const modifiers = makeModifiers(event->modifiers());

auto const pixelPosition =
makeMousePixelPosition(event, session.profile().margins.value(), session.display()->contentScale());

// NOTE: Qt is playing some weird games with the mouse wheel events, i.e. if Alt is pressed
// it will send horizontal wheel events instead of vertical ones. We need to compensate
// for that here.

auto const scaledPixelDelta = session.display()->contentScale() * event->pixelDelta();
auto const pixelDelta = (modifiers & Modifier::Alt) ? transposed(scaledPixelDelta) : scaledPixelDelta;

auto const numDegrees =
((modifiers & Modifier::Alt) ? transposed(event->angleDelta()) : event->angleDelta()) / 8;

auto const pixelPosition =
makeMousePixelPosition(event, session.profile().margins.value(), session.display()->contentScale());

if (!pixelDelta.isNull())
if (!event->pixelDelta().isNull())
{
auto const scaledPixelDelta = session.display()->contentScale() * event->pixelDelta();
auto const pixelDelta = (modifiers & Modifier::Alt) ? transposed(scaledPixelDelta) : scaledPixelDelta;

sendWheelEventForDelta(pixelDelta, pixelPosition, modifiers, session);
event->accept();
}
else if (!numDegrees.isNull())
else if (!event->angleDelta().isNull())
{
auto const numDegrees =
((modifiers & Modifier::Alt) ? transposed(event->angleDelta()) : event->angleDelta()) / 8;

auto const numSteps = numDegrees / 15;
auto const cellSize = session.terminal().cellPixelSize();
auto const scaledDelta = QPoint {
Expand Down
Loading