Blender V5.0
MOD_curves.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BKE_colortools.hh"
10
11#include "BLT_translation.hh"
12
13#include "DNA_curve_enums.h"
14#include "DNA_sequence_types.h"
15
16#include "SEQ_modifier.hh"
17
18#include "UI_interface.hh"
19#include "UI_interface_c.hh"
21
22#include "modifier.hh"
23
24namespace blender::seq {
25
27{
29
30 BKE_curvemapping_set_defaults(&cmd->curve_mapping, 4, 0.0f, 0.0f, 1.0f, 1.0f, HD_AUTO);
31}
32
39
41{
43 CurvesModifierData *cmd_target = (CurvesModifierData *)target;
44
46}
47
50
51 template<typename ImageT, typename MaskSampler>
52 void apply(ImageT *image, MaskSampler &mask, int image_x, IndexRange y_range)
53 {
54 image += y_range.first() * image_x * 4;
55 for (int64_t y : y_range) {
56 mask.begin_row(y);
57 for ([[maybe_unused]] int64_t x : IndexRange(image_x)) {
59
62 result.w = input.w;
63
64 mask.apply_mask(input, result);
66 image += 4;
67 }
68 }
69 }
70};
71
73{
75
76 const float black[3] = {0.0f, 0.0f, 0.0f};
77 const float white[3] = {1.0f, 1.0f, 1.0f};
78
80
83
86 apply_modifier_op(op, context.image, mask, context.transform);
87
89}
90
91static void curves_panel_draw(const bContext *C, Panel *panel)
92{
93 uiLayout *layout = panel->layout;
95
96 uiTemplateCurveMapping(layout, ptr, "curve_mapping", 'c', false, false, false, true, false);
97
98 if (uiLayout *mask_input_layout = layout->panel_prop(
99 C, ptr, "open_mask_input_panel", IFACE_("Mask Input")))
100 {
101 draw_mask_input_type_settings(C, mask_input_layout, ptr);
102 }
103}
104
109
110static void curves_write(BlendWriter *writer, const StripModifierData *smd)
111{
112 const CurvesModifierData *cmd = reinterpret_cast<const CurvesModifierData *>(smd);
114}
115
117{
118 CurvesModifierData *cmd = reinterpret_cast<CurvesModifierData *>(smd);
120}
121
123 /*idname*/ "Curves",
124 /*name*/ CTX_N_(BLT_I18NCONTEXT_ID_SEQUENCE, "Curves"),
125 /*struct_name*/ "CurvesModifierData",
126 /*struct_size*/ sizeof(CurvesModifierData),
127 /*init_data*/ curves_init_data,
128 /*free_data*/ curves_free_data,
129 /*copy_data*/ curves_copy_data,
130 /*apply*/ curves_apply,
131 /*panel_register*/ curves_register,
132 /*blend_write*/ curves_write,
133 /*blend_read*/ curves_read,
134};
135
136}; // namespace blender::seq
void BKE_curvemapping_evaluate_premulRGBF(const CurveMapping *cumap, float vecout[3], const float vecin[3])
void BKE_curvemapping_premultiply(CurveMapping *cumap, bool restore)
void BKE_curvemapping_free_data(CurveMapping *cumap)
void BKE_curvemapping_set_black_white(CurveMapping *cumap, const float black[3], const float white[3])
void BKE_curvemapping_blend_read(BlendDataReader *reader, CurveMapping *cumap)
void BKE_curvemapping_set_defaults(CurveMapping *cumap, int tot, float minx, float miny, float maxx, float maxy, short default_handle_type)
Definition colortools.cc:40
void BKE_curvemapping_init(CurveMapping *cumap)
void BKE_curvemapping_blend_write(BlendWriter *writer, const CurveMapping *cumap)
void BKE_curvemapping_copy_data(CurveMapping *target, const CurveMapping *cumap)
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_SEQUENCE
#define IFACE_(msgid)
@ HD_AUTO
@ eSeqModifierType_Curves
#define C
Definition RandGen.cpp:29
void uiTemplateCurveMapping(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, int type, bool levels, bool brush, bool neg_slope, bool tone, bool presets)
PointerRNA * UI_panel_custom_data_get(const Panel *panel)
long long int int64_t
constexpr int64_t first() const
#define input
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
static void curves_register(ARegionType *region_type)
void draw_mask_input_type_settings(const bContext *C, uiLayout *layout, PointerRNA *ptr)
void apply_modifier_op(T &op, ImBuf *ibuf, const ImBuf *mask, const float3x3 &mask_transform)
Definition modifier.hh:263
static void curves_write(BlendWriter *writer, const StripModifierData *smd)
void store_pixel_premul(float4 pix, uchar *ptr)
static void curves_apply(ModifierApplyContext &context, StripModifierData *smd, ImBuf *mask)
Definition MOD_curves.cc:72
StripModifierTypeInfo seqModifierType_Curves
static void curves_free_data(StripModifierData *smd)
Definition MOD_curves.cc:33
static void curves_copy_data(StripModifierData *target, StripModifierData *smd)
Definition MOD_curves.cc:40
static void curves_read(BlendDataReader *reader, StripModifierData *smd)
float4 load_pixel_premul(const uchar *ptr)
static void curves_init_data(StripModifierData *smd)
Definition MOD_curves.cc:26
static void curves_panel_draw(const bContext *C, Panel *panel)
Definition MOD_curves.cc:91
PanelType * modifier_panel_register(ARegionType *region_type, const eStripModifierType type, PanelDrawFn draw)
VecBase< float, 4 > float4
struct CurveMapping curve_mapping
struct uiLayout * layout
void apply(ImageT *image, MaskSampler &mask, int image_x, IndexRange y_range)
Definition MOD_curves.cc:52
const CurveMapping * curve_mapping
Definition MOD_curves.cc:49
PanelLayout panel_prop(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name)
PointerRNA * ptr
Definition wm_files.cc:4238