diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2013-03-05 02:55:53 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2013-03-05 02:55:53 +0400 |
commit | 044955276a44b6d933bb3020faf55825fe23c8a2 (patch) | |
tree | 2d8a7898ce72533430165da0bf383e43c2cd23a3 | |
parent | 0d5b028d43c328f528c8aeb6738f19e442c77eba (diff) |
Convert paint stroke code to write region instead of screen coordinates
on mouse event coordinates. Every paint mode operated on and converted
back to region coordinates, texture paint does so too so this will help
in unifying the systems.
ALERT! POSSIBLE BREAKING COMMIT:
I have tested all paint systems that use the stroke code and they look
like they work well but I would appreciate it if more eyes could test
this.
4 files changed, 10 insertions, 23 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index ffea5af74a3..a45f9a2d4f6 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -345,14 +345,14 @@ static int sculpt_get_brush_geometry(bContext *C, ViewContext *vc, { Scene *scene = CTX_data_scene(C); Paint *paint = paint_get_active_from_context(C); - float window[2]; + float mouse[2]; int hit; - window[0] = x + vc->ar->winrct.xmin; - window[1] = y + vc->ar->winrct.ymin; + mouse[0] = x; + mouse[1] = y; if (vc->obact->sculpt && vc->obact->sculpt->pbvh && - sculpt_stroke_get_location(C, location, window)) + sculpt_stroke_get_location(C, location, mouse)) { Brush *brush = paint_brush(paint); *pixel_radius = diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 5d9313485d2..df44335ad78 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -408,7 +408,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) float mouse[2]; int first = 0; - paint_stroke_add_sample(p, stroke, event->x, event->y); + paint_stroke_add_sample(p, stroke, event->mval[0], event->mval[1]); paint_stroke_sample_average(stroke, &sample_average); /* let NDOF motion pass through to the 3D view so we can paint and rotate simultaneously! diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 0277e1e11dc..777a9ff92ae 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -2239,11 +2239,6 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P mult_m4_m4m4(mat, vc->rv3d->persmat, ob->obmat); RNA_float_get_array(itemptr, "mouse", mval); - mval[0] -= vc->ar->winrct.xmin; - mval[1] -= vc->ar->winrct.ymin; - - - /* *** setup WeightPaintInfo - pass onto do_weight_paint_vertex *** */ wpi.defbase_tot = wpd->defbase_tot; @@ -2872,10 +2867,6 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P /* load projection matrix */ mult_m4_m4m4(mat, vc->rv3d->persmat, ob->obmat); - mval[0] -= vc->ar->winrct.xmin; - mval[1] -= vc->ar->winrct.ymin; - - /* which faces are involved */ if (vp->flag & VP_AREA) { totindex = sample_backbuf_area(vc, indexar, me->totpoly, mval[0], mval[1], brush_size_pressure); diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 56c75823bf8..ecabb70d9d7 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -965,8 +965,8 @@ static float tex_strength(SculptSession *ss, Brush *br, /* use pressure adjusted size for fixed mode */ radius = ss->cache->pixel_radius; - x = point_2d[0] + ss->cache->vc->ar->winrct.xmin; - y = point_2d[1] + ss->cache->vc->ar->winrct.ymin; + x = point_2d[0]; + y = point_2d[1]; } else if (mtex->brush_map_mode == MTEX_MAP_MODE_TILED) { /* leave the coordinates relative to the screen */ @@ -3825,8 +3825,8 @@ static void sculpt_update_brush_delta(UnifiedPaintSettings *ups, Object *ob, Bru SculptSession *ss = ob->sculpt; StrokeCache *cache = ss->cache; float mouse[2] = { - cache->mouse[0] - cache->vc->ar->winrct.xmin, - cache->mouse[1] - cache->vc->ar->winrct.ymin + cache->mouse[0], + cache->mouse[1] }; int tool = brush->sculpt_tool; @@ -4130,7 +4130,6 @@ int sculpt_stroke_get_location(bContext *C, float out[3], const float mouse[2]) StrokeCache *cache; float ray_start[3], ray_end[3], ray_normal[3], dist; float obimat[4][4]; - float mval[2]; SculptRaycastData srd; view3d_set_viewcontext(C, &vc); @@ -4141,11 +4140,8 @@ int sculpt_stroke_get_location(bContext *C, float out[3], const float mouse[2]) sculpt_stroke_modifiers_check(C, ob); - mval[0] = mouse[0] - vc.ar->winrct.xmin; - mval[1] = mouse[1] - vc.ar->winrct.ymin; - /* TODO: what if the segment is totally clipped? (return == 0) */ - ED_view3d_win_to_segment_clip(vc.ar, vc.v3d, mval, ray_start, ray_end); + ED_view3d_win_to_segment_clip(vc.ar, vc.v3d, mouse, ray_start, ray_end); invert_m4_m4(obimat, ob->obmat); mul_m4_v3(obimat, ray_start); |