Cleanup: Move paint stroke code to C++ namespace

This commit is contained in:
Hans Goudey
2024-01-19 09:20:32 -05:00
parent 8c6e763fd0
commit d7cca9f1d8
6 changed files with 33 additions and 22 deletions

View File

@@ -1350,7 +1350,7 @@ static bool paint_cursor_context_init(bContext *C,
copy_v3_fl(pcontext->outline_col, 0.8f);
}
const bool is_brush_tool = PAINT_brush_tool_poll(C);
const bool is_brush_tool = blender::ed::sculpt_paint::paint_brush_tool_poll(C);
if (!is_brush_tool) {
/* Use a default color for tools that are not brushes. */
pcontext->outline_alpha = 0.8f;
@@ -1796,7 +1796,7 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
pcontext->radius);
}
const bool is_brush_tool = PAINT_brush_tool_poll(pcontext->C);
const bool is_brush_tool = paint_brush_tool_poll(pcontext->C);
/* Pose brush updates and rotation origins. */

View File

@@ -27,7 +27,6 @@ struct ImagePool;
struct MTex;
struct Object;
struct Paint;
struct PaintStroke;
struct PointerRNA;
struct RegionView3D;
struct Scene;
@@ -42,6 +41,9 @@ struct wmKeyMap;
struct wmOperator;
struct wmOperatorType;
struct VertProjHandle;
namespace blender::ed::sculpt_paint {
struct PaintStroke;
}
struct CoNo {
float co[3];
@@ -50,6 +52,8 @@ struct CoNo {
/* paint_stroke.cc */
namespace blender::ed::sculpt_paint {
using StrokeGetLocation = bool (*)(bContext *C,
float location[3],
const float mouse[2],
@@ -86,7 +90,6 @@ bool paint_supports_dynamic_size(Brush *br, enum ePaintMode mode);
bool paint_supports_dynamic_tex_coords(Brush *br, enum ePaintMode mode);
bool paint_supports_smooth_stroke(Brush *br, enum ePaintMode mode);
bool paint_supports_texture(enum ePaintMode mode);
bool paint_supports_jitter(enum ePaintMode mode);
/**
* Called in paint_ops.cc, on each regeneration of key-maps.
@@ -103,7 +106,10 @@ float paint_stroke_distance_get(PaintStroke *stroke);
void paint_stroke_set_mode_data(PaintStroke *stroke, void *mode_data);
bool paint_stroke_started(PaintStroke *stroke);
bool PAINT_brush_tool_poll(bContext *C);
bool paint_brush_tool_poll(bContext *C);
} // namespace blender::ed::sculpt_paint
/**
* Delete overlay cursor textures to preserve memory and invalidate all overlay flags.
*/

View File

@@ -1266,7 +1266,7 @@ static bool stencil_control_poll(bContext *C)
Paint *paint;
Brush *br;
if (!paint_supports_texture(mode)) {
if (!blender::ed::sculpt_paint::paint_supports_texture(mode)) {
return false;
}

View File

@@ -51,6 +51,8 @@
# include "BLI_time_utildefines.h"
#endif
namespace blender::ed::sculpt_paint {
struct PaintSample {
float mouse[2];
float pressure;
@@ -211,7 +213,6 @@ static void paint_draw_line_cursor(bContext *C, int x, int y, void *customdata)
static bool paint_tool_require_location(Brush *brush, ePaintMode mode)
{
using namespace blender::ed::sculpt_paint;
switch (mode) {
case PAINT_MODE_SCULPT:
if (ELEM(brush->sculpt_tool,
@@ -679,7 +680,6 @@ static float paint_space_stroke_spacing(bContext *C,
float size_pressure,
float spacing_pressure)
{
using namespace blender::ed::sculpt_paint;
Paint *paint = BKE_paint_get_active_from_context(C);
ePaintMode mode = BKE_paintmode_get_active_from_context(C);
Brush *brush = BKE_paint_brush(paint);
@@ -1035,7 +1035,6 @@ static bool curves_sculpt_brush_uses_spacing(const eBrushCurvesSculptTool tool)
bool paint_space_stroke_enabled(Brush *br, ePaintMode mode)
{
using namespace blender::ed::sculpt_paint;
if ((br->flag & BRUSH_SPACE) == 0) {
return false;
}
@@ -1501,7 +1500,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event, PaintS
if (paint_supports_smooth_stroke(br, mode)) {
stroke->stroke_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, PAINT_brush_tool_poll, paint_draw_smooth_cursor, stroke);
SPACE_TYPE_ANY, RGN_TYPE_ANY, paint_brush_tool_poll, paint_draw_smooth_cursor, stroke);
}
stroke->stroke_init = true;
@@ -1527,7 +1526,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event, PaintS
if (br->flag & BRUSH_LINE) {
stroke->stroke_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, PAINT_brush_tool_poll, paint_draw_line_cursor, stroke);
SPACE_TYPE_ANY, RGN_TYPE_ANY, paint_brush_tool_poll, paint_draw_line_cursor, stroke);
}
first_dab = true;
@@ -1704,7 +1703,7 @@ bool paint_stroke_started(PaintStroke *stroke)
return stroke->stroke_started;
}
bool PAINT_brush_tool_poll(bContext *C)
bool paint_brush_tool_poll(bContext *C)
{
Paint *p = BKE_paint_get_active_from_context(C);
Object *ob = CTX_data_active_object(C);
@@ -1723,3 +1722,5 @@ bool PAINT_brush_tool_poll(bContext *C)
}
return false;
}
} // namespace blender::ed::sculpt_paint

View File

@@ -3959,7 +3959,7 @@ bool SCULPT_mode_poll_view3d(bContext *C)
bool SCULPT_poll(bContext *C)
{
return SCULPT_mode_poll(C) && PAINT_brush_tool_poll(C);
return SCULPT_mode_poll(C) && blender::ed::sculpt_paint::paint_brush_tool_poll(C);
}
static const char *sculpt_tool_name(Sculpt *sd)
@@ -5441,6 +5441,8 @@ bool SCULPT_handles_colors_report(SculptSession *ss, ReportList *reports)
return false;
}
namespace blender::ed::sculpt_paint {
static bool sculpt_stroke_test_start(bContext *C, wmOperator *op, const float mval[2])
{
/* Don't start the stroke until `mval` goes over the mesh.
@@ -5487,7 +5489,6 @@ static void sculpt_stroke_update_step(bContext *C,
PaintStroke *stroke,
PointerRNA *itemptr)
{
using namespace blender::ed::sculpt_paint;
UnifiedPaintSettings *ups = &CTX_data_tool_settings(C)->unified_paint_settings;
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
Object *ob = CTX_data_active_object(C);
@@ -5574,7 +5575,6 @@ static void sculpt_brush_exit_tex(Sculpt *sd)
static void sculpt_stroke_done(const bContext *C, PaintStroke * /*stroke*/)
{
using namespace blender::ed::sculpt_paint;
Object *ob = CTX_data_active_object(C);
SculptSession *ss = ob->sculpt;
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
@@ -5809,7 +5809,7 @@ enum {
SCULPT_TOPOLOGY_ID_DEFAULT,
};
static void SCULPT_fake_neighbor_init(SculptSession *ss, const float max_dist)
static void fake_neighbor_init(SculptSession *ss, const float max_dist)
{
const int totvert = SCULPT_vertex_count_get(ss);
ss->fake_neighbors.fake_neighbor_index = static_cast<int *>(
@@ -5821,7 +5821,7 @@ static void SCULPT_fake_neighbor_init(SculptSession *ss, const float max_dist)
ss->fake_neighbors.current_max_distance = max_dist;
}
static void SCULPT_fake_neighbor_add(SculptSession *ss, PBVHVertRef v_a, PBVHVertRef v_b)
static void fake_neighbor_add(SculptSession *ss, PBVHVertRef v_a, PBVHVertRef v_b)
{
int v_index_a = BKE_pbvh_vertex_to_index(ss->pbvh, v_a);
int v_index_b = BKE_pbvh_vertex_to_index(ss->pbvh, v_b);
@@ -5869,8 +5869,6 @@ static void do_fake_neighbor_search_task(SculptSession *ss,
static PBVHVertRef fake_neighbor_search(Object *ob, const PBVHVertRef vertex, float max_distance)
{
using namespace blender;
using namespace blender::ed::sculpt_paint;
SculptSession *ss = ob->sculpt;
const float3 center = SCULPT_vertex_co_get(ss, vertex);
@@ -5921,6 +5919,8 @@ struct SculptTopologyIDFloodFillData {
int next_id;
};
} // namespace blender::ed::sculpt_paint
void SCULPT_boundary_info_ensure(Object *object)
{
using namespace blender;
@@ -5947,6 +5947,7 @@ void SCULPT_boundary_info_ensure(Object *object)
void SCULPT_fake_neighbors_ensure(Object *ob, const float max_dist)
{
using namespace blender::ed::sculpt_paint;
SculptSession *ss = ob->sculpt;
const int totvert = SCULPT_vertex_count_get(ss);
@@ -5960,7 +5961,7 @@ void SCULPT_fake_neighbors_ensure(Object *ob, const float max_dist)
}
SCULPT_topology_islands_ensure(ob);
SCULPT_fake_neighbor_init(ss, max_dist);
fake_neighbor_init(ss, max_dist);
for (int i = 0; i < totvert; i++) {
const PBVHVertRef from_v = BKE_pbvh_index_to_vertex(ss->pbvh, i);
@@ -5970,7 +5971,7 @@ void SCULPT_fake_neighbors_ensure(Object *ob, const float max_dist)
const PBVHVertRef to_v = fake_neighbor_search(ob, from_v, max_dist);
if (to_v.i != PBVH_REF_NONE) {
/* Add the fake neighbor if available. */
SCULPT_fake_neighbor_add(ss, from_v, to_v);
fake_neighbor_add(ss, from_v, to_v);
}
}
}
@@ -5992,6 +5993,7 @@ void SCULPT_fake_neighbors_disable(Object *ob)
void SCULPT_fake_neighbors_free(Object *ob)
{
using namespace blender::ed::sculpt_paint;
SculptSession *ss = ob->sculpt;
sculpt_pose_fake_neighbors_free(ss);
}

View File

@@ -1845,9 +1845,11 @@ void SCULPT_bmesh_topology_rake(Sculpt *sd,
/* sculpt_ops.cc */
namespace blender::ed::sculpt_paint {
void SCULPT_OT_brush_stroke(wmOperatorType *ot);
/* end sculpt_ops.cc */
}
inline bool SCULPT_tool_is_paint(int tool)
{