Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / manipulator_library / manipulator_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 manipulator_library_intern.h
27  *  \ingroup wm
28  */
29
30 #ifndef __MANIPULATOR_LIBRARY_INTERN_H__
31 #define __MANIPULATOR_LIBRARY_INTERN_H__
32
33 /* distance around which manipulators respond to input (and get highlighted) */
34 #define MANIPULATOR_HOTSPOT 14.0f
35
36 /**
37  * Data for common interactions. Used in manipulator_library_utils.c functions.
38  */
39 typedef struct ManipulatorCommonData {
40         int flag;
41
42         float range_fac;      /* factor for arrow min/max distance */
43         float offset;
44
45         /* property range for constrained manipulators */
46         float range;
47         /* min/max value for constrained manipulators */
48         float min, max;
49 } ManipulatorCommonData;
50
51 typedef struct ManipulatorInteraction {
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 } ManipulatorInteraction;
64
65 /* ManipulatorCommonData->flag  */
66 enum {
67         MANIPULATOR_CUSTOM_RANGE_SET = (1 << 0),
68 };
69
70
71 float manipulator_offset_from_value(
72         ManipulatorCommonData *data, const float value,
73         const bool constrained, const bool inverted);
74 float manipulator_value_from_offset(
75         ManipulatorCommonData *data, ManipulatorInteraction *inter, const float offset,
76         const bool constrained, const bool inverted, const bool use_precision);
77
78 void manipulator_property_data_update(
79         struct wmManipulator *mpr, ManipulatorCommonData *data, wmManipulatorProperty *mpr_prop,
80         const bool constrained, const bool inverted);
81
82 void  manipulator_property_value_reset(
83         bContext *C, const struct wmManipulator *mpr, ManipulatorInteraction *inter, wmManipulatorProperty *mpr_prop);
84
85
86 /* -------------------------------------------------------------------- */
87
88 void manipulator_color_get(
89         const struct wmManipulator *mpr, const bool highlight,
90         float r_color[4]);
91
92 bool manipulator_window_project_2d(
93         bContext *C, const struct wmManipulator *mpr, const float mval[2], int axis, bool use_offset,
94         float r_co[2]);
95
96 /* -------------------------------------------------------------------- */
97 /* Manipulator drawing */
98
99 #include "manipulator_geometry.h"
100
101 void wm_manipulator_geometryinfo_draw(const struct ManipulatorGeomInfo *info, const bool select, const float color[4]);
102 void wm_manipulator_vec_draw(
103         const float color[4], const float (*verts)[3], uint vert_count,
104         uint pos, uint primitive_type);
105
106
107 #endif  /* __MANIPULATOR_LIBRARY_INTERN_H__ */
108