a713202fc4b65c3ba4a41bf6ab63a9d29994eee2
[blender.git] / source / blender / editors / include / ED_manipulator_library.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  * ***** END GPL LICENSE BLOCK *****
19  */
20
21 /** \file ED_manipulator_library.h
22  *  \ingroup wm
23  *
24  * \name Generic Manipulators.
25  *
26  * This is exposes pre-defined manipulators for re-use.
27  */
28
29
30 #ifndef __ED_MANIPULATOR_LIBRARY_H__
31 #define __ED_MANIPULATOR_LIBRARY_H__
32
33 /* initialize manipulators */
34 void ED_manipulatortypes_arrow_2d(void);
35 void ED_manipulatortypes_arrow_3d(void);
36 void ED_manipulatortypes_cage_2d(void);
37 void ED_manipulatortypes_dial_3d(void);
38 void ED_manipulatortypes_grab_3d(void);
39 void ED_manipulatortypes_facemap_3d(void);
40 void ED_manipulatortypes_primitive_3d(void);
41
42 struct wmManipulator;
43 struct wmManipulatorGroup;
44
45
46 /* -------------------------------------------------------------------- */
47 /* Shape Presets
48  *
49  * Intended to be called by custom draw functions.
50  */
51
52 /* manipulator_library_presets.c */
53 void ED_manipulator_draw_preset_box(
54         const struct wmManipulator *mpr, float mat[4][4], int select_id);
55 void ED_manipulator_draw_preset_arrow(
56         const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
57 void ED_manipulator_draw_preset_circle(
58         const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
59 void ED_manipulator_draw_preset_facemap(
60         const struct bContext *C, const struct wmManipulator *mpr, struct Scene *scene,
61         struct Object *ob,  const int facemap, int select_id);
62
63
64 /* -------------------------------------------------------------------- */
65 /* 3D Arrow Manipulator */
66
67 enum {
68         ED_MANIPULATOR_ARROW_STYLE_NORMAL        = 0,
69         ED_MANIPULATOR_ARROW_STYLE_CROSS         = 1,
70         ED_MANIPULATOR_ARROW_STYLE_BOX           = 2,
71         ED_MANIPULATOR_ARROW_STYLE_CONE          = 3,
72 };
73
74 enum {
75         /* inverted offset during interaction - if set it also sets constrained below */
76         ED_MANIPULATOR_ARROW_STYLE_INVERTED      = (1 << 3),
77         /* clamp arrow interaction to property width */
78         ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED   = (1 << 4),
79 };
80
81 void ED_manipulator_arrow3d_set_ui_range(struct wmManipulator *mpr, const float min, const float max);
82 void ED_manipulator_arrow3d_set_range_fac(struct wmManipulator *mpr, const float range_fac);
83
84 /* -------------------------------------------------------------------- */
85 /* 2D Arrow Manipulator */
86
87 /* none */
88
89 /* -------------------------------------------------------------------- */
90 /* Cage Manipulator */
91
92 enum {
93         ED_MANIPULATOR_RECT_TRANSFORM_FLAG_TRANSLATE        = (1 << 0), /* Manipulator translates */
94         ED_MANIPULATOR_RECT_TRANSFORM_FLAG_ROTATE           = (1 << 1), /* Manipulator rotates */
95         ED_MANIPULATOR_RECT_TRANSFORM_FLAG_SCALE            = (1 << 2), /* Manipulator scales */
96         ED_MANIPULATOR_RECT_TRANSFORM_FLAG_SCALE_UNIFORM    = (1 << 3), /* Manipulator scales uniformly */
97 };
98
99 /* -------------------------------------------------------------------- */
100 /* Dial Manipulator */
101
102 /* draw_options */
103 enum {
104         ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP               = 0,
105         ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP              = (1 << 0),
106         ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL              = (1 << 1),
107         ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR      = (1 << 2),
108         ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y     = (1 << 3),
109 };
110
111 /* -------------------------------------------------------------------- */
112 /* Grab Manipulator */
113
114 /* draw_options */
115 enum {
116         ED_MANIPULATOR_GRAB_DRAW_FLAG_NOP               = 0,
117         /* only for solid shapes */
118         ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL              = (1 << 0),
119 };
120
121 enum {
122         ED_MANIPULATOR_GRAB_STYLE_RING_2D = 0,
123         ED_MANIPULATOR_GRAB_STYLE_CROSS_2D = 1,
124 };
125
126
127 /* -------------------------------------------------------------------- */
128 /* Primitive Manipulator */
129
130 enum {
131         ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE = 0,
132 };
133
134 #endif  /* __ED_MANIPULATOR_LIBRARY_H__ */