98 if (region ==
nullptr) {
250 switch (event->
type) {
256 vpd->
lastx =
event->xy[0];
257 vpd->
lasty =
event->xy[1];
319 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
320 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
371 ot->
name =
"View Edge Pan";
372 ot->
description =
"Pan the view when the mouse is held at an edge";
419 ot->
name =
"Scroll Right";
421 ot->
idname =
"VIEW2D_OT_scroll_right";
428 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
429 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
461 ot->
idname =
"VIEW2D_OT_scroll_left";
468 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
469 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
507 ot->
idname =
"VIEW2D_OT_scroll_down";
514 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
515 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
561 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
562 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
612 r_do_zoom_xy[0] =
true;
613 r_do_zoom_xy[1] =
true;
620 r_do_zoom_xy[1] =
false;
631 if (region ==
nullptr) {
721 const float mval_faci = 1.0f - mval_fac;
722 const float ofs = (mval_fac * dx) - (mval_faci * dx);
756 const float mval_faci = 1.0f - mval_fac;
757 const float ofs = (mval_fac * dy) - (mval_faci * dy);
858 ot->
srna,
"zoomfacx", 0, -FLT_MAX, FLT_MAX,
"Zoom Factor X",
"", -FLT_MAX, FLT_MAX);
861 ot->
srna,
"zoomfacy", 0, -FLT_MAX, FLT_MAX,
"Zoom Factor Y",
"", -FLT_MAX, FLT_MAX);
923 ot->
srna,
"zoomfacx", 0, -FLT_MAX, FLT_MAX,
"Zoom Factor X",
"", -FLT_MAX, FLT_MAX);
926 ot->
srna,
"zoomfacy", 0, -FLT_MAX, FLT_MAX,
"Zoom Factor Y",
"", -FLT_MAX, FLT_MAX);
963 dx *= time_step * 5.0f;
964 dy *= time_step * 5.0f;
977 const float mval_faci = 1.0f - mval_fac;
978 const float ofs = (mval_fac * dx) - (mval_faci * dx);
996 const float mval_faci = 1.0f - mval_fac;
997 const float ofs = (mval_fac * dy) - (mval_faci * dy);
1076 vzd->
lastx =
event->prev_xy[0];
1077 vzd->
lasty =
event->prev_xy[1];
1080 float zoomfac = 0.01f;
1135 vzd->
lastx =
event->xy[0];
1136 vzd->
lasty =
event->xy[1];
1178 float zoomfac = 0.01f;
1208 dx = len_new[0] - len_old[0];
1209 dy = len_new[1] - len_old[1];
1216 float facx = zoomfac * (
event->xy[0] - vzd->
lastx);
1217 float facy = zoomfac * (
event->xy[1] - vzd->
lasty);
1263 vzd->
lastx =
event->xy[0];
1264 vzd->
lasty =
event->xy[1];
1303 ot->
name =
"Zoom 2D View";
1319 prop =
RNA_def_float(
ot->
srna,
"deltax", 0, -FLT_MAX, FLT_MAX,
"Delta X",
"", -FLT_MAX, FLT_MAX);
1321 prop =
RNA_def_float(
ot->
srna,
"deltay", 0, -FLT_MAX, FLT_MAX,
"Delta Y",
"", -FLT_MAX, FLT_MAX);
1410 ot->
name =
"Zoom to Border";
1411 ot->
description =
"Zoom in the view to the nearest item contained in the border";
1412 ot->
idname =
"VIEW2D_OT_zoom_border";
1432 #ifdef WITH_INPUT_NDOF
1439 const wmNDOFMotionData *ndof =
static_cast<const wmNDOFMotionData *
>(
event->customdata);
1442 const float zoom_sensitivity = 0.5f;
1443 const float speed = 10.0f;
1447 if (has_translate) {
1450 WM_event_ndof_pan_get(ndof, pan_vec,
false);
1452 pan_vec[0] *= speed;
1453 pan_vec[1] *= speed;
1464 float zoom_factor = zoom_sensitivity * ndof->dt * -ndof->tvec[2];
1469 zoom_factor = -zoom_factor;
1478 C, vzd, do_zoom_xy[0] ? zoom_factor : 0.0f, do_zoom_xy[1] ? zoom_factor : 0.0f);
1489 ot->
name =
"NDOF Pan/Zoom";
1491 ot->
description =
"Use a 3D mouse device to pan/zoom the view";
1529 float fac_max = 0.0f;
1531 for (
int i = 0; i < 2; i++) {
1533 float tfac =
fabsf(cent_a[i] - cent_b[i]) /
min_ff(size_a[i], size_b[i]);
1534 fac_max =
max_ff(fac_max, tfac);
1535 if (fac_max >= 1.0f) {
1540 tfac = (1.0f - (
min_ff(size_a[i], size_b[i]) /
max_ff(size_a[i], size_b[i]))) * 2.0f;
1541 fac_max =
max_ff(fac_max, tfac);
1542 if (fac_max >= 1.0f) {
1546 return min_ff(fac_max, 1.0f);
1552 const int smooth_viewtx)
1574 if (smooth_viewtx && fac > FLT_EPSILON) {
1575 bool changed =
false;
1592 if (v2d->
sms ==
nullptr) {
1593 v2d->
sms = MEM_new<SmoothView2DStore>(__func__);
1652 step = (3.0f * step * step - 2.0f * step * step * step);
1661 if (v2d->
sms ==
nullptr) {
1671 ot->
name =
"Smooth View 2D";
1672 ot->
idname =
"VIEW2D_OT_smoothview";
1770 bool in_view =
true;
1771 if (sh_min <= sc_min && sc_max <= sh_max) {
1774 else if (sh_max <= sc_min || sc_max <= sh_min) {
1832 const char in_scroller)
1847 vsm->
lastx =
event->xy[0];
1848 vsm->
lasty =
event->xy[1];
1856 rcti scroller_mask = v2d->
hor;
1862 rctf tot_cur_union = v2d->
tot;
1865 if (in_scroller ==
'h') {
1939 float temp = vsm->
fac * vsm->
delta;
1945 switch (vsm->
zone) {
2000 switch (event->
type) {
2031 vsm->
lastx =
event->xy[0];
2032 vsm->
lasty =
event->xy[1];
2156 ot->
name =
"Scroller Activate";
2158 ot->
idname =
"VIEW2D_OT_scroller_activate";
2266 #ifdef WITH_INPUT_NDOF
typedef float(TangentPoint)[2]
struct ScrArea * CTX_wm_area(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct bScreen * CTX_wm_screen(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct RegionView3D * CTX_wm_region_view3d(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
MINLINE float max_ff(float a, float b)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE bool is_zero_v2(const float a[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v2(const float a[2]) ATTR_WARN_UNUSED_RESULT
void BLI_rcti_union(struct rcti *rct_a, const struct rcti *rct_b)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
void BLI_rctf_union(struct rctf *rct_a, const struct rctf *rct_b)
BLI_INLINE float BLI_rctf_cent_y(const struct rctf *rct)
BLI_INLINE float BLI_rctf_cent_x(const struct rctf *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
void BLI_rctf_interp(struct rctf *rect, const struct rctf *rect_a, const struct rctf *rect_b, float fac)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
bool BLI_rctf_compare(const struct rctf *rect_a, const struct rctf *rect_b, float limit)
#define IN_RANGE_INCL(a, b, c)
typedef double(DMatrix)[4][4]
@ V2D_SCROLL_HORIZONTAL_FULLR
@ V2D_SCROLL_VERTICAL_FULLR
@ V2D_SCROLL_VERTICAL_HANDLES
@ V2D_SCROLL_HORIZONTAL_HANDLES
void ED_area_tag_redraw(ScrArea *area)
int ED_region_snap_size_test(const struct ARegion *region)
void ED_region_tag_redraw_no_rebuild(struct ARegion *region)
bool ED_region_snap_size_apply(struct ARegion *region, int snap_flag)
void ED_region_tag_redraw(struct ARegion *region)
NSNotificationCenter * center
Read Guarded memory(de)allocation.
Platform independent time functions.
const struct uiStyle * UI_style_get(void)
void UI_view2d_edge_pan_operator_init(struct bContext *C, struct View2DEdgePanData *vpd, struct wmOperator *op)
bool UI_view2d_edge_pan_poll(struct bContext *C)
void UI_view2d_region_to_view_rctf(const struct View2D *v2d, const struct rctf *rect_src, struct rctf *rect_dst) ATTR_NONNULL()
char char UI_view2d_mouse_in_scrollers(const struct ARegion *region, const struct View2D *v2d, const int xy[2]) ATTR_NONNULL(1
#define V2D_SCROLL_HANDLE_SIZE_HOTSPOT
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void UI_view2d_zoom_cache_reset(void)
void UI_view2d_edge_pan_operator_properties(struct wmOperatorType *ot)
void UI_view2d_sync(struct bScreen *screen, struct ScrArea *area, struct View2D *v2dcur, int flag)
void UI_view2d_curRect_changed(const struct bContext *C, struct View2D *v2d)
void void UI_view2d_edge_pan_apply_event(struct bContext *C, struct View2DEdgePanData *vpd, const struct wmEvent *event)
void UI_view2d_scrollers_calc(struct View2D *v2d, const struct rcti *mask_custom, struct View2DScrollers *r_scrollers)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
struct SmoothView2DStore * sms
struct wmTimer * smooth_timer
double edge_pan_last_time
double edge_pan_start_time_x
double edge_pan_start_time_y
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
int(* modal)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
void(* cancel)(struct bContext *, struct wmOperator *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct wmEvent * eventstate
double PIL_check_seconds_timer(void)
static void VIEW2D_OT_scroll_up(wmOperatorType *ot)
static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
static int view_scrollup_exec(bContext *C, wmOperator *op)
static void VIEW2D_OT_scroll_left(wmOperatorType *ot)
static void view_pan_cancel(bContext *UNUSED(C), wmOperator *op)
static void scroller_activate_apply(bContext *C, wmOperator *op)
void UI_view2d_smooth_view(const bContext *C, ARegion *region, const rctf *cur, const int smooth_viewtx)
static bool view_zoom_poll(bContext *C)
static int view_scrolldown_exec(bContext *C, wmOperator *op)
static int view_zoomout_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void VIEW2D_OT_scroller_activate(wmOperatorType *ot)
static int view_zoomin_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int view_edge_pan_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int view_scrollleft_exec(bContext *C, wmOperator *op)
static void VIEW2D_OT_scroll_down(wmOperatorType *ot)
static void view_zoomstep_apply(bContext *C, wmOperator *op)
static void VIEW2D_OT_pan(wmOperatorType *ot)
static void view_zoomstep_apply_ex(bContext *C, v2dViewZoomData *vzd, const float facx, const float facy)
@ SCROLLHANDLE_MIN_OUTSIDE
@ SCROLLHANDLE_MAX_OUTSIDE
static void VIEW2D_OT_zoom_out(wmOperatorType *ot)
static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float dy)
static void scroller_activate_exit(bContext *C, wmOperator *op)
static int view_zoomin_exec(bContext *C, wmOperator *op)
static int view_pan_exec(bContext *C, wmOperator *op)
static void VIEW2D_OT_zoom_border(wmOperatorType *ot)
static void view_pan_exit(wmOperator *op)
static int view_scrollright_exec(bContext *C, wmOperator *op)
static void VIEW2D_OT_zoom(wmOperatorType *ot)
static bool view2d_poll(bContext *C)
static void view_zoomdrag_exit(bContext *C, wmOperator *op)
static void VIEW2D_OT_zoom_in(wmOperatorType *ot)
static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void view_zoomdrag_apply(bContext *C, wmOperator *op)
static void scroller_activate_cancel(bContext *C, wmOperator *op)
void ED_keymap_view2d(wmKeyConfig *keyconf)
static void view_edge_pan_cancel(bContext *UNUSED(C), wmOperator *op)
static int view_zoomout_exec(bContext *C, wmOperator *op)
static float smooth_view_rect_to_fac(const rctf *rect_a, const rctf *rect_b)
static int view_borderzoom_exec(bContext *C, wmOperator *op)
static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void view_pan_init(bContext *C, wmOperator *op)
static int view_edge_pan_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event)
void ED_operatortypes_view2d(void)
static void VIEW2D_OT_scroll_right(wmOperatorType *ot)
static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_min, int sh_max)
static void view_pan_apply(bContext *C, wmOperator *op)
static bool view_pan_poll(bContext *C)
static void VIEW2D_OT_edge_pan(wmOperatorType *ot)
static void view_zoomdrag_cancel(bContext *C, wmOperator *op)
static void VIEW2D_OT_reset(wmOperatorType *ot)
static int view_zoomdrag_exec(bContext *C, wmOperator *op)
static bool scroller_activate_poll(bContext *C)
static void VIEW2D_OT_smoothview(wmOperatorType *ot)
static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int reset_exec(bContext *C, wmOperator *UNUSED(op))
static void scroller_activate_init(bContext *C, wmOperator *op, const wmEvent *event, const char in_scroller)
static void view_zoomdrag_init(bContext *C, wmOperator *op)
static void view_zoomstep_exit(wmOperator *op)
static void view_zoom_axis_lock_defaults(bContext *C, bool r_do_zoom_xy[2])
void WM_cursor_modal_set(wmWindow *win, int val)
void WM_cursor_modal_restore(wmWindow *win)
int WM_event_absolute_delta_y(const struct wmEvent *event)
int WM_event_absolute_delta_x(const struct wmEvent *event)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_operator_name_call(bContext *C, const char *opstring, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
void WM_event_add_mousemove(wmWindow *win)
void WM_gesture_box_cancel(bContext *C, wmOperator *op)
int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
void WM_operator_properties_gesture_box(wmOperatorType *ot)
void WM_operator_properties_use_cursor_init(wmOperatorType *ot)
void WM_operator_properties_border_to_rctf(struct wmOperator *op, rctf *rect)
void WM_operator_properties_gesture_box_zoom(wmOperatorType *ot)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
int WM_operator_smooth_viewtx_get(const wmOperator *op)
void WM_event_remove_timer(wmWindowManager *wm, wmWindow *UNUSED(win), wmTimer *timer)
wmTimer * WM_event_add_timer(wmWindowManager *wm, wmWindow *win, int event_type, double timestep)