91 for (
Strip *strip : strips) {
106 int mouse_channel = int(mouse_co[1]);
107 for (
Strip *strip : visible) {
108 if (strip->channel != mouse_channel) {
147 scene, channels, seqbase, scene->
r.
cfra, 0);
182 const Scene *scene,
ListBase *seqbase,
int sel_side,
int channel,
int frame)
186 if (channel == strip->channel) {
214 const int frame_ignore)
218 const int frame = frame_ranges[strip->channel];
219 if (frame == frame_ignore) {
246 const Strip *strip_source,
254 if (strip_source->
channel != strip_dest->channel) {
259 if (left_match && right_match) {
280void select_surround_from_last(
Scene *scene)
282 Strip *strip = get_last_seq(scene);
284 if (strip ==
nullptr) {
326 ((sel == -1) || (sel && (strip->
flag &
SELECT)) ||
351static void select_neighbor_from_last(
Scene *scene,
int lr)
353 Strip *strip = seq::SEQ_select_active_get(scene);
355 bool changed =
false;
404 strip =
static_cast<Strip *
>(strip->
next);
416 strip_image_quad[3]);
449 for (
Strip *strip : strips) {
458 for (
Strip *strip : strips) {
460 strips.remove(strip);
466 for (
Strip *strip : strips) {
488 ot->name =
"(De)select All";
489 ot->idname =
"SEQUENCER_OT_select_all";
490 ot->description =
"Select or deselect all strips";
518 for (
Strip *strip : strips) {
537 ot->name =
"Select Inverse";
538 ot->idname =
"SEQUENCER_OT_select_inverse";
539 ot->description =
"Select unselected strips";
576 strip_iter->flag |=
SELECT;
587 ((
x >= scene->
r.
cfra) && (tmarker->frame >= scene->
r.
cfra)))
631 ed->current_strips(),
648 ed->current_strips(),
666 ed->current_strips(),
718 const bContext *
C,
const int mval[2],
const bool toggle,
const bool extend,
const bool center)
727 float mouseco_view[2];
736 const float center_dist_sq_max =
square_f(75.0f *
U.pixelsize);
737 const float center_scale_px[2] = {
747 ListBase strips_ordered = {
nullptr};
748 for (
Strip *strip : strips) {
750 float center_dist_sq_test = 0.0f;
757 isect = center_dist_sq_test <= center_dist_sq_max;
760 if (use_cycle && (strip == strip_active) && (strip_active->
flag &
SELECT)) {
761 center_dist_sq_test =
square_f(
sqrtf(center_dist_sq_test) + (3.0f *
U.pixelsize));
771 slink->
strip = strip;
775 if (strip == strip_active) {
776 slink_active = slink;
785 Strip *strip_select =
nullptr;
786 if (slink_select !=
nullptr) {
788 if ((center ==
false) && slink_active && (strip_active->
flag &
SELECT)) {
790 if (slink_active->
next) {
791 slink_select = slink_active->
next;
797 slink_select = slink_active;
800 strip_select = slink_select->
strip;
821 if (selection.
strip1 ==
nullptr) {
825 const bool strip1_already_selected = ((selection.
strip1->
flag &
SELECT) != 0);
826 if (selection.
strip2 ==
nullptr) {
834 const bool strip2_already_selected = ((selection.
strip2->
flag &
SELECT) != 0);
838 const bool both_handles_selected = strip1_handle == selection.
handle && strip2_handle != 0 &&
839 strip1_handle != strip2_handle;
840 return strip1_already_selected && strip2_already_selected && both_handles_selected;
851 for (
Strip *source : sources) {
853 for (
Strip *connection : connections) {
876 for (
Strip *test_strip : test) {
882 if (test_strip == source) {
885 copy_to.
remove(test_strip);
893 if (test_strip == source) {
896 copy_to.
remove(test_strip);
900 for (
Strip *strip : copy_to) {
914 const bool is_active = (
ed->act_strip == strip);
954 else if (action == 0) {
970 if (selection.
strip2 !=
nullptr) {
975 ed, selection.
strip2, strip2_handle_clicked, extend, deselect, toggle);
993 return min_ff(15.0f * pixelx *
U.pixelsize, strip_len / 4);
1011 int min_len = 25 *
U.pixelsize;
1016 if (strip_len / pixelx < min_len) {
1031 rctf *r_left_handle,
1032 rctf *r_right_handle)
1035 *r_left_handle = *r_body;
1036 *r_right_handle = *r_body;
1039 r_left_handle->
xmax = r_body->
xmin + handsize;
1040 r_right_handle->
xmin = r_body->
xmax - handsize;
1058 float timeline_frame)
1076 if (
ed ==
nullptr) {
1082 if (strip->
channel !=
int(mouse_co[1])) {
1098 std::sort(strips.
begin(), strips.
end(), [&](
const Strip *strip1,
const Strip *strip2) {
1099 return strip_to_frame_distance(scene, v2d, strip1, mouse_co[0]) <
1100 strip_to_frame_distance(scene, v2d, strip2, mouse_co[0]);
1113 return s1_right == s2_left || s1_left == s2_right;
1143 scene, strips[0], v2d, mouse_co);
1152 scene, strips[1], v2d, mouse_co);
1168 if (mouse_co[1] > time_scrub_y) {
1174 if (strips.
size() == 0) {
1178 selection.
strip1 = strips[0];
1181 if (strips.
size() == 2 &&
1184 selection.
strip2 = strips[1];
1197 if (
ed ==
nullptr) {
1217 Strip *strip_key_owner =
nullptr;
1222 if (strip_key_owner !=
nullptr && key ==
nullptr &&
1229 if (key !=
nullptr) {
1230 if (!was_retiming) {
1238 for (
Strip *connection : connections) {
1272 if (!extend && !toggle) {
1283 if (!extend && !toggle) {
1293 if (!extend && !toggle) {
1302 const bool wait_to_deselect_others =
RNA_boolean_get(op->
ptr,
"wait_to_deselect_others");
1316 if (already_selected && wait_to_deselect_others && !toggle && !ignore_connections) {
1328 copy_handles_to_sel &= (selection.
strip2 ==
nullptr);
1330 if (copy_handles_to_sel) {
1333 copy_to.
remove_if([](
Strip *strip) {
return strip->is_effect(); });
1336 bool changed =
false;
1341 (selection.
strip1 && (extend ==
false && deselect ==
false && toggle ==
false)))
1356 if (selection.
strip2 !=
nullptr) {
1362 ed, selection.
strip2, strip2_handle_clicked, extend, deselect, toggle);
1365 if (!ignore_connections) {
1366 if (copy_handles_to_sel) {
1411 ot->name =
"Select";
1412 ot->idname =
"SEQUENCER_OT_select";
1413 ot->description =
"Select a strip (last selected becomes the \"active strip\")";
1435 "Use the object center when selecting, in edit mode used to extend object selection");
1442 "Select handles next to the active strip");
1449 "Select other strips or handles at the same time, or all retiming keys "
1450 "after the current in retiming mode");
1458 "Select all strips on same side of the current frame as the mouse cursor");
1462 "ignore_connections",
1464 "Ignore Connections",
1465 "Select strips individually whether or not they are connected");
1482 if (
ed ==
nullptr) {
1494 Strip *strip_key_test =
nullptr;
1496 if (key !=
nullptr) {
1510 if (selection.
strip2 !=
nullptr) {
1519 if (!ignore_connections) {
1549 ot->name =
"Select Handle";
1550 ot->idname =
"SEQUENCER_OT_select_handle";
1551 ot->description =
"Select strip handle";
1565 "ignore_connections",
1567 "Ignore Connections",
1568 "Select strips individually whether or not they are connected");
1583 if (
ed ==
nullptr) {
1587 bool changed =
false;
1616 if (
ed ==
nullptr) {
1621 const int neighbor_selection_filter = select_more ? 0 :
SELECT;
1622 const int selection_filter = select_more ?
SELECT : 0;
1625 if ((strip->
flag &
SELECT) != selection_filter) {
1639 bool changed =
false;
1677 ot->name =
"Select More";
1678 ot->idname =
"SEQUENCER_OT_select_more";
1679 ot->description =
"Select more strips adjacent to the current selection";
1713 ot->name =
"Select Less";
1714 ot->idname =
"SEQUENCER_OT_select_less";
1715 ot->description =
"Shrink the current selection of adjacent selected strips";
1745 if (!mouse_selection.
strip1) {
1756 bool selected =
true;
1771 ot->name =
"Select Pick Linked";
1772 ot->idname =
"SEQUENCER_OT_select_linked_pick";
1773 ot->description =
"Select a chain of linked strips nearest to the mouse pointer";
1784 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
1814 ot->name =
"Select Linked";
1815 ot->idname =
"SEQUENCER_OT_select_linked";
1816 ot->description =
"Select all strips adjacent to the current selection";
1848 {0,
nullptr, 0,
nullptr,
nullptr},
1922 ot->name =
"Select Handles";
1923 ot->idname =
"SEQUENCER_OT_select_handles";
1924 ot->description =
"Select gizmo handles on the sides of the selected strip";
1939 "The side of the handle that is selected");
1955 if (
ed ==
nullptr) {
1958 if (extend ==
false) {
1961 const int timeline_frame = scene->
r.
cfra;
1992 {-1,
"LEFT", 0,
"Left",
"Select to the left of the current frame"},
1993 {1,
"RIGHT", 0,
"Right",
"Select to the right of the current frame"},
1994 {2,
"CURRENT", 0,
"Current Frame",
"Select intersecting with the current frame"},
1995 {0,
nullptr, 0,
nullptr,
nullptr},
1999 ot->name =
"Select Side of Frame";
2000 ot->idname =
"SEQUENCER_OT_select_side_of_frame";
2001 ot->description =
"Select strips relative to the current frame";
2012 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
2014 ot->prop =
RNA_def_enum(
ot->srna,
"side", sequencer_select_left_right_types, 0,
"Side",
"");
2029 const int frame_init = sel_side ==
seq::SIDE_LEFT ? INT_MIN : INT_MAX;
2031 bool selected =
false;
2039 int *frame_limit_p = &frame_ranges[strip->
channel];
2051 if (selected ==
false) {
2067 ot->name =
"Select Side";
2068 ot->idname =
"SEQUENCER_OT_select_side";
2069 ot->description =
"Select strips on the nominated side of the selected strips";
2084 "The side to which the selection is applied");
2099 float rect_quad[4][2] = {{rect->
xmax, rect->
ymax},
2109 strip_image_quad[0], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2111 strip_image_quad[1], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2113 strip_image_quad[2], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2115 strip_image_quad[3], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]);
2130 for (
Strip *strip : strips) {
2151 if (
ed ==
nullptr) {
2164 bool changed =
false;
2232 if (!ignore_connections) {
2235 selection.
strip1 = strip;
2272 if (selection.
strip1 !=
nullptr) {
2285 ot->name =
"Box Select";
2286 ot->idname =
"SEQUENCER_OT_select_box";
2287 ot->description =
"Select strips using box selection";
2309 "Make box select pass through to sequence slide when the cursor is hovering on a strip");
2313 ot->srna,
"include_handles",
false,
"Select Handles",
"Select the strips and their handles");
2317 "ignore_connections",
2319 "Ignore Connections",
2320 "Select strips individually whether or not they are connected");
2329 const rcti *clip_rect,
2331 const float co_test[2])
2335 ®ion->
v2d, co_test[0], co_test[1], &co_screen[0], &co_screen[1]) &&
2376 bool changed =
false;
2404 bool changed =
false;
2414 for (
Strip *strip : strips) {
2438 if (
ed ==
nullptr) {
2448 bool changed =
false;
2450 if (use_pre_deselect) {
2471 ot->name =
"Lasso Select";
2472 ot->description =
"Select strips using lasso selection";
2473 ot->idname =
"SEQUENCER_OT_select_lasso";
2500 float dx = origin.x -
float(mval[0]);
2501 float dy = origin.y -
float(mval[1]);
2502 float dist_sq =
sqrt(dx * dx + dy * dy);
2504 return dist_sq <= *radius;
2520 for (
Strip *strip : strips) {
2537 const float x_radius,
2538 const float y_radius)
2556 return ((dx * dx) / (x_radius * x_radius) + (dy * dy) / (y_radius * y_radius) <= 1.0f);
2577 if (
ed ==
nullptr) {
2593 bool changed =
false;
2609 if (!ignore_connections) {
2612 selection.
strip1 = strip;
2627 ot->name =
"Circle Select";
2628 ot->description =
"Select strips using circle selection";
2629 ot->idname =
"SEQUENCER_OT_select_circle";
2647 "ignore_connections",
2649 "Ignore Connections",
2650 "Select strips individually whether or not they are connected");
2676 "All strips of same basic type (graphical or sound)"},
2681 "Shared strip effect type (if active strip is not an effect one, select all non-effect "
2689 "Other strips affected by the active one (sharing some time, and below or "
2690 "effect-assigned)"},
2692 {0,
nullptr, 0,
nullptr,
nullptr},
2695#define STRIP_IS_SOUND(_strip) (_strip->type == STRIP_TYPE_SOUND_RAM)
2697#define STRIP_USE_DATA(_strip) \
2698 (ELEM(_strip->type, STRIP_TYPE_SCENE, STRIP_TYPE_MOVIECLIP, STRIP_TYPE_MASK) || \
2699 STRIP_HAS_PATH(_strip))
2701#define STRIP_CHANNEL_CHECK(_strip, _chan) ELEM((_chan), 0, (_strip)->channel)
2708 bool changed =
false;
2710 for (
Strip *strip : strips) {
2725 bool changed =
false;
2728 for (
Strip *strip : strips) {
2745 bool changed =
false;
2746 const bool is_effect = act_strip->is_effect();
2748 for (
Strip *strip : strips) {
2750 (is_effect ? strip->is_effect() : !strip->is_effect()))
2765 bool changed =
false;
2766 const char *dirpath = act_strip->
data ? act_strip->
data->
dirpath :
nullptr;
2773 for (
Strip *strip : strips) {
2784 for (
Strip *strip : strips) {
2786 strip->
scene == sce)
2795 for (
Strip *strip : strips) {
2797 strip->
clip == clip)
2806 for (
Strip *strip : strips) {
2824 bool changed =
false;
2827 for (
const Strip *strip : strips) {
2835 for (
Strip *strip : strips) {
2855 bool changed =
false;
2857 for (
Strip *strip : strips) {
2873 Strip *strip_reference,
2878 if (strip_test->channel > strip_reference->
channel) {
2888 strips.
add(strip_test);
2902 const int selected_strip_count = strips.
size();
2909 const bool changed = strips.
size() > selected_strip_count;
2912 for (
Strip *strip : strips) {
2919#undef STRIP_IS_SOUND
2920#undef STRIP_USE_DATA
2935 if (act_strip ==
nullptr || (is_preview && !strips.
contains(act_strip))) {
2944 bool changed =
false;
2992 ot->name =
"Select Grouped";
2993 ot->idname =
"SEQUENCER_OT_select_grouped";
2994 ot->description =
"Select all strips grouped by various properties";
3010 "Extend selection instead of deselecting everything first");
3012 "use_active_channel",
3015 "Only consider strips on the same channel as the active one");
Scene * CTX_data_scene(const bContext *C)
SpaceSeq * CTX_wm_space_seq(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
Scene * CTX_data_sequencer_scene(const bContext *C)
void BKE_report(ReportList *reports, eReportType type, const char *message)
unsigned int BLI_ghashutil_ptrhash(const void *key)
BLI_INLINE bool BLI_gsetIterator_done(const GSetIterator *gsi)
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_ptrcmp(const void *a, const void *b)
BLI_INLINE void BLI_gsetIterator_init(GSetIterator *gsi, GSet *gs)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
BLI_INLINE void BLI_gsetIterator_step(GSetIterator *gsi)
bool BLI_gset_add(GSet *gs, void *key)
bool BLI_lasso_is_point_inside(blender::Span< blender::int2 > mcoords, int sx, int sy, int error_value)
void BLI_lasso_boundbox(rcti *rect, blender::Span< blender::int2 > mcoords)
bool BLI_lasso_is_edge_inside(blender::Span< blender::int2 > mcoords, int x0, int y0, int x1, int y1, int error_value)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_listbase_sort(ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE float square_f(float a)
int isect_point_quad_v2(const float p[2], const float v1[2], const float v2[2], const float v3[2], const float v4[2])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE void mul_v2_v2(float r[2], const float a[2])
void copy_vn_i(int *array_tar, int size, int val)
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
void BLI_rctf_union(struct rctf *rct_a, const struct rctf *rct_b)
bool BLI_rctf_isect_pt_v(const struct rctf *rect, const float xy[2])
bool BLI_rctf_isect(const struct rctf *src1, const struct rctf *src2, struct rctf *dest)
float BLI_rctf_length_x(const rctf *rect, float x)
void BLI_rctf_pad(struct rctf *rect, float pad_x, float pad_y)
bool BLI_rcti_inside_rcti(const rcti *rct_a, const rcti *rct_b)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CTX_IFACE_(context, msgid)
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
#define STRIP_HAS_PATH(_strip)
@ SPACE_SEQ_DESELECT_STRIP_HANDLE
void ED_outliner_select_sync_from_sequence_tag(const bContext *C)
bool ED_operator_sequencer_active(bContext *C)
#define SEL_OP_USE_PRE_DESELECT(sel_op)
std::string ED_select_circle_get_name(wmOperatorType *ot, PointerRNA *ptr)
std::string ED_select_pick_get_name(wmOperatorType *ot, PointerRNA *ptr)
Read Guarded memory(de)allocation.
#define UI_TIME_SCRUB_MARGIN_Y
bool UI_view2d_view_to_region_clip(const View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
View2D * UI_view2d_fromcontext(const bContext *C)
float UI_view2d_scale_get_y(const View2D *v2d)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
float UI_view2d_region_to_view_x(const View2D *v2d, float x)
void UI_view2d_region_to_view_rctf(const View2D *v2d, const rctf *rect_src, rctf *rect_dst) ATTR_NONNULL()
float UI_view2d_scale_get_x(const View2D *v2d)
@ OPTYPE_DEPENDS_ON_CURSOR
bool contains(const Key &key) const
bool remove(const Key &key)
bool contains(const Key &key) const
int64_t remove_if(Predicate &&predicate)
void append(const T &value)
MouseCoords(const View2D *v2d, int x, int y)
void * MEM_callocN(size_t len, const char *str)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
static bool select_grouped_type_basic(blender::Span< Strip * > strips, ListBase *, Strip *act_strip, const int channel)
static void select_active_side(const Scene *scene, ListBase *seqbase, int sel_side, int channel, int frame)
bool sequencer_edit_poll(bContext *C)
static wmOperatorStatus sequencer_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void sequencer_copy_handles_to_selected_strips(const Scene *scene, const StripSelection &selection, VectorSet< Strip * > copy_to)
static void sequencer_select_linked_handle(const bContext *C, Strip *strip, const eStripHandle handle_clicked)
static Strip * strip_select_from_preview(const bContext *C, const int mval[2], const bool toggle, const bool extend, const bool center)
static bool do_lasso_select_is_origin_inside(const ARegion *region, const rcti *clip_rect, const Span< int2 > mcoords, const float co_test[2])
static void sequencer_select_side_of_frame(const bContext *C, const View2D *v2d, const int mval[2], Scene *scene)
static bool select_grouped_effect(blender::Span< Strip * > strips, ListBase *, Strip *act_strip, const int channel)
static bool element_already_selected(const StripSelection &selection)
static wmOperatorStatus sequencer_select_side_of_frame_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_linked_pick(wmOperatorType *ot)
static std::string sequencer_select_get_name(wmOperatorType *ot, PointerRNA *ptr)
static wmOperatorStatus sequencer_select_more_exec(bContext *C, wmOperator *)
static float inner_clickable_handle_size_get(const Scene *scene, const Strip *strip, const View2D *v2d)
static bool select_more_less_impl(Scene *scene, bool select_more)
void SEQUENCER_OT_select_all(wmOperatorType *ot)
SeqRetimingKey * retiming_mouseover_key_get(const bContext *C, const int mval[2], Strip **r_strip)
static bool check_circle_intersection_in_timeline(const rctf *rect, const float xy[2], const float x_radius, const float y_radius)
int right_fake_key_frame_get(const bContext *C, const Strip *strip)
StripSelection pick_strip_and_handle(const struct Scene *scene, const View2D *v2d, float mouse_co[2])
static void sequencer_select_connected_strips(const StripSelection &selection)
void SEQUENCER_OT_select_box(wmOperatorType *ot)
static bool is_mouse_over_both_handles_of_adjacent_strips(const Scene *scene, blender::Vector< Strip * > strips, const View2D *v2d, float mouse_co[2])
void SEQUENCER_OT_select_inverse(wmOperatorType *ot)
static void select_surrounding_handles(Scene *scene, Strip *test)
void SEQUENCER_OT_select_circle(wmOperatorType *ot)
static bool strips_are_adjacent(const Scene *scene, const Strip *strip1, const Strip *strip2)
static void seq_circle_select_strip_from_preview(bContext *C, int radius, const float2 mval, const eSelectOp mode)
bool handle_is_selected(const Strip *strip, eStripHandle handle)
void SEQUENCER_OT_select_side_of_frame(wmOperatorType *ot)
void select_strip_single(Scene *scene, Strip *strip, bool deselect_all)
static bool is_sound(wmDrag *drag)
void SEQUENCER_OT_select_grouped(wmOperatorType *ot)
void recurs_sel_strip(Strip *strip_meta)
static void seq_box_select_strip_from_preview(const bContext *C, const rctf *rect, const eSelectOp mode)
static int strip_sort_for_depth_select(const void *a, const void *b)
blender::VectorSet< Strip * > all_strips_from_context(bContext *C)
blender::VectorSet< Strip * > selected_strips_from_context(bContext *C)
wmOperatorStatus sequencer_select_exec(bContext *C, wmOperator *op)
static bool do_lasso_select_timeline(bContext *C, const Span< int2 > mcoords, ARegion *region, const eSelectOp sel_op)
void SEQUENCER_OT_select(wmOperatorType *ot)
Strip * find_neighboring_strip(const Scene *scene, const Strip *test, const int lr, int sel)
void SEQUENCER_OT_select_side(wmOperatorType *ot)
static wmOperatorStatus sequencer_select_inverse_exec(bContext *C, wmOperator *)
static wmOperatorStatus sequencer_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void SEQUENCER_OT_select_less(wmOperatorType *ot)
@ SEQ_SELECT_HANDLES_SIDE_RIGHT
@ SEQ_SELECT_HANDLES_SIDE_LEFT_NEIGHBOR
@ SEQ_SELECT_HANDLES_SIDE_BOTH_NEIGHBORS
@ SEQ_SELECT_HANDLES_SIDE_RIGHT_NEIGHBOR
@ SEQ_SELECT_HANDLES_SIDE_BOTH
@ SEQ_SELECT_HANDLES_SIDE_LEFT
static bool select_grouped_type_effect(blender::Span< Strip * > strips, ListBase *, Strip *act_strip, const int channel)
static void select_linked_time_strip(const Scene *scene, const Strip *strip_source, const eStripHandle handle_clicked)
void SEQUENCER_OT_select_more(wmOperatorType *ot)
static void query_lower_channel_strips(const Scene *scene, Strip *strip_reference, ListBase *seqbase, blender::VectorSet< Strip * > &strips)
static void strip_clickable_areas_get(const Scene *scene, const Strip *strip, const View2D *v2d, rctf *r_body, rctf *r_left_handle, rctf *r_right_handle)
static wmOperatorStatus sequencer_select_linked_exec(bContext *C, wmOperator *)
wmOperatorStatus sequencer_retiming_box_select_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_handles(wmOperatorType *ot)
static bool strip_circle_select_radius_image_isect(const Scene *scene, const Strip *strip, const int *radius, const float2 mval)
static wmOperatorStatus vse_lasso_select_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_lasso(wmOperatorType *ot)
static wmOperatorStatus sequencer_select_handle_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static float strip_to_frame_distance(const Scene *scene, const View2D *v2d, const Strip *strip, float timeline_frame)
SeqRetimingKey * try_to_realize_fake_keys(const bContext *C, Strip *strip, const int mval[2])
static int strip_sort_for_center_select(const void *a, const void *b)
static const EnumPropertyItem prop_select_handles_side_types[]
static wmOperatorStatus vse_circle_select_exec(bContext *C, wmOperator *op)
Strip * strip_under_mouse_get(const Scene *scene, const View2D *v2d, const int mval[2])
void sequencer_select_do_updates(const bContext *C, Scene *scene)
bool can_select_handle(const Scene *scene, const Strip *strip, const View2D *v2d)
void strip_rectf(const Scene *scene, const Strip *strip, rctf *r_rect)
static eStripHandle strip_handle_under_cursor_get(const Scene *scene, const Strip *strip, const View2D *v2d, float mouse_co[2])
bool sequencer_view_preview_only_poll(const bContext *C)
static void select_active_side_range(const Scene *scene, ListBase *seqbase, const int sel_side, const int frame_ranges[seq::MAX_CHANNELS], const int frame_ignore)
bool retiming_keys_can_be_displayed(const SpaceSeq *sseq)
void SEQUENCER_OT_select_handle(wmOperatorType *ot)
static bool rcti_in_lasso(const rcti rect, const Span< int2 > mcoords)
static const EnumPropertyItem sequencer_prop_select_grouped_types[]
void realize_fake_keys(const Scene *scene, Strip *strip)
bool deselect_all_strips(const Scene *scene)
static void select_linked_time(const Scene *scene, const StripSelection &selection, const bool extend, const bool deselect, const bool toggle)
bool sequencer_view_has_preview_poll(bContext *C)
wmOperatorStatus sequencer_retiming_select_all_exec(bContext *C, wmOperator *op)
static wmOperatorStatus sequencer_select_side_exec(bContext *C, wmOperator *op)
int left_fake_key_frame_get(const bContext *C, const Strip *strip)
static wmOperatorStatus sequencer_select_handles_exec(bContext *C, wmOperator *op)
static blender::Vector< Strip * > padded_strips_under_mouse_get(const Scene *scene, const View2D *v2d, float mouse_co[2])
static rctf strip_clickable_area_get(const Scene *scene, const View2D *v2d, const Strip *strip)
@ SEQ_SELECT_GROUP_EFFECT_LINK
@ SEQ_SELECT_GROUP_EFFECT
@ SEQ_SELECT_GROUP_OVERLAP
@ SEQ_SELECT_GROUP_TYPE_EFFECT
@ SEQ_SELECT_GROUP_TYPE_BASIC
static wmOperatorStatus sequencer_select_handle_exec(bContext *C, wmOperator *op)
const EnumPropertyItem prop_side_types[]
void SEQUENCER_OT_select_linked(wmOperatorType *ot)
static wmOperatorStatus sequencer_select_grouped_exec(bContext *C, wmOperator *op)
static wmOperatorStatus sequencer_de_select_all_exec(bContext *C, wmOperator *op)
static wmOperatorStatus sequencer_select_less_exec(bContext *C, wmOperator *)
bool strip_point_image_isect(const Scene *scene, const Strip *strip, float point_view[2])
static bool select_linked_internal(Scene *scene)
static wmOperatorStatus sequencer_box_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void sequencer_select_set_active(Scene *scene, Strip *strip)
static void sequencer_select_strip_impl(const Editing *ed, Strip *strip, const eStripHandle handle_clicked, const bool extend, const bool deselect, const bool toggle)
blender::Vector< Strip * > sequencer_visible_strips_get(const bContext *C)
static wmOperatorStatus sequencer_box_select_exec(bContext *C, wmOperator *op)
static bool select_grouped_effect_link(const Scene *scene, blender::VectorSet< Strip * > strips, ListBase *seqbase, Strip *, const int)
static bool select_grouped_time_overlap(const Scene *scene, blender::Span< Strip * > strips, ListBase *, Strip *act_strip)
static bool select_grouped_data(blender::Span< Strip * > strips, ListBase *, Strip *act_strip, const int channel)
static bool strip_box_select_rect_image_isect(const Scene *scene, const Strip *strip, const rctf *rect)
bool sequencer_retiming_mode_is_active(const bContext *C)
wmOperatorStatus sequencer_retiming_key_select_exec(bContext *C, wmOperator *op, SeqRetimingKey *key, const Strip *key_owner)
static bool select_grouped_type(blender::Span< Strip * > strips, ListBase *, Strip *act_strip, const int channel)
static bool do_lasso_select_preview(bContext *C, Editing *ed, const Span< int2 > mcoords, const eSelectOp sel_op)
int time_right_handle_frame_get(const Scene *scene, const Strip *strip)
VectorSet< Strip * > query_all_strips(ListBase *seqbase)
Array< float2 > image_transform_final_quad_get(const Scene *scene, const Strip *strip)
ListBase * channels_displayed_get(const Editing *ed)
VectorSet< Strip * > query_selected_strips(ListBase *seqbase)
int retiming_key_timeline_frame_get(const Scene *scene, const Strip *strip, const SeqRetimingKey *key)
Editing * editing_get(const Scene *scene)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
void query_strip_effect_chain(const Scene *scene, Strip *reference_strip, ListBase *seqbase, VectorSet< Strip * > &r_strips)
blender::VectorSet< Strip * > connected_strips_get(const Strip *strip)
Strip * select_active_get(const Scene *scene)
constexpr int MAX_CHANNELS
bool is_strip_connected(const Strip *strip)
bool retiming_data_is_editable(const Strip *strip)
void iterator_set_expand(const Scene *scene, ListBase *seqbase, VectorSet< Strip * > &strips, void strip_query_func(const Scene *scene, Strip *strip_reference, ListBase *seqbase, VectorSet< Strip * > &strips))
bool time_strip_intersects_frame(const Scene *scene, const Strip *strip, const int timeline_frame)
float2 image_transform_origin_offset_pixelspace_get(const Scene *scene, const Strip *strip)
bool retiming_selection_clear(const Editing *ed)
void select_active_set(Scene *scene, Strip *strip)
bool transform_is_locked(ListBase *channels, const Strip *strip)
bool relation_is_effect_of_strip(const Strip *effect, const Strip *input)
VectorSet< Strip * > query_rendered_strips(const Scene *scene, ListBase *channels, ListBase *seqbase, const int timeline_frame, const int displayed_channel)
ListBase * active_seqbase_get(const Editing *ed)
int effect_get_num_inputs(int strip_type)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
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)
#define STRIP_IS_SOUND(_strip)
#define STRIP_USE_DATA(_strip)
#define STRIP_CHANNEL_CHECK(_strip, _chan)
struct ReportList * reports
void WM_event_drag_start_mval(const wmEvent *event, const ARegion *region, int r_mval[2])
bool WM_cursor_test_motion_and_update(const int mval[2])
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
bool WM_gesture_is_modal_first(const wmGesture *gesture)
void WM_gesture_box_cancel(bContext *C, wmOperator *op)
wmOperatorStatus WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event)
Array< int2 > WM_gesture_lasso_path_to_array(bContext *, wmOperator *op)
wmOperatorStatus WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void WM_gesture_lasso_cancel(bContext *C, wmOperator *op)
wmOperatorStatus WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void WM_operator_properties_gesture_box(wmOperatorType *ot)
void WM_operator_properties_select_operation_simple(wmOperatorType *ot)
void WM_operator_properties_border_to_rctf(wmOperator *op, rctf *r_rect)
void WM_operator_properties_generic_select(wmOperatorType *ot)
void WM_operator_properties_gesture_lasso(wmOperatorType *ot)
void WM_operator_properties_gesture_circle(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)
void WM_operator_properties_mouse_select(wmOperatorType *ot)
wmOperatorStatus WM_operator_flag_only_pass_through_on_press(wmOperatorStatus retval, const wmEvent *event)
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
wmOperatorStatus WM_generic_select_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_generic_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)