88 for (
Strip *strip : strips) {
103 int mouse_channel = int(mouse_co[1]);
104 for (
Strip *strip : visible) {
105 if (strip->channel != mouse_channel) {
144 scene, channels, seqbase, scene->
r.
cfra, 0);
179 const Scene *scene,
ListBase *seqbase,
int sel_side,
int channel,
int frame)
183 if (channel == strip->channel) {
211 const int frame_ignore)
215 const int frame = frame_ranges[strip->channel];
216 if (frame == frame_ignore) {
243 const Strip *strip_source,
251 if (strip_source->
channel != strip_dest->channel) {
256 if (left_match && right_match) {
277void select_surround_from_last(
Scene *scene)
279 Strip *strip = get_last_seq(scene);
281 if (strip ==
nullptr) {
335 ((sel == -1) || (sel && (strip->
flag &
SELECT)) ||
360static void select_neighbor_from_last(
Scene *scene,
int lr)
362 Strip *strip = seq::SEQ_select_active_get(scene);
364 bool changed =
false;
413 strip =
static_cast<Strip *
>(strip->
next);
425 strip_image_quad[3]);
458 for (
Strip *strip : strips) {
467 for (
Strip *strip : strips) {
469 strips.remove(strip);
475 for (
Strip *strip : strips) {
497 ot->name =
"(De)select All";
498 ot->idname =
"SEQUENCER_OT_select_all";
499 ot->description =
"Select or deselect all strips";
527 for (
Strip *strip : strips) {
546 ot->name =
"Select Inverse";
547 ot->idname =
"SEQUENCER_OT_select_inverse";
548 ot->description =
"Select unselected strips";
598 strip_iter->flag |=
SELECT;
609 ((
x >= scene->
r.
cfra) && (tmarker->frame >= scene->
r.
cfra)))
740 const bContext *
C,
const int mval[2],
const bool toggle,
const bool extend,
const bool center)
749 float mouseco_view[2];
758 const float center_dist_sq_max =
square_f(75.0f *
U.pixelsize);
759 const float center_scale_px[2] = {
769 ListBase strips_ordered = {
nullptr};
770 for (
Strip *strip : strips) {
772 float center_dist_sq_test = 0.0f;
779 isect = center_dist_sq_test <= center_dist_sq_max;
782 if (use_cycle && (strip == strip_active) && (strip_active->
flag &
SELECT)) {
783 center_dist_sq_test =
square_f(
sqrtf(center_dist_sq_test) + (3.0f *
U.pixelsize));
793 slink->
strip = strip;
797 if (strip == strip_active) {
798 slink_active = slink;
807 Strip *strip_select =
nullptr;
808 if (slink_select !=
nullptr) {
810 if ((center ==
false) && slink_active && (strip_active->
flag &
SELECT)) {
812 if (slink_active->
next) {
813 slink_select = slink_active->
next;
819 slink_select = slink_active;
822 strip_select = slink_select->
strip;
843 if (selection.
strip1 ==
nullptr) {
847 const bool strip1_already_selected = ((selection.
strip1->
flag &
SELECT) != 0);
848 if (selection.
strip2 ==
nullptr) {
856 const bool strip2_already_selected = ((selection.
strip2->
flag &
SELECT) != 0);
860 const bool both_handles_selected = strip1_handle == selection.
handle && strip2_handle != 0 &&
861 strip1_handle != strip2_handle;
862 return strip1_already_selected && strip2_already_selected && both_handles_selected;
873 for (
Strip *source : sources) {
875 for (
Strip *connection : connections) {
898 for (
Strip *test_strip : test) {
904 if (test_strip == source) {
907 copy_to.
remove(test_strip);
915 if (test_strip == source) {
918 copy_to.
remove(test_strip);
922 for (
Strip *strip : copy_to) {
936 const bool is_active = (
ed->act_strip == strip);
976 else if (action == 0) {
992 if (selection.
strip2 !=
nullptr) {
997 ed, selection.
strip2, strip2_handle_clicked, extend, deselect, toggle);
1015 return min_ff(15.0f * pixelx *
U.pixelsize, strip_len / 4);
1034 int min_len = 25 *
U.pixelsize;
1036 min_len = 15 *
U.pixelsize;
1042 if (strip_len / pixelx < min_len) {
1057 rctf *r_left_handle,
1058 rctf *r_right_handle)
1061 *r_left_handle = *r_body;
1062 *r_right_handle = *r_body;
1065 r_left_handle->
xmax = r_body->
xmin + handsize;
1066 r_right_handle->
xmin = r_body->
xmax - handsize;
1084 float timeline_frame)
1102 if (
ed ==
nullptr) {
1108 if (strip->
channel !=
int(mouse_co[1])) {
1124 std::sort(strips.
begin(), strips.
end(), [&](
const Strip *strip1,
const Strip *strip2) {
1125 return strip_to_frame_distance(scene, v2d, strip1, mouse_co[0]) <
1126 strip_to_frame_distance(scene, v2d, strip2, mouse_co[0]);
1139 return s1_right == s2_left || s1_left == s2_right;
1169 scene, strips[0], v2d, mouse_co);
1178 scene, strips[1], v2d, mouse_co);
1194 if (mouse_co[1] > time_scrub_y) {
1200 if (strips.
size() == 0) {
1204 selection.
strip1 = strips[0];
1210 selection.
strip2 = strips[1];
1223 if (
ed ==
nullptr) {
1243 Strip *strip_key_owner =
nullptr;
1248 if (strip_key_owner !=
nullptr && key ==
nullptr &&
1255 if (key !=
nullptr) {
1256 if (!was_retiming) {
1264 for (
Strip *connection : connections) {
1298 if (!extend && !toggle) {
1309 if (!extend && !toggle) {
1319 if (!extend && !toggle) {
1328 const bool wait_to_deselect_others =
RNA_boolean_get(op->
ptr,
"wait_to_deselect_others");
1342 if (already_selected && wait_to_deselect_others && !toggle && !ignore_connections) {
1355 copy_handles_to_sel &= (selection.
strip2 ==
nullptr);
1357 if (copy_handles_to_sel) {
1363 bool changed =
false;
1368 (selection.
strip1 && (extend ==
false && deselect ==
false && toggle ==
false)))
1383 if (selection.
strip2 !=
nullptr) {
1389 ed, selection.
strip2, strip2_handle_clicked, extend, deselect, toggle);
1392 if (!ignore_connections) {
1393 if (copy_handles_to_sel) {
1438 ot->name =
"Select";
1439 ot->idname =
"SEQUENCER_OT_select";
1440 ot->description =
"Select a strip (last selected becomes the \"active strip\")";
1462 "Use the object center when selecting, in edit mode used to extend object selection");
1469 "Select handles next to the active strip");
1476 "Select other strips or handles at the same time, or all retiming keys "
1477 "after the current in retiming mode");
1485 "Select all strips on same side of the current frame as the mouse cursor");
1489 "ignore_connections",
1491 "Ignore Connections",
1492 "Select strips individually whether or not they are connected");
1509 if (
ed ==
nullptr) {
1525 Strip *strip_key_test =
nullptr;
1527 if (key !=
nullptr) {
1541 if (selection.
strip2 !=
nullptr) {
1550 if (!ignore_connections) {
1580 ot->name =
"Select Handle";
1581 ot->idname =
"SEQUENCER_OT_select_handle";
1582 ot->description =
"Select strip handle";
1596 "ignore_connections",
1598 "Ignore Connections",
1599 "Select strips individually whether or not they are connected");
1614 if (
ed ==
nullptr) {
1618 bool changed =
false;
1647 if (
ed ==
nullptr) {
1652 const int neighbor_selection_filter = select_more ? 0 :
SELECT;
1653 const int selection_filter = select_more ?
SELECT : 0;
1656 if ((strip->
flag &
SELECT) != selection_filter) {
1670 bool changed =
false;
1708 ot->name =
"Select More";
1709 ot->idname =
"SEQUENCER_OT_select_more";
1710 ot->description =
"Select more strips adjacent to the current selection";
1744 ot->name =
"Select Less";
1745 ot->idname =
"SEQUENCER_OT_select_less";
1746 ot->description =
"Shrink the current selection of adjacent selected strips";
1776 if (!mouse_selection.
strip1) {
1787 bool selected =
true;
1802 ot->name =
"Select Pick Linked";
1803 ot->idname =
"SEQUENCER_OT_select_linked_pick";
1804 ot->description =
"Select a chain of linked strips nearest to the mouse pointer";
1815 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
1845 ot->name =
"Select Linked";
1846 ot->idname =
"SEQUENCER_OT_select_linked";
1847 ot->description =
"Select all strips adjacent to the current selection";
1879 {0,
nullptr, 0,
nullptr,
nullptr},
1953 ot->name =
"Select Handles";
1954 ot->idname =
"SEQUENCER_OT_select_handles";
1955 ot->description =
"Select gizmo handles on the sides of the selected strip";
1970 "The side of the handle that is selected");
1986 if (
ed ==
nullptr) {
1989 if (extend ==
false) {
1992 const int timeline_frame = scene->
r.
cfra;
2023 {-1,
"LEFT", 0,
"Left",
"Select to the left of the current frame"},
2024 {1,
"RIGHT", 0,
"Right",
"Select to the right of the current frame"},
2025 {2,
"CURRENT", 0,
"Current Frame",
"Select intersecting with the current frame"},
2026 {0,
nullptr, 0,
nullptr,
nullptr},
2030 ot->name =
"Select Side of Frame";
2031 ot->idname =
"SEQUENCER_OT_select_side_of_frame";
2032 ot->description =
"Select strips relative to the current frame";
2043 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
2045 ot->prop =
RNA_def_enum(
ot->srna,
"side", sequencer_select_left_right_types, 0,
"Side",
"");
2060 const int frame_init = sel_side ==
seq::SIDE_LEFT ? INT_MIN : INT_MAX;
2062 bool selected =
false;
2070 int *frame_limit_p = &frame_ranges[strip->
channel];
2082 if (selected ==
false) {
2098 ot->name =
"Select Side";
2099 ot->idname =
"SEQUENCER_OT_select_side";
2100 ot->description =
"Select strips on the nominated side of the selected strips";
2115 "The side to which the selection is applied");
2130 float rect_quad[4][2] = {{rect->
xmax, rect->
ymax},
2140 strip_image_quad[0], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2142 strip_image_quad[1], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2144 strip_image_quad[2], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2146 strip_image_quad[3], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]);
2161 for (
Strip *strip : strips) {
2182 if (
ed ==
nullptr) {
2195 bool changed =
false;
2263 if (!ignore_connections) {
2266 selection.
strip1 = strip;
2303 if (selection.
strip1 !=
nullptr) {
2316 ot->name =
"Box Select";
2317 ot->idname =
"SEQUENCER_OT_select_box";
2318 ot->description =
"Select strips using box selection";
2340 "Make box select pass through to sequence slide when the cursor is hovering on a strip");
2344 ot->srna,
"include_handles",
false,
"Select Handles",
"Select the strips and their handles");
2348 "ignore_connections",
2350 "Ignore Connections",
2351 "Select strips individually whether or not they are connected");
2377 "All strips of same basic type (graphical or sound)"},
2382 "Shared strip effect type (if active strip is not an effect one, select all non-effect "
2390 "Other strips affected by the active one (sharing some time, and below or "
2391 "effect-assigned)"},
2393 {0,
nullptr, 0,
nullptr,
nullptr},
2396#define STRIP_IS_SOUND(_strip) \
2397 ((_strip->type & STRIP_TYPE_SOUND_RAM) && !(_strip->type & STRIP_TYPE_EFFECT))
2399#define STRIP_IS_EFFECT(_strip) ((_strip->type & STRIP_TYPE_EFFECT) != 0)
2401#define STRIP_USE_DATA(_strip) \
2402 (ELEM(_strip->type, STRIP_TYPE_SCENE, STRIP_TYPE_MOVIECLIP, STRIP_TYPE_MASK) || \
2403 STRIP_HAS_PATH(_strip))
2405#define STRIP_CHANNEL_CHECK(_strip, _chan) ELEM((_chan), 0, (_strip)->channel)
2412 bool changed =
false;
2414 for (
Strip *strip : strips) {
2429 bool changed =
false;
2432 for (
Strip *strip : strips) {
2449 bool changed =
false;
2452 for (
Strip *strip : strips) {
2469 bool changed =
false;
2470 const char *dirpath = act_strip->
data ? act_strip->
data->
dirpath :
nullptr;
2477 for (
Strip *strip : strips) {
2488 for (
Strip *strip : strips) {
2490 strip->
scene == sce)
2499 for (
Strip *strip : strips) {
2501 strip->
clip == clip)
2510 for (
Strip *strip : strips) {
2528 bool changed =
false;
2535 for (
Strip *strip : strips) {
2539 effects[strip->
type] =
true;
2543 for (
Strip *strip : strips) {
2563 bool changed =
false;
2565 for (
Strip *strip : strips) {
2581 Strip *strip_reference,
2586 if (strip_test->channel > strip_reference->
channel) {
2596 strips.
add(strip_test);
2610 const int selected_strip_count = strips.
size();
2617 const bool changed = strips.
size() > selected_strip_count;
2620 for (
Strip *strip : strips) {
2627#undef STRIP_IS_SOUND
2628#undef STRIP_IS_EFFECT
2629#undef STRIP_USE_DATA
2644 if (act_strip ==
nullptr || (is_preview && !strips.
contains(act_strip))) {
2653 bool changed =
false;
2701 ot->name =
"Select Grouped";
2702 ot->idname =
"SEQUENCER_OT_select_grouped";
2703 ot->description =
"Select all strips grouped by various properties";
2719 "Extend selection instead of deselecting everything first");
2721 "use_active_channel",
2724 "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)
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)
#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)
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)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#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
@ USER_SEQ_ED_SIMPLE_TWEAKING
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_pick_get_name(wmOperatorType *ot, PointerRNA *ptr)
Read Guarded memory(de)allocation.
#define UI_TIME_SCRUB_MARGIN_Y
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)
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)
@ 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_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 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)
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)
static bool strips_are_adjacent(const Scene *scene, const Strip *strip1, const Strip *strip2)
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)
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)
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 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[]
Strip * strip_under_mouse_get(const Scene *scene, const View2D *v2d, const int mval[2])
@ 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
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 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)
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)
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_EFFECT(_strip)
#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)
void WM_gesture_box_cancel(bContext *C, wmOperator *op)
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_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_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)