From c1fe58244646c7ecc58fba1bdbf7c511750b14c9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 26 Jun 2021 16:57:03 +1000 Subject: Cleanup: move snap with projection check into a function --- source/blender/editors/transform/transform_snap.c | 29 ++++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index bebef049718..4ecb9594325 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -61,6 +61,8 @@ #include "transform_convert.h" #include "transform_snap.h" +static bool doForceIncrementSnap(const TransInfo *t); + /* this should be passed as an arg for use in snap functions */ #undef BASACT @@ -133,6 +135,23 @@ bool activeSnap(const TransInfo *t) ((t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP_INVERT); } +bool activeSnap_with_project(const TransInfo *t) +{ + if (!t->tsnap.project) { + return false; + } + + if (!activeSnap(t) || (t->flag & T_NO_PROJECT)) { + return false; + } + + if (doForceIncrementSnap(t)) { + return false; + } + + return true; +} + bool transformModeUseSnap(const TransInfo *t) { ToolSettings *ts = t->settings; @@ -299,15 +318,7 @@ eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event) void applyProject(TransInfo *t) { - if (!t->tsnap.project) { - return; - } - - if (!activeSnap(t) || (t->flag & T_NO_PROJECT)) { - return; - } - - if (doForceIncrementSnap(t)) { + if (!activeSnap_with_project(t)) { return; } -- cgit v1.2.3 From f2c52aa0e1a5a6905849daa299ab907e60cab983 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 29 Jun 2021 20:13:55 +1000 Subject: Cleanup: use 'const' arguments in transform calculation Use const arguments to simplify further optimizations. Transforming elements shouldn't need to change their containers data-structures. ElementResize for grease pencil stroke thickness was modifying TransInfo.num & TransInfo.values_final. Now copies are operated on to preserve const correctness although it's worth investigating if this can be avoided altogether. --- source/blender/editors/transform/transform_snap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 4ecb9594325..b6e0f07cc70 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -1517,7 +1517,7 @@ bool transform_snap_grid(TransInfo *t, float *val) return true; } -static void snap_increment_apply_ex(TransInfo *UNUSED(t), +static void snap_increment_apply_ex(const TransInfo *UNUSED(t), const int max_index, const float increment_val, const float aspect[3], @@ -1531,8 +1531,8 @@ static void snap_increment_apply_ex(TransInfo *UNUSED(t), } } -static void snap_increment_apply(TransInfo *t, - int max_index, +static void snap_increment_apply(const TransInfo *t, + const int max_index, const float increment_dist, float *r_val) { @@ -1564,7 +1564,7 @@ static void snap_increment_apply(TransInfo *t, snap_increment_apply_ex(t, max_index, increment_dist, asp, r_val, r_val); } -bool transform_snap_increment_ex(TransInfo *t, bool use_local_space, float *r_val) +bool transform_snap_increment_ex(const TransInfo *t, bool use_local_space, float *r_val) { if (!activeSnap(t)) { return false; @@ -1595,7 +1595,7 @@ bool transform_snap_increment_ex(TransInfo *t, bool use_local_space, float *r_va return true; } -bool transform_snap_increment(TransInfo *t, float *r_val) +bool transform_snap_increment(const TransInfo *t, float *r_val) { return transform_snap_increment_ex(t, false, r_val); } -- cgit v1.2.3 From fba9cd019f21f29bad1a6f3713370c5172dbc97f Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Tue, 29 Jun 2021 20:12:19 +0200 Subject: VSE: Improved Snapping Change snapping behavior to snap strip edges when they are close to snap point. Default behavior is, that each transformed strip is snapped to any other strip. Implement snapping controls in sequencer tool settings. These controls include: - Snapping on/off - Ability to snap to playhead and strip hold offset points - Filter snap points by excluding sound or muted strips - Control snapping distance Snapping controls are placed in timeline header similar to 3D viewport Reviewed By: mano-wii Differential Revision: https://developer.blender.org/D11646 --- source/blender/editors/transform/transform_snap.c | 100 +++++++++++++--------- 1 file changed, 59 insertions(+), 41 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index b6e0f07cc70..34a380f9199 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -41,9 +41,6 @@ #include "RNA_access.h" -#include "SEQ_sequencer.h" -#include "SEQ_time.h" - #include "WM_types.h" #include "ED_gizmo_library.h" @@ -55,6 +52,10 @@ #include "UI_resources.h" #include "UI_view2d.h" +#include "SEQ_iterator.h" +#include "SEQ_sequencer.h" +#include "SEQ_time.h" + #include "MEM_guardedalloc.h" #include "transform.h" @@ -164,10 +165,7 @@ bool transformModeUseSnap(const TransInfo *t) if (t->mode == TFM_RESIZE) { return (ts->snap_transform_mode_flag & SCE_SNAP_TRANSFORM_MODE_SCALE) != 0; } - if (t->mode == TFM_VERT_SLIDE) { - return true; - } - if (t->mode == TFM_EDGE_SLIDE) { + if (ELEM(t->mode, TFM_VERT_SLIDE, TFM_EDGE_SLIDE, TFM_SEQ_SLIDE)) { return true; } @@ -295,6 +293,21 @@ void drawSnapping(const struct bContext *C, TransInfo *t) GPU_blend(GPU_BLEND_NONE); } } + else if (t->spacetype == SPACE_SEQ) { + if (validSnap(t)) { + const ARegion *region = CTX_wm_region(C); + GPU_blend(GPU_BLEND_ALPHA); + uint pos = GPU_vertformat_attr_add( + immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immBegin(GPU_PRIM_LINES, 2); + immVertex2f(pos, t->tsnap.snapPoint[0], region->v2d.cur.ymin); + immVertex2f(pos, t->tsnap.snapPoint[0], region->v2d.cur.ymax); + immEnd(); + immUnbindProgram(); + GPU_blend(GPU_BLEND_NONE); + } + } } eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event) @@ -476,11 +489,14 @@ void applySnapping(TransInfo *t, float *vec) /* TODO: add exception for object mode, no need to slow it down then. */ if (current - t->tsnap.last >= 0.01) { t->tsnap.calcSnap(t, vec); - t->tsnap.targetSnap(t); - - t->tsnap.last = current; + if (t->tsnap.targetSnap) { + t->tsnap.targetSnap(t); + } } - if (validSnap(t)) { + + t->tsnap.last = current; + + if (t->tsnap.applySnap && validSnap(t)) { t->tsnap.applySnap(t, vec); } } @@ -567,6 +583,9 @@ static void initSnappingMode(TransInfo *t) t->tsnap.mode = ts->snap_uv_mode; } + else if (t->spacetype == SPACE_SEQ) { + t->tsnap.mode = SEQ_tool_settings_snap_mode_get(t->scene); + } else { /* force project off when not supported */ if ((ts->snap_mode & SCE_SNAP_MODE_FACE) == 0) { @@ -626,16 +645,12 @@ static void initSnappingMode(TransInfo *t) t->tsnap.mode = SCE_SNAP_MODE_INCREMENT; } } - else if (t->spacetype == SPACE_NODE) { + else if (ELEM(t->spacetype, SPACE_NODE, SPACE_SEQ)) { setSnappingCallback(t); t->tsnap.modeSelect = SNAP_NOT_SELECTED; } - else if (t->spacetype == SPACE_SEQ) { - /* We do our own snapping currently, so nothing here */ - t->tsnap.mode = SCE_SNAP_MODE_GRID; /* Dummy, should we rather add a NOP mode? */ - } else { - /* Always increment outside of 3D view */ + /* Fallback. */ t->tsnap.mode = SCE_SNAP_MODE_INCREMENT; } @@ -656,6 +671,11 @@ static void initSnappingMode(TransInfo *t) } } } + else if (t->spacetype == SPACE_SEQ) { + if (t->tsnap.seq_context == NULL) { + t->tsnap.seq_context = transform_snap_sequencer_data_alloc(t); + } + } } void initSnapping(TransInfo *t, wmOperator *op) @@ -708,6 +728,9 @@ void initSnapping(TransInfo *t, wmOperator *op) t->tsnap.snap_self = !((t->settings->snap_flag & SCE_SNAP_NO_SELF) != 0); t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) != 0); } + else if ((t->spacetype == SPACE_SEQ) && (ts->snap_flag & SCE_SNAP_SEQ)) { + t->modifiers |= MOD_SNAP; + } } t->tsnap.target = snap_target; @@ -717,7 +740,11 @@ void initSnapping(TransInfo *t, wmOperator *op) void freeSnapping(TransInfo *t) { - if (t->tsnap.object_context) { + if ((t->spacetype == SPACE_SEQ) && t->tsnap.seq_context) { + transform_snap_sequencer_data_free(t->tsnap.seq_context); + t->tsnap.seq_context = NULL; + } + else if (t->tsnap.object_context) { ED_transform_snap_object_context_destroy(t->tsnap.object_context); t->tsnap.object_context = NULL; } @@ -727,6 +754,11 @@ static void setSnappingCallback(TransInfo *t) { t->tsnap.calcSnap = CalcSnapGeometry; + if (t->spacetype == SPACE_SEQ) { + /* The target is calculated along with the snap point. */ + return; + } + switch (t->tsnap.target) { case SCE_SNAP_TARGET_CLOSEST: t->tsnap.targetSnap = TargetSnapClosest; @@ -849,7 +881,7 @@ void getSnapPoint(const TransInfo *t, float vec[3]) /** \name Calc Snap (Generic) * \{ */ -static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) +static void CalcSnapGeometry(TransInfo *t, float *vec) { if (t->spacetype == SPACE_VIEW3D) { float loc[3]; @@ -930,6 +962,14 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) } } } + else if (t->spacetype == SPACE_SEQ) { + if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) { + t->tsnap.status |= (POINT_INIT | TARGET_INIT); + } + else { + t->tsnap.status &= ~(POINT_INIT | TARGET_INIT); + } + } } /** \} */ @@ -1441,28 +1481,6 @@ void snapFrameTransform(TransInfo *t, *r_val = (float)val; } -/*================================================================*/ - -void snapSequenceBounds(TransInfo *t, const int mval[2]) -{ - /* Reuse increment, strictly speaking could be another snap mode, but leave as is. */ - if (!(t->modifiers & MOD_SNAP_INVERT)) { - return; - } - - /* Convert to frame range. */ - float xmouse, ymouse; - UI_view2d_region_to_view(&t->region->v2d, mval[0], mval[1], &xmouse, &ymouse); - const int frame_curr = round_fl_to_int(xmouse); - - /* Now find the closest sequence. */ - const int frame_near = SEQ_time_find_next_prev_edit( - t->scene, frame_curr, SEQ_SIDE_BOTH, true, false, true); - - const int frame_snap = transform_convert_sequencer_get_snap_bound(t); - t->values[0] = frame_near - frame_snap; -} - static void snap_grid_apply( TransInfo *t, const int max_index, const float grid_dist, const float loc[3], float r_out[3]) { -- cgit v1.2.3 From dd14ea18190ff27082009f73a556569a43377a71 Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 29 Jun 2021 17:38:34 -0300 Subject: Cleanup: split CalcSnapGeometry in smaller functions --- source/blender/editors/transform/transform_snap.c | 165 ++++++++++++---------- 1 file changed, 92 insertions(+), 73 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 34a380f9199..1749a63e1dc 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -76,7 +76,10 @@ static bool doForceIncrementSnap(const TransInfo *t); static void setSnappingCallback(TransInfo *t); /* static void CalcSnapGrid(TransInfo *t, float *vec); */ -static void CalcSnapGeometry(TransInfo *t, float *vec); +static void snap_calc_view3d_fn(TransInfo *t, float *vec); +static void snap_calc_uv_fn(TransInfo *t, float *vec); +static void snap_calc_node_fn(TransInfo *t, float *vec); +static void snap_calc_sequencer_fn(TransInfo *t, float *vec); static void TargetSnapMedian(TransInfo *t); static void TargetSnapCenter(TransInfo *t); @@ -752,9 +755,17 @@ void freeSnapping(TransInfo *t) static void setSnappingCallback(TransInfo *t) { - t->tsnap.calcSnap = CalcSnapGeometry; - - if (t->spacetype == SPACE_SEQ) { + if (t->spacetype == SPACE_VIEW3D) { + t->tsnap.calcSnap = snap_calc_view3d_fn; + } + else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) { + t->tsnap.calcSnap = snap_calc_uv_fn; + } + else if (t->spacetype == SPACE_NODE) { + t->tsnap.calcSnap = snap_calc_node_fn; + } + else if (t->spacetype == SPACE_SEQ) { + t->tsnap.calcSnap = snap_calc_sequencer_fn; /* The target is calculated along with the snap point. */ return; } @@ -878,97 +889,105 @@ void getSnapPoint(const TransInfo *t, float vec[3]) /** \} */ /* -------------------------------------------------------------------- */ -/** \name Calc Snap (Generic) +/** \name Calc Snap * \{ */ -static void CalcSnapGeometry(TransInfo *t, float *vec) +static void snap_calc_view3d_fn(TransInfo *t, float *UNUSED(vec)) { - if (t->spacetype == SPACE_VIEW3D) { - float loc[3]; - float no[3]; - float mval[2]; - bool found = false; - short snap_elem = 0; - float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */ + BLI_assert(t->spacetype == SPACE_VIEW3D); + float loc[3]; + float no[3]; + float mval[2]; + bool found = false; + short snap_elem = 0; + float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */ - mval[0] = t->mval[0]; - mval[1] = t->mval[1]; + mval[0] = t->mval[0]; + mval[1] = t->mval[1]; - if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | - SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { - zero_v3(no); /* objects won't set this */ - snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no); - found = snap_elem != 0; - } - if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) { - found = peelObjectsTransform( - t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL); + if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | + SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { + zero_v3(no); /* objects won't set this */ + snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no); + found = snap_elem != 0; + } + if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) { + found = peelObjectsTransform( + t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL); - if (found) { - snap_elem = SCE_SNAP_MODE_VOLUME; - } + if (found) { + snap_elem = SCE_SNAP_MODE_VOLUME; } + } + + if (found == true) { + copy_v3_v3(t->tsnap.snapPoint, loc); + copy_v3_v3(t->tsnap.snapNormal, no); + + t->tsnap.status |= POINT_INIT; + } + else { + t->tsnap.status &= ~POINT_INIT; + } + + t->tsnap.snapElem = (char)snap_elem; +} + +static void snap_calc_uv_fn(TransInfo *t, float *UNUSED(vec)) +{ + BLI_assert(t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH); + if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) { + float co[2]; + + UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]); + + uint objects_len = 0; + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( + t->view_layer, NULL, &objects_len); - if (found == true) { - copy_v3_v3(t->tsnap.snapPoint, loc); - copy_v3_v3(t->tsnap.snapNormal, no); + float dist_sq = FLT_MAX; + if (ED_uvedit_nearest_uv_multi( + t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) { + t->tsnap.snapPoint[0] *= t->aspect[0]; + t->tsnap.snapPoint[1] *= t->aspect[1]; t->tsnap.status |= POINT_INIT; } else { t->tsnap.status &= ~POINT_INIT; } - - t->tsnap.snapElem = (char)snap_elem; + MEM_freeN(objects); } - else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) { - if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) { - float co[2]; - - UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]); +} - uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - t->view_layer, NULL, &objects_len); +static void snap_calc_node_fn(TransInfo *t, float *UNUSED(vec)) +{ + BLI_assert(t->spacetype == SPACE_NODE); + if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) { + float loc[2]; + float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */ + char node_border; - float dist_sq = FLT_MAX; - if (ED_uvedit_nearest_uv_multi( - t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) { - t->tsnap.snapPoint[0] *= t->aspect[0]; - t->tsnap.snapPoint[1] *= t->aspect[1]; + if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) { + copy_v2_v2(t->tsnap.snapPoint, loc); + t->tsnap.snapNodeBorder = node_border; - t->tsnap.status |= POINT_INIT; - } - else { - t->tsnap.status &= ~POINT_INIT; - } - MEM_freeN(objects); + t->tsnap.status |= POINT_INIT; + } + else { + t->tsnap.status &= ~POINT_INIT; } } - else if (t->spacetype == SPACE_NODE) { - if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) { - float loc[2]; - float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */ - char node_border; - - if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) { - copy_v2_v2(t->tsnap.snapPoint, loc); - t->tsnap.snapNodeBorder = node_border; +} - t->tsnap.status |= POINT_INIT; - } - else { - t->tsnap.status &= ~POINT_INIT; - } - } +static void snap_calc_sequencer_fn(TransInfo *t, float *vec) +{ + BLI_assert(t->spacetype == SPACE_SEQ); + if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) { + t->tsnap.status |= (POINT_INIT | TARGET_INIT); } - else if (t->spacetype == SPACE_SEQ) { - if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) { - t->tsnap.status |= (POINT_INIT | TARGET_INIT); - } - else { - t->tsnap.status &= ~(POINT_INIT | TARGET_INIT); - } + else { + t->tsnap.status &= ~(POINT_INIT | TARGET_INIT); } } -- cgit v1.2.3 From 2d35eed34d01e4e63d672e35da7b3d45e97ff9ee Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Tue, 29 Jun 2021 18:08:41 -0300 Subject: Cleanup: split uses of _snap_sequencer_apply according to transform mode The `applySnap` callback of each mode was overwriting the value calculated in `transform_snap_sequencer_apply`. --- source/blender/editors/transform/transform_snap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 1749a63e1dc..9a33dc1218d 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -499,7 +499,7 @@ void applySnapping(TransInfo *t, float *vec) t->tsnap.last = current; - if (t->tsnap.applySnap && validSnap(t)) { + if (validSnap(t)) { t->tsnap.applySnap(t, vec); } } @@ -980,10 +980,10 @@ static void snap_calc_node_fn(TransInfo *t, float *UNUSED(vec)) } } -static void snap_calc_sequencer_fn(TransInfo *t, float *vec) +static void snap_calc_sequencer_fn(TransInfo *t, float *UNUSED(vec)) { BLI_assert(t->spacetype == SPACE_SEQ); - if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) { + if (transform_snap_sequencer_calc(t)) { t->tsnap.status |= (POINT_INIT | TARGET_INIT); } else { -- cgit v1.2.3 From 519c12da4162a42ed0ce2e41db45be21632ab446 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Thu, 1 Jul 2021 22:08:11 +0200 Subject: VSE: Snapping feedback Address initial feedback: - Use checkboxes instead of radio buttons - Hide snapping distance control from UI - Tweak snapping line color - use selected strip color, 50% transparency. Similar to other editors - Draw 2px thick line, since strip outline is also 2px thick Reviewed By: HooglyBoogly Differential Revision: https://developer.blender.org/D11759 --- source/blender/editors/transform/transform_snap.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/transform/transform_snap.c') diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 9a33dc1218d..05dcc612aae 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -303,10 +303,15 @@ void drawSnapping(const struct bContext *C, TransInfo *t) uint pos = GPU_vertformat_attr_add( immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - immBegin(GPU_PRIM_LINES, 2); - immVertex2f(pos, t->tsnap.snapPoint[0], region->v2d.cur.ymin); - immVertex2f(pos, t->tsnap.snapPoint[0], region->v2d.cur.ymax); - immEnd(); + UI_GetThemeColor3ubv(TH_SEQ_ACTIVE, col); + col[3] = 128; + immUniformColor4ubv(col); + float pixelx = BLI_rctf_size_x(®ion->v2d.cur) / BLI_rcti_size_x(®ion->v2d.mask); + immRectf(pos, + t->tsnap.snapPoint[0] - pixelx, + region->v2d.cur.ymax, + t->tsnap.snapPoint[0] + pixelx, + region->v2d.cur.ymin); immUnbindProgram(); GPU_blend(GPU_BLEND_NONE); } -- cgit v1.2.3