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