Blender V4.3
cage2d_gizmo.cc File Reference
#include "MEM_guardedalloc.h"
#include "BLI_dial_2d.h"
#include "BLI_math_base_safe.h"
#include "BLI_math_matrix.h"
#include "BLI_math_vector_types.hh"
#include "BLI_rect.h"
#include "BKE_context.hh"
#include "GPU_immediate.hh"
#include "GPU_immediate_util.hh"
#include "GPU_matrix.hh"
#include "GPU_select.hh"
#include "GPU_shader.hh"
#include "GPU_state.hh"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ED_gizmo_library.hh"
#include "ED_screen.hh"
#include "../gizmo_library_intern.hh"

Go to the source code of this file.

Classes

struct  RectTransformInteraction
 

Macros

#define MUL_V2_V3_M4_FINAL(test_co, mouse_co)    mul_v3_m4v3(test_co, data->orig_matrix_final_no_offset, blender::float3{UNPACK2(mouse_co), 0.0})
 

Functions

static void gizmo_cage2d_draw_intern (wmGizmo *gz, const bool select, const bool highlight, const int select_id)
 
static void gizmo_cage2d_draw_select (const bContext *, wmGizmo *gz, int select_id)
 
static void gizmo_cage2d_draw (const bContext *, wmGizmo *gz)
 
static int gizmo_cage2d_get_cursor (wmGizmo *gz)
 
static int gizmo_cage2d_test_select (bContext *C, wmGizmo *gz, const int mval[2])
 
static void gizmo_cage2d_setup (wmGizmo *gz)
 
static int gizmo_cage2d_invoke (bContext *C, wmGizmo *gz, const wmEvent *event)
 
static void gizmo_constrain_from_scale_part (int part, bool r_constrain_axis[2])
 
static void gizmo_pivot_from_scale_part (int part, float r_pt[2])
 
static int gizmo_cage2d_modal (bContext *C, wmGizmo *gz, const wmEvent *event, eWM_GizmoFlagTweak)
 
static void gizmo_cage2d_property_update (wmGizmo *gz, wmGizmoProperty *gz_prop)
 
static void gizmo_cage2d_exit (bContext *C, wmGizmo *gz, const bool cancel)
 
Box Draw Style

Useful for 3D views, see: ED_GIZMO_CAGE2D_STYLE_BOX

static void cage2d_draw_box_corners (const rctf *r, const float margin[2], const float color[3], const float line_width)
 
static void cage2d_draw_box_interaction (const float color[4], const int highlighted, const float size[2], const float margin[2], const float line_width, const bool is_solid, const int draw_options)
 
Circle Draw Style

Useful for 2D views, see: ED_GIZMO_CAGE2D_STYLE_CIRCLE

static void imm_draw_point_aspect_2d (uint pos, float x, float y, float rad_x, float rad_y, bool solid)
 
static void cage2d_draw_rect_wire (const rctf *r, const float margin[2], const float color[3], const int transform_flag, const int draw_options, const float line_width)
 
static void cage2d_draw_circle_wire (const float color[3], const float size[2], const float margin[2], const float line_width)
 
static void cage2d_draw_rect_corner_handles (const rctf *r, const int highlighted, const float margin[2], const float color[3], const int transform_flag, bool solid)
 
static void cage2d_draw_rect_edge_handles (const rctf *r, const int highlighted, const float size[2], const float margin[2], const float color[3], bool solid)
 
Cage Gizmo API
static void GIZMO_GT_cage_2d (wmGizmoType *gzt)
 
void ED_gizmotypes_cage_2d ()
 

Cage Gizmo

Rectangular or circular gizmo acting as a 'cage' around its content. Interacting scales or translates the gizmo.

2D Gizmo

#define GIZMO_MARGIN_OFFSET_SCALE   1.5f
 
#define CIRCLE_RESOL   32
 
static int gizmo_cage2d_transform_flag_get (const wmGizmo *gz)
 
static void gizmo_calc_rect_view_scale (const wmGizmo *gz, const float dims[2], float scale[2])
 
static void gizmo_calc_rect_view_margin (const wmGizmo *gz, const float dims[2], float margin[2])
 

Macro Definition Documentation

◆ CIRCLE_RESOL

#define CIRCLE_RESOL   32

Definition at line 47 of file cage2d_gizmo.cc.

Referenced by cage2d_draw_circle_wire().

◆ GIZMO_MARGIN_OFFSET_SCALE

#define GIZMO_MARGIN_OFFSET_SCALE   1.5f

Definition at line 45 of file cage2d_gizmo.cc.

Referenced by cage2d_draw_rect_corner_handles(), and gizmo_cage2d_test_select().

◆ MUL_V2_V3_M4_FINAL

