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;
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]);
516 ot->name =
"(De)select All";
517 ot->idname =
"SEQUENCER_OT_select_all";
518 ot->description =
"Select or deselect all strips";
565 ot->name =
"Select Inverse";
566 ot->idname =
"SEQUENCER_OT_select_inverse";
567 ot->description =
"Select unselected strips";
628 ((
x >= scene->
r.
cfra) && (tmarker->frame >= scene->
r.
cfra)))
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] = {
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;
858 const bool seq1_already_selected = ((
selection.seq1->flag &
SELECT) != 0);
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;
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) {
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) {
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");
1277 if (already_selected && wait_to_deselect_others && !toggle && !ignore_connections) {
1281 bool changed =
false;
1285 (
selection.seq1 && (extend ==
false && deselect ==
false && toggle ==
false)))
1307 if (!ignore_connections) {
1331 ot->name =
"Select";
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) {
1419 if (key !=
nullptr) {
1443 if (!ignore_connections) {
1471 ot->name =
"Select Handle";
1472 ot->idname =
"SEQUENCER_OT_select_handle";
1473 ot->description =
"Select strip 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;
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";
1705 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
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},
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";
1933 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
1935 ot->prop =
RNA_def_enum(
ot->srna,
"side", sequencer_select_left_right_types, 0,
"Side",
"");
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]);
2072 if (ed ==
nullptr) {
2085 bool changed =
false;
2154 if (!ignore_connections) {
2205 ot->name =
"Box Select";
2206 ot->idname =
"SEQUENCER_OT_select_box";
2207 ot->description =
"Select strips using box selection";
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;
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.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
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)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
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)
int sequencer_select_exec(bContext *C, wmOperator *op)
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)
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_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_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)
@ SEQ_SELECT_GROUP_TYPE_EFFECT
@ SEQ_SELECT_GROUP_TYPE_BASIC
@ SEQ_SELECT_GROUP_EFFECT_LINK
@ SEQ_SELECT_GROUP_EFFECT
@ SEQ_SELECT_GROUP_OVERLAP
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)
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)