Fix (unreported) bad handling of brush's fill threshold value.
authorBastien Montagne <montagne29@wanadoo.fr>
Fri, 18 Nov 2016 14:32:50 +0000 (15:32 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Fri, 18 Nov 2016 14:32:50 +0000 (15:32 +0100)
'1' threshold value would only allow to access a third of the basic
'color space' (from black to white, from 0.0 to 1.0 component values),
when you expect it to access the whole range.

Unfortunately, this needs a subversion bump to allow already defined
brushes to keep exact same behavior!

Also, did not change default value (0.2) for new brushes, think here
keeping current one makes more sense.

Thanks to @LucaRood for confirming the issue.

source/blender/blenkernel/BKE_blender_version.h
source/blender/blenloader/intern/versioning_270.c
source/blender/editors/sculpt_paint/paint_image_2d.c

index baf8510dd0dc19d67181b0196502890e3b7726a5..4f4787f9da59d49fd8df358ef988f24c93e7e072 100644 (file)
@@ -28,7 +28,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         278
-#define BLENDER_SUBVERSION      3
+#define BLENDER_SUBVERSION      4
 /* Several breakages with 270, e.g. constraint deg vs rad */
 #define BLENDER_MINVERSION      270
 #define BLENDER_MINSUBVERSION   6
index 8133d0496faadb718d92c1d0823bc079cc4a50e3..25d78b73d5950caafbd7b1457ea55fb3b6564153 100644 (file)
@@ -1466,4 +1466,11 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
                        }
                }
        }
+
+       if (!MAIN_VERSION_ATLEAST(main, 278, 4)) {
+               const float sqrt_3 = (float)M_SQRT3;
+               for (Brush *br = main->brush.first; br; br = br->id.next) {
+                       br->fill_threshold /= sqrt_3;
+               }
+       }
 }
index 9474a46d716e1b6633afc4629729efaeaa2a51d3..4f93c12385d97cb74b4b1beaa538c5e22c9f556e 100644 (file)
@@ -1489,7 +1489,8 @@ void paint_2d_bucket_fill(
                float image_init[2];
                int minx = ibuf->x, miny = ibuf->y, maxx = 0, maxy = 0;
                float pixel_color[4];
-               float threshold_sq = br->fill_threshold * br->fill_threshold;
+               /* We are comparing to sum of three squared values (assumed in range [0,1]), so need to multiply... */
+               float threshold_sq = br->fill_threshold * br->fill_threshold * 3;
 
                UI_view2d_region_to_view(s->v2d, mouse_init[0], mouse_init[1], &image_init[0], &image_init[1]);