1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
19 /** \file
20  * \ingroup bli
21  *
22  * \note dials act similar to old rotation based phones and output an angle.
23  *
24  * They just are initialized with the center of the dial and a threshold value as input.
25  *
26  * When the distance of the current position of the dial from the center
27  * exceeds the threshold, this position is used to calculate the initial direction.
28  * After that, the angle from the initial direction is calculated based on
29  * current and previous directions of the digit, and returned to the user.
30  *
31  * Usage examples:
32  *
33  * \code{.c}
34  * float start_position[2] = {0.0f, 0.0f};
35  * float current_position[2];
36  * float threshold = 0.5f;
37  * float angle;
38  * Dial *dial;
39  *
40  * dial = BLI_dial_init(start_position, threshold);
41  *
42  * angle = BLI_dial_angle(dial, current_position);
43  *
44  * MEM_freeN(dial);
45  * \endcode
46  */
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 typedef struct Dial Dial;
53 
54 Dial *BLI_dial_init(const float start_position[2], float threshold);
55 
56 float BLI_dial_angle(Dial *dial, const float current_position[2]);
57 
58 #ifdef __cplusplus
59 }
60 #endif
61