Cleanup: remove flag from GizmoCommonData
[blender.git] / source / blender / editors / gizmo_library / gizmo_library_intern.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2016 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): none yet.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file gizmo_library_intern.h
27  *  \ingroup edgizmolib
28  */
29
30 #ifndef __GIZMO_LIBRARY_INTERN_H__
31 #define __GIZMO_LIBRARY_INTERN_H__
32
33 /* distance around which gizmos respond to input (and get highlighted) */
34 #define GIZMO_HOTSPOT 14.0f
35
36 /**
37  * Data for common interactions. Used in gizmo_library_utils.c functions.
38  */
39 typedef struct GizmoCommonData {
40         float range_fac;      /* factor for arrow min/max distance */
41         float offset;
42
43         /* property range for constrained gizmos */
44         float range;
45         /* min/max value for constrained gizmos */
46         float min, max;
47
48         uint is_custom_range_set : 1;
49 } GizmoCommonData;
50
51 typedef struct GizmoInteraction {
52         float init_value; /* initial property value */
53         float init_mval[2];
54         float init_offset;
55         float init_matrix_final[4][4];
56         float init_matrix_basis[4][4];
57
58         /* offset of last handling step */
59         float prev_offset;
60         /* Total offset added by precision tweaking.
61          * Needed to allow toggling precision on/off without causing jumps */
62         float precision_offset;
63 } GizmoInteraction;
64
65 float gizmo_offset_from_value(
66         GizmoCommonData *data, const float value,
67         const bool constrained, const bool inverted);
68 float gizmo_value_from_offset(
69         GizmoCommonData *data, GizmoInteraction *inter, const float offset,
70         const bool constrained, const bool inverted, const bool use_precision);
71
72 void gizmo_property_data_update(
73         struct wmGizmo *gz, GizmoCommonData *data, wmGizmoProperty *gz_prop,
74         const bool constrained, const bool inverted);
75
76 void  gizmo_property_value_reset(
77         bContext *C, const struct wmGizmo *gz, GizmoInteraction *inter, wmGizmoProperty *gz_prop);
78
79
80 /* -------------------------------------------------------------------- */
81
82 void gizmo_color_get(
83         const struct wmGizmo *gz, const bool highlight,
84         float r_color[4]);
85
86 bool gizmo_window_project_2d(
87         bContext *C, const struct wmGizmo *gz, const float mval[2], int axis, bool use_offset,
88         float r_co[2]);
89
90 bool gizmo_window_project_3d(
91         bContext *C, const struct wmGizmo *gz, const float mval[2], bool use_offset,
92         float r_co[3]);
93
94 /* -------------------------------------------------------------------- */
95 /* Gizmo drawing */
96
97 #include "gizmo_geometry.h"
98
99 void wm_gizmo_geometryinfo_draw(const struct GizmoGeomInfo *info, const bool select, const float color[4]);
100 void wm_gizmo_vec_draw(
101         const float color[4], const float (*verts)[3], uint vert_count,
102         uint pos, uint primitive_type);
103
104
105 #endif  /* __GIZMO_LIBRARY_INTERN_H__ */