116 ListBase *markers,
Scene *scene,
int mode,
float value,
char side)
128 if (marker->flag &
SELECT) {
133 if ((side ==
'B') || (side ==
'L' && marker->frame < cfra) ||
134 (side ==
'R' && marker->frame >= cfra))
143 marker->frame = cfra +
round_fl_to_int(
float(marker->frame - cfra) * value);
166 float min_dist =
fabsf(
float(marker->
frame) - frame);
167 for (marker = marker->
next; marker; marker = marker->
next) {
168 const float dist =
fabsf(
float(marker->
frame) - frame);
169 if (dist < min_dist) {
199 if (!sel || (marker->flag &
SELECT)) {
200 if (marker->frame <
min) {
203 if (marker->frame >
max) {
221 if (area ==
nullptr) {
269 fabsf(nearest_marker->
frame - frame_at_position);
272 return nearest_marker;
285 if (only_selected && ((marker->
flag &
SELECT) == 0)) {
328 if (markers ==
nullptr) {
365 if (marker->flag &
SELECT) {
427 if (markers ==
nullptr) {
428 printf(
"No markers list to print debug for\n");
432 printf(
"List of markers follows: -----\n");
436 "\t'%s' on %d at %p with %u\n", marker->name, marker->frame, (
void *)marker, marker->flag);
439 printf(
"End of list ------------------\n");
468 uchar final_text_color[4];
476 final_text_color[3] = 100;
486 rect.
xmin = marker_x + icon_half_width;
487 rect.
xmax = xmax - icon_half_width;
501 float viewport_size[4];
521 return (marker->
flag &
SELECT) ? ICON_PMARKER_SEL : ICON_PMARKER;
524 return (marker->
flag &
SELECT) ? ICON_OUTLINER_OB_CAMERA : ICON_CAMERA_DATA;
526 return (marker->
flag &
SELECT) ? ICON_MARKER_HLT : ICON_MARKER;
537 uchar line_color[4], text_color[4];
547 uchar marker_color[4];
597 if (marker->
frame < frame_range[0]) {
600 if (marker->
frame > frame_range[1]) {
618 r_range[1] = v2d->
cur.
xmax + font_width_max;
644 rctf markers_region_rect;
655 int clip_frame_range[2];
670 const int ELEVATED = 0x10;
672 const bool is_elevated = (marker->flag &
SELECT) ||
673 (cfra >= marker->frame &&
674 (marker->next ==
nullptr || cfra < marker->
next->frame));
688 const int xmax = marker->next ? marker->next->frame : clip_frame_range[1] + 1;
690 fstyle, marker, marker->frame * xscale, xmax * xscale,
flag, region->
winy,
false);
699 marker = marker->next;
706 while (next_marker !=
nullptr && (next_marker->
flag & ELEVATED) == 0) {
707 next_marker = next_marker->
next;
710 const int xmax = next_marker ? next_marker->
frame : clip_frame_range[1] + 1;
711 draw_marker(fstyle, marker, marker->frame * xscale, xmax * xscale,
flag, region->
winy,
true);
713 marker = next_marker;
718 marker->flag &= ~ELEVATED;
796 return (markers && markers->
first);
802 if (area ==
nullptr) {
829 if (markers ==
nullptr || scene ==
nullptr) {
833 const int frame = scene->
r.
cfra;
838 if (marker->frame == frame) {
850 marker->
frame = frame;
863 ot->name =
"Add Time Marker";
864 ot->description =
"Add a new time marker";
865 ot->idname =
"MARKER_OT_add";
941 marker = marker->
next)
959 if (totmark == 1 && selmarker) {
987 if (markers ==
nullptr) {
991 for (totmark = 0, marker =
static_cast<TimeMarker *
>(markers->
first); marker;
992 marker = marker->
next)
1015 for (a = 0, marker =
static_cast<TimeMarker *
>(markers->
first); marker; marker = marker->
next) {
1058 mm->
evtx =
event->xy[0];
1059 mm->
firstx =
event->xy[0];
1090 marker = marker->
next)
1104 if (camera != scene->
camera) {
1141 bool handled =
false;
1142 switch (event->
type) {
1167 if (!has_numinput) {
1172 if (event->
xy[0] != mm->
evtx) {
1175 mm->
evtx =
event->xy[0];
1182 scene->frames_per_second(),
1183 0.1 * scene->frames_per_second(),
1227 ot->name =
"Move Time Marker";
1228 ot->description =
"Move selected time marker(s)";
1229 ot->idname =
"MARKER_OT_move";
1242 RNA_def_int(
ot->srna,
"frames", 0, INT_MIN, INT_MAX,
"Frames",
"", INT_MIN, INT_MAX);
1244 ot->srna,
"tweak",
false,
"Tweak",
"Operator has been activated using a click-drag event");
1276 if (markers ==
nullptr) {
1284 if (marker->flag &
SELECT) {
1291 newmarker->
frame = marker->frame;
1293 newmarker->
camera = marker->camera;
1295 if (marker->prop !=
nullptr) {
1325 ot->name =
"Duplicate Time Marker";
1326 ot->description =
"Duplicate selected time marker(s)";
1327 ot->idname =
"MARKER_OT_duplicate";
1340 RNA_def_int(
ot->srna,
"frames", 0, INT_MIN, INT_MAX,
"Frames",
"", INT_MIN, INT_MAX);
1377 if (marker->frame == cfra && marker->camera) {
1378 sel = (marker->flag &
SELECT);
1386 if (marker->camera) {
1387 if (marker->frame == cfra) {
1409 bool wait_to_deselect_others)
1428 const bool found = (nearest_marker !=
nullptr);
1429 const bool is_selected = (nearest_marker && nearest_marker->
flag &
SELECT);
1433 if ((sel_op ==
SEL_OP_SET && found) || (!found && deselect_all)) {
1438 if (wait_to_deselect_others && (!found || is_selected)) {
1448 TimeMarker *marker, *marker_cycle_selected =
nullptr;
1453 if (marker->
frame == cfra) {
1465 if (marker->
frame == cfra) {
1466 marker_found = marker;
1482 if (found && camera) {
1496 const bool wait_to_deselect_others =
RNA_boolean_get(op->
ptr,
"wait_to_deselect_others");
1497 bool camera =
false;
1511 bool deselect_all =
true;
1514 C, mval, extend, deselect_all, camera, wait_to_deselect_others);
1524 ot->name =
"Select Time Marker";
1525 ot->description =
"Select time marker(s)";
1526 ot->idname =
"MARKER_OT_select";
1538 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
1540 prop =
RNA_def_boolean(
ot->srna,
"camera",
false,
"Camera",
"Select the camera");
1580 v2d, markers, event->
xy[0] - region->
winrct.
xmin) !=
nullptr;
1583 if (tweak && over_marker) {
1601 if (markers ==
nullptr) {
1626 ot->name =
"Marker Box Select";
1627 ot->description =
"Select all time markers using box selection";
1628 ot->idname =
"MARKER_OT_select_box";
1646 ot->srna,
"tweak",
false,
"Tweak",
"Operator has been activated using a click-drag event");
1661 if (markers ==
nullptr) {
1677 ot->name =
"(De)select all Markers";
1678 ot->description =
"Change selection of all time markers";
1679 ot->idname =
"MARKER_OT_select_all";
1706 {0,
nullptr, 0,
nullptr,
nullptr},
1716 if (markers ==
nullptr) {
1754 ot->name =
"Select Markers Before/After Current Frame";
1755 ot->description =
"Select markers on and left/right of the current frame";
1756 ot->idname =
"MARKER_OT_select_leftright";
1786 bool changed =
false;
1788 if (markers ==
nullptr) {
1792 for (marker =
static_cast<TimeMarker *
>(markers->
first); marker; marker = nmarker) {
1793 nmarker = marker->
next;
1795 if (marker->
prop !=
nullptr) {
1819 IFACE_(
"Delete selected markers?"),
1831 ot->name =
"Delete Markers";
1832 ot->description =
"Delete selected time marker(s)";
1833 ot->idname =
"MARKER_OT_delete";
1884 C, op, event,
IFACE_(
"Rename Selected Time Marker"),
IFACE_(
"Rename"));
1890 ot->name =
"Rename Marker";
1891 ot->description =
"Rename first selected time marker";
1892 ot->idname =
"MARKER_OT_rename";
1904 ot->srna,
"name",
"RenamedMarker",
sizeof(
TimeMarker::name),
"Name",
"New name for marker");
1910 "Ensure that new name is unique within collection of markers");
1930 if (scene_to ==
nullptr) {
1947 if (marker->flag &
SELECT) {
1949 marker_new->
prev = marker_new->
next =
nullptr;
1963 ot->name =
"Copy Markers to Scene";
1964 ot->description =
"Copy selected markers to another scene";
1965 ot->idname =
"MARKER_OT_make_links_scene";
2002 if (ob ==
nullptr) {
2008 if (markers ==
nullptr) {
2013 if ((marker ==
nullptr) || (marker->
frame != scene->
r.
cfra)) {
2048 ot->name =
"Bind Camera to Markers";
2049 ot->description =
"Bind the selected camera to a marker on the current frame";
2050 ot->idname =
"MARKER_OT_camera_bind";
bScreen * CTX_wm_screen(const bContext *C)
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
ScrArea * CTX_wm_area(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
SpaceLink * CTX_wm_space_data(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
SpaceSeq * CTX_wm_space_seq(const bContext *C)
Main * CTX_data_main(const bContext *C)
ToolSettings * CTX_data_tool_settings(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
Scene * CTX_data_sequencer_scene(const bContext *C)
enum eContextObjectMode CTX_data_mode_enum(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void IDP_FreePropertyContent(IDProperty *prop)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
void BKE_view_layer_base_deselect_all(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
void BKE_report(ReportList *reports, eReportType type, const char *message)
bool BKE_scene_camera_switch_update(Scene *scene)
void BKE_screen_view3d_scene_sync(bScreen *screen, Scene *scene)
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
#define BLI_assert_unreachable()
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_CIRCULAR_FORWARD_BEGIN(type, lb, lb_iter, lb_init)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_listbase_sort(ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
#define LISTBASE_CIRCULAR_FORWARD_END(type, lb, lb_iter, lb_init)
void void void void void void BLI_duplicatelist(ListBase *dst, const ListBase *src) ATTR_NONNULL(1
void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
bool BLI_rctf_isect_x(const rctf *rect, float x)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
#define SNPRINTF_UTF8(dst, format,...)
#define STRNCPY_UTF8(dst, src)
#define SET_FLAG_FROM_TEST(value, test, flag)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ SACTION_POSEMARKERS_SHOW
Object is a sort of wrapper for general info.
void ED_area_status_text(ScrArea *area, const char *str)
#define SEL_OP_USE_PRE_DESELECT(sel_op)
void apply_keyb_grid(bool shift, bool ctrl, float *val, float fac1, float fac2, float fac3, int invert)
void GPU_matrix_scale_2f(float x, float y)
@ GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_line_width(float width)
void GPU_blend(GPUBlend blend)
void GPU_viewport_size_get_f(float coords[4])
Read Guarded memory(de)allocation.
const EnumPropertyItem * RNA_scene_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str, size_t str_len, const uchar col[4], const uiFontStyleDraw_Params *fs_params)
#define UI_NO_ICON_OVERLAY_TEXT
void UI_icon_draw_ex(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const uchar mono_color[4], bool mono_border, const IconTextOverlay *text_overlay, const bool inverted=false)
@ TH_TIME_SCRUB_BACKGROUND
@ TH_TIME_MARKER_LINE_SELECTED
void UI_GetThemeColor4ubv(int colorid, unsigned char col[4])
#define UI_MARKER_MARGIN_Y
View2D * UI_view2d_fromcontext(const bContext *C)
void UI_view2d_scale_get(const View2D *v2d, float *r_x, float *r_y)
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)
bAction * ANIM_active_action_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area, ID **r_action_user)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
static bool operator_markers_region_active(bContext *C)
static void draw_markers_background(const rctf *rect)
static void ed_marker_duplicate_apply(bContext *C)
static int markers_frame_sort(const void *a, const void *b)
static wmOperatorStatus ed_marker_move_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static bool ed_markers_poll_markers_exist_visible(bContext *C)
void ED_keymap_marker(wmKeyConfig *keyconf)
static void ed_marker_move_update_header(bContext *C, wmOperator *op)
static void ed_marker_move_exit(bContext *C, wmOperator *op)
static void marker_color_get(const TimeMarker *marker, uchar *r_text_color, uchar *r_line_color)
static wmOperatorStatus ed_marker_move_modal(bContext *C, wmOperator *op, const wmEvent *event)
eMarkers_LeftRightSelect_Mode
static void markers_select_leftright(bAnimContext *ac, const eMarkers_LeftRightSelect_Mode mode, const bool extend)
int ED_markers_post_apply_transform(ListBase *markers, Scene *scene, int mode, float value, char side)
static void MARKER_OT_move(wmOperatorType *ot)
static wmOperatorStatus ed_marker_duplicate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus ed_marker_delete_exec(bContext *C, wmOperator *)
ListBase * ED_scene_markers_get_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area)
static void select_marker_camera_switch(bContext *C, bool camera, bool extend, ListBase *markers, int cfra)
static void get_marker_region_rect(View2D *v2d, rctf *r_rect)
static void MARKER_OT_select_leftright(wmOperatorType *ot)
static wmOperatorStatus ed_marker_delete_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void MARKER_OT_add(wmOperatorType *ot)
static void draw_marker_line(const uchar *color, int xpos, int ymin, int ymax)
static wmOperatorStatus ed_marker_box_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus ed_marker_select_all_exec(bContext *C, wmOperator *op)
void ED_markers_get_minmax(ListBase *markers, short sel, float *r_first, float *r_last)
static TimeMarker * region_position_is_over_marker(const View2D *v2d, ListBase *markers, float region_x)
static const EnumPropertyItem prop_markers_select_leftright_modes[]
static void add_marker_to_cfra_elem(ListBase *lb, TimeMarker *marker, const bool only_selected)
static bool ed_markers_poll_selected_no_locked_markers(bContext *C)
ListBase * ED_sequencer_context_get_markers(const bContext *C)
void ED_operatortypes_marker()
static wmOperatorStatus ed_marker_rename_exec(bContext *C, wmOperator *op)
static wmOperatorStatus ed_marker_select_exec(bContext *C, wmOperator *op)
static wmOperatorStatus ed_marker_select_leftright_exec(bContext *C, wmOperator *op)
int ED_markers_find_nearest_marker_time(ListBase *markers, float x)
static void draw_marker_name(const uchar *text_color, const uiFontStyle *fstyle, TimeMarker *marker, float marker_x, float xmax, float text_y)
static void MARKER_OT_camera_bind(wmOperatorType *ot)
static void deselect_markers(ListBase *markers)
static wmOperatorStatus ed_marker_box_select_exec(bContext *C, wmOperator *op)
ListBase * ED_scene_markers_get(const bContext *C, Scene *scene)
static bool ed_markers_poll_selected_markers(bContext *C)
static bool ed_marker_move_init(bContext *C, wmOperator *op)
static void MARKER_OT_duplicate(wmOperatorType *ot)
static void ed_marker_move_apply(bContext *C, wmOperator *op)
static void MARKER_OT_delete(wmOperatorType *ot)
static void draw_marker(const uiFontStyle *fstyle, TimeMarker *marker, int xpos, int xmax, int flag, int region_height, bool is_elevated)
static void MARKER_OT_select_all(wmOperatorType *ot)
static void MARKER_OT_rename(wmOperatorType *ot)
static wmOperatorStatus ed_marker_camera_bind_exec(bContext *C, wmOperator *op)
bool ED_markers_region_visible(const ScrArea *area, const ARegion *region)
static void MARKER_OT_make_links_scene(wmOperatorType *ot)
static void MARKER_OT_select(wmOperatorType *ot)
static wmOperatorStatus ed_marker_rename_invoke(bContext *C, wmOperator *op, const wmEvent *event)
TimeMarker * ED_markers_find_nearest_marker(ListBase *markers, const float frame)
static bool marker_is_in_frame_range(TimeMarker *marker, const int frame_range[2])
static bool ed_markers_poll_markers_exist(bContext *C)
ListBase * ED_context_get_markers(const bContext *C)
static void MARKER_OT_select_box(wmOperatorType *ot)
static wmOperatorStatus ed_marker_duplicate_exec(bContext *C, wmOperator *op)
static bool ed_marker_move_use_time(MarkerMove *mm)
TimeMarker * ED_markers_get_first_selected(ListBase *markers)
void ED_markers_deselect_all(ListBase *markers, int action)
void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, const bool only_selected)
void debug_markers_print_list(ListBase *markers)
static wmOperatorStatus ed_marker_move_exec(bContext *C, wmOperator *op)
static wmOperatorStatus ed_marker_add_exec(bContext *C, wmOperator *)
static int marker_get_icon_id(TimeMarker *marker, int flag)
static void ed_marker_move_cancel(bContext *C, wmOperator *op)
static void get_marker_clip_frame_range(View2D *v2d, float xscale, int r_range[2])
static wmOperatorStatus ed_marker_make_links_scene_exec(bContext *C, wmOperator *op)
void ED_markers_draw(const bContext *C, int flag)
static wmOperatorStatus ed_marker_select(bContext *C, const int mval[2], bool extend, bool deselect_all, bool camera, bool wait_to_deselect_others)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
void base_activate(bContext *C, Base *base)
void base_select(Base *base, eObjectSelect_Mode mode)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
int RNA_int_get(PointerRNA *ptr, const char *name)
std::string RNA_string_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_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
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)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
struct ToolSettings * toolsettings
wmEventModifierFlag modifier
struct ReportList * reports
bool WM_event_is_modal_drag_exit(const wmEvent *event, const short init_event_type, const short init_event_val)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
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)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
void WM_operator_properties_gesture_box(wmOperatorType *ot)
void WM_operator_properties_confirm_or_exec(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_operatortype_append(void(*opfunc)(wmOperatorType *))
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)
wmOperatorStatus WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)
wmOperatorStatus WM_operator_props_popup_confirm_ex(bContext *C, wmOperator *op, const wmEvent *, std::optional< std::string > title, std::optional< std::string > confirm_text, const bool cancel_default, std::optional< std::string > message)