Fix T76665: Wrong files selected when using box select

Reviewers: Severin

Differential Revision: https://developer.blender.org/D7705
This commit is contained in:
Jacques Lucke 2020-05-13 12:50:14 +02:00
parent eb27595ac4
commit 2afb597572
Notes: blender-bot 2023-02-14 06:25:25 +01:00
Referenced by issue #76665, Box selection of thumbnails different according to the window size | File Browser
Referenced by issue #76100, File Browser Window Size Change
3 changed files with 14 additions and 4 deletions

View File

@ -33,6 +33,7 @@
#include "BLI_assert.h"
#include "BLI_math_inline.h"
#include "BLI_sys_types.h"
#include <math.h>
#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;
}
/**
* 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.
*/

View File

@ -47,6 +47,7 @@
#include "BLI_blenlib.h"
#include "BLI_fnmatch.h"
#include "BLI_math_base.h"
#include "BLI_utildefines.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->offset_top = 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 {
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->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);
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 {
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->tile_border_x * 2;