105 ListBase *markers,
Scene *scene,
int mode,
float value,
char side)
107 float cfra = float(scene->
r.
cfra);
117 if (marker->flag &
SELECT) {
122 if ((side ==
'B') || (side ==
'L' && marker->frame < cfra) ||
123 (side ==
'R' && marker->frame >= cfra))
132 marker->frame = cfra +
round_fl_to_int(
float(marker->frame - cfra) * value);
155 float min_dist =
fabsf(
float(marker->
frame) - frame);
156 for (marker = marker->
next; marker; marker = marker->
next) {
157 const float dist =
fabsf(
float(marker->
frame) - frame);
158 if (dist < min_dist) {
188 if (!sel || (marker->flag &
SELECT)) {
189 if (marker->frame <
min) {
190 min = float(marker->frame);
192 if (marker->frame >
max) {
193 max = float(marker->frame);
210 if (area ==
nullptr) {
258 fabsf(nearest_marker->
frame - frame_at_position);
261 return nearest_marker;
274 if (only_selected && ((marker->
flag &
SELECT) == 0)) {
317 if (markers ==
nullptr) {
354 if (marker->flag &
SELECT) {
369 if (markers ==
nullptr) {
370 printf(
"No markers list to print debug for\n");
374 printf(
"List of markers follows: -----\n");
378 "\t'%s' on %d at %p with %u\n", marker->name, marker->frame, (
void *)marker, marker->flag);
381 printf(
"End of list ------------------\n");
409 const char *name = marker->
name;
410 uchar final_text_color[4];
416 name = camera->
id.
name + 2;
418 final_text_color[3] = 100;
428 rect.
xmin = marker_x + icon_half_width;
429 rect.
xmax = xmax - icon_half_width;
433 UI_fontstyle_draw(fstyle, &rect, name, strlen(name), final_text_color, &fs_params);
443 float viewport_size[4];
463 return (marker->
flag &
SELECT) ? ICON_PMARKER_SEL : ICON_PMARKER;
466 return (marker->
flag &
SELECT) ? ICON_OUTLINER_OB_CAMERA : ICON_CAMERA_DATA;
468 return (marker->
flag &
SELECT) ? ICON_MARKER_HLT : ICON_MARKER;
479 uchar line_color[4], text_color[4];
489 uchar marker_color[4];
539 if (marker->
frame < frame_range[0]) {
542 if (marker->
frame > frame_range[1]) {
560 r_range[1] = v2d->
cur.
xmax + font_width_max;
584 rctf markers_region_rect;
589 const float alpha = std::min(dist /
fade, 1.0f);
598 int clip_frame_range[2];
613 const int ELEVATED = 0x10;
615 const bool is_elevated = (marker->flag &
SELECT) ||
616 (cfra >= marker->frame &&
617 (marker->next ==
nullptr || cfra < marker->
next->frame));
631 const int xmax = marker->next ? marker->next->frame : clip_frame_range[1] + 1;
633 fstyle, marker, marker->frame * xscale, xmax * xscale,
flag, region->
winy,
false);
642 marker = marker->next;
649 while (next_marker !=
nullptr && (next_marker->
flag & ELEVATED) == 0) {
650 next_marker = next_marker->
next;
653 const int xmax = next_marker ? next_marker->
frame : clip_frame_range[1] + 1;
654 draw_marker(fstyle, marker, marker->frame * xscale, xmax * xscale,
flag, region->
winy,
true);
656 marker = next_marker;
661 marker->flag &= ~ELEVATED;
733 return (markers && markers->
first);
739 if (area ==
nullptr) {
765 if (markers ==
nullptr) {
772 if (marker->
frame == frame) {
784 marker->
frame = frame;
797 ot->name =
"Add Time Marker";
798 ot->description =
"Add a new time marker";
799 ot->idname =
"MARKER_OT_add";
874 marker = marker->
next)
892 if (totmark == 1 && selmarker) {
918 if (markers ==
nullptr) {
922 for (totmark = 0, marker =
static_cast<TimeMarker *
>(markers->
first); marker;
923 marker = marker->
next)
946 for (a = 0, marker =
static_cast<TimeMarker *
>(markers->
first); marker; marker = marker->
next) {
987 mm->
evtx =
event->xy[0];
988 mm->
firstx =
event->xy[0];
1018 marker = marker->
next)
1032 if (camera != scene->
camera) {
1068 bool handled =
false;
1069 switch (event->
type) {
1094 if (!has_numinput) {
1099 if (event->
xy[0] != mm->
evtx) {
1102 mm->
evtx =
event->xy[0];
1103 fac = (float(event->
xy[0] - mm->
firstx) * dx);
1154 ot->name =
"Move Time Marker";
1155 ot->description =
"Move selected time marker(s)";
1156 ot->idname =
"MARKER_OT_move";
1169 RNA_def_int(
ot->srna,
"frames", 0, INT_MIN, INT_MAX,
"Frames",
"", INT_MIN, INT_MAX);
1171 ot->srna,
"tweak",
false,
"Tweak",
"Operator has been activated using a click-drag event");
1201 if (markers ==
nullptr) {
1209 if (marker->flag &
SELECT) {
1216 newmarker->
frame = marker->frame;
1218 newmarker->
camera = marker->camera;
1220 if (marker->prop !=
nullptr) {
1250 ot->name =
"Duplicate Time Marker";
1251 ot->description =
"Duplicate selected time marker(s)";
1252 ot->idname =
"MARKER_OT_duplicate";
1265 RNA_def_int(
ot->srna,
"frames", 0, INT_MIN, INT_MAX,
"Frames",
"", INT_MIN, INT_MAX);
1299 if (marker->frame == cfra) {
1300 sel = (marker->flag &
SELECT);
1307 if (marker->camera) {
1308 if (marker->frame == cfra) {
1330 bool wait_to_deselect_others)
1346 const bool found = (nearest_marker !=
nullptr);
1347 const bool is_selected = (nearest_marker && nearest_marker->
flag &
SELECT);
1351 if ((sel_op ==
SEL_OP_SET && found) || (!found && deselect_all)) {
1356 if (wait_to_deselect_others && (!found || is_selected)) {
1368 TimeMarker *marker, *marker_cycle_selected =
nullptr;
1373 if (marker->
frame == cfra) {
1385 if (marker->
frame == cfra) {
1386 marker_found = marker;
1412 const bool wait_to_deselect_others =
RNA_boolean_get(op->
ptr,
"wait_to_deselect_others");
1413 bool camera =
false;
1427 bool deselect_all =
true;
1430 C, mval, extend, deselect_all, camera, wait_to_deselect_others);
1440 ot->name =
"Select Time Marker";
1441 ot->description =
"Select time marker(s)";
1442 ot->idname =
"MARKER_OT_select";
1454 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend the selection");
1456 prop =
RNA_def_boolean(
ot->srna,
"camera",
false,
"Camera",
"Select the camera");
1494 v2d, markers, event->
xy[0] - region->
winrct.
xmin) !=
nullptr;
1497 if (tweak && over_marker) {
1513 if (markers ==
nullptr) {
1538 ot->name =
"Marker Box Select";
1539 ot->description =
"Select all time markers using box selection";
1540 ot->idname =
"MARKER_OT_select_box";
1558 ot->srna,
"tweak",
false,
"Tweak",
"Operator has been activated using a click-drag event");
1571 if (markers ==
nullptr) {
1587 ot->name =
"(De)select all Markers";
1588 ot->description =
"Change selection of all time markers";
1589 ot->idname =
"MARKER_OT_select_all";
1616 {0,
nullptr, 0,
nullptr,
nullptr},
1626 if (markers ==
nullptr) {
1664 ot->name =
"Select Markers Before/After Current Frame";
1665 ot->description =
"Select markers on and left/right of the current frame";
1666 ot->idname =
"MARKER_OT_select_leftright";
1694 bool changed =
false;
1696 if (markers ==
nullptr) {
1700 for (marker =
static_cast<TimeMarker *
>(markers->
first); marker; marker = nmarker) {
1701 nmarker = marker->
next;
1703 if (marker->
prop !=
nullptr) {
1727 IFACE_(
"Delete selected markers?"),
1739 ot->name =
"Delete Markers";
1740 ot->description =
"Delete selected time marker(s)";
1741 ot->idname =
"MARKER_OT_delete";
1786 C, op, event,
IFACE_(
"Rename Selected Time Marker"),
IFACE_(
"Rename"));
1792 ot->name =
"Rename Marker";
1793 ot->description =
"Rename first selected time marker";
1794 ot->idname =
"MARKER_OT_rename";
1806 ot->srna,
"name",
"RenamedMarker",
sizeof(
TimeMarker::name),
"Name",
"New name for marker");
1812 "Ensure that new name is unique within collection of markers");
1830 if (scene_to ==
nullptr) {
1847 if (marker->flag &
SELECT) {
1849 marker_new->
prev = marker_new->
next =
nullptr;
1863 ot->name =
"Copy Markers to Scene";
1864 ot->description =
"Copy selected markers to another scene";
1865 ot->idname =
"MARKER_OT_make_links_scene";
1897 if (ob ==
nullptr) {
1903 if (markers ==
nullptr) {
1908 if ((marker ==
nullptr) || (marker->
frame != scene->
r.
cfra)) {
1943 ot->name =
"Bind Camera to Markers";
1944 ot->description =
"Bind the selected camera to a marker on the current frame";
1945 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)
Main * CTX_data_main(const bContext *C)
ToolSettings * CTX_data_tool_settings(const bContext *C)
ARegion * CTX_wm_region(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)
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)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *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_blend(eGPUBlend blend)
void GPU_line_width(float width)
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)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
static bool operator_markers_region_active(bContext *C)
static void ed_marker_duplicate_apply(bContext *C)
static int markers_frame_sort(const void *a, const void *b)
ListBase * ED_scene_markers_get(Scene *scene, ScrArea *area)
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 *)
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 void draw_markers_background(const rctf *rect, const float alpha)
ListBase * ED_animcontext_get_markers(const bAnimContext *ac)
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)
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)
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)
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)
CCL_NAMESPACE_BEGIN ccl_device float fade(const float t)
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)
void RNA_string_get(PointerRNA *ptr, const char *name, char *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_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_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)
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)