doxygen: add newline after \file
[blender.git] / source / blender / editors / gizmo_library / gizmo_library_intern.h
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  * The Original Code is Copyright (C) 2016 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup edgizmolib
22  */
23
24 #ifndef __GIZMO_LIBRARY_INTERN_H__
25 #define __GIZMO_LIBRARY_INTERN_H__
26
27 /* distance around which gizmos respond to input (and get highlighted) */
28 #define GIZMO_HOTSPOT 14.0f
29
30 /**
31  * Data for common interactions. Used in gizmo_library_utils.c functions.
32  */
33 typedef struct GizmoCommonData {
34         float range_fac;      /* factor for arrow min/max distance */
35         float offset;
36
37         /* property range for constrained gizmos */
38         float range;
39         /* min/max value for constrained gizmos */
40         float min, max;
41
42         uint is_custom_range_set : 1;
43 } GizmoCommonData;
44
45 typedef struct GizmoInteraction {
46         float init_value; /* initial property value */
47         float init_mval[2];
48         float init_offset;
49         float init_matrix_final[4][4];
50         float init_matrix_basis[4][4];
51
52         /* offset of last handling step */
53         float prev_offset;
54         /* Total offset added by precision tweaking.
55          * Needed to allow toggling precision on/off without causing jumps */
56         float precision_offset;
57 } GizmoInteraction;
58
59 float gizmo_offset_from_value(
60         GizmoCommonData *data, const float value,
61         const bool constrained, const bool inverted);
62 float gizmo_value_from_offset(
63         GizmoCommonData *data, GizmoInteraction *inter, const float offset,
64         const bool constrained, const bool inverted, const bool use_precision);
65
66 void gizmo_property_data_update(
67         struct wmGizmo *gz, GizmoCommonData *data, wmGizmoProperty *gz_prop,
68         const bool constrained, const bool inverted);
69
70 void  gizmo_property_value_reset(
71         bContext *C, const struct wmGizmo *gz, GizmoInteraction *inter, wmGizmoProperty *gz_prop);
72
73
74 /* -------------------------------------------------------------------- */
75
76 void gizmo_color_get(
77         const struct wmGizmo *gz, const bool highlight,
78         float r_color[4]);
79
80 bool gizmo_window_project_2d(
81         bContext *C, const struct wmGizmo *gz, const float mval[2], int axis, bool use_offset,
82         float r_co[2]);
83
84 bool gizmo_window_project_3d(
85         bContext *C, const struct wmGizmo *gz, const float mval[2], bool use_offset,
86         float r_co[3]);
87
88 /* -------------------------------------------------------------------- */
89 /* Gizmo drawing */
90
91 #include "gizmo_geometry.h"
92
93 void wm_gizmo_geometryinfo_draw(const struct GizmoGeomInfo *info, const bool select, const float color[4]);
94 void wm_gizmo_vec_draw(
95         const float color[4], const float (*verts)[3], uint vert_count,
96         uint pos, uint primitive_type);
97
98
99 #endif  /* __GIZMO_LIBRARY_INTERN_H__ */