wxMaxima
Loading...
Searching...
No Matches
WheelSteps.h
Go to the documentation of this file.
1// -*- mode: c++; c-file-style: "linux"; c-basic-offset: 2; indent-tabs-mode: nil -*-
2//
3// Copyright (C) 2026 Gunter Königsmann <wxMaxima@physikbuch.de>
4//
5// This program is free software; you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation; either version 2 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15//
16// You should have received a copy of the GNU General Public License
17// along with this program; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19//
20// SPDX-License-Identifier: GPL-2.0+
21
35#ifndef WHEELSTEPS_H
36#define WHEELSTEPS_H
37
38namespace wxm {
39
41public:
54 int Add(int rotation, int delta) {
55 if (delta <= 0)
56 return (rotation > 0) - (rotation < 0);
57 if ((rotation > 0 && m_rotation < 0) || (rotation < 0 && m_rotation > 0))
58 m_rotation = 0;
59 m_rotation += rotation;
60 // Integer division truncates towards zero, so the remainder keeps the
61 // sign of the movement in both directions.
62 const int steps = m_rotation / delta;
63 m_rotation -= steps * delta;
64 return steps;
65 }
66
68 void Reset() { m_rotation = 0; }
69
70private:
72 int m_rotation = 0;
73};
74
75} // namespace wxm
76
77#endif // WHEELSTEPS_H
Definition: WheelSteps.h:40
void Reset()
Forget any partial step, e.g. when the wheel starts acting on something else.
Definition: WheelSteps.h:68
int Add(int rotation, int delta)
Add one wheel event's rotation; return the number of whole steps it completes.
Definition: WheelSteps.h:54