Fix: stroke spacing fails in image editor, we need to account for
zooming because spacing used to happen in unscaled screen space
This commit is contained in:
@@ -623,7 +623,7 @@ void PAINT_OT_image_paint(wmOperatorType *ot)
|
||||
}
|
||||
|
||||
|
||||
static int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
|
||||
int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
|
||||
{
|
||||
RegionView3D *rv3d = CTX_wm_region_view3d(C);
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@ struct ImagePaintPartialRedraw *get_imapaintpartial(void);
|
||||
void set_imapaintpartial(struct ImagePaintPartialRedraw * ippr);
|
||||
void imapaint_clear_partial_redraw(void);
|
||||
void imapaint_dirty_region(struct Image *ima, struct ImBuf *ibuf, int x, int y, int w, int h);
|
||||
int get_imapaint_zoom(struct bContext *C, float *zoomx, float *zoomy);
|
||||
void *paint_2d_new_stroke(struct bContext *, struct wmOperator *);
|
||||
void paint_2d_redraw(const bContext *C, void *ps, int final);
|
||||
void paint_2d_stroke_done(void *ps);
|
||||
|
||||
@@ -269,14 +269,21 @@ static int paint_space_stroke(bContext *C, wmOperator *op, wmEvent *event, const
|
||||
size_pressure = pressure;
|
||||
|
||||
if (size_pressure > FLT_EPSILON) {
|
||||
float zoomx, zoomy;
|
||||
/* brushes can have a minimum size of 1.0 but with pressure it can be smaller then a pixel
|
||||
* causing very high step sizes, hanging blender [#32381] */
|
||||
const float size_clamp = max_ff(1.0f, BKE_brush_size_get(scene, stroke->brush) * size_pressure);
|
||||
float spacing = stroke->brush->spacing;
|
||||
|
||||
/* stroke system is used for 2d paint too, so we need to account for
|
||||
* the fact that brush can be scaled there. */
|
||||
get_imapaint_zoom(C, &zoomx, &zoomy);
|
||||
|
||||
if (stroke->brush->flag & BRUSH_SPACING_PRESSURE)
|
||||
spacing = max_ff(1.0f, spacing * (1.5f - pressure));
|
||||
|
||||
spacing *= max_ff(zoomx, zoomy);
|
||||
|
||||
scale = (size_clamp * spacing / 50.0f) / length;
|
||||
if (scale > FLT_EPSILON) {
|
||||
mul_v2_fl(vec, scale);
|
||||
@@ -360,7 +367,7 @@ bool paint_supports_dynamic_size(Brush *br)
|
||||
|
||||
bool paint_supports_jitter(PaintMode mode)
|
||||
{
|
||||
return ELEM(mode, PAINT_SCULPT, PAINT_TEXTURE_PROJECTIVE);
|
||||
return ELEM3(mode, PAINT_SCULPT, PAINT_TEXTURE_PROJECTIVE, PAINT_TEXTURE_2D);
|
||||
}
|
||||
|
||||
#define PAINT_STROKE_MODAL_CANCEL 1
|
||||
|
||||
Reference in New Issue
Block a user