Blender  V3.3
node_composite_colorcorrection.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2006 Blender Foundation. All rights reserved. */
3 
8 #include "UI_interface.h"
9 #include "UI_resources.h"
10 
11 #include "node_composite_util.hh"
12 
13 /* ******************* Color Correction ********************************* */
14 
16 
18 {
19  b.add_input<decl::Color>(N_("Image")).default_value({1.0f, 1.0f, 1.0f, 1.0f});
20  b.add_input<decl::Float>(N_("Mask")).default_value(1.0f).min(0.0f).max(1.0f);
21  b.add_output<decl::Color>(N_("Image"));
22 }
23 
25 {
26  NodeColorCorrection *n = MEM_cnew<NodeColorCorrection>(__func__);
27  n->startmidtones = 0.2f;
28  n->endmidtones = 0.7f;
29  n->master.contrast = 1.0f;
30  n->master.gain = 1.0f;
31  n->master.gamma = 1.0f;
32  n->master.lift = 0.0f;
33  n->master.saturation = 1.0f;
34  n->midtones.contrast = 1.0f;
35  n->midtones.gain = 1.0f;
36  n->midtones.gamma = 1.0f;
37  n->midtones.lift = 0.0f;
38  n->midtones.saturation = 1.0f;
39  n->shadows.contrast = 1.0f;
40  n->shadows.gain = 1.0f;
41  n->shadows.gamma = 1.0f;
42  n->shadows.lift = 0.0f;
43  n->shadows.saturation = 1.0f;
44  n->highlights.contrast = 1.0f;
45  n->highlights.gain = 1.0f;
46  n->highlights.gamma = 1.0f;
47  n->highlights.lift = 0.0f;
48  n->highlights.saturation = 1.0f;
49  node->custom1 = 7; // red + green + blue enabled
50  node->storage = n;
51 }
52 
54  bContext *UNUSED(C),
55  PointerRNA *ptr)
56 {
57  uiLayout *row;
58 
59  row = uiLayoutRow(layout, false);
60  uiItemR(row, ptr, "red", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
61  uiItemR(row, ptr, "green", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
62  uiItemR(row, ptr, "blue", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
63 
64  row = uiLayoutRow(layout, false);
65  uiItemL(row, "", ICON_NONE);
66  uiItemL(row, IFACE_("Saturation"), ICON_NONE);
67  uiItemL(row, IFACE_("Contrast"), ICON_NONE);
68  uiItemL(row, IFACE_("Gamma"), ICON_NONE);
69  uiItemL(row, IFACE_("Gain"), ICON_NONE);
70  uiItemL(row, IFACE_("Lift"), ICON_NONE);
71 
72  row = uiLayoutRow(layout, false);
73  uiItemL(row, IFACE_("Master"), ICON_NONE);
74  uiItemR(
75  row, ptr, "master_saturation", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
76  uiItemR(
77  row, ptr, "master_contrast", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
78  uiItemR(row, ptr, "master_gamma", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
79  uiItemR(row, ptr, "master_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
80  uiItemR(row, ptr, "master_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
81 
82  row = uiLayoutRow(layout, false);
83  uiItemL(row, IFACE_("Highlights"), ICON_NONE);
84  uiItemR(row,
85  ptr,
86  "highlights_saturation",
88  "",
89  ICON_NONE);
90  uiItemR(row,
91  ptr,
92  "highlights_contrast",
94  "",
95  ICON_NONE);
96  uiItemR(
97  row, ptr, "highlights_gamma", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
98  uiItemR(
99  row, ptr, "highlights_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
100  uiItemR(
101  row, ptr, "highlights_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
102 
103  row = uiLayoutRow(layout, false);
104  uiItemL(row, IFACE_("Midtones"), ICON_NONE);
105  uiItemR(row,
106  ptr,
107  "midtones_saturation",
109  "",
110  ICON_NONE);
111  uiItemR(
112  row, ptr, "midtones_contrast", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
113  uiItemR(
114  row, ptr, "midtones_gamma", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
115  uiItemR(row, ptr, "midtones_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
116  uiItemR(row, ptr, "midtones_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
117 
118  row = uiLayoutRow(layout, false);
119  uiItemL(row, IFACE_("Shadows"), ICON_NONE);
120  uiItemR(row,
121  ptr,
122  "shadows_saturation",
124  "",
125  ICON_NONE);
126  uiItemR(
127  row, ptr, "shadows_contrast", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
128  uiItemR(row, ptr, "shadows_gamma", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
129  uiItemR(row, ptr, "shadows_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
130  uiItemR(row, ptr, "shadows_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, "", ICON_NONE);
131 
132  row = uiLayoutRow(layout, false);
133  uiItemR(row,
134  ptr,
135  "midtones_start",
137  nullptr,
138  ICON_NONE);
139  uiItemR(
140  row, ptr, "midtones_end", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
141 }
142 
144  bContext *UNUSED(C),
145  PointerRNA *ptr)
146 {
147  uiLayout *row;
148 
149  row = uiLayoutRow(layout, false);
150  uiItemR(row, ptr, "red", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
151  uiItemR(row, ptr, "green", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
152  uiItemR(row, ptr, "blue", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
153  row = layout;
154  uiItemL(row, IFACE_("Saturation"), ICON_NONE);
155  uiItemR(row,
156  ptr,
157  "master_saturation",
159  nullptr,
160  ICON_NONE);
161  uiItemR(row,
162  ptr,
163  "highlights_saturation",
165  nullptr,
166  ICON_NONE);
167  uiItemR(row,
168  ptr,
169  "midtones_saturation",
171  nullptr,
172  ICON_NONE);
173  uiItemR(row,
174  ptr,
175  "shadows_saturation",
177  nullptr,
178  ICON_NONE);
179 
180  uiItemL(row, IFACE_("Contrast"), ICON_NONE);
181  uiItemR(row,
182  ptr,
183  "master_contrast",
185  nullptr,
186  ICON_NONE);
187  uiItemR(row,
188  ptr,
189  "highlights_contrast",
191  nullptr,
192  ICON_NONE);
193  uiItemR(row,
194  ptr,
195  "midtones_contrast",
197  nullptr,
198  ICON_NONE);
199  uiItemR(row,
200  ptr,
201  "shadows_contrast",
203  nullptr,
204  ICON_NONE);
205 
206  uiItemL(row, IFACE_("Gamma"), ICON_NONE);
207  uiItemR(
208  row, ptr, "master_gamma", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
209  uiItemR(row,
210  ptr,
211  "highlights_gamma",
213  nullptr,
214  ICON_NONE);
215  uiItemR(row,
216  ptr,
217  "midtones_gamma",
219  nullptr,
220  ICON_NONE);
221  uiItemR(row,
222  ptr,
223  "shadows_gamma",
225  nullptr,
226  ICON_NONE);
227 
228  uiItemL(row, IFACE_("Gain"), ICON_NONE);
229  uiItemR(
230  row, ptr, "master_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
231  uiItemR(row,
232  ptr,
233  "highlights_gain",
235  nullptr,
236  ICON_NONE);
237  uiItemR(row,
238  ptr,
239  "midtones_gain",
241  nullptr,
242  ICON_NONE);
243  uiItemR(
244  row, ptr, "shadows_gain", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
245 
246  uiItemL(row, IFACE_("Lift"), ICON_NONE);
247  uiItemR(
248  row, ptr, "master_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
249  uiItemR(row,
250  ptr,
251  "highlights_lift",
253  nullptr,
254  ICON_NONE);
255  uiItemR(row,
256  ptr,
257  "midtones_lift",
259  nullptr,
260  ICON_NONE);
261  uiItemR(
262  row, ptr, "shadows_lift", UI_ITEM_R_SPLIT_EMPTY_NAME | UI_ITEM_R_SLIDER, nullptr, ICON_NONE);
263 
264  row = uiLayoutRow(layout, false);
265  uiItemR(row, ptr, "midtones_start", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
266  uiItemR(row, ptr, "midtones_end", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
267 }
268 
269 } // namespace blender::nodes::node_composite_colorcorrection_cc
270 
272 {
274 
275  static bNodeType ntype;
276 
281  node_type_size(&ntype, 400, 200, 600);
284  &ntype, "NodeColorCorrection", node_free_standard_storage, node_copy_standard_storage);
285 
286  nodeRegisterType(&ntype);
287 }
void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth)
Definition: node.cc:4396
void node_type_init(struct bNodeType *ntype, void(*initfunc)(struct bNodeTree *ntree, struct bNode *node))
Definition: node.cc:4390
#define CMP_NODE_COLORCORRECTION
Definition: BKE_node.h:1277
void node_type_storage(struct bNodeType *ntype, const char *storagename, void(*freefunc)(struct bNode *node), void(*copyfunc)(struct bNodeTree *dest_ntree, struct bNode *dest_node, const struct bNode *src_node))
Definition: node.cc:4426
#define NODE_CLASS_OP_COLOR
Definition: BKE_node.h:347
void nodeRegisterType(struct bNodeType *ntype)
Definition: node.cc:1357
#define UNUSED(x)
#define IFACE_(msgid)
void uiItemL(uiLayout *layout, const char *name, int icon)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
@ UI_ITEM_R_SPLIT_EMPTY_NAME
@ UI_ITEM_R_SLIDER
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
OperationNode * node
bNodeTree * ntree
static void node_composit_init_colorcorrection(bNodeTree *UNUSED(ntree), bNode *node)
static void node_composit_buts_colorcorrection_ex(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
static void cmp_node_colorcorrection_declare(NodeDeclarationBuilder &b)
static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
void register_node_type_cmp_colorcorrection()
void cmp_node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
void node_copy_standard_storage(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node)
Definition: node_util.c:55
void node_free_standard_storage(bNode *node)
Definition: node_util.c:43
ColorCorrectionData shadows
ColorCorrectionData midtones
ColorCorrectionData master
ColorCorrectionData highlights
Defines a node type.
Definition: BKE_node.h:226
void(* draw_buttons_ex)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr)
Definition: BKE_node.h:246
void(* draw_buttons)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr)
Definition: BKE_node.h:244
NodeDeclareFunction declare
Definition: BKE_node.h:324
#define N_(msgid)
PointerRNA * ptr
Definition: wm_files.c:3480