34#define GIZMO_SIZE U.gizmo_size_navigate_v3d
37#define GIZMO_OFFSET 10.0f
40#define GIZMO_MINI_SIZE 28.0f
43#define GIZMO_MINI_OFFSET 2.0f
57 GZ_INDEX_CAMERA_OFF = 5,
58 GZ_INDEX_CAMERA_ON = 6,
60 GZ_INDEX_CAMERA_LOCK = 7,
61 GZ_INDEX_CAMERA_UNLOCK = 8,
66struct NavigateGizmoInfo {
73struct NavigateWidgetGroup {
74 wmGizmo *gz_array[GZ_INDEX_TOTAL];
103 "VIEW3D_GT_navigate_rotate",
109 "GIZMO_GT_button_2d",
114 "VIEW3D_OT_view_persportho",
115 "GIZMO_GT_button_2d",
116 ICON_VIEW_PERSPECTIVE,
120 "VIEW3D_OT_view_persportho",
121 "GIZMO_GT_button_2d",
126 "VIEW3D_OT_view_camera",
127 "GIZMO_GT_button_2d",
128 ICON_VIEW_CAMERA_UNSELECTED,
132 "VIEW3D_OT_view_camera",
133 "GIZMO_GT_button_2d",
138 "WM_OT_context_toggle",
139 "GIZMO_GT_button_2d",
144 "WM_OT_context_toggle",
145 "GIZMO_GT_button_2d",
170 for (
int i = 0;
i < GZ_INDEX_TOTAL;
i++) {
172 navgroup->gz_array[
i] =
WM_gizmo_new(info->gizmo, gzgroup,
nullptr);
173 wmGizmo *gz = navgroup->gz_array[
i];
176 if (
i == GZ_INDEX_ROTATE) {
184 int color_tint, color_tint_hi;
185 if (icon_color[0] > 128) {
203 if (info->icon != ICON_NONE) {
216 if (info->op_prop_fn !=
nullptr) {
217 info->op_prop_fn(
ptr);
223 wmGizmo *gz = navgroup->gz_array[GZ_INDEX_CAMERA_OFF];
227 wmGizmo *gz = navgroup->gz_array[GZ_INDEX_CAMERA_ON];
233 int gz_ids[] = {GZ_INDEX_PERSP,
237 GZ_INDEX_CAMERA_LOCK,
238 GZ_INDEX_CAMERA_UNLOCK};
240 wmGizmo *gz = navgroup->gz_array[gz_ids[
i]];
247 int gz_ids[] = {GZ_INDEX_MOVE, GZ_INDEX_ROTATE, GZ_INDEX_ZOOM};
249 wmGizmo *gz = navgroup->gz_array[gz_ids[
i]];
256 wmGizmo *gz = navgroup->gz_array[GZ_INDEX_ROTATE];
258 const char mapping[6] = {
267 for (
int part_index = 0; part_index < 6; part_index += 1) {
283 NavigateWidgetGroup *navgroup =
static_cast<NavigateWidgetGroup *
>(gzgroup->
customdata);
288 for (
int i = 0;
i < 3;
i++) {
297 if ((navgroup->state.rect_visible.xmax == rect_visible->
xmax) &&
298 (navgroup->state.rect_visible.ymax == rect_visible->
ymax) &&
299 (navgroup->state.rv3d.is_persp == rv3d->
is_persp) &&
307 navgroup->state.rect_visible = *rect_visible;
308 navgroup->state.rv3d.is_persp = rv3d->
is_persp;
317 const float co_rotate[2] = {
318 rect_visible->
xmax - icon_offset,
319 rect_visible->
ymax - icon_offset,
322 float icon_offset_from_axis = 0.0f;
325 icon_offset_from_axis = icon_offset * 2.1f;
328 icon_offset_from_axis = (
UI_UNIT_X * 2.5) + (
U.rvisize *
U.pixelsize * 2.0f);
331 icon_offset_from_axis = icon_offset_mini * 0.75f;
335 const float co[2] = {
336 roundf(rect_visible->
xmax - icon_offset_mini * 0.75f),
337 roundf(rect_visible->
ymax - icon_offset_from_axis),
343 gz = navgroup->gz_array[
i];
347 if (show_rotate_gizmo) {
348 gz = navgroup->gz_array[GZ_INDEX_ROTATE];
355 int icon_mini_slot = 0;
357 gz = navgroup->gz_array[GZ_INDEX_ZOOM];
364 gz = navgroup->gz_array[GZ_INDEX_MOVE];
372 ->gz_array[(rv3d->
persp ==
RV3D_CAMOB) ? GZ_INDEX_CAMERA_ON : GZ_INDEX_CAMERA_OFF];
377 if (navgroup->state.rv3d.is_camera ==
false) {
378 gz = navgroup->gz_array[rv3d->
is_persp ? GZ_INDEX_PERSP : GZ_INDEX_ORTHO];
385 if (navgroup->state.rv3d.is_camera ==
true) {
387 GZ_INDEX_CAMERA_UNLOCK];
397 gzgt->
name =
"View3D Navigate";
398 gzgt->
idname =
"VIEW3D_GGT_navigate";
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
#define CHECK_TYPE_PAIR(var_a, var_b)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl(float r[3], float f)
@ USER_SHOW_GIZMO_NAVIGATE
@ USER_MINI_AXIS_TYPE_GIZMO
@ USER_MINI_AXIS_TYPE_MINIMAL
@ USER_MINI_AXIS_TYPE_NONE
@ V3D_GIZMO_HIDE_NAVIGATE
#define RV3D_LOCK_FLAGS(rv3d)
@ RV3D_LOCK_ZOOM_AND_DOLLY
@ ED_GIZMO_BUTTON_SHOW_BACKDROP
@ ED_GIZMO_BUTTON_SHOW_OUTLINE
const rcti * ED_region_visible_rect(ARegion *region)
Read Guarded memory(de)allocation.
void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3])
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
@ WM_GIZMOGROUPTYPE_SCALE
@ WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL
@ WM_GIZMOGROUPTYPE_PERSISTENT
void * MEM_callocN(size_t len, const char *str)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
eWM_GizmoFlagGroupTypeFlag flag
wmGizmoGroupFnDrawPrepare draw_prepare
float matrix_offset[4][4]
static void WIDGETGROUP_navigate_setup(const bContext *, wmGizmoGroup *gzgroup)
static bool WIDGETGROUP_navigate_poll(const bContext *C, wmGizmoGroupType *)
static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup)
static NavigateGizmoInfo g_navigate_params[GZ_INDEX_TOTAL]
static void WIDGETGROUP_navigate_setup(const bContext *C, wmGizmoGroup *gzgroup)
#define GIZMO_MINI_OFFSET
void VIEW3D_GGT_navigate(wmGizmoGroupType *gzgt)
static bool WIDGETGROUP_navigate_poll(const bContext *C, wmGizmoGroupType *)
static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup)
static void navigate_context_toggle_camera_lock_init(PointerRNA *ptr)
wmGizmoOpElem * WM_gizmo_operator_get(wmGizmo *gz, int part_index)
void WM_gizmo_set_flag(wmGizmo *gz, const int flag, const bool enable)
PointerRNA * WM_gizmo_operator_set(wmGizmo *gz, int part_index, wmOperatorType *ot, IDProperty *properties)
wmGizmo * WM_gizmo_new(const StringRef idname, wmGizmoGroup *gzgroup, PointerRNA *properties)
wmKeyMap * WM_gizmo_keymap_generic_press_drag(wmWindowManager *wm)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)