Fix: 2D gizmo in 3D shows corner and rotation handles

Corner handles are visible for light gizmo in the 3D viewport:

This was an unintentional side effect of b148593c5d

Pull Request: https://projects.blender.org/blender/blender/pulls/137356
This commit is contained in:
Habib Gahbiche
2025-04-12 21:13:32 +02:00
parent d6d6a7e36f
commit b3a5d03bd0
3 changed files with 36 additions and 17 deletions

View File

@@ -850,13 +850,17 @@ static void gizmo_cage2d_draw_intern(wmGizmo *gz,
cage2d_draw_rect_edge_handles(&r, gz->highlight_part, size_real, margin, color, true);
cage2d_draw_rect_edge_handles(&r, gz->highlight_part, size_real, margin, black, false);
/* Always draw corner handles. */
cage2d_draw_rect_corner_handles(&r, margin, color, true);
cage2d_draw_rect_corner_handles(&r, margin, black, false);
/* Draw corner handles. */
if (draw_options & ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES) {
cage2d_draw_rect_corner_handles(&r, margin, color, true);
cage2d_draw_rect_corner_handles(&r, margin, black, false);
}
/* Rotation handles. */
cage2d_draw_rect_rotate_handle(&r, margin, color, true);
cage2d_draw_rect_rotate_handle(&r, margin, black, false);
if (transform_flag & ED_GIZMO_CAGE_XFORM_FLAG_ROTATE) {
cage2d_draw_rect_rotate_handle(&r, margin, color, true);
cage2d_draw_rect_rotate_handle(&r, margin, black, false);
}
}
else {
BLI_assert(0);
@@ -982,21 +986,27 @@ static int gizmo_cage2d_test_select(bContext *C, wmGizmo *gz, const int mval[2])
r_ymax.xmax = size[0];
r_ymax.ymax = size[1];
const bool draw_corners = draw_options & ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES;
if (BLI_rctf_isect_pt_v(&r_xmin, point_local)) {
if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y;
}
if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y;
if (draw_corners) {
if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y;
}
if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y;
}
}
return ED_GIZMO_CAGE2D_PART_SCALE_MIN_X;
}
if (BLI_rctf_isect_pt_v(&r_xmax, point_local)) {
if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y;
}
if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y;
if (draw_corners) {
if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y;
}
if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
return ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y;
}
}
return ED_GIZMO_CAGE2D_PART_SCALE_MAX_X;
}
@@ -1421,6 +1431,7 @@ static void GIZMO_GT_cage_2d(wmGizmoType *gzt)
};
static const EnumPropertyItem rna_enum_draw_options[] = {
{ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE, "XFORM_CENTER_HANDLE", 0, "Center Handle", ""},
{ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES, "CORNER_HANDLES", 0, "Corner Handles", ""},
{0, nullptr, 0, nullptr, nullptr},
};
static const float unit_v2[2] = {1.0f, 1.0f};

View File

@@ -122,6 +122,7 @@ enum {
/** Draw a central handle (instead of having the entire area selectable)
* Needed for large rectangles that we don't want to swallow all events. */
ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE = (1 << 0),
ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES = (1 << 1),
};
/** #wmGizmo.highlight_part */

View File

@@ -503,6 +503,11 @@ static void WIDGETGROUP_node_box_mask_setup(const bContext * /*C*/, wmGizmoGroup
ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE | ED_GIZMO_CAGE_XFORM_FLAG_ROTATE |
ED_GIZMO_CAGE_XFORM_FLAG_SCALE);
RNA_enum_set(mask_group->border->ptr,
"draw_options",
ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE |
ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES);
gzgroup->customdata = mask_group;
gzgroup->customdata_free = [](void *customdata) {
MEM_delete(static_cast<NodeBBoxWidgetGroup *>(customdata));
@@ -608,8 +613,10 @@ static void WIDGETGROUP_node_ellipse_mask_setup(const bContext * /*C*/, wmGizmoG
ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE | ED_GIZMO_CAGE_XFORM_FLAG_ROTATE |
ED_GIZMO_CAGE_XFORM_FLAG_SCALE);
RNA_enum_set(mask_group->border->ptr, "draw_style", ED_GIZMO_CAGE2D_STYLE_CIRCLE);
RNA_enum_set(
mask_group->border->ptr, "draw_options", ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE);
RNA_enum_set(mask_group->border->ptr,
"draw_options",
ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE |
ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES);
gzgroup->customdata = mask_group;
gzgroup->customdata_free = [](void *customdata) {