Blender
V3.3
|
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_rect.h"
#include "UI_interface.h"
#include "interface_intern.h"
#include "MEM_guardedalloc.h"
Go to the source code of this file.
Classes | |
struct | ButAlign |
Macros | |
#define | SIDE_TO_UI_BUT_ALIGN |
#define | SIDE1(_s) (((_s) + 1) % TOTSIDES) |
#define | OPPOSITE(_s) (((_s) + 2) % TOTSIDES) |
#define | SIDE2(_s) (((_s) + 3) % TOTSIDES) |
#define | IS_COLUMN(_s) ((_s) % 2) |
#define | STITCH(_s) (1 << (_s)) |
#define | MAX_DELTA 0.45f * max_ii(UI_UNIT_Y, UI_UNIT_X) |
Typedefs | |
typedef struct ButAlign | ButAlign |
Enumerations | |
enum | { LEFT = 0 , TOP = 1 , RIGHT = 2 , DOWN = 3 , TOTSIDES = 4 , STITCH_LEFT = 1 << LEFT , STITCH_TOP = 1 << TOP , STITCH_RIGHT = 1 << RIGHT , STITCH_DOWN = 1 << DOWN } |
Functions | |
bool | ui_but_can_align (const uiBut *but) |
static void | block_align_proximity_compute (ButAlign *butal, ButAlign *butal_other) |
static void | block_align_stitch_neighbors (ButAlign *butal, const int side, const int side_opp, const int side_s1, const int side_s2, const int align, const int align_opp, const float co) |
static int | ui_block_align_butal_cmp (const void *a, const void *b) |
static void | ui_block_align_but_to_region (uiBut *but, const ARegion *region) |
void | ui_block_align_calc (uiBlock *block, const ARegion *region) |
int | ui_but_align_opposite_to_area_align_get (const ARegion *region) |
#define IS_COLUMN | ( | _s | ) | ((_s) % 2) |
Definition at line 90 of file interface_align.c.
Definition at line 96 of file interface_align.c.
Definition at line 86 of file interface_align.c.
Definition at line 85 of file interface_align.c.
Definition at line 87 of file interface_align.c.
#define SIDE_TO_UI_BUT_ALIGN |
Definition at line 79 of file interface_align.c.
#define STITCH | ( | _s | ) | (1 << (_s)) |
Definition at line 93 of file interface_align.c.
This struct stores a (simplified) 2D representation of all buttons of a same align group, with their immediate neighbors (if found), and needed value to compute 'stitching' of aligned buttons.
+--------+-------+ | BUT 1 | BUT 2 | BUT 3 has two 'top' neighbors... |----------------| => In practice, we only store one of BUT 1 or 2 (which ones is not | BUT 3 | really deterministic), and assume the other stores a ref to BUT 3. +----------------+
This will probably not work in all possible cases, but not sure we want to support such exotic cases anyway.
anonymous enum |
Enumerator | |
---|---|
LEFT | |
TOP | |
RIGHT | |
DOWN | |
TOTSIDES | |
STITCH_LEFT | |
STITCH_TOP | |
STITCH_RIGHT | |
STITCH_DOWN |
Definition at line 62 of file interface_align.c.
This function checks a pair of buttons (assumed in a same align group), and if they are neighbors, set needed data accordingly.
Definition at line 119 of file interface_align.c.
References ButAlign::borders, ButAlign::but, ButAlign::dists, DOWN, fabsf, ButAlign::flags, IS_COLUMN, LEFT, MAX_DELTA, max_ff(), ButAlign::neighbors, NULL, OPPOSITE, RIGHT, SIDE1, SIDE2, STITCH, SWAP, TOP, and ui_but_can_align().
Referenced by ui_block_align_calc().
|
static |
This function takes care of case described in this schema:
+-----------+-----------+ | BUT 1 | BUT 2 | |-----------------------+ | BUT 3 | +-----------+
Here, BUT 3 RIGHT side would not get 'dragged' to align with BUT 1 RIGHT side, since BUT 3 has not RIGHT neighbor. So, this function, when called with BUT 1, will 'walk' the whole column in side_s1 direction (TOP or DOWN when called for RIGHT side), and force buttons like BUT 3 to align as needed, if BUT 1 and BUT 3 were detected as needing top-right corner stitching in block_align_proximity_compute() step.
Definition at line 253 of file interface_align.c.
References ButAlign::borders, ButAlign::but, ButAlign::dists, uiBut::drawflag, ButAlign::flags, LEFT, ButAlign::neighbors, STITCH, TOP, UI_BUT_ALIGN_STITCH_LEFT, and UI_BUT_ALIGN_STITCH_TOP.
Referenced by ui_block_align_calc().
Definition at line 334 of file interface_align.c.
References BLI_rctf_size_x(), BLI_rctf_size_y(), ButAlign::but, uiBut::drawflag, uiBut::rect, UI_BUT_ALIGN, UI_BUT_ALIGN_DOWN, UI_BUT_ALIGN_LEFT, UI_BUT_ALIGN_RIGHT, UI_BUT_ALIGN_TOP, ARegion::winx, ARegion::winy, rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.
Referenced by ui_block_align_calc().
Helper to sort ButAlign items by:
Definition at line 305 of file interface_align.c.
References Freestyle::a, uiBut::alignnr, usdtokens::b(), ButAlign::borders, ButAlign::but, LEFT, and TOP.
Referenced by ui_block_align_calc().
Definition at line 364 of file interface_align.c.
References uiBut::alignnr, ARRAY_SIZE, BLI_assert, block_align_proximity_compute(), block_align_stitch_neighbors(), ButAlign::borders, ButAlign::but, uiBlock::buttons, copy_v4_fl(), ButAlign::dists, DOWN, uiBut::drawflag, fabsf, IS_EQF, LEFT, LISTBASE_FOREACH, MAX_DELTA, MEM_freeN, MEM_mallocN, ButAlign::neighbors, OPPOSITE, uiBut::rect, RIGHT, SIDE1, SIDE2, SIDE_TO_UI_BUT_ALIGN, TOP, TOTSIDES, uiBut::type, ui_block_align_but_to_region(), ui_block_align_butal_cmp(), UI_BTYPE_TAB, UI_BUT_ALIGN_ALL, rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.
Referenced by UI_block_end_ex().
int ui_but_align_opposite_to_area_align_get | ( | const ARegion * | region | ) |
Definition at line 734 of file interface_align.c.
References ARegion::alignment, ARegion::prev, RGN_ALIGN_BOTTOM, RGN_ALIGN_ENUM_FROM_MASK, RGN_ALIGN_LEFT, RGN_ALIGN_RIGHT, RGN_ALIGN_TOP, RGN_SPLIT_PREV, UI_BUT_ALIGN_DOWN, UI_BUT_ALIGN_LEFT, UI_BUT_ALIGN_RIGHT, and UI_BUT_ALIGN_TOP.
Referenced by template_ID_tabs(), and ui_item_enum_expand_tabs().
Definition at line 98 of file interface_align.c.
References BLI_rctf_size_x(), BLI_rctf_size_y(), ButAlign::but, ELEM, uiBut::rect, uiBut::type, UI_BTYPE_CHECKBOX, UI_BTYPE_CHECKBOX_N, UI_BTYPE_LABEL, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_SEPR_SPACER, and UI_BTYPE_TAB.
Referenced by block_align_proximity_compute(), ui_def_but(), and ui_item_align().