99 scene, channels, seqbase, scene->r.cfra, 0);
134 const Scene *scene,
ListBase *seqbase,
int sel_side,
int channel,
int frame)
138 if (channel == seq->machine) {
166 const int frame_ignore)
170 const int frame = frame_ranges[seq->machine];
171 if (frame == frame_ignore) {
206 if (seq_source->
machine != seq_dest->machine) {
210 if (left_match && right_match) {
231void select_surround_from_last(
Scene *scene)
233 Sequence *seq = get_last_seq(scene);
235 if (seq ==
nullptr) {
355 if (displen / pixelx > 16) {
360 if ((displen / 3) < 30 * pixelx) {
361 handsize = displen / 3;
364 CLAMP(handsize, 7 * pixelx, 30 * pixelx);
384static void select_neighbor_from_last(
Scene *scene,
int lr)
388 bool changed =
false;
424 seq->
flag &= ~SEQ_ALLSEL;
430 seq->
flag &= ~SEQ_ALLSEL;
443 float seq_image_quad[4][2];
446 point, seq_image_quad[0], seq_image_quad[1], seq_image_quad[2], seq_image_quad[3]);
494 seq->
flag &= ~SEQ_ALLSEL;
498 seq->
flag &= ~SEQ_ALLSEL;
516 ot->
name =
"(De)select All";
517 ot->
idname =
"SEQUENCER_OT_select_all";
548 seq->
flag &= ~SEQ_ALLSEL;
565 ot->
name =
"Select Inverse";
566 ot->
idname =
"SEQUENCER_OT_select_inverse";
613 ((x >= scene->r.cfra) &&
627 if (((
x < scene->r.cfra) && (tmarker->frame <= scene->r.cfra)) ||
628 ((x >= scene->r.cfra) && (tmarker->frame >= scene->r.cfra)))
633 tmarker->flag &= ~SELECT;
651 seq->
flag &= ~SEQ_ALLSEL;
756 const bContext *C,
const int mval[2],
const bool toggle,
const bool extend,
const bool center)
765 float mouseco_view[2];
774 const float center_dist_sq_max =
square_f(75.0f *
U.pixelsize);
775 const float center_scale_px[2] = {
781 scene, channels, seqbase, scene->r.cfra, sseq->
chanshown);
785 ListBase strips_ordered = {
nullptr};
788 float center_dist_sq_test = 0.0f;
796 isect = center_dist_sq_test <= center_dist_sq_max;
799 if (use_cycle && (seq == seq_active) && (seq_active->
flag &
SELECT)) {
800 center_dist_sq_test =
square_f(
sqrtf(center_dist_sq_test) + (3.0f *
U.pixelsize));
814 if (seq == seq_active) {
815 slink_active = slink;
825 if (slink_select !=
nullptr) {
827 if ((center ==
false) && slink_active && (seq_active->
flag &
SELECT)) {
829 if (slink_active->
next) {
830 slink_select = slink_active->
next;
836 slink_select = slink_active;
839 seq_select = slink_select->seq;
855 if (selection.seq1 ==
nullptr) {
858 const bool seq1_already_selected = ((selection.seq1->flag &
SELECT) != 0);
859 if (selection.seq2 ==
nullptr) {
863 return seq1_already_selected && handle_already_selected;
865 const bool seq2_already_selected = ((selection.seq2->flag &
SELECT) != 0);
869 const bool both_handles_selected = seq1_handle == selection.handle && seq2_handle != 0 &&
870 seq1_handle != seq2_handle;
871 return seq1_already_selected && seq2_already_selected && both_handles_selected;
877 sources.
add(selection.seq1);
878 if (selection.seq2) {
879 sources.
add(selection.seq2);
884 for (
Sequence *connection : connections) {
887 connection->flag |= source->flag & (
SEQ_ALLSEL);
899 const bool is_active = (ed->
act_seq == seq);
939 else if (action == 0) {
940 seq->
flag &= ~SEQ_ALLSEL;
955 if (selection.seq2 !=
nullptr) {
969 return min_ff(15.0f * pixelx *
U.pixelsize, strip_len / 4);
984 int min_len = 25 *
U.pixelsize;
986 min_len = 15 *
U.pixelsize;
992 if (strip_len / pixelx < min_len) {
1002 rctf *r_left_handle,
1003 rctf *r_right_handle)
1006 *r_left_handle = *r_body;
1007 *r_right_handle = *r_body;
1012 r_left_handle->
xmax = r_body->
xmin + handsize;
1013 r_right_handle->
xmin = r_body->
xmax - handsize;
1029 float timeline_frame)
1045 if (seq->
machine !=
int(mouse_co[1])) {
1067 std::swap(strips[0], strips[1]);
1080 return s1_right == s2_left || s1_left == s2_right;
1136 if (strips.
size() == 0) {
1140 selection.seq1 = strips[0];
1146 selection.seq2 = strips[1];
1159 if (ed ==
nullptr) {
1184 if (seq_key_owner !=
nullptr && key ==
nullptr &&
1191 if (key !=
nullptr) {
1192 if (!was_retiming) {
1199 for (
Sequence *connection : connections) {
1233 if (!extend && !toggle) {
1244 if (!extend && !toggle) {
1254 if (!extend && !toggle) {
1263 const bool wait_to_deselect_others =
RNA_boolean_get(op->
ptr,
"wait_to_deselect_others");
1268 sseq->
flag &= ~SPACE_SEQ_DESELECT_STRIP_HANDLE;
1277 if (already_selected && wait_to_deselect_others && !toggle && !ignore_connections) {
1281 bool changed =
false;
1285 (selection.seq1 && (extend ==
false && deselect ==
false && toggle ==
false)))
1291 if (!selection.seq1) {
1300 if (selection.seq2 !=
nullptr) {
1307 if (!ignore_connections) {
1332 ot->
idname =
"SEQUENCER_OT_select";
1333 ot->
description =
"Select a strip (last selected becomes the \"active strip\")";
1355 "Use the object center when selecting, in edit mode used to extend object selection");
1362 "Select handles next to the active strip");
1369 "Select other strips or handles at the same time, or all retiming keys "
1370 "after the current in retiming mode");
1378 "Select all strips on same side of the current frame as the mouse cursor");
1382 "ignore_connections",
1384 "Ignore Connections",
1385 "Select strips individually whether or not they are connected");
1401 if (ed ==
nullptr) {
1412 if (selection.seq1 ==
nullptr || selection.handle ==
SEQ_HANDLE_NONE) {
1419 if (key !=
nullptr) {
1425 sseq->
flag &= ~SPACE_SEQ_DESELECT_STRIP_HANDLE;
1435 if (selection.seq2 !=
nullptr) {
1443 if (!ignore_connections) {
1471 ot->
name =
"Select Handle";
1472 ot->
idname =
"SEQUENCER_OT_select_handle";
1487 "ignore_connections",
1489 "Ignore Connections",
1490 "Select strips individually whether or not they are connected");
1505 if (ed ==
nullptr) {
1509 bool changed =
false;
1538 if (ed ==
nullptr) {
1543 const int neighbor_selection_filter = select_more ? 0 :
SELECT;
1544 const int selection_filter = select_more ?
SELECT : 0;
1547 if ((seq->
flag &
SELECT) != selection_filter) {
1561 bool changed =
false;
1571 neighbor->
flag &= ~SELECT;
1599 ot->
name =
"Select More";
1600 ot->
idname =
"SEQUENCER_OT_select_more";
1601 ot->
description =
"Select more strips adjacent to the current selection";
1635 ot->
name =
"Select Less";
1636 ot->
idname =
"SEQUENCER_OT_select_less";
1637 ot->
description =
"Shrink the current selection of adjacent selected strips";
1692 ot->
name =
"Select Pick Linked";
1693 ot->
idname =
"SEQUENCER_OT_select_linked_pick";
1694 ot->
description =
"Select a chain of linked strips nearest to the mouse pointer";
1735 ot->
name =
"Select Linked";
1736 ot->
idname =
"SEQUENCER_OT_select_linked";
1737 ot->
description =
"Select all strips adjacent to the current selection";
1769 {0,
nullptr, 0,
nullptr,
nullptr},
1784 seq->
flag &= ~SEQ_RIGHTSEL;
1788 seq->
flag &= ~SEQ_LEFTSEL;
1843 ot->
name =
"Select Handles";
1844 ot->
idname =
"SEQUENCER_OT_select_handles";
1845 ot->
description =
"Select gizmo handles on the sides of the selected strip";
1860 "The side of the handle that is selected");
1876 if (ed ==
nullptr) {
1879 if (extend ==
false) {
1882 const int timeline_frame = scene->r.cfra;
1913 {-1,
"LEFT", 0,
"Left",
"Select to the left of the current frame"},
1914 {1,
"RIGHT", 0,
"Right",
"Select to the right of the current frame"},
1915 {2,
"CURRENT", 0,
"Current Frame",
"Select intersecting with the current frame"},
1916 {0,
nullptr, 0,
nullptr,
nullptr},
1920 ot->
name =
"Select Side of Frame";
1921 ot->
idname =
"SEQUENCER_OT_select_side_of_frame";
1922 ot->
description =
"Select strips relative to the current frame";
1950 const int frame_init = sel_side ==
SEQ_SIDE_LEFT ? INT_MIN : INT_MAX;
1952 bool selected =
false;
1960 int *frame_limit_p = &frame_ranges[seq->
machine];
1972 if (selected ==
false) {
1988 ot->
name =
"Select Side";
1989 ot->
idname =
"SEQUENCER_OT_select_side";
1990 ot->
description =
"Select strips on the nominated side of the selected strips";
2005 "The side to which the selection is applied");
2018 float seq_image_quad[4][2];
2020 float rect_quad[4][2] = {{rect->
xmax, rect->
ymax},
2030 seq_image_quad[0], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2032 seq_image_quad[1], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2034 seq_image_quad[2], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]) ||
2036 seq_image_quad[3], rect_quad[0], rect_quad[1], rect_quad[2], rect_quad[3]);
2050 scene, channels, seqbase, scene->r.cfra, sseq->
chanshown);
2061 seq->
flag &= ~SELECT;
2072 if (ed ==
nullptr) {
2085 bool changed =
false;
2122 seq->
flag &= ~SELECT;
2124 seq->
flag &= ~SEQ_RIGHTSEL;
2137 seq->
flag &= ~SELECT;
2139 seq->
flag &= ~SEQ_LEFTSEL;
2154 if (!ignore_connections) {
2157 selection.seq1 = seq;
2192 if (selection.seq1 !=
nullptr) {
2206 ot->
idname =
"SEQUENCER_OT_select_box";
2229 "Make box select pass through to sequence slide when the cursor is hovering on a strip");
2233 ot->
srna,
"include_handles",
false,
"Select Handles",
"Select the strips and their handles");
2237 "ignore_connections",
2239 "Ignore Connections",
2240 "Select strips individually whether or not they are connected");
2266 "All strips of same basic type (graphical or sound)"},
2271 "Shared strip effect type (if active strip is not an effect one, select all non-effect "
2279 "Other strips affected by the active one (sharing some time, and below or "
2280 "effect-assigned)"},
2282 {0,
nullptr, 0,
nullptr,
nullptr},
2285#define SEQ_IS_SOUND(_seq) ((_seq->type & SEQ_TYPE_SOUND_RAM) && !(_seq->type & SEQ_TYPE_EFFECT))
2287#define SEQ_IS_EFFECT(_seq) ((_seq->type & SEQ_TYPE_EFFECT) != 0)
2289#define SEQ_USE_DATA(_seq) \
2290 (ELEM(_seq->type, SEQ_TYPE_SCENE, SEQ_TYPE_MOVIECLIP, SEQ_TYPE_MASK) || SEQ_HAS_PATH(_seq))
2292#define SEQ_CHANNEL_CHECK(_seq, _chan) ELEM((_chan), 0, (_seq)->machine)
2299 bool changed =
false;
2316 bool changed =
false;
2334 bool changed =
false;
2353 bool changed =
false;
2407 bool changed =
false;
2418 effects[seq->
type] =
true;
2442 bool changed =
false;
2465 if (seq_test->machine > seq_reference->
machine) {
2475 strips.
add(seq_test);
2489 const int selected_strip_count = strips.
size();
2496 const bool changed = strips.
size() > selected_strip_count;
2523 if (actseq ==
nullptr || (is_preview && !strips.
contains(actseq))) {
2532 bool changed =
false;
2536 seq->
flag &= ~SELECT;
2580 ot->
name =
"Select Grouped";
2581 ot->
idname =
"SEQUENCER_OT_select_grouped";
2582 ot->
description =
"Select all strips grouped by various properties";
2598 "Extend selection instead of deselecting everything first");
2600 "use_active_channel",
2603 "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(struct ListBase *listbase) ATTR_NONNULL(1)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) 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)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
void BLI_rctf_pad(struct rctf *rect, float pad_x, float pad_y)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
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 SEQ_HAS_PATH(_seq)
#define SEQ_STRIP_OFSBOTTOM
@ SPACE_SEQ_DESELECT_STRIP_HANDLE
@ USER_SEQ_ED_SIMPLE_TWEAKING
void ED_outliner_select_sync_from_sequence_tag(bContext *C)
bool ED_operator_sequencer_active(bContext *C)
#define SEL_OP_USE_PRE_DESELECT(sel_op)
void std::string ED_select_pick_get_name(wmOperatorType *ot, PointerRNA *ptr)
bool sequencer_retiming_mode_is_active(const bContext *C)
bool ED_sequencer_deselect_all(Scene *scene)
Read Guarded memory(de)allocation.
constexpr int SEQ_MAX_CHANNELS
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)
ListBase * SEQ_channels_displayed_get(Editing *ed)
MouseCoords(const View2D *v2d, int x, int y)
bool contains(const Key &key) const
int64_t remove_if(Predicate &&predicate)
void append(const T &value)
local_group_size(16, 16) .push_constant(Type b
draw_view in_light_buf[] float
int SEQ_effect_get_num_inputs(int seq_type)
VectorSet< Sequence * > SEQ_query_rendered_strips(const Scene *scene, ListBase *channels, ListBase *seqbase, const int timeline_frame, const int displayed_channel)
void SEQ_iterator_set_expand(const Scene *scene, ListBase *seqbase, VectorSet< Sequence * > &strips, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
void SEQ_query_strip_effect_chain(const Scene *scene, Sequence *reference_strip, ListBase *seqbase, VectorSet< Sequence * > &strips)
VectorSet< Sequence * > SEQ_query_all_strips(ListBase *seqbase)
VectorSet< Sequence * > SEQ_query_selected_strips(ListBase *seqbase)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
GPU_SHADER_INTERFACE_INFO(overlay_edit_curve_handle_iface, "vert").flat(Type pos vertex_in(1, Type::UINT, "data") .vertex_out(overlay_edit_curve_handle_iface) .geometry_layout(PrimitiveIn Frequency::GEOMETRY storage_buf(1, Qualifier::READ, "uint", "data[]", Frequency::GEOMETRY) .push_constant(Type Frequency::GEOMETRY selection[]
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)
ListBase * SEQ_active_seqbase_get(const Editing *ed)
Editing * SEQ_editing_get(const Scene *scene)
static bool is_sound(wmDrag *drag)
bool sequencer_view_preview_only_poll(const bContext *C)
bool sequencer_view_has_preview_poll(bContext *C)
const EnumPropertyItem prop_side_types[]
bool sequencer_edit_poll(bContext *C)
SeqRetimingKey * retiming_mouseover_key_get(const bContext *C, const int mval[2], Sequence **r_seq)
int sequencer_retiming_key_select_exec(bContext *C, wmOperator *op, SeqRetimingKey *key, const Sequence *key_owner)
int left_fake_key_frame_get(const bContext *C, const Sequence *seq)
SeqRetimingKey * try_to_realize_fake_keys(const bContext *C, Sequence *seq, const int mval[2])
float sequence_handle_size_get_clamped(const Scene *scene, Sequence *seq, float pixelx)
int sequencer_retiming_select_all_exec(bContext *C, wmOperator *op)
void realize_fake_keys(const Scene *scene, Sequence *seq)
int right_fake_key_frame_get(const bContext *C, const Sequence *seq)
bool retiming_keys_can_be_displayed(const SpaceSeq *sseq)
int sequencer_retiming_box_select_exec(bContext *C, wmOperator *op)
static int seq_sort_for_center_select(const void *a, const void *b)
static int sequencer_select_handle_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_box_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void seq_box_select_seq_from_preview(const bContext *C, const rctf *rect, const eSelectOp mode)
static bool seq_box_select_rect_image_isect(const Scene *scene, const Sequence *seq, const rctf *rect)
#define SEQ_USE_DATA(_seq)
static void select_active_side(const Scene *scene, ListBase *seqbase, int sel_side, int channel, int frame)
static void sequencer_select_do_updates(bContext *C, Scene *scene)
void recurs_sel_seq(Sequence *seq_meta)
static bool select_grouped_time_overlap(const Scene *scene, blender::Span< Sequence * > strips, ListBase *, Sequence *actseq)
static int sequencer_box_select_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_side_of_frame(wmOperatorType *ot)
void seq_rectf(const Scene *scene, const Sequence *seq, rctf *r_rect)
void SEQUENCER_OT_select_more(wmOperatorType *ot)
void SEQUENCER_OT_select_all(wmOperatorType *ot)
static void sequencer_select_linked_handle(const bContext *C, Sequence *seq, const eSeqHandle handle_clicked)
static int sequencer_select_less_exec(bContext *C, wmOperator *)
static void sequencer_select_strip_impl(const Editing *ed, Sequence *seq, const eSeqHandle handle_clicked, const bool extend, const bool deselect, const bool toggle)
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)
static int sequencer_select_inverse_exec(bContext *C, wmOperator *)
#define SEQ_CHANNEL_CHECK(_seq, _chan)
static int sequencer_select_handles_exec(bContext *C, wmOperator *op)
static void select_surrounding_handles(Scene *scene, Sequence *test)
void ED_sequencer_select_sequence_single(Scene *scene, Sequence *seq, bool deselect_all)
static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_linked_pick(wmOperatorType *ot)
void SEQUENCER_OT_select_box(wmOperatorType *ot)
static bool strips_are_adjacent(const Scene *scene, const Sequence *seq1, const Sequence *seq2)
static int seq_sort_for_depth_select(const void *a, const void *b)
static float strip_to_frame_distance(const Scene *scene, const View2D *v2d, const Sequence *seq, float timeline_frame)
static void sequencer_select_set_active(Scene *scene, Sequence *seq)
static int sequencer_select_more_exec(bContext *C, wmOperator *)
StripSelection ED_sequencer_pick_strip_and_handle(const Scene *scene, const View2D *v2d, float mouse_co[2])
#define SEQ_IS_EFFECT(_seq)
static const EnumPropertyItem sequencer_prop_select_grouped_types[]
void SEQUENCER_OT_select_linked(wmOperatorType *ot)
void SEQUENCER_OT_select_handle(wmOperatorType *ot)
void SEQUENCER_OT_select_inverse(wmOperatorType *ot)
void SEQUENCER_OT_select_side(wmOperatorType *ot)
@ SEQ_SELECT_HANDLES_SIDE_LEFT_NEIGHBOR
@ SEQ_SELECT_HANDLES_SIDE_LEFT
@ SEQ_SELECT_HANDLES_SIDE_BOTH
@ SEQ_SELECT_HANDLES_SIDE_BOTH_NEIGHBORS
@ SEQ_SELECT_HANDLES_SIDE_RIGHT_NEIGHBOR
@ SEQ_SELECT_HANDLES_SIDE_RIGHT
static bool select_linked_internal(Scene *scene)
blender::VectorSet< Sequence * > ED_sequencer_selected_strips_from_context(bContext *C)
void SEQUENCER_OT_select(wmOperatorType *ot)
blender::VectorSet< Sequence * > all_strips_from_context(bContext *C)
static bool select_grouped_type_effect(blender::Span< Sequence * > strips, ListBase *, Sequence *actseq, const int channel)
static bool select_grouped_effect(blender::Span< Sequence * > strips, ListBase *, Sequence *actseq, const int channel)
static void select_linked_time_seq(const Scene *scene, const Sequence *seq_source, const eSeqHandle handle_clicked)
@ SEQ_SELECT_GROUP_TYPE_EFFECT
@ SEQ_SELECT_GROUP_TYPE_BASIC
@ SEQ_SELECT_GROUP_EFFECT_LINK
@ SEQ_SELECT_GROUP_EFFECT
@ SEQ_SELECT_GROUP_OVERLAP
static bool select_grouped_data(blender::Span< Sequence * > strips, ListBase *, Sequence *actseq, const int channel)
void SEQUENCER_OT_select_grouped(wmOperatorType *ot)
void SEQUENCER_OT_select_handles(wmOperatorType *ot)
static float clickable_handle_size_get(const Scene *scene, const Sequence *seq, const View2D *v2d)
static Sequence * seq_select_seq_from_preview(const bContext *C, const int mval[2], const bool toggle, const bool extend, const bool center)
Sequence * find_neighboring_sequence(Scene *scene, Sequence *test, int lr, int sel)
static bool select_grouped_effect_link(const Scene *scene, blender::VectorSet< Sequence * > strips, ListBase *seqbase, Sequence *, const int)
bool ED_sequencer_can_select_handle(const Scene *scene, const Sequence *seq, const View2D *v2d)
static const EnumPropertyItem prop_select_handles_side_types[]
static bool element_already_selected(const StripSelection &selection)
Sequence * find_nearest_seq(const Scene *scene, const View2D *v2d, const int mval[2], eSeqHandle *r_hand)
static int sequencer_select_grouped_exec(bContext *C, wmOperator *op)
static rctf strip_clickable_area_get(const Scene *scene, const View2D *v2d, const Sequence *seq)
void SEQUENCER_OT_select_less(wmOperatorType *ot)
static int sequencer_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void query_lower_channel_strips(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, blender::VectorSet< Sequence * > &strips)
bool ED_sequencer_handle_is_selected(const Sequence *seq, eSeqHandle handle)
int sequencer_select_exec(bContext *C, wmOperator *op)
static void sequencer_select_connected_strips(const StripSelection &selection)
static int sequencer_select_side_exec(bContext *C, wmOperator *op)
static bool seq_point_image_isect(const Scene *scene, const Sequence *seq, float point[2])
static int sequencer_select_side_of_frame_exec(bContext *C, wmOperator *op)
static bool is_mouse_over_both_handles_of_adjacent_strips(const Scene *scene, blender::Vector< Sequence * > strips, const View2D *v2d, float mouse_co[2])
static bool select_grouped_type_basic(blender::Span< Sequence * > strips, ListBase *, Sequence *actseq, const int channel)
static void strip_clickable_areas_get(const Scene *scene, const Sequence *seq, const View2D *v2d, rctf *r_body, rctf *r_left_handle, rctf *r_right_handle)
static eSeqHandle get_strip_handle_under_cursor(const Scene *scene, const Sequence *seq, const View2D *v2d, float mouse_co[2])
static void sequencer_select_side_of_frame(const bContext *C, const View2D *v2d, const int mval[2], Scene *scene)
static int sequencer_select_linked_exec(bContext *C, wmOperator *)
static blender::Vector< Sequence * > mouseover_strips_sorted_get(const Scene *scene, const View2D *v2d, float mouse_co[2])
static bool select_more_less_seq__internal(Scene *scene, bool select_more)
#define SEQ_IS_SOUND(_seq)
static bool select_grouped_type(blender::Span< Sequence * > strips, ListBase *, Sequence *actseq, const int channel)
static void select_linked_time(const Scene *scene, const StripSelection &selection, const bool extend, const bool deselect, const bool toggle)
static int sequencer_select_handle_exec(bContext *C, wmOperator *op)
bool SEQ_is_strip_connected(const Sequence *seq)
blender::VectorSet< Sequence * > SEQ_get_connected_strips(const Sequence *seq)
bool SEQ_relation_is_effect_of_strip(const Sequence *effect, const Sequence *input)
bool SEQ_retiming_data_is_editable(const Sequence *seq)
int SEQ_retiming_key_timeline_frame_get(const Scene *scene, const Sequence *seq, const SeqRetimingKey *key)
bool SEQ_retiming_selection_clear(const Editing *ed)
void SEQ_select_active_set(Scene *scene, Sequence *seq)
Sequence * SEQ_select_active_get(const Scene *scene)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
bool SEQ_time_strip_intersects_frame(const Scene *scene, const Sequence *seq, const int timeline_frame)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
std::string(* get_name)(wmOperatorType *ot, PointerRNA *ptr)
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 ReportList * reports
ccl_device_inline int abs(int x)
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)
int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_box_modal(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)
int WM_operator_flag_only_pass_through_on_press(int retval, const wmEvent *event)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
int WM_generic_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_generic_select_modal(bContext *C, wmOperator *op, const wmEvent *event)