30#include "RNA_prototypes.hh"
58 if (smd->persistent_uid == uid) {
85 int modifiers_num = 0;
87 if (smd->persistent_uid <= 0) {
90 uids.
add(smd->persistent_uid);
93 if (uids.
size() != modifiers_num) {
111 sub = &layout->
row(
true);
117 row = &layout->
row(
true);
121 int buttons_number = 0;
122 name_row = &row->
row(
true);
124 sub = &row->
row(
true);
129 sub = &row->
row(
false);
131 PointerRNA remove_op_ptr = sub->
op(
"SEQUENCER_OT_strip_modifier_remove",
"", ICON_X);
135 bool display_name = (panel->
sizex /
UI_UNIT_X - buttons_number > 5) || (panel->
sizex == 0);
158 row = &
col->row(
true);
170 &sequencer_scene->
id, &RNA_SequenceEditor,
ed);
173 ptr,
"input_mask_strip", &sequences_object,
"strips",
IFACE_(
"Mask"), ICON_NONE);
177 row = &
col->row(
true);
185 if (!sequencer_scene) {
189 return active_strip !=
nullptr;
308 ImBuf *mask_input =
nullptr;
324 timeline_frame - fra_offset,
339#define INIT_TYPE(typeName) (types[eSeqModifierType_##typeName] = &seqModifierType_##typeName)
414 smd_next = smd->
next;
464 return strip_has_ended_skip || missing_data_skip;
469 if (context.strip.modifiers.first ==
nullptr) {
493 frame_offset = context.strip.start;
496 frame_offset = smd->mask_id ? ((
Mask *)smd->mask_id)->sfra : 0;
500 context.render_state,
501 smd->mask_input_type,
559 int active_count = 0;
583 if (smd !=
nullptr) {
600 fn(
reinterpret_cast<ID *
>(smd->mask_id));
604 if (modifier_data->node_group) {
605 fn(
reinterpret_cast<ID *
>(modifier_data->node_group));
639 if (smd->mask_strip) {
Scene * CTX_data_sequencer_scene(const bContext *C)
@ PANEL_TYPE_HEADER_EXPAND
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
bool BLI_listbase_move_index(ListBase *listbase, int from, int to) ATTR_NONNULL()
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE void straight_uchar_to_premul_float(float result[4], const unsigned char color[4])
MINLINE void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4])
MINLINE void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
MINLINE void premul_float_to_straight_uchar(unsigned char *result, const float color[4])
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define BLI_string_join(...)
void BLO_write_struct_by_name(BlendWriter *writer, const char *struct_name, const void *data_ptr)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define BLT_I18NCONTEXT_ID_SEQUENCE
#define CTX_DATA_(context, msgid)
#define BLT_I18NCONTEXT_DEFAULT_BPYRNA
@ UI_PANEL_DATA_EXPAND_ROOT
@ STRIP_MASK_TIME_RELATIVE
@ eSeqModifierType_Compositor
@ NUM_STRIP_MODIFIER_TYPES
@ SEQ_USE_LINEAR_MODIFIERS
@ STRIP_MODIFIER_FLAG_EXPANDED
@ STRIP_MODIFIER_FLAG_MUTE
@ STRIP_MODIFIER_FLAG_ACTIVE
void IMB_freeImBuf(ImBuf *ibuf)
PointerRNA * UI_panel_custom_data_get(const Panel *panel)
void UI_panel_context_pointer_set(Panel *panel, const char *name, PointerRNA *ptr)
unsigned long long int uint64_t
#define INIT_TYPE(_id_code)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
void foreach_strip_modifier_id(Strip *strip, const FunctionRef< void(ID *)> fn)
static void modifier_reorder(bContext *C, Panel *panel, const int new_index)
bool modifier_move_to_index(Strip *strip, StripModifierData *smd, const int new_index)
void store_pixel_raw(float4 pix, uchar *ptr)
void seq_imbuf_to_sequencer_space(const Scene *scene, ImBuf *ibuf, bool make_float)
StripModifierData * modifier_copy(Strip &strip_dst, StripModifierData *mod_src)
void modifier_type_panel_id(eStripModifierType type, char *r_idname)
bool media_presence_is_missing(Scene *scene, const Strip *strip)
void modifier_persistent_uid_init(const Strip &strip, StripModifierData &smd)
static void set_strip_modifier_expand_flag(const bContext *, Panel *panel, short expand_flag)
void draw_mask_input_type_settings(const bContext *C, uiLayout *layout, PointerRNA *ptr)
static constexpr char STRIP_MODIFIER_TYPE_PANEL_PREFIX[]
Editing * editing_get(const Scene *scene)
void modifier_unique_name(Strip *strip, StripModifierData *smd)
static StripModifierTypeInfo * modifiersTypes[NUM_STRIP_MODIFIER_TYPES]
void store_pixel_premul(float4 pix, uchar *ptr)
StripModifierData * modifier_find_by_name(Strip *strip, const char *name)
static ImBuf * modifier_render_mask_input(const RenderData &context, SeqRenderState &state, int mask_input_type, Strip *mask_strip, Mask *mask_id, int timeline_frame, int fra_offset)
int sequence_supports_modifiers(Strip *strip)
MetaStack * meta_stack_active_get(const Editing *ed)
Strip * select_active_get(const Scene *scene)
bool strip_has_valid_data(const Strip *strip)
void modifier_blend_read_data(BlendDataReader *reader, ListBase *lb)
bool time_strip_intersects_frame(const Scene *scene, const Strip *strip, const int timeline_frame)
bool modifier_persistent_uids_are_valid(const Strip &strip)
void modifier_free(StripModifierData *smd)
bool modifier_remove(Strip *strip, StripModifierData *smd)
const StripModifierTypeInfo * modifier_type_info_get(int type)
float4 load_pixel_raw(const uchar *ptr)
void modifier_clear(Strip *strip)
void modifier_set_active(Strip *strip, StripModifierData *smd)
static void modifier_panel_header(const bContext *, Panel *panel)
static short get_strip_modifier_expand_flag(const bContext *, Panel *panel)
float4 load_pixel_premul(const uchar *ptr)
StripModifierData * modifier_new(Strip *strip, const char *name, int type)
static bool skip_modifier(Scene *scene, const StripModifierData *smd, int timeline_frame)
void modifier_list_copy(Strip *strip_new, Strip *strip)
void modifier_apply_stack(ModifierApplyContext &context, int timeline_frame)
bool modifier_ui_poll(const bContext *C, PanelType *)
void render_imbuf_from_sequencer_space(const Scene *scene, ImBuf *ibuf)
void(*)(const bContext *, Panel *) PanelDrawFn
ImBuf * seq_render_mask(Depsgraph *depsgraph, int width, int height, const Mask *mask, float frame_index, bool make_float)
static bool modifier_has_persistent_uid(const Strip &strip, int uid)
static void modifier_types_init(StripModifierTypeInfo *types[])
ImBuf * seq_render_strip(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame)
PanelType * modifier_panel_register(ARegionType *region_type, const eStripModifierType type, PanelDrawFn draw)
void modifier_blend_write(BlendWriter *writer, ListBase *modbase)
StripModifierData * modifier_get_active(const Strip *strip)
VecBase< float, 4 > float4
uint64_t get_default_hash(const T &v, const Args &...args)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
int RNA_struct_ui_icon(const StructRNA *type)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
void(* reorder)(bContext *C, Panel *pa, int new_index)
void(* set_list_data_expand_flag)(const bContext *C, Panel *pa, short expand_flag)
void(* draw)(const bContext *C, Panel *panel)
char idname[BKE_ST_MAXNAME]
bool(* poll)(const bContext *C, PanelType *pt)
char context[BKE_ST_MAXNAME]
char translation_context[BKE_ST_MAXNAME]
char active_property[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
short(* get_list_data_expand_flag)(const bContext *C, Panel *pa)
void(* draw_header)(const bContext *C, Panel *panel)
struct StripModifierData * next
struct Strip * mask_strip
void(* free_data)(StripModifierData *smd)
void(* init_data)(StripModifierData *smd)
void(* copy_data)(StripModifierData *smd, StripModifierData *target)
void(* blend_read)(BlendDataReader *reader, StripModifierData *smd)
void(* blend_write)(BlendWriter *writer, const StripModifierData *smd)
void(* apply)(ModifierApplyContext &context, StripModifierData *smd, ImBuf *mask)
void alignment_set(blender::ui::LayoutAlign alignment)
uiLayout & column(bool align)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
uiLayout & row(bool align)
void emboss_set(blender::ui::EmbossType emboss)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
wmOperatorStatus WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, blender::wm::OpCallContext context, PointerRNA *properties, const wmEvent *event)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_free(PointerRNA *ptr)