Merge branch 'blender-v3.3-release'

This commit is contained in:
Germano Cavalcante 2022-08-26 15:35:18 -03:00
commit 6a9cf59ce1
1 changed files with 24 additions and 12 deletions

View File

@ -27,6 +27,13 @@
#include "transform_convert.h"
#include "transform_snap.h"
struct TransCustomDataNode {
View2DEdgePanData edgepan_data;
/* Compare if the view has changed so we can update with `transformViewUpdate`. */
rctf viewrect_prev;
};
/* -------------------------------------------------------------------- */
/** \name Node Transform Creation
* \{ */
@ -95,15 +102,17 @@ static void createTransNodeData(bContext *UNUSED(C), TransInfo *t)
SpaceNode *snode = t->area->spacedata.first;
/* Custom data to enable edge panning during the node transform */
View2DEdgePanData *customdata = MEM_callocN(sizeof(*customdata), __func__);
struct TransCustomDataNode *customdata = MEM_callocN(sizeof(*customdata), __func__);
UI_view2d_edge_pan_init(t->context,
customdata,
&customdata->edgepan_data,
NODE_EDGE_PAN_INSIDE_PAD,
NODE_EDGE_PAN_OUTSIDE_PAD,
NODE_EDGE_PAN_SPEED_RAMP,
NODE_EDGE_PAN_MAX_SPEED,
NODE_EDGE_PAN_DELAY,
NODE_EDGE_PAN_ZOOM_INFLUENCE);
customdata->viewrect_prev = customdata->edgepan_data.initial_rect;
t->custom.type.data = customdata;
t->custom.type.use_free = true;
@ -153,13 +162,12 @@ static void createTransNodeData(bContext *UNUSED(C), TransInfo *t)
static void flushTransNodes(TransInfo *t)
{
const float dpi_fac = UI_DPI_FAC;
float offset[2] = {0.0f, 0.0f};
View2DEdgePanData *customdata = (View2DEdgePanData *)t->custom.type.data;
struct TransCustomDataNode *customdata = (struct TransCustomDataNode *)t->custom.type.data;
if (t->options & CTX_VIEW2D_EDGE_PAN) {
if (t->state == TRANS_CANCEL) {
UI_view2d_edge_pan_cancel(t->context, customdata);
UI_view2d_edge_pan_cancel(t->context, &customdata->edgepan_data);
}
else {
/* Edge panning functions expect window coordinates, mval is relative to region */
@ -167,13 +175,17 @@ static void flushTransNodes(TransInfo *t)
t->region->winrct.xmin + t->mval[0],
t->region->winrct.ymin + t->mval[1],
};
const rctf rect = t->region->v2d.cur;
UI_view2d_edge_pan_apply(t->context, customdata, xy);
if (!BLI_rctf_compare(&rect, &t->region->v2d.cur, FLT_EPSILON)) {
/* Additional offset due to change in view2D rect. */
BLI_rctf_transform_pt_v(&t->region->v2d.cur, &rect, offset, offset);
tranformViewUpdate(t);
}
UI_view2d_edge_pan_apply(t->context, &customdata->edgepan_data, xy);
}
}
float offset[2] = {0.0f, 0.0f};
if (t->state != TRANS_CANCEL) {
if (!BLI_rctf_compare(&customdata->viewrect_prev, &t->region->v2d.cur, FLT_EPSILON)) {
/* Additional offset due to change in view2D rect. */
BLI_rctf_transform_pt_v(&t->region->v2d.cur, &customdata->viewrect_prev, offset, offset);
tranformViewUpdate(t);
customdata->viewrect_prev = t->region->v2d.cur;
}
}