37 {0,
nullptr, 0,
nullptr,
nullptr},
44 const bool use_selection_mask,
49 using namespace ed::greasepencil;
51 if (
info.drawing.strokes().attributes().contains(
"vertex_color")) {
52 const IndexMask points = use_selection_mask ?
54 object,
info.drawing,
info.layer_index, memory) :
56 object,
info.drawing,
info.layer_index, memory);
70 if (
info.drawing.strokes().attributes().contains(
"fill_color")) {
71 const IndexMask strokes = use_selection_mask ?
73 object,
info.drawing,
info.layer_index, memory) :
75 object,
info.drawing,
info.layer_index, memory);
100 float delta = contrast / 2.0f;
110 if (contrast > 0.0f) {
111 gain = 1.0f - delta * 2.0f;
112 gain = 1.0f /
math::max(gain, FLT_EPSILON);
113 offset = gain * (brightness - delta);
117 gain =
math::max(1.0f - delta * 2.0f, 0.0f);
118 offset = gain * brightness + delta;
121 std::atomic<bool> any_changed;
137 any_changed.store(any_changed | changed, std::memory_order_relaxed);
150 ot->
name =
"Vertex Paint Brightness/Contrast";
151 ot->
idname =
"GREASE_PENCIL_OT_vertex_color_brightness_contrast";
181 std::atomic<bool> any_changed;
197 hsv[0] += (hue - 0.5f);
201 else if (hsv[0] < 0.0f) {
209 return ColorGeometry4f(rgb_result[0], rgb_result[1], rgb_result[2], color.
a);
211 any_changed.store(any_changed | changed, std::memory_order_relaxed);
224 ot->
name =
"Vertex Paint Hue/Saturation/Value";
225 ot->
idname =
"GREASE_PENCIL_OT_vertex_color_hsv";
252 std::atomic<bool> any_changed;
268 any_changed.store(any_changed | changed, std::memory_order_relaxed);
281 ot->
name =
"Vertex Paint Invert";
282 ot->
idname =
"GREASE_PENCIL_OT_vertex_color_invert";
308 std::atomic<bool> any_changed;
324 any_changed.store(any_changed | changed, std::memory_order_relaxed);
337 ot->
name =
"Vertex Paint Levels";
338 ot->
idname =
"GREASE_PENCIL_OT_vertex_color_levels";
353 ot->
srna,
"offset", 0.0f, -1.0f, 1.0f,
"Offset",
"Value to add to colors", -1.0f, 1.0f);
355 ot->
srna,
"gain", 1.0f, 0.0f,
FLT_MAX,
"Gain",
"Value to multiply colors by", 0.0f, 10.0f);
372 const ColorGeometry4f target_color(color_linear[0], color_linear[1], color_linear[2], 1.0f);
374 std::atomic<bool> any_changed;
399 any_changed.store(any_changed | changed, std::memory_order_relaxed);
412 ot->
name =
"Vertex Paint Set Color";
413 ot->
idname =
"GREASE_PENCIL_OT_vertex_color_set";
438 std::atomic<bool> any_changed;
446 bool changed =
false;
447 if (use_selection_mask) {
456 any_changed.store(any_changed | changed, std::memory_order_relaxed);
467 any_changed.store(any_changed | changed, std::memory_order_relaxed);
480 ot->
name =
"Reset Vertex Color";
481 ot->
idname =
"GREASE_PENCIL_OT_stroke_reset_vertex_color";
482 ot->
description =
"Reset vertex color for all or selected strokes";
const float * BKE_brush_color_get(const Scene *scene, const Paint *paint, const Brush *brush)
Object * CTX_data_active_object(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Low-level operations for curves.
Low-level operations for grease pencil.
Paint * BKE_paint_get_active_from_context(const bContext *C)
Brush * BKE_paint_brush(Paint *paint)
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
#define GPENCIL_ANY_VERTEX_MASK(flag)
eGP_vertex_SelectMaskFlag
MutableAttributeAccessor attributes_for_write()
bool remove(const StringRef attribute_id)
void foreach_index(Fn &&fn) const
void ED_operatortypes_grease_pencil_vertex_paint()
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
IndexMask retrieve_editable_and_selected_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
static const EnumPropertyItem prop_grease_pencil_vertex_mode[]
static void GREASE_PENCIL_OT_vertex_color_levels(wmOperatorType *ot)
bool grease_pencil_vertex_painting_poll(bContext *C)
static wmOperatorStatus grease_pencil_vertex_paint_set_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_invert_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_hsv_exec(bContext *C, wmOperator *op)
static void GREASE_PENCIL_OT_stroke_reset_vertex_color(wmOperatorType *ot)
static wmOperatorStatus grease_pencil_vertex_paint_brightness_contrast_exec(bContext *C, wmOperator *op)
IndexMask retrieve_editable_and_selected_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
static void GREASE_PENCIL_OT_vertex_color_brightness_contrast(wmOperatorType *ot)
static void GREASE_PENCIL_OT_vertex_color_set(wmOperatorType *ot)
static wmOperatorStatus grease_pencil_vertex_paint_reset_exec(bContext *C, wmOperator *op)
static wmOperatorStatus grease_pencil_vertex_paint_levels_exec(bContext *C, wmOperator *op)
static void GREASE_PENCIL_OT_vertex_color_invert(wmOperatorType *ot)
static void GREASE_PENCIL_OT_vertex_color_hsv(wmOperatorType *ot)
static bool apply_color_operation_for_mode(const VertexColorMode mode, Object &object, MutableDrawingInfo &info, const bool use_selection_mask, Fn &&fn)
IndexMask retrieve_editable_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
Vector< MutableDrawingInfo > retrieve_editable_drawings(const Scene &scene, GreasePencil &grease_pencil)
T interpolate(const T &a, const T &b, const FactorT &t)
T max(const T &a, const T &b)
void parallel_for_each(Range &&range, const Function &function)
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
float RNA_float_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
struct ToolSettings * toolsettings
wmOperatorStatus(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))