[Bf-blender-cvs] [86d6bd5] ui-align-rework: Fix but align drawflags no more cleaned up, and early get-out in case no button uses 'align'.
Bastien Montagne
noreply at git.blender.org
Tue Oct 20 18:07:13 CEST 2015
Commit: 86d6bd53e8a443947ee70fc7aa60499ae765e3ab
Author: Bastien Montagne
Date: Mon Oct 19 23:50:52 2015 +0200
Branches: ui-align-rework
https://developer.blender.org/rB86d6bd53e8a443947ee70fc7aa60499ae765e3ab
Fix but align drawflags no more cleaned up, and early get-out in case no button uses 'align'.
===================================================================
M source/blender/editors/interface/interface.c
===================================================================
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 56c86a9..f0e25a8 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -2936,7 +2936,7 @@ void UI_block_align_end(uiBlock *block)
block->flag &= ~UI_BUT_ALIGN; /* all 4 flags */
}
-#if 0
+#if 1
typedef struct uiButAlign {
uiBut *but;
struct uiButAlign *left, *top, *right, *down;
@@ -3054,29 +3054,46 @@ static int buts_proximity(
void ui_block_align_calc(uiBlock *block)
{
uiBut *but;
- const int num_buttons = BLI_listbase_count(&block->buttons);
+ int num_buttons = 0;
- uiButAlign *but_align_array = MEM_callocN(sizeof(*but_align_array) * (size_t)num_buttons, __func__);
+ uiButAlign *but_align_array;
uiButAlign *but_align, *but_align_other;
int i, j;
- for (but = block->buttons.first, but_align = but_align_array; but; but = but->next, but_align++) {
+ for (but = block->buttons.first; but; but = but->next) {
+ /* clear old flag */
+ but->drawflag &= ~UI_BUT_ALIGN;
+
+ if ((but->alignnr == 0) || !ui_but_can_align(but)) {
+ continue;
+ }
+ num_buttons++;
+ }
+
+ if (num_buttons < 2) {
+ return;
+ }
+
+ but_align_array = MEM_callocN(sizeof(*but_align_array) * (size_t)num_buttons, __func__);
+
+ for (but = block->buttons.first, but_align = but_align_array; but; but = but->next) {
+ if ((but->alignnr == 0) || !ui_but_can_align(but)) {
+ continue;
+ }
+
but_align->but = but;
copy_v4_fl(&but_align->dleft, FLT_MAX);
+ but_align++;
}
for (i = 0, but_align = but_align_array; i < num_buttons; i++, but_align++) {
const short alignnr = but_align->but->alignnr;
- if ((alignnr == 0) || !ui_but_can_align(but_align->but)) {
- continue;
- }
-
for (j = i + 1, but_align_other = &but_align_array[i + 1]; j < num_buttons; j++, but_align_other++) {
float dleft = 0.0f, dtop = 0.0f, dright = 0.0f, ddown = 0.0f;
int corner;
- if ((but_align_other->but->alignnr != alignnr) || !ui_but_can_align(but_align_other->but)) {
+ if (but_align_other->but->alignnr != alignnr) {
continue;
}
More information about the Bf-blender-cvs
mailing list