2008-12-20 10:02:00 +00:00
|
|
|
/*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2008-12-20 10:02:00 +00:00
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
|
|
* All rights reserved.
|
2011-10-23 17:52:20 +00:00
|
|
|
*/
|
2008-12-20 10:02:00 +00:00
|
|
|
|
2012-02-17 18:59:41 +00:00
|
|
|
#ifndef __BLI_RECT_H__
|
|
|
|
#define __BLI_RECT_H__
|
2008-12-20 10:02:00 +00:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
* \ingroup bli
|
2011-02-18 13:58:08 +00:00
|
|
|
*/
|
|
|
|
|
2012-11-26 20:37:04 +00:00
|
|
|
#include "DNA_vec_types.h"
|
2019-04-17 06:17:24 +02:00
|
|
|
#include "BLI_sys_types.h" /* bool */
|
2018-11-07 12:17:58 +11:00
|
|
|
#include "BLI_compiler_compat.h"
|
2012-11-26 20:37:04 +00:00
|
|
|
|
2008-12-20 10:02:00 +00:00
|
|
|
struct rctf;
|
|
|
|
struct rcti;
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rcti_is_empty(const struct rcti *rect);
|
|
|
|
bool BLI_rctf_is_empty(const struct rctf *rect);
|
2012-07-12 08:31:23 +00:00
|
|
|
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax);
|
|
|
|
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax);
|
2017-03-08 23:10:31 +11:00
|
|
|
void BLI_rctf_init_pt_radius(struct rctf *rect, const float xy[2], float size);
|
|
|
|
void BLI_rcti_init_pt_radius(struct rcti *rect, const int xy[2], int size);
|
2012-07-12 08:31:23 +00:00
|
|
|
void BLI_rcti_init_minmax(struct rcti *rect);
|
|
|
|
void BLI_rctf_init_minmax(struct rctf *rect);
|
2012-07-12 09:24:17 +00:00
|
|
|
void BLI_rcti_do_minmax_v(struct rcti *rect, const int xy[2]);
|
|
|
|
void BLI_rctf_do_minmax_v(struct rctf *rect, const float xy[2]);
|
|
|
|
|
2019-04-17 06:17:24 +02:00
|
|
|
void BLI_rctf_transform_pt_v(const rctf *dst,
|
|
|
|
const rctf *src,
|
|
|
|
float xy_dst[2],
|
|
|
|
const float xy_src[2]);
|
|
|
|
void BLI_rctf_transform_calc_m4_pivot_min_ex(
|
|
|
|
const rctf *dst, const rctf *src, float matrix[4][4], uint x, uint y);
|
2017-08-27 16:01:06 +10:00
|
|
|
void BLI_rctf_transform_calc_m4_pivot_min(const rctf *dst, const rctf *src, float matrix[4][4]);
|
2014-03-09 15:48:09 +11:00
|
|
|
|
2012-07-15 00:29:56 +00:00
|
|
|
void BLI_rctf_translate(struct rctf *rect, float x, float y);
|
|
|
|
void BLI_rcti_translate(struct rcti *rect, int x, int y);
|
2013-03-19 10:54:52 +00:00
|
|
|
void BLI_rcti_recenter(struct rcti *rect, int x, int y);
|
|
|
|
void BLI_rctf_recenter(struct rctf *rect, float x, float y);
|
2012-07-15 00:29:56 +00:00
|
|
|
void BLI_rcti_resize(struct rcti *rect, int x, int y);
|
|
|
|
void BLI_rctf_resize(struct rctf *rect, float x, float y);
|
2013-01-11 04:34:15 +00:00
|
|
|
void BLI_rcti_scale(rcti *rect, const float scale);
|
|
|
|
void BLI_rctf_scale(rctf *rect, const float scale);
|
2019-05-21 22:27:09 +10:00
|
|
|
void BLI_rctf_pad_y(struct rctf *rect,
|
|
|
|
const float boundary_size,
|
|
|
|
const float pad_min,
|
|
|
|
const float pad_max);
|
2019-04-17 06:17:24 +02:00
|
|
|
void BLI_rctf_interp(struct rctf *rect,
|
|
|
|
const struct rctf *rect_a,
|
|
|
|
const struct rctf *rect_b,
|
|
|
|
const float fac);
|
2019-05-01 11:09:22 +10:00
|
|
|
// void BLI_rcti_interp(struct rctf *rect, struct rctf *rect_a, struct rctf *rect_b, float fac);
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rctf_clamp_pt_v(const struct rctf *rect, float xy[2]);
|
|
|
|
bool BLI_rcti_clamp_pt_v(const struct rcti *rect, int xy[2]);
|
2015-10-17 00:03:29 +11:00
|
|
|
bool BLI_rctf_clamp(struct rctf *rect, const struct rctf *rect_bounds, float r_xy[2]);
|
|
|
|
bool BLI_rcti_clamp(struct rcti *rect, const struct rcti *rect_bounds, int r_xy[2]);
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rctf_compare(const struct rctf *rect_a, const struct rctf *rect_b, const float limit);
|
|
|
|
bool BLI_rcti_compare(const struct rcti *rect_a, const struct rcti *rect_b);
|
|
|
|
bool BLI_rctf_isect(const struct rctf *src1, const struct rctf *src2, struct rctf *dest);
|
|
|
|
bool BLI_rcti_isect(const struct rcti *src1, const struct rcti *src2, struct rcti *dest);
|
2013-12-06 18:48:55 +11:00
|
|
|
bool BLI_rcti_isect_x(const rcti *rect, const int x);
|
|
|
|
bool BLI_rcti_isect_y(const rcti *rect, const int y);
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rcti_isect_pt(const struct rcti *rect, const int x, const int y);
|
|
|
|
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2]);
|
2013-12-06 18:48:55 +11:00
|
|
|
bool BLI_rctf_isect_x(const rctf *rect, const float x);
|
|
|
|
bool BLI_rctf_isect_y(const rctf *rect, const float y);
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rctf_isect_pt(const struct rctf *rect, const float x, const float y);
|
|
|
|
bool BLI_rctf_isect_pt_v(const struct rctf *rect, const float xy[2]);
|
File Browser Arrow Keys Navigation
Adds support for selecting/deselecting files in File Browser using the
arrow keys. All directions (up, down, left, right) are possible.
When to Select, When to Deselect?
Standard behaviour is selecting, however if we move into a block of
already selected files (meaning 2+ files are selected) we start
deselecting
Possible Selection Methods
Simple selection (arrow-key): All other files are deselected
Expand selection (Shift+arrow key): Add to/remove from existing
selection
ill-Expand selection (Ctrl+Shift+arrow key): Add to/remove from existing
selection and fill everything in-between
From which file do we start navigating?
From each available selection method (Mouse-, Walk-, All-, Border
Select), we use the last selected file. If there's no selection at all
we use the first (down/right arrow) or last (up/left arrow) file.
(Ideally, the view would automatically be set to the new selection, but
this behaviour overlaps with an other patch I've been working on, so
prefer to do that separately)
(Also tweaks color for highlighted file for better feedback)
D1297, Review done by @campbellbarton, thx a lot :)
2015-06-11 17:20:29 +02:00
|
|
|
int BLI_rcti_length_x(const rcti *rect, const int x);
|
|
|
|
int BLI_rcti_length_y(const rcti *rect, const int y);
|
|
|
|
float BLI_rctf_length_x(const rctf *rect, const float x);
|
|
|
|
float BLI_rctf_length_y(const rctf *rect, const float y);
|
2013-03-09 05:35:49 +00:00
|
|
|
bool BLI_rcti_isect_segment(const struct rcti *rect, const int s1[2], const int s2[2]);
|
|
|
|
bool BLI_rctf_isect_segment(const struct rctf *rect, const float s1[2], const float s2[2]);
|
2013-11-06 19:21:42 +00:00
|
|
|
bool BLI_rcti_isect_circle(const struct rcti *rect, const float xy[2], const float radius);
|
|
|
|
bool BLI_rctf_isect_circle(const struct rctf *rect, const float xy[2], const float radius);
|
2018-09-04 17:33:12 +10:00
|
|
|
bool BLI_rcti_inside_rcti(const rcti *rct_a, const rcti *rct_b);
|
|
|
|
bool BLI_rctf_inside_rctf(const rctf *rct_a, const rctf *rct_b);
|
2012-07-15 00:29:56 +00:00
|
|
|
void BLI_rcti_union(struct rcti *rcti1, const struct rcti *rcti2);
|
2013-06-06 21:43:52 +00:00
|
|
|
void BLI_rctf_union(struct rctf *rctf1, const struct rctf *rctf2);
|
2012-08-18 20:54:43 +00:00
|
|
|
void BLI_rcti_rctf_copy(struct rcti *dst, const struct rctf *src);
|
|
|
|
void BLI_rctf_rcti_copy(struct rctf *dst, const struct rcti *src);
|
2015-08-18 14:16:58 +10:00
|
|
|
void BLI_rcti_rctf_copy_floor(struct rcti *dst, const struct rctf *src);
|
2017-06-23 11:04:58 +03:00
|
|
|
void BLI_rcti_rctf_copy_round(struct rcti *dst, const struct rctf *src);
|
2009-02-10 18:50:40 +00:00
|
|
|
|
2015-03-25 19:46:07 +11:00
|
|
|
void BLI_rctf_rotate_expand(rctf *dst, const rctf *src, const float angle);
|
|
|
|
|
2012-07-11 18:17:48 +00:00
|
|
|
void print_rctf(const char *str, const struct rctf *rect);
|
|
|
|
void print_rcti(const char *str, const struct rcti *rect);
|
2008-12-20 10:02:00 +00:00
|
|
|
|
2014-03-30 13:03:30 +11:00
|
|
|
#define print_rctf_id(rect) print_rctf(STRINGIFY(rect), rect)
|
|
|
|
#define print_rcti_id(rect) print_rcti(STRINGIFY(rect), rect)
|
|
|
|
|
2019-04-17 06:17:24 +02:00
|
|
|
BLI_INLINE float BLI_rcti_cent_x_fl(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (float)(rct->xmin + rct->xmax) / 2.0f;
|
|
|
|
}
|
|
|
|
BLI_INLINE float BLI_rcti_cent_y_fl(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (float)(rct->ymin + rct->ymax) / 2.0f;
|
|
|
|
}
|
|
|
|
BLI_INLINE int BLI_rcti_cent_x(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (rct->xmin + rct->xmax) / 2;
|
|
|
|
}
|
|
|
|
BLI_INLINE int BLI_rcti_cent_y(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (rct->ymin + rct->ymax) / 2;
|
|
|
|
}
|
|
|
|
BLI_INLINE float BLI_rctf_cent_x(const struct rctf *rct)
|
|
|
|
{
|
|
|
|
return (rct->xmin + rct->xmax) / 2.0f;
|
|
|
|
}
|
|
|
|
BLI_INLINE float BLI_rctf_cent_y(const struct rctf *rct)
|
|
|
|
{
|
|
|
|
return (rct->ymin + rct->ymax) / 2.0f;
|
|
|
|
}
|
2012-08-20 15:29:02 +00:00
|
|
|
|
2019-04-17 06:17:24 +02:00
|
|
|
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (rct->xmax - rct->xmin);
|
|
|
|
}
|
|
|
|
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
|
|
|
|
{
|
|
|
|
return (rct->ymax - rct->ymin);
|
|
|
|
}
|
|
|
|
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
|
|
|
|
{
|
|
|
|
return (rct->xmax - rct->xmin);
|
|
|
|
}
|
|
|
|
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
|
|
|
|
{
|
|
|
|
return (rct->ymax - rct->ymin);
|
|
|
|
}
|
2012-08-20 15:29:02 +00:00
|
|
|
|
2008-12-20 10:02:00 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2019-04-17 06:17:24 +02:00
|
|
|
#endif /* __BLI_RECT_H__ */
|