Fix T76665: Wrong files selected when using box select

Reviewers: Severin

Differential Revision: https://developer.blender.org/D7705
This commit is contained in:
2020-05-13 12:50:14 +02:00
parent eb27595ac4
commit 2afb597572
3 changed files with 14 additions and 4 deletions

View File

@@ -33,6 +33,7 @@
#include "BLI_assert.h" #include "BLI_assert.h"
#include "BLI_math_inline.h" #include "BLI_math_inline.h"
#include "BLI_sys_types.h"
#include <math.h> #include <math.h>
#ifndef M_PI #ifndef M_PI

View File

@@ -355,6 +355,14 @@ MINLINE int divide_floor_i(int a, int b)
return r ? d - ((a < 0) ^ (b < 0)) : d; return r ? d - ((a < 0) ^ (b < 0)) : d;
} }
/**
* Integer division that ceils the result, instead of flooring like normal C division.
*/
MINLINE uint divide_ceil_u(uint a, uint b)
{
return (a + b - 1) / b;
}
/** /**
* modulo that handles negative numbers, works the same as Python's. * modulo that handles negative numbers, works the same as Python's.
*/ */

View File

@@ -47,6 +47,7 @@
#include "BLI_blenlib.h" #include "BLI_blenlib.h"
#include "BLI_fnmatch.h" #include "BLI_fnmatch.h"
#include "BLI_math_base.h"
#include "BLI_utildefines.h" #include "BLI_utildefines.h"
#include "BLO_readfile.h" #include "BLO_readfile.h"
@@ -758,11 +759,11 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, ARegion *region)
layout->attribute_column_header_h = 0; layout->attribute_column_header_h = 0;
layout->offset_top = 0; layout->offset_top = 0;
if (layout->flow_columns > 0) { if (layout->flow_columns > 0) {
layout->rows = numfiles / layout->flow_columns + 1; // XXX dirty, modulo is zero layout->rows = divide_ceil_u(numfiles, layout->flow_columns);
} }
else { else {
layout->flow_columns = 1; layout->flow_columns = 1;
layout->rows = numfiles + 1; // XXX dirty, modulo is zero layout->rows = numfiles;
} }
layout->height = sfile->layout->rows * (layout->tile_h + 2 * layout->tile_border_y) + layout->height = sfile->layout->rows * (layout->tile_h + 2 * layout->tile_border_y) +
layout->tile_border_y * 2 - layout->offset_top; layout->tile_border_y * 2 - layout->offset_top;
@@ -807,11 +808,11 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, ARegion *region)
file_attribute_columns_init(params, layout); file_attribute_columns_init(params, layout);
if (layout->rows > 0) { if (layout->rows > 0) {
layout->flow_columns = numfiles / layout->rows + 1; // XXX dirty, modulo is zero layout->flow_columns = divide_ceil_u(numfiles, layout->rows);
} }
else { else {
layout->rows = 1; layout->rows = 1;
layout->flow_columns = numfiles + 1; // XXX dirty, modulo is zero layout->flow_columns = numfiles;
} }
layout->width = sfile->layout->flow_columns * (layout->tile_w + 2 * layout->tile_border_x) + layout->width = sfile->layout->flow_columns * (layout->tile_w + 2 * layout->tile_border_x) +
layout->tile_border_x * 2; layout->tile_border_x * 2;