#define MUL_V2_V3_M4_FINAL ( test_co,
mouse_co )    mul_v3_m4v3(test_co, data->orig_matrix_final_no_offset, blender::float3{UNPACK2(mouse_co), 0.0})

Referenced by gizmo_cage2d_modal().

Function Documentation

◆ cage2d_draw_box_corners()

◆ cage2d_draw_box_interaction()

◆ cage2d_draw_circle_wire()

◆ cage2d_draw_rect_corner_handles()

◆ cage2d_draw_rect_edge_handles()

◆ cage2d_draw_rect_wire()

◆ ED_gizmotypes_cage_2d()

void ED_gizmotypes_cage_2d ( )

Definition at line 1371 of file cage2d_gizmo.cc.

References GIZMO_GT_cage_2d(), and WM_gizmotype_append().

Referenced by ED_spacetypes_init().

◆ gizmo_cage2d_draw()

static void gizmo_cage2d_draw ( const bContext * ,
wmGizmo * gz )
static

Definition at line 830 of file cage2d_gizmo.cc.

References gizmo_cage2d_draw_intern(), wmGizmo::state, and WM_GIZMO_STATE_HIGHLIGHT.

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_draw_intern()

static void gizmo_cage2d_draw_intern ( wmGizmo * gz,
const bool select,
const bool highlight,
const int select_id )
static

Definition at line 661 of file cage2d_gizmo.cc.

References ARRAY_SIZE, BLI_assert, cage2d_draw_box_corners(), cage2d_draw_box_interaction(), cage2d_draw_circle_wire(), cage2d_draw_rect_corner_handles(), cage2d_draw_rect_edge_handles(), cage2d_draw_rect_wire(), wmGizmo::color, ED_GIZMO_CAGE2D_PART_ROTATE, ED_GIZMO_CAGE2D_PART_SCALE, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y, ED_GIZMO_CAGE2D_PART_SCALE_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_Y, ED_GIZMO_CAGE2D_PART_TRANSLATE, ED_GIZMO_CAGE2D_STYLE_BOX, ED_GIZMO_CAGE2D_STYLE_BOX_TRANSFORM, ED_GIZMO_CAGE2D_STYLE_CIRCLE, ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE, ED_GIZMO_CAGE_XFORM_FLAG_ROTATE, ED_GIZMO_CAGE_XFORM_FLAG_SCALE, ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE, gizmo_cage2d_transform_flag_get(), gizmo_calc_rect_view_margin(), gizmo_color_get(), GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_matrix_mul, GPU_matrix_pop(), GPU_matrix_push(), GPU_select_load_id(), GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), wmGizmo::highlight_part, immBindBuiltinProgram(), immRectf(), immUnbindProgram(), immUniformColor4f(), immVertexFormat(), wmGizmo::line_width, pos, wmGizmo::ptr, RNA_enum_get(), RNA_float_get_array(), select(), WM_gizmo_calc_matrix_final(), rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.

Referenced by gizmo_cage2d_draw(), and gizmo_cage2d_draw_select().

◆ gizmo_cage2d_draw_select()

static void gizmo_cage2d_draw_select ( const bContext * ,
wmGizmo * gz,
int select_id )
static

For when we want to draw 2d cage in 3d views.

Definition at line 825 of file cage2d_gizmo.cc.

References gizmo_cage2d_draw_intern().

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_exit()

static void gizmo_cage2d_exit ( bContext * C,
wmGizmo * gz,
const bool cancel )
static

◆ gizmo_cage2d_get_cursor()

◆ gizmo_cage2d_invoke()

◆ gizmo_cage2d_modal()

◆ gizmo_cage2d_property_update()

◆ gizmo_cage2d_setup()

static void gizmo_cage2d_setup ( wmGizmo * gz)
static

Definition at line 1003 of file cage2d_gizmo.cc.

References wmGizmo::flag, WM_GIZMO_DRAW_MODAL, and WM_GIZMO_DRAW_NO_SCALE.

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_test_select()

◆ gizmo_cage2d_transform_flag_get()

static int gizmo_cage2d_transform_flag_get ( const wmGizmo * gz)
static

◆ gizmo_calc_rect_view_margin()

static void gizmo_calc_rect_view_margin ( const wmGizmo * gz,
const float dims[2],
float margin[2] )
static

◆ gizmo_calc_rect_view_scale()

static void gizmo_calc_rect_view_scale ( const wmGizmo * gz,
const float dims[2],
float scale[2] )
static

◆ gizmo_constrain_from_scale_part()

static void gizmo_constrain_from_scale_part ( int part,
bool r_constrain_axis[2] )
static

◆ GIZMO_GT_cage_2d()

◆ gizmo_pivot_from_scale_part()

◆ imm_draw_point_aspect_2d()

static void imm_draw_point_aspect_2d ( uint pos,
float x,
float y,
float rad_x,
float rad_y,
bool solid )
static