44 return (region !=
nullptr) && (region->v2d.flag &
V2D_IS_INIT);
55 const int delta_pages =
int((delta_y - page_size * 0.5f) / page_size);
58 if (
abs(delta_pages) < 1) {
63 return delta_pages * page_size;
121 if (region ==
nullptr) {
125 View2D *v2d = ®ion->v2d;
210 vpd->
v2d->
flag &= ~V2D_IS_NAVIGATING;
285 switch (event->
type) {
288 int deltax = vpd->
lastx -
event->xy[0];
289 int deltay = vpd->
lasty -
event->xy[1];
297 vpd->
lastx =
event->xy[0];
300 vpd->
lasty =
event->xy[1];
303 if (deltax || deltay) {
367 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
368 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
397 int event_xy_target[2];
402 vpd->
v2d->
flag &= ~V2D_IS_NAVIGATING;
417 vpd->
v2d->
flag &= ~V2D_IS_NAVIGATING;
424 ot->
name =
"View Edge Pan";
425 ot->
description =
"Pan the view when the mouse is held at an edge";
472 ot->
name =
"Scroll Right";
474 ot->
idname =
"VIEW2D_OT_scroll_right";
481 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
482 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
514 ot->
idname =
"VIEW2D_OT_scroll_left";
521 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
522 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
568 ot->
idname =
"VIEW2D_OT_scroll_down";
575 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
576 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
630 RNA_def_int(
ot->
srna,
"deltax", 0, INT_MIN, INT_MAX,
"Delta X",
"", INT_MIN, INT_MAX);
631 RNA_def_int(
ot->
srna,
"deltay", 0, INT_MIN, INT_MAX,
"Delta Y",
"", INT_MIN, INT_MAX);
681 r_do_zoom_xy[0] =
true;
682 r_do_zoom_xy[1] =
true;
685 if (area && area->spacetype ==
SPACE_SEQ) {
689 r_do_zoom_xy[1] =
false;
700 if (region ==
nullptr) {
709 View2D *v2d = ®ion->v2d;
746 View2D *v2d = ®ion->v2d;
791 const float mval_faci = 1.0f - mval_fac;
792 const float ofs = (mval_fac * dx) - (mval_faci * dx);
827 const float mval_faci = 1.0f - mval_fac;
828 const float ofs = (mval_fac * dy) - (mval_faci * dy);
874 vzd->
v2d->
flag &= ~V2D_IS_NAVIGATING;
1039 dx *= time_step * 5.0f;
1040 dy *= time_step * 5.0f;
1053 const float mval_faci = 1.0f - mval_fac;
1054 const float ofs = (mval_fac * dx) - (mval_faci * dx);
1072 const float mval_faci = 1.0f - mval_fac;
1073 const float ofs = (mval_fac * dy) - (mval_faci * dy);
1106 vzd->
v2d->
flag &= ~V2D_IS_NAVIGATING;
1152 vzd->
lastx =
event->prev_xy[0];
1153 vzd->
lasty =
event->prev_xy[1];
1156 float zoomfac = 0.01f;
1212 vzd->
lastx =
event->xy[0];
1213 vzd->
lasty =
event->xy[1];
1257 float zoomfac = 0.01f;
1287 dx = len_new[0] - len_old[0];
1288 dy = len_new[1] - len_old[1];
1295 float facx = zoomfac * (
event->xy[0] - vzd->
lastx);
1296 float facy = zoomfac * (
event->xy[1] - vzd->
lasty);
1343 vzd->
lastx =
event->xy[0];
1344 vzd->
lasty =
event->xy[1];
1383 ot->
name =
"Zoom 2D View";
1425 View2D *v2d = ®ion->v2d;
1458 float zoom, center,
size;
1467 cur_new.
xmin = center - (size * zoom);
1468 cur_new.
xmax = center + (size * zoom);
1475 cur_new.
ymin = center - (size * zoom);
1476 cur_new.
ymax = center + (size * zoom);
1488 ot->
name =
"Zoom to Border";
1489 ot->
description =
"Zoom in the view to the nearest item contained in the border";
1490 ot->
idname =
"VIEW2D_OT_zoom_border";
1510#ifdef WITH_INPUT_NDOF
1517 const wmNDOFMotionData *ndof =
static_cast<const wmNDOFMotionData *
>(
event->customdata);
1520 const float zoom_sensitivity = 0.5f;
1521 const float speed = 10.0f;
1523 const bool has_zoom = (ndof->tvec[2] != 0.0f) &&
view_zoom_poll(C);
1525 if (has_translate) {
1528 WM_event_ndof_pan_get(ndof, pan_vec,
false);
1530 pan_vec[0] *= speed;
1531 pan_vec[1] *= speed;
1542 float zoom_factor = zoom_sensitivity * ndof->dt * -ndof->tvec[2];
1547 zoom_factor = -zoom_factor;
1556 C, vzd, do_zoom_xy[0] ? zoom_factor : 0.0f, do_zoom_xy[1] ? zoom_factor : 0.0f);
1567 ot->
name =
"NDOF Pan/Zoom";
1569 ot->
description =
"Use a 3D mouse device to pan/zoom the view";
1607 float fac_max = 0.0f;
1609 for (
int i = 0; i < 2; i++) {
1611 float tfac =
fabsf(cent_a[i] - cent_b[i]) /
min_ff(size_a[i], size_b[i]);
1612 fac_max =
max_ff(fac_max, tfac);
1613 if (fac_max >= 1.0f) {
1618 tfac = (1.0f - (
min_ff(size_a[i], size_b[i]) /
max_ff(size_a[i], size_b[i]))) * 2.0f;
1619 fac_max =
max_ff(fac_max, tfac);
1620 if (fac_max >= 1.0f) {
1624 return min_ff(fac_max, 1.0f);
1630 const int smooth_viewtx)
1635 View2D *v2d = ®ion->v2d;
1652 if (smooth_viewtx && fac > FLT_EPSILON) {
1653 bool changed =
false;
1670 if (v2d->
sms ==
nullptr) {
1671 v2d->
sms = MEM_new<SmoothView2DStore>(__func__);
1699 View2D *v2d = ®ion->v2d;
1719 MEM_delete(v2d->
sms);
1730 step = (3.0f * step * step - 2.0f * step * step * step);
1739 if (v2d->
sms ==
nullptr) {
1749 ot->
name =
"Smooth View 2D";
1750 ot->
idname =
"VIEW2D_OT_smoothview";
1831 bool in_view =
true;
1832 if (sh_min <= sc_min && sc_max <= sh_max) {
1835 else if (sh_max <= sc_min || sc_max <= sh_min) {
1884 View2D *v2d = ®ion->v2d;
1893 const char in_scroller)
1896 View2D *v2d = ®ion->v2d;
1908 vsm->
lastx =
event->xy[0];
1909 vsm->
lasty =
event->xy[1];
1922 rcti scroller_mask = v2d->
hor;
1929 rctf tot_cur_union = v2d->
tot;
1932 if (in_scroller ==
'h') {
1985 vsm->
v2d->
flag &= ~V2D_IS_NAVIGATING;
2006 float temp = vsm->
fac * vsm->
delta;
2012 switch (vsm->
zone) {
2068 switch (event->
type) {
2101 if (use_page_size_y && (vsm->
scroller ==
'v')) {
2105 if (
IS_EQF(delta, 0.0f)) {
2111 vsm->
lastx =
event->xy[0];
2112 vsm->
lasty =
event->xy[1];
2151 View2D *v2d = ®ion->v2d;
2238 ot->
name =
"Scroller Activate";
2240 ot->
idname =
"VIEW2D_OT_scroller_activate";
2263 View2D *v2d = ®ion->v2d;
2266 region->category_scroll = 0;
2350#ifdef WITH_INPUT_NDOF
bScreen * CTX_wm_screen(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
RegionView3D * CTX_wm_region_view3d(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(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 float len_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v2(const float v[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)
Platform independent time functions.
double BLI_time_now_seconds(void)
#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 ARegion *region)
bool ED_region_panel_category_gutter_isect_xy(const ARegion *region, const int event_xy[2])
void ED_region_tag_redraw_no_rebuild(ARegion *region)
bool ED_region_snap_size_apply(ARegion *region, int snap_flag)
void ED_region_tag_redraw(ARegion *region)
Read Guarded memory(de)allocation.
const uiStyle * UI_style_get()
void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag)
void UI_view2d_edge_pan_operator_init(bContext *C, View2DEdgePanData *vpd, wmOperator *op)
char char UI_view2d_mouse_in_scrollers(const ARegion *region, const View2D *v2d, const int xy[2]) ATTR_NONNULL(1
void UI_view2d_curRect_changed(const bContext *C, View2D *v2d)
void UI_view2d_edge_pan_operator_properties(wmOperatorType *ot)
#define V2D_SCROLL_HANDLE_SIZE_HOTSPOT
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void void UI_view2d_edge_pan_apply_event(bContext *C, View2DEdgePanData *vpd, const wmEvent *event)
void UI_view2d_zoom_cache_reset()
void UI_view2d_region_to_view_rctf(const View2D *v2d, const rctf *rect_src, rctf *rect_dst) ATTR_NONNULL()
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
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, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const 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, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const 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
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
struct wmEvent * eventstate
ccl_device_inline int abs(int x)
float view2d_page_size_y(const View2D &v2d)
void view2d_scrollers_calc(View2D *v2d, const rcti *mask_custom, View2DScrollers *r_scrollers)
bool view2d_edge_pan_poll(bContext *C)
static int reset_exec(bContext *C, wmOperator *)
static void VIEW2D_OT_scroll_up(wmOperatorType *ot)
static int view_scrollup_exec(bContext *C, wmOperator *op)
static void VIEW2D_OT_scroll_left(wmOperatorType *ot)
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)
void ED_operatortypes_view2d()
static void view_edge_pan_cancel(bContext *, wmOperator *op)
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 int view_edge_pan_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void VIEW2D_OT_pan(wmOperatorType *ot)
static void view_zoomstep_apply_ex(bContext *C, v2dViewZoomData *vzd, const float facx, const float facy)
static void view_zoomstep_exit(bContext *C, wmOperator *op)
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 view_pan_cancel(bContext *, wmOperator *op)
static void scroller_activate_cancel(bContext *C, wmOperator *op)
static float view2d_scroll_delta_y_snap_page_size(const View2D &v2d, const float delta_y)
void ED_keymap_view2d(wmKeyConfig *keyconf)
static int view_zoomout_exec(bContext *C, wmOperator *op)
static float smooth_view_rect_to_fac(const rctf *rect_a, const rctf *rect_b)
@ SCROLLHANDLE_MIN_OUTSIDE
@ SCROLLHANDLE_MAX_OUTSIDE
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 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)
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 int view2d_smoothview_invoke(bContext *C, wmOperator *, const wmEvent *event)
static void VIEW2D_OT_smoothview(wmOperatorType *ot)
static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *event)
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_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 wmEvent *event)
int WM_event_absolute_delta_x(const 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_border_to_rctf(wmOperator *op, rctf *r_rect)
void WM_operator_properties_use_cursor_init(wmOperatorType *ot)
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)
wmWindow * WM_window_find_under_cursor(wmWindow *win, const int event_xy[2], int r_event_xy_other[2])
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)