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:
@@ -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};
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user