Cleanup: use braces for interface code
This commit is contained in:
		@@ -88,7 +88,10 @@ static void ui_def_but_rna__menu(bContext *UNUSED(C), uiLayout *layout, void *bu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* avoid unneeded calls to ui_but_value_get */
 | 
					/* avoid unneeded calls to ui_but_value_get */
 | 
				
			||||||
#define UI_BUT_VALUE_UNSET DBL_MAX
 | 
					#define UI_BUT_VALUE_UNSET DBL_MAX
 | 
				
			||||||
#define UI_GET_BUT_VALUE_INIT(_but, _value) if (_value == DBL_MAX) {  (_value) = ui_but_value_get(_but); } (void)0
 | 
					#define UI_GET_BUT_VALUE_INIT(_but, _value) \
 | 
				
			||||||
 | 
						if (_value == DBL_MAX) { \
 | 
				
			||||||
 | 
							(_value) = ui_but_value_get(_but); \
 | 
				
			||||||
 | 
						} ((void)0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define B_NOP -1
 | 
					#define B_NOP -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -345,8 +348,9 @@ static void ui_block_bounds_calc_text(uiBlock *block, float offset)
 | 
				
			|||||||
		if (!ELEM(bt->type, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_SEPR_SPACER)) {
 | 
							if (!ELEM(bt->type, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_SEPR_SPACER)) {
 | 
				
			||||||
			j = BLF_width(style->widget.uifont_id, bt->drawstr, sizeof(bt->drawstr));
 | 
								j = BLF_width(style->widget.uifont_id, bt->drawstr, sizeof(bt->drawstr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (j > i)
 | 
								if (j > i) {
 | 
				
			||||||
				i = j;
 | 
									i = j;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (bt->next && bt->rect.xmin < bt->next->rect.xmin) {
 | 
							if (bt->next && bt->rect.xmin < bt->next->rect.xmin) {
 | 
				
			||||||
@@ -403,8 +407,12 @@ void ui_block_bounds_calc(uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* hardcoded exception... but that one is annoying with larger safety */
 | 
						/* hardcoded exception... but that one is annoying with larger safety */
 | 
				
			||||||
	bt = block->buttons.first;
 | 
						bt = block->buttons.first;
 | 
				
			||||||
	if (bt && STREQLEN(bt->str, "ERROR", 5)) xof = 10;
 | 
						if (bt && STREQLEN(bt->str, "ERROR", 5)) {
 | 
				
			||||||
	else xof = 40;
 | 
							xof = 10;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							xof = 40;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	block->safety.xmin = block->rect.xmin - xof;
 | 
						block->safety.xmin = block->rect.xmin - xof;
 | 
				
			||||||
	block->safety.ymin = block->rect.ymin - xof;
 | 
						block->safety.ymin = block->rect.ymin - xof;
 | 
				
			||||||
@@ -523,8 +531,9 @@ static void ui_block_bounds_calc_popup(
 | 
				
			|||||||
/* used for various cases */
 | 
					/* used for various cases */
 | 
				
			||||||
void UI_block_bounds_set_normal(uiBlock *block, int addval)
 | 
					void UI_block_bounds_set_normal(uiBlock *block, int addval)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (block == NULL)
 | 
						if (block == NULL) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	block->bounds = addval;
 | 
						block->bounds = addval;
 | 
				
			||||||
	block->bounds_type = UI_BLOCK_BOUNDS;
 | 
						block->bounds_type = UI_BLOCK_BOUNDS;
 | 
				
			||||||
@@ -610,16 +619,16 @@ static bool ui_but_equals_old(const uiBut *but, const uiBut *oldbut)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	/* various properties are being compared here, hopefully sufficient
 | 
						/* various properties are being compared here, hopefully sufficient
 | 
				
			||||||
	 * to catch all cases, but it is simple to add more checks later */
 | 
						 * to catch all cases, but it is simple to add more checks later */
 | 
				
			||||||
	if (but->retval != oldbut->retval) return false;
 | 
						if (but->retval != oldbut->retval) { return false; }
 | 
				
			||||||
	if (but->rnapoin.data != oldbut->rnapoin.data) return false;
 | 
						if (but->rnapoin.data != oldbut->rnapoin.data) { return false; }
 | 
				
			||||||
	if (but->rnaprop != oldbut->rnaprop || but->rnaindex != oldbut->rnaindex) return false;
 | 
						if (but->rnaprop != oldbut->rnaprop || but->rnaindex != oldbut->rnaindex) { return false; }
 | 
				
			||||||
	if (but->func != oldbut->func) return false;
 | 
						if (but->func != oldbut->func) { return false; }
 | 
				
			||||||
	if (but->funcN != oldbut->funcN) return false;
 | 
						if (but->funcN != oldbut->funcN) { return false; }
 | 
				
			||||||
	if (oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return false;
 | 
						if (oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) { return false; }
 | 
				
			||||||
	if (oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return false;
 | 
						if (oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) { return false; }
 | 
				
			||||||
	if (!but->funcN && ((but->poin != oldbut->poin && (uiBut *)oldbut->poin != oldbut) ||
 | 
						if (!but->funcN && ((but->poin != oldbut->poin && (uiBut *)oldbut->poin != oldbut) ||
 | 
				
			||||||
	                    (but->pointype != oldbut->pointype))) return false;
 | 
						                    (but->pointype != oldbut->pointype))) { return false; }
 | 
				
			||||||
	if (but->optype != oldbut->optype) return false;
 | 
						if (but->optype != oldbut->optype) { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -888,8 +897,9 @@ static void ui_menu_block_set_keyaccels(uiBlock *block)
 | 
				
			|||||||
	int tot_missing = 0;
 | 
						int tot_missing = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* only do it before bounding */
 | 
						/* only do it before bounding */
 | 
				
			||||||
	if (block->rect.xmin != block->rect.xmax)
 | 
						if (block->rect.xmin != block->rect.xmax) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (pass = 0; pass < 2; pass++) {
 | 
						for (pass = 0; pass < 2; pass++) {
 | 
				
			||||||
		/* 2 Passes, on for first letter only, second for any letter if first fails
 | 
							/* 2 Passes, on for first letter only, second for any letter if first fails
 | 
				
			||||||
@@ -916,11 +926,13 @@ static void ui_menu_block_set_keyaccels(uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
						if (pass == 0) {
 | 
											if (pass == 0) {
 | 
				
			||||||
							/* Skip to next delimiter on first pass (be picky) */
 | 
												/* Skip to next delimiter on first pass (be picky) */
 | 
				
			||||||
							while (isalpha(*str_pt))
 | 
												while (isalpha(*str_pt)) {
 | 
				
			||||||
								str_pt++;
 | 
													str_pt++;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							if (*str_pt)
 | 
												if (*str_pt) {
 | 
				
			||||||
								str_pt++;
 | 
													str_pt++;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						else {
 | 
											else {
 | 
				
			||||||
							/* just step over every char second pass and find first usable key */
 | 
												/* just step over every char second pass and find first usable key */
 | 
				
			||||||
@@ -1402,8 +1414,9 @@ void UI_block_update_from_old(const bContext *C, uiBlock *block)
 | 
				
			|||||||
	uiBut *but_old;
 | 
						uiBut *but_old;
 | 
				
			||||||
	uiBut *but;
 | 
						uiBut *but;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!block->oldblock)
 | 
						if (!block->oldblock) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but_old = block->oldblock->buttons.first;
 | 
						but_old = block->oldblock->buttons.first;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1450,15 +1463,17 @@ void UI_block_end_ex(const bContext *C, uiBlock *block, const int xy[2], int r_x
 | 
				
			|||||||
		if (but->optype) {
 | 
							if (but->optype) {
 | 
				
			||||||
			wmOperatorType *ot = but->optype;
 | 
								wmOperatorType *ot = but->optype;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (but->context)
 | 
								if (but->context) {
 | 
				
			||||||
				CTX_store_set((bContext *)C, but->context);
 | 
									CTX_store_set((bContext *)C, but->context);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (ot == NULL || WM_operator_poll_context((bContext *)C, ot, but->opcontext) == 0) {
 | 
								if (ot == NULL || WM_operator_poll_context((bContext *)C, ot, but->opcontext) == 0) {
 | 
				
			||||||
				but->flag |= UI_BUT_DISABLED;
 | 
									but->flag |= UI_BUT_DISABLED;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (but->context)
 | 
								if (but->context) {
 | 
				
			||||||
				CTX_store_set((bContext *)C, NULL);
 | 
									CTX_store_set((bContext *)C, NULL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f);
 | 
							ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f);
 | 
				
			||||||
@@ -1538,10 +1553,12 @@ void ui_fontscale(short *points, float aspect)
 | 
				
			|||||||
		//aspect = sqrt(aspect);
 | 
							//aspect = sqrt(aspect);
 | 
				
			||||||
		pointsf /= aspect;
 | 
							pointsf /= aspect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (aspect > 1.0f)
 | 
							if (aspect > 1.0f) {
 | 
				
			||||||
			*points = ceilf(pointsf);
 | 
								*points = ceilf(pointsf);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			*points = floorf(pointsf);
 | 
								*points = floorf(pointsf);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1565,11 +1582,13 @@ void UI_block_draw(const bContext *C, uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* get menu region or area region */
 | 
						/* get menu region or area region */
 | 
				
			||||||
	ar = CTX_wm_menu(C);
 | 
						ar = CTX_wm_menu(C);
 | 
				
			||||||
	if (!ar)
 | 
						if (!ar) {
 | 
				
			||||||
		ar = CTX_wm_region(C);
 | 
							ar = CTX_wm_region(C);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!block->endblock)
 | 
						if (!block->endblock) {
 | 
				
			||||||
		UI_block_end(C, block);
 | 
							UI_block_end(C, block);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* we set this only once */
 | 
						/* we set this only once */
 | 
				
			||||||
	GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 | 
						GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 | 
				
			||||||
@@ -1591,12 +1610,15 @@ void UI_block_draw(const bContext *C, uiBlock *block)
 | 
				
			|||||||
	wmOrtho2_region_pixelspace(ar);
 | 
						wmOrtho2_region_pixelspace(ar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* back */
 | 
						/* back */
 | 
				
			||||||
	if (block->flag & UI_BLOCK_RADIAL)
 | 
						if (block->flag & UI_BLOCK_RADIAL) {
 | 
				
			||||||
		ui_draw_pie_center(block);
 | 
							ui_draw_pie_center(block);
 | 
				
			||||||
	else if (block->flag & UI_BLOCK_POPOVER)
 | 
						}
 | 
				
			||||||
 | 
						else if (block->flag & UI_BLOCK_POPOVER) {
 | 
				
			||||||
		ui_draw_popover_back(ar, &style, block, &rect);
 | 
							ui_draw_popover_back(ar, &style, block, &rect);
 | 
				
			||||||
	else if (block->flag & UI_BLOCK_LOOP)
 | 
						}
 | 
				
			||||||
 | 
						else if (block->flag & UI_BLOCK_LOOP) {
 | 
				
			||||||
		ui_draw_menu_back(&style, block, &rect);
 | 
							ui_draw_menu_back(&style, block, &rect);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	else if (block->panel) {
 | 
						else if (block->panel) {
 | 
				
			||||||
		bool show_background = ar->alignment != RGN_ALIGN_FLOAT;
 | 
							bool show_background = ar->alignment != RGN_ALIGN_FLOAT;
 | 
				
			||||||
		ui_draw_aligned_panel(
 | 
							ui_draw_aligned_panel(
 | 
				
			||||||
@@ -1615,8 +1637,9 @@ void UI_block_draw(const bContext *C, uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			/* XXX: figure out why invalid coordinates happen when closing render window */
 | 
								/* XXX: figure out why invalid coordinates happen when closing render window */
 | 
				
			||||||
			/* and material preview is redrawn in main window (temp fix for bug #23848) */
 | 
								/* and material preview is redrawn in main window (temp fix for bug #23848) */
 | 
				
			||||||
			if (rect.xmin < rect.xmax && rect.ymin < rect.ymax)
 | 
								if (rect.xmin < rect.xmax && rect.ymin < rect.ymax) {
 | 
				
			||||||
				ui_draw_but(C, ar, &style, but, &rect);
 | 
									ui_draw_but(C, ar, &style, but, &rect);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1699,13 +1722,17 @@ int ui_but_is_pushed_ex(uiBut *but, double *value)
 | 
				
			|||||||
			case UI_BTYPE_ICON_TOGGLE:
 | 
								case UI_BTYPE_ICON_TOGGLE:
 | 
				
			||||||
			case UI_BTYPE_CHECKBOX:
 | 
								case UI_BTYPE_CHECKBOX:
 | 
				
			||||||
				UI_GET_BUT_VALUE_INIT(but, *value);
 | 
									UI_GET_BUT_VALUE_INIT(but, *value);
 | 
				
			||||||
				if (*value != (double)but->hardmin) is_push = true;
 | 
									if (*value != (double)but->hardmin) {
 | 
				
			||||||
 | 
										is_push = true;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case UI_BTYPE_ICON_TOGGLE_N:
 | 
								case UI_BTYPE_ICON_TOGGLE_N:
 | 
				
			||||||
			case UI_BTYPE_TOGGLE_N:
 | 
								case UI_BTYPE_TOGGLE_N:
 | 
				
			||||||
			case UI_BTYPE_CHECKBOX_N:
 | 
								case UI_BTYPE_CHECKBOX_N:
 | 
				
			||||||
				UI_GET_BUT_VALUE_INIT(but, *value);
 | 
									UI_GET_BUT_VALUE_INIT(but, *value);
 | 
				
			||||||
				if (*value == 0.0) is_push = true;
 | 
									if (*value == 0.0) {
 | 
				
			||||||
 | 
										is_push = true;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case UI_BTYPE_ROW:
 | 
								case UI_BTYPE_ROW:
 | 
				
			||||||
			case UI_BTYPE_LISTROW:
 | 
								case UI_BTYPE_LISTROW:
 | 
				
			||||||
@@ -1728,10 +1755,14 @@ int ui_but_is_pushed_ex(uiBut *but, double *value)
 | 
				
			|||||||
				UI_GET_BUT_VALUE_INIT(but, *value);
 | 
									UI_GET_BUT_VALUE_INIT(but, *value);
 | 
				
			||||||
				/* support for rna enum buts */
 | 
									/* support for rna enum buts */
 | 
				
			||||||
				if (but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
 | 
									if (but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
 | 
				
			||||||
					if ((int)*value & (int)but->hardmax) is_push = true;
 | 
										if ((int)*value & (int)but->hardmax) {
 | 
				
			||||||
 | 
											is_push = true;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					if (*value == (double)but->hardmax) is_push = true;
 | 
										if (*value == (double)but->hardmax) {
 | 
				
			||||||
 | 
											is_push = true;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
@@ -1945,25 +1976,30 @@ void ui_but_v3_set(uiBut *but, const float vec[3])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ui_but_is_float(const uiBut *but)
 | 
					bool ui_but_is_float(const uiBut *but)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (but->pointype == UI_BUT_POIN_FLOAT && but->poin)
 | 
						if (but->pointype == UI_BUT_POIN_FLOAT && but->poin) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_FLOAT)
 | 
						if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_FLOAT) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ui_but_is_bool(const uiBut *but)
 | 
					bool ui_but_is_bool(const uiBut *but)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N, UI_BTYPE_TAB))
 | 
						if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N, UI_BTYPE_TAB)) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_BOOLEAN)
 | 
						if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_BOOLEAN) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) && (but->type == UI_BTYPE_ROW))
 | 
						if ((but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) && (but->type == UI_BTYPE_ROW)) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1974,17 +2010,20 @@ bool ui_but_is_unit(const uiBut *but)
 | 
				
			|||||||
	UnitSettings *unit = but->block->unit;
 | 
						UnitSettings *unit = but->block->unit;
 | 
				
			||||||
	const int unit_type = UI_but_unit_type_get(but);
 | 
						const int unit_type = UI_but_unit_type_get(but);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unit_type == PROP_UNIT_NONE)
 | 
						if (unit_type == PROP_UNIT_NONE) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 1 /* removed so angle buttons get correct snapping */
 | 
					#if 1 /* removed so angle buttons get correct snapping */
 | 
				
			||||||
	if (ui_but_is_unit_radians_ex(unit, unit_type))
 | 
						if (ui_but_is_unit_radians_ex(unit, unit_type)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* for now disable time unit conversion */
 | 
						/* for now disable time unit conversion */
 | 
				
			||||||
	if (unit_type == PROP_UNIT_TIME)
 | 
						if (unit_type == PROP_UNIT_TIME) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unit->system == USER_UNIT_NONE) {
 | 
						if (unit->system == USER_UNIT_NONE) {
 | 
				
			||||||
		if (unit_type != PROP_UNIT_ROTATION) {
 | 
							if (unit_type != PROP_UNIT_ROTATION) {
 | 
				
			||||||
@@ -2000,20 +2039,25 @@ bool ui_but_is_unit(const uiBut *but)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b)
 | 
					bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (but_a->type != but_b->type)
 | 
						if (but_a->type != but_b->type) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if (but_a->pointype != but_b->pointype)
 | 
						}
 | 
				
			||||||
 | 
						if (but_a->pointype != but_b->pointype) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but_a->rnaprop) {
 | 
						if (but_a->rnaprop) {
 | 
				
			||||||
		/* skip 'rnapoin.data', 'rnapoin.id.data'
 | 
							/* skip 'rnapoin.data', 'rnapoin.id.data'
 | 
				
			||||||
		 * allow different data to have the same props edited at once */
 | 
							 * allow different data to have the same props edited at once */
 | 
				
			||||||
		if (but_a->rnapoin.type != but_b->rnapoin.type)
 | 
							if (but_a->rnapoin.type != but_b->rnapoin.type) {
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		if (RNA_property_type(but_a->rnaprop) != RNA_property_type(but_b->rnaprop))
 | 
							}
 | 
				
			||||||
 | 
							if (RNA_property_type(but_a->rnaprop) != RNA_property_type(but_b->rnaprop)) {
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		if (RNA_property_subtype(but_a->rnaprop) != RNA_property_subtype(but_b->rnaprop))
 | 
							}
 | 
				
			||||||
 | 
							if (RNA_property_subtype(but_a->rnaprop) != RNA_property_subtype(but_b->rnaprop)) {
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
@@ -2046,8 +2090,12 @@ double ui_but_value_get(uiBut *but)
 | 
				
			|||||||
	PropertyRNA *prop;
 | 
						PropertyRNA *prop;
 | 
				
			||||||
	double value = 0.0;
 | 
						double value = 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->editval) { return *(but->editval); }
 | 
						if (but->editval) {
 | 
				
			||||||
	if (but->poin == NULL && but->rnapoin.data == NULL) return 0.0;
 | 
							return *(but->editval);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (but->poin == NULL && but->rnapoin.data == NULL) {
 | 
				
			||||||
 | 
							return 0.0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->rnaprop) {
 | 
						if (but->rnaprop) {
 | 
				
			||||||
		prop = but->rnaprop;
 | 
							prop = but->rnaprop;
 | 
				
			||||||
@@ -2058,22 +2106,28 @@ double ui_but_value_get(uiBut *but)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		switch (RNA_property_type(prop)) {
 | 
							switch (RNA_property_type(prop)) {
 | 
				
			||||||
			case PROP_BOOLEAN:
 | 
								case PROP_BOOLEAN:
 | 
				
			||||||
				if (RNA_property_array_check(prop))
 | 
									if (RNA_property_array_check(prop)) {
 | 
				
			||||||
					value = RNA_property_boolean_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
										value = RNA_property_boolean_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					value = RNA_property_boolean_get(&rnapoin_eval, prop);
 | 
										value = RNA_property_boolean_get(&rnapoin_eval, prop);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case PROP_INT:
 | 
								case PROP_INT:
 | 
				
			||||||
				if (RNA_property_array_check(prop))
 | 
									if (RNA_property_array_check(prop)) {
 | 
				
			||||||
					value = RNA_property_int_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
										value = RNA_property_int_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					value = RNA_property_int_get(&rnapoin_eval, prop);
 | 
										value = RNA_property_int_get(&rnapoin_eval, prop);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case PROP_FLOAT:
 | 
								case PROP_FLOAT:
 | 
				
			||||||
				if (RNA_property_array_check(prop))
 | 
									if (RNA_property_array_check(prop)) {
 | 
				
			||||||
					value = RNA_property_float_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
										value = RNA_property_float_get_index(&rnapoin_eval, prop, but->rnaindex);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					value = RNA_property_float_get(&rnapoin_eval, prop);
 | 
										value = RNA_property_float_get(&rnapoin_eval, prop);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case PROP_ENUM:
 | 
								case PROP_ENUM:
 | 
				
			||||||
				value = RNA_property_enum_get(&rnapoin_eval, prop);
 | 
									value = RNA_property_enum_get(&rnapoin_eval, prop);
 | 
				
			||||||
@@ -2110,22 +2164,28 @@ void ui_but_value_set(uiBut *but, double value)
 | 
				
			|||||||
		if (RNA_property_editable(&but->rnapoin, prop)) {
 | 
							if (RNA_property_editable(&but->rnapoin, prop)) {
 | 
				
			||||||
			switch (RNA_property_type(prop)) {
 | 
								switch (RNA_property_type(prop)) {
 | 
				
			||||||
				case PROP_BOOLEAN:
 | 
									case PROP_BOOLEAN:
 | 
				
			||||||
					if (RNA_property_array_check(prop))
 | 
										if (RNA_property_array_check(prop)) {
 | 
				
			||||||
						RNA_property_boolean_set_index(&but->rnapoin, prop, but->rnaindex, value);
 | 
											RNA_property_boolean_set_index(&but->rnapoin, prop, but->rnaindex, value);
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						RNA_property_boolean_set(&but->rnapoin, prop, value);
 | 
											RNA_property_boolean_set(&but->rnapoin, prop, value);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case PROP_INT:
 | 
									case PROP_INT:
 | 
				
			||||||
					if (RNA_property_array_check(prop))
 | 
										if (RNA_property_array_check(prop)) {
 | 
				
			||||||
						RNA_property_int_set_index(&but->rnapoin, prop, but->rnaindex, (int)value);
 | 
											RNA_property_int_set_index(&but->rnapoin, prop, but->rnaindex, (int)value);
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						RNA_property_int_set(&but->rnapoin, prop, (int)value);
 | 
											RNA_property_int_set(&but->rnapoin, prop, (int)value);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case PROP_FLOAT:
 | 
									case PROP_FLOAT:
 | 
				
			||||||
					if (RNA_property_array_check(prop))
 | 
										if (RNA_property_array_check(prop)) {
 | 
				
			||||||
						RNA_property_float_set_index(&but->rnapoin, prop, but->rnaindex, value);
 | 
											RNA_property_float_set_index(&but->rnapoin, prop, but->rnaindex, value);
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						RNA_property_float_set(&but->rnapoin, prop, value);
 | 
											RNA_property_float_set(&but->rnapoin, prop, value);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case PROP_ENUM:
 | 
									case PROP_ENUM:
 | 
				
			||||||
					if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
 | 
										if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
 | 
				
			||||||
@@ -2163,21 +2223,29 @@ void ui_but_value_set(uiBut *but, double value)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else if (but->pointype == UI_BUT_POIN_FLOAT) {
 | 
							else if (but->pointype == UI_BUT_POIN_FLOAT) {
 | 
				
			||||||
			float fval = (float)value;
 | 
								float fval = (float)value;
 | 
				
			||||||
			if (fval >= -0.00001f && fval <= 0.00001f) fval = 0.0f;  /* prevent negative zero */
 | 
								if (fval >= -0.00001f && fval <= 0.00001f) {
 | 
				
			||||||
 | 
									/* prevent negative zero */
 | 
				
			||||||
 | 
									fval = 0.0f;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			value = fval;
 | 
								value = fval;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* then set value with possible edit override */
 | 
							/* then set value with possible edit override */
 | 
				
			||||||
		if (but->editval)
 | 
							if (but->editval) {
 | 
				
			||||||
			value = *but->editval = value;
 | 
								value = *but->editval = value;
 | 
				
			||||||
		else if (but->pointype == UI_BUT_POIN_CHAR)
 | 
							}
 | 
				
			||||||
 | 
							else if (but->pointype == UI_BUT_POIN_CHAR) {
 | 
				
			||||||
			value = *((char *)but->poin) = (char)value;
 | 
								value = *((char *)but->poin) = (char)value;
 | 
				
			||||||
		else if (but->pointype == UI_BUT_POIN_SHORT)
 | 
							}
 | 
				
			||||||
 | 
							else if (but->pointype == UI_BUT_POIN_SHORT) {
 | 
				
			||||||
			value = *((short *)but->poin) = (short)value;
 | 
								value = *((short *)but->poin) = (short)value;
 | 
				
			||||||
		else if (but->pointype == UI_BUT_POIN_INT)
 | 
							}
 | 
				
			||||||
 | 
							else if (but->pointype == UI_BUT_POIN_INT) {
 | 
				
			||||||
			value = *((int *)but->poin) = (int)value;
 | 
								value = *((int *)but->poin) = (int)value;
 | 
				
			||||||
		else if (but->pointype == UI_BUT_POIN_FLOAT)
 | 
							}
 | 
				
			||||||
 | 
							else if (but->pointype == UI_BUT_POIN_FLOAT) {
 | 
				
			||||||
			value = *((float *)but->poin) = (float)value;
 | 
								value = *((float *)but->poin) = (float)value;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_but_update_select_flag(but, &value);
 | 
						ui_but_update_select_flag(but, &value);
 | 
				
			||||||
@@ -2185,10 +2253,12 @@ void ui_but_value_set(uiBut *but, double value)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int ui_but_string_get_max_length(uiBut *but)
 | 
					int ui_but_string_get_max_length(uiBut *but)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU))
 | 
						if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) {
 | 
				
			||||||
		return but->hardmax;
 | 
							return but->hardmax;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return UI_MAX_DRAW_STR;
 | 
							return UI_MAX_DRAW_STR;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uiBut *ui_but_drag_multi_edit_get(uiBut *but)
 | 
					uiBut *ui_but_drag_multi_edit_get(uiBut *but)
 | 
				
			||||||
@@ -2313,14 +2383,20 @@ static void ui_get_but_string_unit(uiBut *but, char *str, int len_max, double va
 | 
				
			|||||||
	int unit_type = UI_but_unit_type_get(but);
 | 
						int unit_type = UI_but_unit_type_get(but);
 | 
				
			||||||
	int precision;
 | 
						int precision;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unit->scale_length < 0.0001f) unit->scale_length = 1.0f;  // XXX do_versions
 | 
						if (unit->scale_length < 0.0001f) {
 | 
				
			||||||
 | 
							unit->scale_length = 1.0f;  // XXX do_versions
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Use precision override? */
 | 
						/* Use precision override? */
 | 
				
			||||||
	if (float_precision == -1) {
 | 
						if (float_precision == -1) {
 | 
				
			||||||
		/* Sanity checks */
 | 
							/* Sanity checks */
 | 
				
			||||||
		precision = (int)but->a2;
 | 
							precision = (int)but->a2;
 | 
				
			||||||
		if      (precision > UI_PRECISION_FLOAT_MAX) precision = UI_PRECISION_FLOAT_MAX;
 | 
							if (precision > UI_PRECISION_FLOAT_MAX) {
 | 
				
			||||||
		else if (precision == -1)                    precision = 2;
 | 
								precision = UI_PRECISION_FLOAT_MAX;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (precision == -1) {
 | 
				
			||||||
 | 
								precision = 2;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		precision = float_precision;
 | 
							precision = float_precision;
 | 
				
			||||||
@@ -2776,8 +2852,8 @@ bool ui_but_string_set(bContext *C, uiBut *but, const char *str)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* not that we use hard limits here */
 | 
							/* not that we use hard limits here */
 | 
				
			||||||
		if (value < (double)but->hardmin) value = but->hardmin;
 | 
							if (value < (double)but->hardmin) { value = but->hardmin; }
 | 
				
			||||||
		if (value > (double)but->hardmax) value = but->hardmax;
 | 
							if (value > (double)but->hardmax) { value = but->hardmax; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ui_but_value_set(but, value);
 | 
							ui_but_value_set(but, value);
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
@@ -2810,12 +2886,15 @@ static double soft_range_round_up(double value, double max)
 | 
				
			|||||||
	 * checking for 0.0 prevents floating point exceptions */
 | 
						 * checking for 0.0 prevents floating point exceptions */
 | 
				
			||||||
	double newmax = (value != 0.0) ? pow(10.0, ceil(log(value) / M_LN10)) : 0.0;
 | 
						double newmax = (value != 0.0) ? pow(10.0, ceil(log(value) / M_LN10)) : 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (newmax * 0.2 >= max && newmax * 0.2 >= value)
 | 
						if (newmax * 0.2 >= max && newmax * 0.2 >= value) {
 | 
				
			||||||
		return newmax * 0.2;
 | 
							return newmax * 0.2;
 | 
				
			||||||
	else if (newmax * 0.5 >= max && newmax * 0.5 >= value)
 | 
						}
 | 
				
			||||||
 | 
						else if (newmax * 0.5 >= max && newmax * 0.5 >= value) {
 | 
				
			||||||
		return newmax * 0.5;
 | 
							return newmax * 0.5;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return newmax;
 | 
							return newmax;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static double soft_range_round_down(double value, double max)
 | 
					static double soft_range_round_down(double value, double max)
 | 
				
			||||||
@@ -2824,12 +2903,15 @@ static double soft_range_round_down(double value, double max)
 | 
				
			|||||||
	 * checking for 0.0 prevents floating point exceptions */
 | 
						 * checking for 0.0 prevents floating point exceptions */
 | 
				
			||||||
	double newmax = (value != 0.0) ? pow(10.0, floor(log(value) / M_LN10)) : 0.0;
 | 
						double newmax = (value != 0.0) ? pow(10.0, floor(log(value) / M_LN10)) : 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (newmax * 5.0 <= max && newmax * 5.0 <= value)
 | 
						if (newmax * 5.0 <= max && newmax * 5.0 <= value) {
 | 
				
			||||||
		return newmax * 5.0;
 | 
							return newmax * 5.0;
 | 
				
			||||||
	else if (newmax * 2.0 <= max && newmax * 2.0 <= value)
 | 
						}
 | 
				
			||||||
 | 
						else if (newmax * 2.0 <= max && newmax * 2.0 <= value) {
 | 
				
			||||||
		return newmax * 2.0;
 | 
							return newmax * 2.0;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return newmax;
 | 
							return newmax;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* note: this could be split up into functions which handle arrays and not */
 | 
					/* note: this could be split up into functions which handle arrays and not */
 | 
				
			||||||
@@ -2893,22 +2975,28 @@ static void ui_set_but_soft_range(uiBut *but)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* if the value goes out of the soft/max range, adapt the range */
 | 
							/* if the value goes out of the soft/max range, adapt the range */
 | 
				
			||||||
		if (value_min + 1e-10 < softmin) {
 | 
							if (value_min + 1e-10 < softmin) {
 | 
				
			||||||
			if (value_min < 0.0)
 | 
								if (value_min < 0.0) {
 | 
				
			||||||
				softmin = -soft_range_round_up(-value_min, -softmin);
 | 
									softmin = -soft_range_round_up(-value_min, -softmin);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				softmin = soft_range_round_down(value_min, softmin);
 | 
									softmin = soft_range_round_down(value_min, softmin);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (softmin < (double)but->hardmin)
 | 
								if (softmin < (double)but->hardmin) {
 | 
				
			||||||
				softmin = (double)but->hardmin;
 | 
									softmin = (double)but->hardmin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (value_max - 1e-10 > softmax) {
 | 
							if (value_max - 1e-10 > softmax) {
 | 
				
			||||||
			if (value_max < 0.0)
 | 
								if (value_max < 0.0) {
 | 
				
			||||||
				softmax = -soft_range_round_down(-value_max, -softmax);
 | 
									softmax = -soft_range_round_down(-value_max, -softmax);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				softmax = soft_range_round_up(value_max, softmax);
 | 
									softmax = soft_range_round_up(value_max, softmax);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (softmax > (double)but->hardmax)
 | 
								if (softmax > (double)but->hardmax) {
 | 
				
			||||||
				softmax = but->hardmax;
 | 
									softmax = but->hardmax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		but->softmin = softmin;
 | 
							but->softmin = softmin;
 | 
				
			||||||
@@ -3053,8 +3141,9 @@ void UI_blocklist_free_inactive(const bContext *C, ListBase *lb)
 | 
				
			|||||||
				BLI_remlink(lb, block);
 | 
									BLI_remlink(lb, block);
 | 
				
			||||||
				UI_block_free(C, block);
 | 
									UI_block_free(C, block);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else {
 | 
				
			||||||
				block->active = 0;
 | 
									block->active = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3114,8 +3203,9 @@ uiBlock *UI_block_begin(const bContext *C, ARegion *region, const char *name, sh
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	BLI_strncpy(block->name, name, sizeof(block->name));
 | 
						BLI_strncpy(block->name, name, sizeof(block->name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (region)
 | 
						if (region) {
 | 
				
			||||||
		UI_block_region_set(block, region);
 | 
							UI_block_region_set(block, region);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set window matrix and aspect for region and OpenGL state. */
 | 
						/* Set window matrix and aspect for region and OpenGL state. */
 | 
				
			||||||
	ui_update_window_matrix(window, region, block);
 | 
						ui_update_window_matrix(window, region, block);
 | 
				
			||||||
@@ -3348,14 +3438,18 @@ static void ui_but_update_ex(uiBut *but, const bool validate)
 | 
				
			|||||||
					char *str = but->drawstr;
 | 
										char *str = but->drawstr;
 | 
				
			||||||
					but->drawstr[0] = '\0';
 | 
										but->drawstr[0] = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (but->modifier_key & KM_SHIFT)
 | 
										if (but->modifier_key & KM_SHIFT) {
 | 
				
			||||||
						str += BLI_strcpy_rlen(str, "Shift ");
 | 
											str += BLI_strcpy_rlen(str, "Shift ");
 | 
				
			||||||
					if (but->modifier_key & KM_CTRL)
 | 
										}
 | 
				
			||||||
 | 
										if (but->modifier_key & KM_CTRL) {
 | 
				
			||||||
						str += BLI_strcpy_rlen(str, "Ctrl ");
 | 
											str += BLI_strcpy_rlen(str, "Ctrl ");
 | 
				
			||||||
					if (but->modifier_key & KM_ALT)
 | 
										}
 | 
				
			||||||
 | 
										if (but->modifier_key & KM_ALT) {
 | 
				
			||||||
						str += BLI_strcpy_rlen(str, "Alt ");
 | 
											str += BLI_strcpy_rlen(str, "Alt ");
 | 
				
			||||||
					if (but->modifier_key & KM_OSKEY)
 | 
										}
 | 
				
			||||||
 | 
										if (but->modifier_key & KM_OSKEY) {
 | 
				
			||||||
						str += BLI_strcpy_rlen(str, "Cmd ");
 | 
											str += BLI_strcpy_rlen(str, "Cmd ");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					(void)str; /* UNUSED */
 | 
										(void)str; /* UNUSED */
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -3363,8 +3457,9 @@ static void ui_but_update_ex(uiBut *but, const bool validate)
 | 
				
			|||||||
					BLI_strncpy(but->drawstr, "Press a key", UI_MAX_DRAW_STR);
 | 
										BLI_strncpy(but->drawstr, "Press a key", UI_MAX_DRAW_STR);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else {
 | 
				
			||||||
				BLI_strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR);
 | 
									BLI_strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3378,8 +3473,9 @@ static void ui_but_update_ex(uiBut *but, const bool validate)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* if we are doing text editing, this will override the drawstr */
 | 
						/* if we are doing text editing, this will override the drawstr */
 | 
				
			||||||
	if (but->editstr)
 | 
						if (but->editstr) {
 | 
				
			||||||
		but->drawstr[0] = '\0';
 | 
							but->drawstr[0] = '\0';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* text clipping moved to widget drawing code itself */
 | 
						/* text clipping moved to widget drawing code itself */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3397,7 +3493,9 @@ void ui_but_update_edited(uiBut *but)
 | 
				
			|||||||
void UI_block_align_begin(uiBlock *block)
 | 
					void UI_block_align_begin(uiBlock *block)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* if other align was active, end it */
 | 
						/* if other align was active, end it */
 | 
				
			||||||
	if (block->flag & UI_BUT_ALIGN) UI_block_align_end(block);
 | 
						if (block->flag & UI_BUT_ALIGN) {
 | 
				
			||||||
 | 
							UI_block_align_end(block);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	block->flag |= UI_BUT_ALIGN_DOWN;
 | 
						block->flag |= UI_BUT_ALIGN_DOWN;
 | 
				
			||||||
	block->alignnr++;
 | 
						block->alignnr++;
 | 
				
			||||||
@@ -3497,16 +3595,18 @@ static uiBut *ui_def_but(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	but->block = block;  /* pointer back, used for frontbuffer status, and picker */
 | 
						but->block = block;  /* pointer back, used for frontbuffer status, and picker */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((block->flag & UI_BUT_ALIGN) && ui_but_can_align(but))
 | 
						if ((block->flag & UI_BUT_ALIGN) && ui_but_can_align(but)) {
 | 
				
			||||||
		but->alignnr = block->alignnr;
 | 
							but->alignnr = block->alignnr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->func = block->func;
 | 
						but->func = block->func;
 | 
				
			||||||
	but->func_arg1 = block->func_arg1;
 | 
						but->func_arg1 = block->func_arg1;
 | 
				
			||||||
	but->func_arg2 = block->func_arg2;
 | 
						but->func_arg2 = block->func_arg2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->funcN = block->funcN;
 | 
						but->funcN = block->funcN;
 | 
				
			||||||
	if (block->func_argN)
 | 
						if (block->func_argN) {
 | 
				
			||||||
		but->func_argN = MEM_dupallocN(block->func_argN);
 | 
							but->func_argN = MEM_dupallocN(block->func_argN);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->pos = -1;   /* cursor invisible */
 | 
						but->pos = -1;   /* cursor invisible */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3565,8 +3665,9 @@ static uiBut *ui_def_but(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	BLI_addtail(&block->buttons, but);
 | 
						BLI_addtail(&block->buttons, but);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (block->curlayout)
 | 
						if (block->curlayout) {
 | 
				
			||||||
		ui_layout_add_but(block->curlayout, but);
 | 
							ui_layout_add_but(block->curlayout, but);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WITH_PYTHON
 | 
					#ifdef WITH_PYTHON
 | 
				
			||||||
	/* if the 'UI_OT_editsource' is running, extract the source info from the button  */
 | 
						/* if the 'UI_OT_editsource' is running, extract the source info from the button  */
 | 
				
			||||||
@@ -3637,16 +3738,20 @@ static void ui_def_but_rna__menu(bContext *UNUSED(C), uiLayout *layout, void *bu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Columns and row estimation. Ignore simple separators here. */
 | 
						/* Columns and row estimation. Ignore simple separators here. */
 | 
				
			||||||
	columns = (nbr_entries_nosepr + 20) / 20;
 | 
						columns = (nbr_entries_nosepr + 20) / 20;
 | 
				
			||||||
	if (columns < 1)
 | 
						if (columns < 1) {
 | 
				
			||||||
		columns = 1;
 | 
							columns = 1;
 | 
				
			||||||
	if (columns > 8)
 | 
						}
 | 
				
			||||||
 | 
						if (columns > 8) {
 | 
				
			||||||
		columns = (nbr_entries_nosepr + 25) / 25;
 | 
							columns = (nbr_entries_nosepr + 25) / 25;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rows = totitems / columns;
 | 
						rows = totitems / columns;
 | 
				
			||||||
	if (rows < 1)
 | 
						if (rows < 1) {
 | 
				
			||||||
		rows = 1;
 | 
							rows = 1;
 | 
				
			||||||
	while (rows * columns < totitems)
 | 
						}
 | 
				
			||||||
 | 
						while (rows * columns < totitems) {
 | 
				
			||||||
		rows++;
 | 
							rows++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (block->flag & UI_BLOCK_NO_FLIP) {
 | 
						if (block->flag & UI_BLOCK_NO_FLIP) {
 | 
				
			||||||
		/* Title at the top for menus with categories. */
 | 
							/* Title at the top for menus with categories. */
 | 
				
			||||||
@@ -3810,8 +3915,9 @@ static uiBut *ui_def_but_rna(
 | 
				
			|||||||
		icon = RNA_property_ui_icon(prop);
 | 
							icon = RNA_property_ui_icon(prop);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!tip && proptype != PROP_ENUM)
 | 
						if (!tip && proptype != PROP_ENUM) {
 | 
				
			||||||
		tip = RNA_property_ui_description(prop);
 | 
							tip = RNA_property_ui_description(prop);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (min == max || a1 == -1 || a2 == -1) {
 | 
						if (min == max || a1 == -1 || a2 == -1) {
 | 
				
			||||||
		if (proptype == PROP_INT) {
 | 
							if (proptype == PROP_INT) {
 | 
				
			||||||
@@ -3824,10 +3930,12 @@ static uiBut *ui_def_but_rna(
 | 
				
			|||||||
				min = hardmin;
 | 
									min = hardmin;
 | 
				
			||||||
				max = hardmax;
 | 
									max = hardmax;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (a1 == -1)
 | 
								if (a1 == -1) {
 | 
				
			||||||
				a1 = step;
 | 
									a1 = step;
 | 
				
			||||||
			if (a2 == -1)
 | 
								}
 | 
				
			||||||
 | 
								if (a2 == -1) {
 | 
				
			||||||
				a2 = 0;
 | 
									a2 = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (proptype == PROP_FLOAT) {
 | 
							else if (proptype == PROP_FLOAT) {
 | 
				
			||||||
			float hardmin, hardmax, softmin, softmax, step, precision;
 | 
								float hardmin, hardmax, softmin, softmax, step, precision;
 | 
				
			||||||
@@ -3839,10 +3947,12 @@ static uiBut *ui_def_but_rna(
 | 
				
			|||||||
				min = hardmin;
 | 
									min = hardmin;
 | 
				
			||||||
				max = hardmax;
 | 
									max = hardmax;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (a1 == -1)
 | 
								if (a1 == -1) {
 | 
				
			||||||
				a1 = step;
 | 
									a1 = step;
 | 
				
			||||||
			if (a2 == -1)
 | 
								}
 | 
				
			||||||
 | 
								if (a2 == -1) {
 | 
				
			||||||
				a2 = precision;
 | 
									a2 = precision;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (proptype == PROP_STRING) {
 | 
							else if (proptype == PROP_STRING) {
 | 
				
			||||||
			min = 0;
 | 
								min = 0;
 | 
				
			||||||
@@ -3857,10 +3967,12 @@ static uiBut *ui_def_but_rna(
 | 
				
			|||||||
	but->rnapoin = *ptr;
 | 
						but->rnapoin = *ptr;
 | 
				
			||||||
	but->rnaprop = prop;
 | 
						but->rnaprop = prop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (RNA_property_array_check(but->rnaprop))
 | 
						if (RNA_property_array_check(but->rnaprop)) {
 | 
				
			||||||
		but->rnaindex = index;
 | 
							but->rnaindex = index;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		but->rnaindex = 0;
 | 
							but->rnaindex = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon) {
 | 
						if (icon) {
 | 
				
			||||||
		ui_def_but_icon(but, icon, UI_HAS_ICON);
 | 
							ui_def_but_icon(but, icon, UI_HAS_ICON);
 | 
				
			||||||
@@ -3922,10 +4034,12 @@ static uiBut *ui_def_but_operator_ptr(uiBlock *block, int type, wmOperatorType *
 | 
				
			|||||||
	uiBut *but;
 | 
						uiBut *but;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!str) {
 | 
						if (!str) {
 | 
				
			||||||
		if (ot && ot->srna)
 | 
							if (ot && ot->srna) {
 | 
				
			||||||
			str = RNA_struct_ui_name(ot->srna);
 | 
								str = RNA_struct_ui_name(ot->srna);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			str = "";
 | 
								str = "";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((!tip || tip[0] == '\0') && ot && ot->srna) {
 | 
						if ((!tip || tip[0] == '\0') && ot && ot->srna) {
 | 
				
			||||||
@@ -4009,15 +4123,17 @@ void UI_autocomplete_update_name(AutoComplete *autocpl, const char *name)
 | 
				
			|||||||
	int a;
 | 
						int a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (a = 0; a < autocpl->maxlen - 1; a++) {
 | 
						for (a = 0; a < autocpl->maxlen - 1; a++) {
 | 
				
			||||||
		if (startname[a] == 0 || startname[a] != name[a])
 | 
							if (startname[a] == 0 || startname[a] != name[a]) {
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* found a match */
 | 
						/* found a match */
 | 
				
			||||||
	if (startname[a] == 0) {
 | 
						if (startname[a] == 0) {
 | 
				
			||||||
		autocpl->matches++;
 | 
							autocpl->matches++;
 | 
				
			||||||
		/* first match */
 | 
							/* first match */
 | 
				
			||||||
		if (truncate[0] == 0)
 | 
							if (truncate[0] == 0) {
 | 
				
			||||||
			BLI_strncpy(truncate, name, autocpl->maxlen);
 | 
								BLI_strncpy(truncate, name, autocpl->maxlen);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			/* remove from truncate what is not in bone->name */
 | 
								/* remove from truncate what is not in bone->name */
 | 
				
			||||||
			for (a = 0; a < autocpl->maxlen - 1; a++) {
 | 
								for (a = 0; a < autocpl->maxlen - 1; a++) {
 | 
				
			||||||
@@ -4025,8 +4141,9 @@ void UI_autocomplete_update_name(AutoComplete *autocpl, const char *name)
 | 
				
			|||||||
					truncate[a] = 0;
 | 
										truncate[a] = 0;
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if (truncate[a] != name[a])
 | 
									else if (truncate[a] != name[a]) {
 | 
				
			||||||
					truncate[a] = 0;
 | 
										truncate[a] = 0;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -4131,7 +4248,9 @@ uiBut *uiDefButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int opcontext
 | 
				
			|||||||
uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x, int y, short width, short height, const char *tip)
 | 
					uiBut *uiDefButO(uiBlock *block, int type, const char *opname, int opcontext, const char *str, int x, int y, short width, short height, const char *tip)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	wmOperatorType *ot = WM_operatortype_find(opname, 0);
 | 
						wmOperatorType *ot = WM_operatortype_find(opname, 0);
 | 
				
			||||||
	if (str == NULL && ot == NULL) str = opname;
 | 
						if (str == NULL && ot == NULL) {
 | 
				
			||||||
 | 
							str = opname;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return uiDefButO_ptr(block, type, ot, opcontext, str, x, y, width, height, tip);
 | 
						return uiDefButO_ptr(block, type, ot, opcontext, str, x, y, width, height, tip);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4291,8 +4410,9 @@ uiBut *uiDefIconTextButO_ptr(uiBlock *block, int type, wmOperatorType *ot, int o
 | 
				
			|||||||
uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x, int y, short width, short height, const char *tip)
 | 
					uiBut *uiDefIconTextButO(uiBlock *block, int type, const char *opname, int opcontext, int icon, const char *str, int x, int y, short width, short height, const char *tip)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	wmOperatorType *ot = WM_operatortype_find(opname, 0);
 | 
						wmOperatorType *ot = WM_operatortype_find(opname, 0);
 | 
				
			||||||
	if (str && str[0] == '\0')
 | 
						if (str && str[0] == '\0') {
 | 
				
			||||||
		return uiDefIconButO_ptr(block, type, ot, opcontext, icon, x, y, width, height, tip);
 | 
							return uiDefIconButO_ptr(block, type, ot, opcontext, icon, x, y, width, height, tip);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return uiDefIconTextButO_ptr(block, type, ot, opcontext, icon, str, x, y, width, height, tip);
 | 
						return uiDefIconTextButO_ptr(block, type, ot, opcontext, icon, str, x, y, width, height, tip);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4305,9 +4425,11 @@ int UI_blocklist_min_y_get(ListBase *lb)
 | 
				
			|||||||
	uiBlock *block;
 | 
						uiBlock *block;
 | 
				
			||||||
	int min = 0;
 | 
						int min = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = lb->first; block; block = block->next)
 | 
						for (block = lb->first; block; block = block->next) {
 | 
				
			||||||
		if (block == lb->first || block->rect.ymin < min)
 | 
							if (block == lb->first || block->rect.ymin < min) {
 | 
				
			||||||
			min = block->rect.ymin;
 | 
								min = block->rect.ymin;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return min;
 | 
						return min;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -4323,15 +4445,23 @@ void UI_block_order_flip(uiBlock *block)
 | 
				
			|||||||
	uiBut *but;
 | 
						uiBut *but;
 | 
				
			||||||
	float centy, miny = 10000, maxy = -10000;
 | 
						float centy, miny = 10000, maxy = -10000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (U.uiflag & USER_MENUFIXEDORDER)
 | 
						if (U.uiflag & USER_MENUFIXEDORDER) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	else if (block->flag & UI_BLOCK_NO_FLIP)
 | 
						}
 | 
				
			||||||
 | 
						else if (block->flag & UI_BLOCK_NO_FLIP) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (but = block->buttons.first; but; but = but->next) {
 | 
						for (but = block->buttons.first; but; but = but->next) {
 | 
				
			||||||
		if (but->drawflag & UI_BUT_ALIGN) return;
 | 
							if (but->drawflag & UI_BUT_ALIGN) {
 | 
				
			||||||
		if (but->rect.ymin < miny) miny = but->rect.ymin;
 | 
								return;
 | 
				
			||||||
		if (but->rect.ymax > maxy) maxy = but->rect.ymax;
 | 
							}
 | 
				
			||||||
 | 
							if (but->rect.ymin < miny) {
 | 
				
			||||||
 | 
								miny = but->rect.ymin;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (but->rect.ymax > maxy) {
 | 
				
			||||||
 | 
								maxy = but->rect.ymax;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* mirror trick */
 | 
						/* mirror trick */
 | 
				
			||||||
	centy = (miny + maxy) / 2.0f;
 | 
						centy = (miny + maxy) / 2.0f;
 | 
				
			||||||
@@ -4748,8 +4878,9 @@ void UI_but_func_search_set(
 | 
				
			|||||||
	/* search buttons show red-alert if item doesn't exist, not for menus */
 | 
						/* search buttons show red-alert if item doesn't exist, not for menus */
 | 
				
			||||||
	if (0 == (but->block->flag & UI_BLOCK_LOOP)) {
 | 
						if (0 == (but->block->flag & UI_BLOCK_LOOP)) {
 | 
				
			||||||
		/* skip empty buttons, not all buttons need input, we only show invalid */
 | 
							/* skip empty buttons, not all buttons need input, we only show invalid */
 | 
				
			||||||
		if (but->drawstr[0])
 | 
							if (but->drawstr[0]) {
 | 
				
			||||||
			ui_but_search_refresh(but);
 | 
								ui_but_search_refresh(but);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4778,8 +4909,9 @@ static void operator_enum_search_cb(const struct bContext *C, void *but, const c
 | 
				
			|||||||
			/* note: need to give the index rather than the
 | 
								/* note: need to give the index rather than the
 | 
				
			||||||
			 * identifier because the enum can be freed */
 | 
								 * identifier because the enum can be freed */
 | 
				
			||||||
			if (BLI_strcasestr(item->name, str)) {
 | 
								if (BLI_strcasestr(item->name, str)) {
 | 
				
			||||||
				if (false == UI_search_item_add(items, item->name, POINTER_FROM_INT(item->value), item->icon))
 | 
									if (false == UI_search_item_add(items, item->name, POINTER_FROM_INT(item->value), item->icon)) {
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4898,21 +5030,26 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
 | 
				
			|||||||
			if (but->tip_func) {
 | 
								if (but->tip_func) {
 | 
				
			||||||
				tmp = but->tip_func(C, but->tip_argN, but->tip);
 | 
									tmp = but->tip_func(C, but->tip_argN, but->tip);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (but->tip && but->tip[0])
 | 
								else if (but->tip && but->tip[0]) {
 | 
				
			||||||
				tmp = BLI_strdup(but->tip);
 | 
									tmp = BLI_strdup(but->tip);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				type = BUT_GET_RNA_TIP;  /* Fail-safe solution... */
 | 
									type = BUT_GET_RNA_TIP;  /* Fail-safe solution... */
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (type == BUT_GET_RNAPROP_IDENTIFIER) {
 | 
							if (type == BUT_GET_RNAPROP_IDENTIFIER) {
 | 
				
			||||||
			if (but->rnaprop)
 | 
								if (but->rnaprop) {
 | 
				
			||||||
				tmp = BLI_strdup(RNA_property_identifier(but->rnaprop));
 | 
									tmp = BLI_strdup(RNA_property_identifier(but->rnaprop));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (type == BUT_GET_RNASTRUCT_IDENTIFIER) {
 | 
							else if (type == BUT_GET_RNASTRUCT_IDENTIFIER) {
 | 
				
			||||||
			if (but->rnaprop && but->rnapoin.data)
 | 
								if (but->rnaprop && but->rnapoin.data) {
 | 
				
			||||||
				tmp = BLI_strdup(RNA_struct_identifier(but->rnapoin.type));
 | 
									tmp = BLI_strdup(RNA_struct_identifier(but->rnapoin.type));
 | 
				
			||||||
			else if (but->optype)
 | 
								}
 | 
				
			||||||
 | 
								else if (but->optype) {
 | 
				
			||||||
				tmp = BLI_strdup(but->optype->idname);
 | 
									tmp = BLI_strdup(but->optype->idname);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
								else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
				
			||||||
				MenuType *mt = UI_but_menutype_get(but);
 | 
									MenuType *mt = UI_but_menutype_get(but);
 | 
				
			||||||
				if (mt) {
 | 
									if (mt) {
 | 
				
			||||||
@@ -4928,21 +5065,25 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else if (ELEM(type, BUT_GET_RNA_LABEL, BUT_GET_RNA_TIP)) {
 | 
							else if (ELEM(type, BUT_GET_RNA_LABEL, BUT_GET_RNA_TIP)) {
 | 
				
			||||||
			if (but->rnaprop) {
 | 
								if (but->rnaprop) {
 | 
				
			||||||
				if (type == BUT_GET_RNA_LABEL)
 | 
									if (type == BUT_GET_RNA_LABEL) {
 | 
				
			||||||
					tmp = BLI_strdup(RNA_property_ui_name(but->rnaprop));
 | 
										tmp = BLI_strdup(RNA_property_ui_name(but->rnaprop));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					const char *t = RNA_property_ui_description(but->rnaprop);
 | 
										const char *t = RNA_property_ui_description(but->rnaprop);
 | 
				
			||||||
					if (t && t[0])
 | 
										if (t && t[0]) {
 | 
				
			||||||
						tmp = BLI_strdup(t);
 | 
											tmp = BLI_strdup(t);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (but->optype) {
 | 
								else if (but->optype) {
 | 
				
			||||||
				if (type == BUT_GET_RNA_LABEL)
 | 
									if (type == BUT_GET_RNA_LABEL) {
 | 
				
			||||||
					tmp = BLI_strdup(RNA_struct_ui_name(but->optype->srna));
 | 
										tmp = BLI_strdup(RNA_struct_ui_name(but->optype->srna));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					const char *t = RNA_struct_ui_description(but->optype->srna);
 | 
										const char *t = RNA_struct_ui_description(but->optype->srna);
 | 
				
			||||||
					if (t && t[0])
 | 
										if (t && t[0]) {
 | 
				
			||||||
						tmp = BLI_strdup(t);
 | 
											tmp = BLI_strdup(t);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
								else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
				
			||||||
@@ -4950,12 +5091,14 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
 | 
				
			|||||||
				if (mt) {
 | 
									if (mt) {
 | 
				
			||||||
					/* not all menus are from python */
 | 
										/* not all menus are from python */
 | 
				
			||||||
					if (mt->ext.srna) {
 | 
										if (mt->ext.srna) {
 | 
				
			||||||
						if (type == BUT_GET_RNA_LABEL)
 | 
											if (type == BUT_GET_RNA_LABEL) {
 | 
				
			||||||
							tmp = BLI_strdup(RNA_struct_ui_name(mt->ext.srna));
 | 
												tmp = BLI_strdup(RNA_struct_ui_name(mt->ext.srna));
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
						else {
 | 
											else {
 | 
				
			||||||
							const char *t = RNA_struct_ui_description(mt->ext.srna);
 | 
												const char *t = RNA_struct_ui_description(mt->ext.srna);
 | 
				
			||||||
							if (t && t[0])
 | 
												if (t && t[0]) {
 | 
				
			||||||
								tmp = BLI_strdup(t);
 | 
													tmp = BLI_strdup(t);
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -4963,14 +5106,17 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else if (type == BUT_GET_RNA_LABEL_CONTEXT) {
 | 
							else if (type == BUT_GET_RNA_LABEL_CONTEXT) {
 | 
				
			||||||
			const char *_tmp = BLT_I18NCONTEXT_DEFAULT;
 | 
								const char *_tmp = BLT_I18NCONTEXT_DEFAULT;
 | 
				
			||||||
			if (but->rnaprop)
 | 
								if (but->rnaprop) {
 | 
				
			||||||
				_tmp = RNA_property_translation_context(but->rnaprop);
 | 
									_tmp = RNA_property_translation_context(but->rnaprop);
 | 
				
			||||||
			else if (but->optype)
 | 
								}
 | 
				
			||||||
 | 
								else if (but->optype) {
 | 
				
			||||||
				_tmp = RNA_struct_translation_context(but->optype->srna);
 | 
									_tmp = RNA_struct_translation_context(but->optype->srna);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
								else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
 | 
				
			||||||
				MenuType *mt = UI_but_menutype_get(but);
 | 
									MenuType *mt = UI_but_menutype_get(but);
 | 
				
			||||||
				if (mt)
 | 
									if (mt) {
 | 
				
			||||||
					_tmp = RNA_struct_translation_context(mt->ext.srna);
 | 
										_tmp = RNA_struct_translation_context(mt->ext.srna);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (BLT_is_default_context(_tmp)) {
 | 
								if (BLT_is_default_context(_tmp)) {
 | 
				
			||||||
				_tmp = BLT_I18NCONTEXT_DEFAULT_BPYRNA;
 | 
									_tmp = BLT_I18NCONTEXT_DEFAULT_BPYRNA;
 | 
				
			||||||
@@ -5017,17 +5163,21 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					RNA_property_enum_items_gettexted(C, ptr, prop, &items, &totitems, &free_items);
 | 
										RNA_property_enum_items_gettexted(C, ptr, prop, &items, &totitems, &free_items);
 | 
				
			||||||
					for (i = 0, item = items; i < totitems; i++, item++) {
 | 
										for (i = 0, item = items; i < totitems; i++, item++) {
 | 
				
			||||||
						if (item->identifier[0] && item->value == value)
 | 
											if (item->identifier[0] && item->value == value) {
 | 
				
			||||||
							break;
 | 
												break;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if (item && item->identifier) {
 | 
									if (item && item->identifier) {
 | 
				
			||||||
					if (type == BUT_GET_RNAENUM_IDENTIFIER)
 | 
										if (type == BUT_GET_RNAENUM_IDENTIFIER) {
 | 
				
			||||||
						tmp = BLI_strdup(item->identifier);
 | 
											tmp = BLI_strdup(item->identifier);
 | 
				
			||||||
					else if (type == BUT_GET_RNAENUM_LABEL)
 | 
										}
 | 
				
			||||||
 | 
										else if (type == BUT_GET_RNAENUM_LABEL) {
 | 
				
			||||||
						tmp = BLI_strdup(item->name);
 | 
											tmp = BLI_strdup(item->name);
 | 
				
			||||||
					else if (item->description && item->description[0])
 | 
										}
 | 
				
			||||||
 | 
										else if (item->description && item->description[0]) {
 | 
				
			||||||
						tmp = BLI_strdup(item->description);
 | 
											tmp = BLI_strdup(item->description);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -555,8 +555,12 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (but = first; but && but->alignnr == nr; but = but->next) {
 | 
						for (but = first; but && but->alignnr == nr; but = but->next) {
 | 
				
			||||||
		if (but->next && but->next->alignnr == nr) {
 | 
							if (but->next && but->next->alignnr == nr) {
 | 
				
			||||||
			if (buts_are_horiz(but, but->next)) cols++;
 | 
								if (buts_are_horiz(but, but->next)) {
 | 
				
			||||||
			else rows++;
 | 
									cols++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									rows++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -565,8 +569,9 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
	/* note;  how it uses 'flag' in loop below (either set it, or OR it) is confusing */
 | 
						/* note;  how it uses 'flag' in loop below (either set it, or OR it) is confusing */
 | 
				
			||||||
	for (but = first, prev = NULL; but && but->alignnr == nr; prev = but, but = but->next) {
 | 
						for (but = first, prev = NULL; but && but->alignnr == nr; prev = but, but = but->next) {
 | 
				
			||||||
		next = but->next;
 | 
							next = but->next;
 | 
				
			||||||
		if (next && next->alignnr != nr)
 | 
							if (next && next->alignnr != nr) {
 | 
				
			||||||
			next = NULL;
 | 
								next = NULL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* clear old flag */
 | 
							/* clear old flag */
 | 
				
			||||||
		but->drawflag &= ~UI_BUT_ALIGN;
 | 
							but->drawflag &= ~UI_BUT_ALIGN;
 | 
				
			||||||
@@ -574,10 +579,12 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
		if (flag == 0) {  /* first case */
 | 
							if (flag == 0) {  /* first case */
 | 
				
			||||||
			if (next) {
 | 
								if (next) {
 | 
				
			||||||
				if (buts_are_horiz(but, next)) {
 | 
									if (buts_are_horiz(but, next)) {
 | 
				
			||||||
					if (rows == 0)
 | 
										if (rows == 0) {
 | 
				
			||||||
						flag = UI_BUT_ALIGN_RIGHT;
 | 
											flag = UI_BUT_ALIGN_RIGHT;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_RIGHT;
 | 
											flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_RIGHT;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					flag = UI_BUT_ALIGN_DOWN;
 | 
										flag = UI_BUT_ALIGN_DOWN;
 | 
				
			||||||
@@ -587,10 +594,12 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
		else if (next == NULL) {  /* last case */
 | 
							else if (next == NULL) {  /* last case */
 | 
				
			||||||
			if (prev) {
 | 
								if (prev) {
 | 
				
			||||||
				if (buts_are_horiz(prev, but)) {
 | 
									if (buts_are_horiz(prev, but)) {
 | 
				
			||||||
					if (rows == 0)
 | 
										if (rows == 0) {
 | 
				
			||||||
						flag = UI_BUT_ALIGN_LEFT;
 | 
											flag = UI_BUT_ALIGN_LEFT;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						flag = UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_LEFT;
 | 
											flag = UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_LEFT;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					flag = UI_BUT_ALIGN_TOP;
 | 
										flag = UI_BUT_ALIGN_TOP;
 | 
				
			||||||
@@ -611,7 +620,9 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
						}
 | 
											}
 | 
				
			||||||
						bt = bt->next;
 | 
											bt = bt->next;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					if (bt == NULL || bt->alignnr != nr) flag = UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_RIGHT;
 | 
										if (bt == NULL || bt->alignnr != nr) {
 | 
				
			||||||
 | 
											flag = UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_RIGHT;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
@@ -624,8 +635,9 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			else {  /* next button switches to new row */
 | 
								else {  /* next button switches to new row */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (prev && buts_are_horiz(prev, but))
 | 
									if (prev && buts_are_horiz(prev, but)) {
 | 
				
			||||||
					flag |= UI_BUT_ALIGN_LEFT;
 | 
										flag |= UI_BUT_ALIGN_LEFT;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					flag &= ~UI_BUT_ALIGN_LEFT;
 | 
										flag &= ~UI_BUT_ALIGN_LEFT;
 | 
				
			||||||
					flag |= UI_BUT_ALIGN_TOP;
 | 
										flag |= UI_BUT_ALIGN_TOP;
 | 
				
			||||||
@@ -633,18 +645,21 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				if ((flag & UI_BUT_ALIGN_TOP) == 0) {  /* still top row */
 | 
									if ((flag & UI_BUT_ALIGN_TOP) == 0) {  /* still top row */
 | 
				
			||||||
					if (prev) {
 | 
										if (prev) {
 | 
				
			||||||
						if (next && buts_are_horiz(but, next))
 | 
											if (next && buts_are_horiz(but, next)) {
 | 
				
			||||||
							flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_RIGHT;
 | 
												flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_RIGHT;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
						else {
 | 
											else {
 | 
				
			||||||
							/* last button in top row */
 | 
												/* last button in top row */
 | 
				
			||||||
							flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT;
 | 
												flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else
 | 
										else {
 | 
				
			||||||
						flag |= UI_BUT_ALIGN_DOWN;
 | 
											flag |= UI_BUT_ALIGN_DOWN;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else {
 | 
				
			||||||
					flag |= UI_BUT_ALIGN_TOP;
 | 
										flag |= UI_BUT_ALIGN_TOP;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -674,8 +689,9 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
 | 
				
			|||||||
					prev->rect.ymin = but->rect.ymax;
 | 
										prev->rect.ymin = but->rect.ymax;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					but->rect.xmin = prev->rect.xmin;
 | 
										but->rect.xmin = prev->rect.xmin;
 | 
				
			||||||
					if (next && buts_are_horiz(but, next) == 0)
 | 
										if (next && buts_are_horiz(but, next) == 0) {
 | 
				
			||||||
						but->rect.xmax = prev->rect.xmax;
 | 
											but->rect.xmax = prev->rect.xmax;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					/* the previous button is not a single one in its row */
 | 
										/* the previous button is not a single one in its row */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,16 +86,19 @@ void ui_but_anim_flag(uiBut *but, float cfra)
 | 
				
			|||||||
			 * we need to correct the frame number to "look inside" the
 | 
								 * we need to correct the frame number to "look inside" the
 | 
				
			||||||
			 * remapped action
 | 
								 * remapped action
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
			if (adt)
 | 
								if (adt) {
 | 
				
			||||||
				cfra = BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP);
 | 
									cfra = BKE_nla_tweakedit_remap(adt, cfra, NLATIME_CONVERT_UNMAP);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (fcurve_frame_has_keyframe(fcu, cfra, 0))
 | 
								if (fcurve_frame_has_keyframe(fcu, cfra, 0)) {
 | 
				
			||||||
				but->flag |= UI_BUT_ANIMATED_KEY;
 | 
									but->flag |= UI_BUT_ANIMATED_KEY;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* XXX: this feature is totally broken and useless with NLA */
 | 
								/* XXX: this feature is totally broken and useless with NLA */
 | 
				
			||||||
			if (adt == NULL || adt->nla_tracks.first == NULL) {
 | 
								if (adt == NULL || adt->nla_tracks.first == NULL) {
 | 
				
			||||||
				if (fcurve_is_changed(but->rnapoin, but->rnaprop, fcu, cfra))
 | 
									if (fcurve_is_changed(but->rnapoin, but->rnaprop, fcu, cfra)) {
 | 
				
			||||||
					but->drawflag |= UI_BUT_ANIMATED_CHANGED;
 | 
										but->drawflag |= UI_BUT_ANIMATED_CHANGED;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
@@ -196,15 +199,17 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* button must have RNA-pointer to a numeric-capable property */
 | 
						/* button must have RNA-pointer to a numeric-capable property */
 | 
				
			||||||
	if (ELEM(NULL, but->rnapoin.data, but->rnaprop)) {
 | 
						if (ELEM(NULL, but->rnapoin.data, but->rnaprop)) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("ERROR: create expression failed - button has no RNA info attached\n");
 | 
								printf("ERROR: create expression failed - button has no RNA info attached\n");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (RNA_property_array_check(but->rnaprop) != 0) {
 | 
						if (RNA_property_array_check(but->rnaprop) != 0) {
 | 
				
			||||||
		if (but->rnaindex == -1) {
 | 
							if (but->rnaindex == -1) {
 | 
				
			||||||
			if (G.debug & G_DEBUG)
 | 
								if (G.debug & G_DEBUG) {
 | 
				
			||||||
				printf("ERROR: create expression failed - can't create expression for entire array\n");
 | 
									printf("ERROR: create expression failed - can't create expression for entire array\n");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -214,8 +219,9 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str)
 | 
				
			|||||||
	 * don't allow drivers to be created for them */
 | 
						 * don't allow drivers to be created for them */
 | 
				
			||||||
	id = (ID *)but->rnapoin.id.data;
 | 
						id = (ID *)but->rnapoin.id.data;
 | 
				
			||||||
	if ((id == NULL) || (GS(id->name) == ID_MA) || (GS(id->name) == ID_TE)) {
 | 
						if ((id == NULL) || (GS(id->name) == ID_MA) || (GS(id->name) == ID_TE)) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("ERROR: create expression failed - invalid data-block for adding drivers (%p)\n", id);
 | 
								printf("ERROR: create expression failed - invalid data-block for adding drivers (%p)\n", id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -262,8 +268,9 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	fcu = ui_but_get_fcurve(but, NULL, &action, &driven, &special);
 | 
						fcu = ui_but_get_fcurve(but, NULL, &action, &driven, &special);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fcu == NULL)
 | 
						if (fcu == NULL) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (special) {
 | 
						if (special) {
 | 
				
			||||||
		/* NLA Strip property */
 | 
							/* NLA Strip property */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -139,8 +139,9 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *ar, void *arg)
 | 
				
			|||||||
	kmi_id = kmi->id;
 | 
						kmi_id = kmi->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* copy properties, prop can be NULL for reset */
 | 
						/* copy properties, prop can be NULL for reset */
 | 
				
			||||||
	if (prop)
 | 
						if (prop) {
 | 
				
			||||||
		prop = IDP_CopyProperty(prop);
 | 
							prop = IDP_CopyProperty(prop);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	WM_keymap_properties_reset(kmi, prop);
 | 
						WM_keymap_properties_reset(kmi, prop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* update and get pointers again */
 | 
						/* update and get pointers again */
 | 
				
			||||||
@@ -407,8 +408,9 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* second slower test,
 | 
							/* second slower test,
 | 
				
			||||||
		 * saved people finding keyframe items in menus when its not possible */
 | 
							 * saved people finding keyframe items in menus when its not possible */
 | 
				
			||||||
		if (is_anim)
 | 
							if (is_anim) {
 | 
				
			||||||
			is_anim = RNA_property_path_from_ID_check(&but->rnapoin, but->rnaprop);
 | 
								is_anim = RNA_property_path_from_ID_check(&but->rnapoin, but->rnaprop);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* determine if we can key a single component of an array */
 | 
							/* determine if we can key a single component of an array */
 | 
				
			||||||
		const bool is_array = RNA_property_array_length(&but->rnapoin, but->rnaprop) != 0;
 | 
							const bool is_array = RNA_property_array_length(&but->rnapoin, but->rnaprop) != 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -637,7 +637,9 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColors *UN
 | 
				
			|||||||
#else
 | 
					#else
 | 
				
			||||||
	ImBuf *ibuf = (ImBuf *)but->poin;
 | 
						ImBuf *ibuf = (ImBuf *)but->poin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ibuf) return;
 | 
						if (!ibuf) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float facx = 1.0f;
 | 
						float facx = 1.0f;
 | 
				
			||||||
	float facy = 1.0f;
 | 
						float facy = 1.0f;
 | 
				
			||||||
@@ -732,8 +734,9 @@ static void histogram_draw_one(
 | 
				
			|||||||
	float color[4] = {r, g, b, alpha};
 | 
						float color[4] = {r, g, b, alpha};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* that can happen */
 | 
						/* that can happen */
 | 
				
			||||||
	if (res == 0)
 | 
						if (res == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GPU_line_smooth(true);
 | 
						GPU_line_smooth(true);
 | 
				
			||||||
	glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE);
 | 
						glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE);
 | 
				
			||||||
@@ -846,12 +849,15 @@ void ui_draw_but_HISTOGRAM(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColors
 | 
				
			|||||||
		histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line, pos);
 | 
							histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line, pos);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_R)
 | 
							if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_R) {
 | 
				
			||||||
			histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line, pos);
 | 
								histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line, pos);
 | 
				
			||||||
		if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_G)
 | 
							}
 | 
				
			||||||
 | 
							if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_G) {
 | 
				
			||||||
			histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res, is_line, pos);
 | 
								histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res, is_line, pos);
 | 
				
			||||||
		if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_B)
 | 
							}
 | 
				
			||||||
 | 
							if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_B) {
 | 
				
			||||||
			histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res, is_line, pos);
 | 
								histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res, is_line, pos);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	immUnbindProgram();
 | 
						immUnbindProgram();
 | 
				
			||||||
@@ -891,7 +897,9 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColors
 | 
				
			|||||||
	float colors_alpha[3][3], colorsycc_alpha[3][3];
 | 
						float colors_alpha[3][3], colorsycc_alpha[3][3];
 | 
				
			||||||
	float min, max;
 | 
						float min, max;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (scopes == NULL) return;
 | 
						if (scopes == NULL) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rctf rect = {
 | 
						rctf rect = {
 | 
				
			||||||
		.xmin = (float)recti->xmin + 1,
 | 
							.xmin = (float)recti->xmin + 1,
 | 
				
			||||||
@@ -900,8 +908,9 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColors
 | 
				
			|||||||
		.ymax = (float)recti->ymax - 1,
 | 
							.ymax = (float)recti->ymax - 1,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (scopes->wavefrm_yfac < 0.5f)
 | 
						if (scopes->wavefrm_yfac < 0.5f) {
 | 
				
			||||||
		scopes->wavefrm_yfac = 0.98f;
 | 
							scopes->wavefrm_yfac = 0.98f;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	float w = BLI_rctf_size_x(&rect) - 7;
 | 
						float w = BLI_rctf_size_x(&rect) - 7;
 | 
				
			||||||
	float h = BLI_rctf_size_y(&rect) * scopes->wavefrm_yfac;
 | 
						float h = BLI_rctf_size_y(&rect) * scopes->wavefrm_yfac;
 | 
				
			||||||
	float yofs = rect.ymin + (BLI_rctf_size_y(&rect) - h) * 0.5f;
 | 
						float yofs = rect.ymin + (BLI_rctf_size_y(&rect) - h) * 0.5f;
 | 
				
			||||||
@@ -1083,10 +1092,12 @@ void ui_draw_but_WAVEFORM(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColors
 | 
				
			|||||||
		/* min max */
 | 
							/* min max */
 | 
				
			||||||
		if (scopes->wavefrm_mode != SCOPES_WAVEFRM_LUMA ) {
 | 
							if (scopes->wavefrm_mode != SCOPES_WAVEFRM_LUMA ) {
 | 
				
			||||||
			for (int c = 0; c < 3; c++) {
 | 
								for (int c = 0; c < 3; c++) {
 | 
				
			||||||
				if (ELEM(scopes->wavefrm_mode, SCOPES_WAVEFRM_RGB_PARADE, SCOPES_WAVEFRM_RGB))
 | 
									if (ELEM(scopes->wavefrm_mode, SCOPES_WAVEFRM_RGB_PARADE, SCOPES_WAVEFRM_RGB)) {
 | 
				
			||||||
					immUniformColor3f(colors[c][0] * 0.75f, colors[c][1] * 0.75f, colors[c][2] * 0.75f);
 | 
										immUniformColor3f(colors[c][0] * 0.75f, colors[c][1] * 0.75f, colors[c][2] * 0.75f);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					immUniformColor3f(colorsycc[c][0] * 0.75f, colorsycc[c][1] * 0.75f, colorsycc[c][2] * 0.75f);
 | 
										immUniformColor3f(colorsycc[c][0] * 0.75f, colorsycc[c][1] * 0.75f, colorsycc[c][2] * 0.75f);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				min = yofs + scopes->minmax[c][0] * h;
 | 
									min = yofs + scopes->minmax[c][0] * h;
 | 
				
			||||||
				max = yofs + scopes->minmax[c][1] * h;
 | 
									max = yofs + scopes->minmax[c][1] * h;
 | 
				
			||||||
				CLAMP(min, rect.ymin, rect.ymax);
 | 
									CLAMP(min, rect.ymin, rect.ymax);
 | 
				
			||||||
@@ -1125,11 +1136,22 @@ static void vectorscope_draw_target(uint pos, float centerx, float centery, floa
 | 
				
			|||||||
	float dangle, dampli, dangle2, dampli2;
 | 
						float dangle, dampli, dangle2, dampli2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rgb_to_yuv(colf[0], colf[1], colf[2], &y, &u, &v, BLI_YUV_ITU_BT709);
 | 
						rgb_to_yuv(colf[0], colf[1], colf[2], &y, &u, &v, BLI_YUV_ITU_BT709);
 | 
				
			||||||
	if (u > 0 && v >= 0) tangle = atanf(v / u);
 | 
					
 | 
				
			||||||
	else if (u > 0 && v < 0) tangle = atanf(v / u) + 2.0f * (float)M_PI;
 | 
						if (u > 0 && v >= 0) {
 | 
				
			||||||
	else if (u < 0) tangle = atanf(v / u) + (float)M_PI;
 | 
							tangle = atanf(v / u);
 | 
				
			||||||
	else if (u == 0 && v > 0.0f) tangle = M_PI_2;
 | 
						}
 | 
				
			||||||
	else if (u == 0 && v < 0.0f) tangle = -M_PI_2;
 | 
						else if (u > 0 && v < 0) {
 | 
				
			||||||
 | 
							tangle = atanf(v / u) + 2.0f * (float)M_PI;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (u < 0) {
 | 
				
			||||||
 | 
							tangle = atanf(v / u) + (float)M_PI;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (u == 0 && v > 0.0f) {
 | 
				
			||||||
 | 
							tangle = M_PI_2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (u == 0 && v < 0.0f) {
 | 
				
			||||||
 | 
							tangle = -M_PI_2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	tampli = sqrtf(u * u + v * v);
 | 
						tampli = sqrtf(u * u + v * v);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* small target vary by 2.5 degree and 2.5 IRE unit */
 | 
						/* small target vary by 2.5 degree and 2.5 IRE unit */
 | 
				
			||||||
@@ -1249,8 +1271,9 @@ void ui_draw_but_VECTORSCOPE(ARegion *UNUSED(ar), uiBut *but, const uiWidgetColo
 | 
				
			|||||||
	immEnd();
 | 
						immEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* saturation points */
 | 
						/* saturation points */
 | 
				
			||||||
	for (int i = 0; i < 6; i++)
 | 
						for (int i = 0; i < 6; i++) {
 | 
				
			||||||
		vectorscope_draw_target(pos, centerx, centery, diam, colors[i]);
 | 
							vectorscope_draw_target(pos, centerx, centery, diam, colors[i]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (scopes->ok && scopes->vecscope != NULL) {
 | 
						if (scopes->ok && scopes->vecscope != NULL) {
 | 
				
			||||||
		/* pixel point cloud */
 | 
							/* pixel point cloud */
 | 
				
			||||||
@@ -1380,16 +1403,20 @@ static void ui_draw_colorband_handle(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
 | 
						ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (active)
 | 
						if (active) {
 | 
				
			||||||
		immUniformColor3ub(196, 196, 196);
 | 
							immUniformColor3ub(196, 196, 196);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		immUniformColor3ub(96, 96, 96);
 | 
							immUniformColor3ub(96, 96, 96);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
 | 
						ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (active)
 | 
						if (active) {
 | 
				
			||||||
		immUniformColor3ub(255, 255, 255);
 | 
							immUniformColor3ub(255, 255, 255);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		immUniformColor3ub(128, 128, 128);
 | 
							immUniformColor3ub(128, 128, 128);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	ui_draw_colorband_handle_tri_hlight(shdr_pos, x, y1 + height - 1, (half_width - 1), (half_width - 1));
 | 
						ui_draw_colorband_handle_tri_hlight(shdr_pos, x, y1 + height - 1, (half_width - 1), (half_width - 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	immUniformColor3ub(0, 0, 0);
 | 
						immUniformColor3ub(0, 0, 0);
 | 
				
			||||||
@@ -1414,7 +1441,9 @@ void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *UNUSED(wcol), const
 | 
				
			|||||||
	uint pos_id, col_id;
 | 
						uint pos_id, col_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ColorBand *coba = (ColorBand *)(but->editcoba ? but->editcoba : but->poin);
 | 
						ColorBand *coba = (ColorBand *)(but->editcoba ? but->editcoba : but->poin);
 | 
				
			||||||
	if (coba == NULL) return;
 | 
						if (coba == NULL) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float x1 = rect->xmin;
 | 
						float x1 = rect->xmin;
 | 
				
			||||||
	float sizex = rect->xmax - x1;
 | 
						float sizex = rect->xmax - x1;
 | 
				
			||||||
@@ -1454,8 +1483,9 @@ void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *UNUSED(wcol), const
 | 
				
			|||||||
	for (int a = 0; a <= sizex; a++) {
 | 
						for (int a = 0; a <= sizex; a++) {
 | 
				
			||||||
		float pos = ((float)a) / sizex;
 | 
							float pos = ((float)a) / sizex;
 | 
				
			||||||
		BKE_colorband_evaluate(coba, pos, colf);
 | 
							BKE_colorband_evaluate(coba, pos, colf);
 | 
				
			||||||
		if (display)
 | 
							if (display) {
 | 
				
			||||||
			IMB_colormanagement_scene_linear_to_display_v3(colf, display);
 | 
								IMB_colormanagement_scene_linear_to_display_v3(colf, display);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1[0] = v2[0] = x1 + a;
 | 
							v1[0] = v2[0] = x1 + a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1473,8 +1503,9 @@ void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *UNUSED(wcol), const
 | 
				
			|||||||
	for (int a = 0; a <= sizex; a++) {
 | 
						for (int a = 0; a <= sizex; a++) {
 | 
				
			||||||
		float pos = ((float)a) / sizex;
 | 
							float pos = ((float)a) / sizex;
 | 
				
			||||||
		BKE_colorband_evaluate(coba, pos, colf);
 | 
							BKE_colorband_evaluate(coba, pos, colf);
 | 
				
			||||||
		if (display)
 | 
							if (display) {
 | 
				
			||||||
			IMB_colormanagement_scene_linear_to_display_v3(colf, display);
 | 
								IMB_colormanagement_scene_linear_to_display_v3(colf, display);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1[0] = v2[0] = x1 + a;
 | 
							v1[0] = v2[0] = x1 + a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1553,10 +1584,12 @@ void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rec
 | 
				
			|||||||
	/* transform to button */
 | 
						/* transform to button */
 | 
				
			||||||
	GPU_matrix_push();
 | 
						GPU_matrix_push();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BLI_rcti_size_x(rect) < BLI_rcti_size_y(rect))
 | 
						if (BLI_rcti_size_x(rect) < BLI_rcti_size_y(rect)) {
 | 
				
			||||||
		size = 0.5f * BLI_rcti_size_x(rect);
 | 
							size = 0.5f * BLI_rcti_size_x(rect);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		size = 0.5f * BLI_rcti_size_y(rect);
 | 
							size = 0.5f * BLI_rcti_size_y(rect);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GPU_matrix_translate_2f(rect->xmin + 0.5f * BLI_rcti_size_x(rect), rect->ymin + 0.5f * BLI_rcti_size_y(rect));
 | 
						GPU_matrix_translate_2f(rect->xmin + 0.5f * BLI_rcti_size_x(rect), rect->ymin + 0.5f * BLI_rcti_size_y(rect));
 | 
				
			||||||
	GPU_matrix_scale_1f(size);
 | 
						GPU_matrix_scale_1f(size);
 | 
				
			||||||
@@ -1592,11 +1625,15 @@ static void ui_draw_but_curve_grid(uint pos, const rcti *rect, float zoomx, floa
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	float dx = step * zoomx;
 | 
						float dx = step * zoomx;
 | 
				
			||||||
	float fx = rect->xmin + zoomx * (-offsx);
 | 
						float fx = rect->xmin + zoomx * (-offsx);
 | 
				
			||||||
	if (fx > rect->xmin) fx -= dx * (floorf(fx - rect->xmin));
 | 
						if (fx > rect->xmin) {
 | 
				
			||||||
 | 
							fx -= dx * (floorf(fx - rect->xmin));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float dy = step * zoomy;
 | 
						float dy = step * zoomy;
 | 
				
			||||||
	float fy = rect->ymin + zoomy * (-offsy);
 | 
						float fy = rect->ymin + zoomy * (-offsy);
 | 
				
			||||||
	if (fy > rect->ymin) fy -= dy * (floorf(fy - rect->ymin));
 | 
						if (fy > rect->ymin) {
 | 
				
			||||||
 | 
							fy -= dy * (floorf(fy - rect->ymin));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float line_count = (
 | 
						float line_count = (
 | 
				
			||||||
	        floorf((rect->xmax - fx) / dx) + 1.0f +
 | 
						        floorf((rect->xmax - fx) / dx) + 1.0f +
 | 
				
			||||||
@@ -1775,12 +1812,15 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
 | 
				
			|||||||
			immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymax);
 | 
								immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymax);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			if (cumap->cur == 0)
 | 
								if (cumap->cur == 0) {
 | 
				
			||||||
				immUniformColor3ub(240, 100, 100);
 | 
									immUniformColor3ub(240, 100, 100);
 | 
				
			||||||
			else if (cumap->cur == 1)
 | 
								}
 | 
				
			||||||
 | 
								else if (cumap->cur == 1) {
 | 
				
			||||||
				immUniformColor3ub(100, 240, 100);
 | 
									immUniformColor3ub(100, 240, 100);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				immUniformColor3ub(100, 100, 240);
 | 
									immUniformColor3ub(100, 100, 240);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin);
 | 
								immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin);
 | 
				
			||||||
			immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax);
 | 
								immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax);
 | 
				
			||||||
@@ -1791,8 +1831,9 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cuma->table == NULL)
 | 
						if (cuma->table == NULL) {
 | 
				
			||||||
		curvemapping_changed(cumap, false);
 | 
							curvemapping_changed(cumap, false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CurveMapPoint *cmp = cuma->table;
 | 
						CurveMapPoint *cmp = cuma->table;
 | 
				
			||||||
	rctf line_range;
 | 
						rctf line_range;
 | 
				
			||||||
@@ -1937,8 +1978,9 @@ void ui_draw_but_TRACKPREVIEW(ARegion *UNUSED(ar), uiBut *but, const uiWidgetCol
 | 
				
			|||||||
	         ((!scopes->track_preview) ||
 | 
						         ((!scopes->track_preview) ||
 | 
				
			||||||
	          (scopes->track_preview->x != width || scopes->track_preview->y != height)))
 | 
						          (scopes->track_preview->x != width || scopes->track_preview->y != height)))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (scopes->track_preview)
 | 
							if (scopes->track_preview) {
 | 
				
			||||||
			IMB_freeImBuf(scopes->track_preview);
 | 
								IMB_freeImBuf(scopes->track_preview);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ImBuf *tmpibuf = BKE_tracking_sample_pattern(
 | 
							ImBuf *tmpibuf = BKE_tracking_sample_pattern(
 | 
				
			||||||
		        scopes->frame_width, scopes->frame_height,
 | 
							        scopes->frame_width, scopes->frame_height,
 | 
				
			||||||
@@ -1946,13 +1988,16 @@ void ui_draw_but_TRACKPREVIEW(ARegion *UNUSED(ar), uiBut *but, const uiWidgetCol
 | 
				
			|||||||
		        &scopes->undist_marker, true, scopes->use_track_mask,
 | 
							        &scopes->undist_marker, true, scopes->use_track_mask,
 | 
				
			||||||
		        width, height, scopes->track_pos);
 | 
							        width, height, scopes->track_pos);
 | 
				
			||||||
		if (tmpibuf) {
 | 
							if (tmpibuf) {
 | 
				
			||||||
			if (tmpibuf->rect_float)
 | 
								if (tmpibuf->rect_float) {
 | 
				
			||||||
				IMB_rect_from_float(tmpibuf);
 | 
									IMB_rect_from_float(tmpibuf);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (tmpibuf->rect)
 | 
								if (tmpibuf->rect) {
 | 
				
			||||||
				scopes->track_preview = tmpibuf;
 | 
									scopes->track_preview = tmpibuf;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				IMB_freeImBuf(tmpibuf);
 | 
									IMB_freeImBuf(tmpibuf);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2001,10 +2046,12 @@ void ui_draw_but_TRACKPREVIEW(ARegion *UNUSED(ar), uiBut *but, const uiWidgetCol
 | 
				
			|||||||
					float x2 = pos_sel[i + 1] * (1 - axe);
 | 
										float x2 = pos_sel[i + 1] * (1 - axe);
 | 
				
			||||||
					float y2 = pos_sel[i + 1] * axe;
 | 
										float y2 = pos_sel[i + 1] * axe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (i % 2 == 1)
 | 
										if (i % 2 == 1) {
 | 
				
			||||||
						immAttr4fv(col, col_sel);
 | 
											immAttr4fv(col, col_sel);
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						immAttr4fv(col, col_outline);
 | 
											immAttr4fv(col, col_outline);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					immVertex2f(pos, x1, y1);
 | 
										immVertex2f(pos, x1, y1);
 | 
				
			||||||
					immVertex2f(pos, x2, y2);
 | 
										immVertex2f(pos, x2, y2);
 | 
				
			||||||
@@ -2082,16 +2129,18 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, const uiWidgetColors *UNUSE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	GPU_blend(true);
 | 
						GPU_blend(true);
 | 
				
			||||||
	immBegin(GPU_PRIM_TRI_FAN, 16);
 | 
						immBegin(GPU_PRIM_TRI_FAN, 16);
 | 
				
			||||||
	for (int a = 0; a < 16; a++)
 | 
						for (int a = 0; a < 16; a++) {
 | 
				
			||||||
		immVertex2f(pos, x + size * si[a], y + size * co[a]);
 | 
							immVertex2f(pos, x + size * si[a], y + size * co[a]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	immEnd();
 | 
						immEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	immUniformColor4ub(0, 0, 0, 150);
 | 
						immUniformColor4ub(0, 0, 0, 150);
 | 
				
			||||||
	GPU_line_width(1);
 | 
						GPU_line_width(1);
 | 
				
			||||||
	GPU_line_smooth(true);
 | 
						GPU_line_smooth(true);
 | 
				
			||||||
	immBegin(GPU_PRIM_LINE_LOOP, 16);
 | 
						immBegin(GPU_PRIM_LINE_LOOP, 16);
 | 
				
			||||||
	for (int a = 0; a < 16; a++)
 | 
						for (int a = 0; a < 16; a++) {
 | 
				
			||||||
		immVertex2f(pos, x + size * si[a], y + size * co[a]);
 | 
							immVertex2f(pos, x + size * si[a], y + size * co[a]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	immEnd();
 | 
						immEnd();
 | 
				
			||||||
	GPU_line_smooth(false);
 | 
						GPU_line_smooth(false);
 | 
				
			||||||
	GPU_blend(false);
 | 
						GPU_blend(false);
 | 
				
			||||||
@@ -2200,10 +2249,12 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	float rad;
 | 
						float rad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (radius > (BLI_rctf_size_y(rct) - 10.0f) * 0.5f)
 | 
						if (radius > (BLI_rctf_size_y(rct) - 10.0f) * 0.5f) {
 | 
				
			||||||
		rad = (BLI_rctf_size_y(rct) - 10.0f) * 0.5f;
 | 
							rad = (BLI_rctf_size_y(rct) - 10.0f) * 0.5f;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		rad = radius;
 | 
							rad = radius;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int a, i = 12;
 | 
						int a, i = 12;
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,8 +58,9 @@ wmKeyMap *eyedropper_modal_keymap(wmKeyConfig *keyconf)
 | 
				
			|||||||
	wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper Modal Map");
 | 
						wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper Modal Map");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* this function is called for each spacetype, only needs to add map once */
 | 
						/* this function is called for each spacetype, only needs to add map once */
 | 
				
			||||||
	if (keymap && keymap->modal_items)
 | 
						if (keymap && keymap->modal_items) {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	keymap = WM_modalkeymap_add(keyconf, "Eyedropper Modal Map", modal_items);
 | 
						keymap = WM_modalkeymap_add(keyconf, "Eyedropper Modal Map", modal_items);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,8 +85,9 @@ wmKeyMap *eyedropper_colorband_modal_keymap(wmKeyConfig *keyconf)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper ColorRamp PointSampling Map");
 | 
						wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper ColorRamp PointSampling Map");
 | 
				
			||||||
	if (keymap && keymap->modal_items)
 | 
						if (keymap && keymap->modal_items) {
 | 
				
			||||||
		return keymap;
 | 
							return keymap;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	keymap = WM_modalkeymap_add(keyconf, "Eyedropper ColorRamp PointSampling Map", modal_items_point);
 | 
						keymap = WM_modalkeymap_add(keyconf, "Eyedropper ColorRamp PointSampling Map", modal_items_point);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,10 +134,12 @@ static void driverdropper_sample(bContext *C, wmOperator *op, const wmEvent *eve
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* cleanup */
 | 
							/* cleanup */
 | 
				
			||||||
		if (target_path)
 | 
							if (target_path) {
 | 
				
			||||||
			MEM_freeN(target_path);
 | 
								MEM_freeN(target_path);
 | 
				
			||||||
		if (dst_path)
 | 
							}
 | 
				
			||||||
 | 
							if (dst_path) {
 | 
				
			||||||
			MEM_freeN(dst_path);
 | 
								MEM_freeN(dst_path);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -207,8 +209,12 @@ static int driverdropper_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool driverdropper_poll(bContext *C)
 | 
					static bool driverdropper_poll(bContext *C)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!CTX_wm_window(C)) return 0;
 | 
						if (!CTX_wm_window(C)) {
 | 
				
			||||||
	else return 1;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UI_OT_eyedropper_driver(wmOperatorType *ot)
 | 
					void UI_OT_eyedropper_driver(wmOperatorType *ot)
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -206,8 +206,9 @@ static DrawInfo *def_internal_icon(ImBuf *bbuf, int icon_id, int xofs, int yofs,
 | 
				
			|||||||
			iimg->rect = MEM_mallocN(size * size * sizeof(uint), "icon_rect");
 | 
								iimg->rect = MEM_mallocN(size * size * sizeof(uint), "icon_rect");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* Here we store the rect in the icon - same as before */
 | 
								/* Here we store the rect in the icon - same as before */
 | 
				
			||||||
			if (size == bbuf->x && size == bbuf->y && xofs == 0 && yofs == 0)
 | 
								if (size == bbuf->x && size == bbuf->y && xofs == 0 && yofs == 0) {
 | 
				
			||||||
				memcpy(iimg->rect, bbuf->rect, size * size * sizeof(int));
 | 
									memcpy(iimg->rect, bbuf->rect, size * size * sizeof(int));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				/* this code assumes square images */
 | 
									/* this code assumes square images */
 | 
				
			||||||
				imgsize = bbuf->x;
 | 
									imgsize = bbuf->x;
 | 
				
			||||||
@@ -674,15 +675,17 @@ static void init_event_icons(void)
 | 
				
			|||||||
static void icon_verify_datatoc(IconImage *iimg)
 | 
					static void icon_verify_datatoc(IconImage *iimg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* if it has own rect, things are all OK */
 | 
						/* if it has own rect, things are all OK */
 | 
				
			||||||
	if (iimg->rect)
 | 
						if (iimg->rect) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (iimg->datatoc_rect) {
 | 
						if (iimg->datatoc_rect) {
 | 
				
			||||||
		ImBuf *bbuf = IMB_ibImageFromMemory(iimg->datatoc_rect,
 | 
							ImBuf *bbuf = IMB_ibImageFromMemory(iimg->datatoc_rect,
 | 
				
			||||||
		                                    iimg->datatoc_size, IB_rect, NULL, "<matcap icon>");
 | 
							                                    iimg->datatoc_size, IB_rect, NULL, "<matcap icon>");
 | 
				
			||||||
		/* w and h were set on initialize */
 | 
							/* w and h were set on initialize */
 | 
				
			||||||
		if (bbuf->x != iimg->h && bbuf->y != iimg->w)
 | 
							if (bbuf->x != iimg->h && bbuf->y != iimg->w) {
 | 
				
			||||||
			IMB_scaleImBuf(bbuf, iimg->w, iimg->h);
 | 
								IMB_scaleImBuf(bbuf, iimg->w, iimg->h);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		iimg->rect = bbuf->rect;
 | 
							iimg->rect = bbuf->rect;
 | 
				
			||||||
		bbuf->rect = NULL;
 | 
							bbuf->rect = NULL;
 | 
				
			||||||
@@ -718,17 +721,21 @@ static void init_internal_icons(void)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (b16buf == NULL)
 | 
						if (b16buf == NULL) {
 | 
				
			||||||
		b16buf = IMB_ibImageFromMemory((const uchar *)datatoc_blender_icons16_png,
 | 
							b16buf = IMB_ibImageFromMemory((const uchar *)datatoc_blender_icons16_png,
 | 
				
			||||||
		                               datatoc_blender_icons16_png_size, IB_rect, NULL, "<blender icons>");
 | 
							                               datatoc_blender_icons16_png_size, IB_rect, NULL, "<blender icons>");
 | 
				
			||||||
	if (b16buf)
 | 
						}
 | 
				
			||||||
 | 
						if (b16buf) {
 | 
				
			||||||
		IMB_premultiply_alpha(b16buf);
 | 
							IMB_premultiply_alpha(b16buf);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (b32buf == NULL)
 | 
						if (b32buf == NULL) {
 | 
				
			||||||
		b32buf = IMB_ibImageFromMemory((const uchar *)datatoc_blender_icons32_png,
 | 
							b32buf = IMB_ibImageFromMemory((const uchar *)datatoc_blender_icons32_png,
 | 
				
			||||||
		                               datatoc_blender_icons32_png_size, IB_rect, NULL, "<blender icons>");
 | 
							                               datatoc_blender_icons32_png_size, IB_rect, NULL, "<blender icons>");
 | 
				
			||||||
	if (b32buf)
 | 
						}
 | 
				
			||||||
 | 
						if (b32buf) {
 | 
				
			||||||
		IMB_premultiply_alpha(b32buf);
 | 
							IMB_premultiply_alpha(b32buf);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (b16buf && b32buf) {
 | 
						if (b16buf && b32buf) {
 | 
				
			||||||
		/* Free existing texture if any. */
 | 
							/* Free existing texture if any. */
 | 
				
			||||||
@@ -835,8 +842,9 @@ static void init_iconfile_list(struct ListBase *list)
 | 
				
			|||||||
	BLI_listbase_clear(list);
 | 
						BLI_listbase_clear(list);
 | 
				
			||||||
	icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons");
 | 
						icondir = BKE_appdir_folder_id(BLENDER_DATAFILES, "icons");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icondir == NULL)
 | 
						if (icondir == NULL) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	totfile = BLI_filelist_dir_contents(icondir, &dir);
 | 
						totfile = BLI_filelist_dir_contents(icondir, &dir);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -944,8 +952,9 @@ void UI_icons_free_drawinfo(void *drawinfo)
 | 
				
			|||||||
	if (di) {
 | 
						if (di) {
 | 
				
			||||||
		if (di->type == ICON_TYPE_BUFFER) {
 | 
							if (di->type == ICON_TYPE_BUFFER) {
 | 
				
			||||||
			if (di->data.buffer.image) {
 | 
								if (di->data.buffer.image) {
 | 
				
			||||||
				if (di->data.buffer.image->rect)
 | 
									if (di->data.buffer.image->rect) {
 | 
				
			||||||
					MEM_freeN(di->data.buffer.image->rect);
 | 
										MEM_freeN(di->data.buffer.image->rect);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				MEM_freeN(di->data.buffer.image);
 | 
									MEM_freeN(di->data.buffer.image);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1008,8 +1017,9 @@ int UI_icon_get_width(int icon_id)
 | 
				
			|||||||
	icon = BKE_icon_get(icon_id);
 | 
						icon = BKE_icon_get(icon_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon == NULL) {
 | 
						if (icon == NULL) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
								printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1025,8 +1035,9 @@ int UI_icon_get_height(int icon_id)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	Icon *icon = BKE_icon_get(icon_id);
 | 
						Icon *icon = BKE_icon_get(icon_id);
 | 
				
			||||||
	if (icon == NULL) {
 | 
						if (icon == NULL) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
								printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1069,8 +1080,9 @@ static void icon_create_rect(struct PreviewImage *prv_img, enum eIconSizes size)
 | 
				
			|||||||
	uint render_size = UI_preview_render_size(size);
 | 
						uint render_size = UI_preview_render_size(size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prv_img) {
 | 
						if (!prv_img) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("%s, error: requested preview image does not exist", __func__);
 | 
								printf("%s, error: requested preview image does not exist", __func__);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (!prv_img->rect[size]) {
 | 
						else if (!prv_img->rect[size]) {
 | 
				
			||||||
		prv_img->w[size] = render_size;
 | 
							prv_img->w[size] = render_size;
 | 
				
			||||||
@@ -1105,8 +1117,9 @@ static void ui_studiolight_free_function(StudioLight *sl, void *data)
 | 
				
			|||||||
	wmWindowManager *wm = data;
 | 
						wmWindowManager *wm = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Happens if job was canceled or already finished. */
 | 
						/* Happens if job was canceled or already finished. */
 | 
				
			||||||
	if (wm == NULL)
 | 
						if (wm == NULL) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// get icons_id, get icons and kill wm jobs
 | 
						// get icons_id, get icons and kill wm jobs
 | 
				
			||||||
	if (sl->icon_id_radiance) {
 | 
						if (sl->icon_id_radiance) {
 | 
				
			||||||
@@ -1195,8 +1208,9 @@ static void icon_set_image(
 | 
				
			|||||||
        const bContext *C, Scene *scene, ID *id, PreviewImage *prv_img, enum eIconSizes size, const bool use_job)
 | 
					        const bContext *C, Scene *scene, ID *id, PreviewImage *prv_img, enum eIconSizes size, const bool use_job)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!prv_img) {
 | 
						if (!prv_img) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("%s: no preview image for this ID: %s\n", __func__, id->name);
 | 
								printf("%s: no preview image for this ID: %s\n", __func__, id->name);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1321,8 +1335,9 @@ static void icon_draw_rect(float x, float y, int w, int h, float UNUSED(aspect),
 | 
				
			|||||||
	immDrawPixelsTex(&state, draw_x, draw_y, draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect,
 | 
						immDrawPixelsTex(&state, draw_x, draw_y, draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect,
 | 
				
			||||||
	                 1.0f, 1.0f, col);
 | 
						                 1.0f, 1.0f, col);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ima)
 | 
						if (ima) {
 | 
				
			||||||
		IMB_freeImBuf(ima);
 | 
							IMB_freeImBuf(ima);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* High enough to make a difference, low enough so that
 | 
					/* High enough to make a difference, low enough so that
 | 
				
			||||||
@@ -1353,8 +1368,9 @@ void UI_icon_draw_cache_begin(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void icon_draw_cache_flush_ex(void)
 | 
					static void icon_draw_cache_flush_ex(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (g_icon_draw_cache.calls == 0)
 | 
						if (g_icon_draw_cache.calls == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* We need to flush widget base first to ensure correct ordering. */
 | 
						/* We need to flush widget base first to ensure correct ordering. */
 | 
				
			||||||
	UI_widgetbase_draw_cache_flush();
 | 
						UI_widgetbase_draw_cache_flush();
 | 
				
			||||||
@@ -1388,8 +1404,9 @@ void UI_icon_draw_cache_end(void)
 | 
				
			|||||||
	g_icon_draw_cache.enabled = false;
 | 
						g_icon_draw_cache.enabled = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Don't change blend state if it's not needed. */
 | 
						/* Don't change blend state if it's not needed. */
 | 
				
			||||||
	if (g_icon_draw_cache.calls == 0)
 | 
						if (g_icon_draw_cache.calls == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GPU_blend(true);
 | 
						GPU_blend(true);
 | 
				
			||||||
	icon_draw_cache_flush_ex();
 | 
						icon_draw_cache_flush_ex();
 | 
				
			||||||
@@ -1418,8 +1435,12 @@ static void icon_draw_texture_cached(
 | 
				
			|||||||
	call->tex.ymin = iy * icongltex.invh;
 | 
						call->tex.ymin = iy * icongltex.invh;
 | 
				
			||||||
	call->tex.ymax = (iy + ih) * icongltex.invh;
 | 
						call->tex.ymax = (iy + ih) * icongltex.invh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rgb) copy_v4_fl4(call->color, rgb[0], rgb[1], rgb[2], alpha);
 | 
						if (rgb) {
 | 
				
			||||||
	else     copy_v4_fl(call->color, alpha);
 | 
							copy_v4_fl4(call->color, rgb[0], rgb[1], rgb[2], alpha);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							copy_v4_fl(call->color, alpha);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (g_icon_draw_cache.calls == ICON_DRAW_CACHE_SIZE) {
 | 
						if (g_icon_draw_cache.calls == ICON_DRAW_CACHE_SIZE) {
 | 
				
			||||||
		icon_draw_cache_flush_ex();
 | 
							icon_draw_cache_flush_ex();
 | 
				
			||||||
@@ -1453,8 +1474,12 @@ static void icon_draw_texture(
 | 
				
			|||||||
	GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_2D_IMAGE_RECT_COLOR);
 | 
						GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_2D_IMAGE_RECT_COLOR);
 | 
				
			||||||
	GPU_shader_bind(shader);
 | 
						GPU_shader_bind(shader);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (rgb) glUniform4f(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR), rgb[0], rgb[1], rgb[2], alpha);
 | 
						if (rgb) {
 | 
				
			||||||
	else     glUniform4f(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR), alpha, alpha, alpha, alpha);
 | 
							glUniform4f(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR), rgb[0], rgb[1], rgb[2], alpha);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							glUniform4f(GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_COLOR), alpha, alpha, alpha, alpha);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	glUniform1i(GPU_shader_get_uniform_ensure(shader, "image"), 0);
 | 
						glUniform1i(GPU_shader_get_uniform_ensure(shader, "image"), 0);
 | 
				
			||||||
	glUniform4f(GPU_shader_get_uniform_ensure(shader, "rect_icon"), x1, y1, x2, y2);
 | 
						glUniform4f(GPU_shader_get_uniform_ensure(shader, "rect_icon"), x1, y1, x2, y2);
 | 
				
			||||||
@@ -1496,8 +1521,9 @@ static void icon_draw_size(
 | 
				
			|||||||
	alpha *= btheme->tui.icon_alpha;
 | 
						alpha *= btheme->tui.icon_alpha;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon == NULL) {
 | 
						if (icon == NULL) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
								printf("%s: Internal error, no icon for icon ID: %d\n", __func__, icon_id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1583,7 +1609,10 @@ static void icon_draw_size(
 | 
				
			|||||||
#ifndef WITH_HEADLESS
 | 
					#ifndef WITH_HEADLESS
 | 
				
			||||||
		icon_verify_datatoc(iimg);
 | 
							icon_verify_datatoc(iimg);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		if (!iimg->rect) return;  /* something has gone wrong! */
 | 
							if (!iimg->rect) {
 | 
				
			||||||
 | 
								/* something has gone wrong! */
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		icon_draw_rect(x, y, w, h, aspect, iimg->w, iimg->h, iimg->rect, alpha, rgb, desaturate);
 | 
							icon_draw_rect(x, y, w, h, aspect, iimg->w, iimg->h, iimg->rect, alpha, rgb, desaturate);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1592,7 +1621,10 @@ static void icon_draw_size(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (pi) {
 | 
							if (pi) {
 | 
				
			||||||
			/* no create icon on this level in code */
 | 
								/* no create icon on this level in code */
 | 
				
			||||||
			if (!pi->rect[size]) return;  /* something has gone wrong! */
 | 
								if (!pi->rect[size]) {
 | 
				
			||||||
 | 
									/* Something has gone wrong! */
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* Preview images use premultiplied alpha. */
 | 
								/* Preview images use premultiplied alpha. */
 | 
				
			||||||
			GPU_blend_set_func_separate(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 | 
								GPU_blend_set_func_separate(GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
 | 
				
			||||||
@@ -1643,8 +1675,9 @@ static void ui_id_icon_render(const bContext *C, ID *id, bool use_jobs)
 | 
				
			|||||||
	PreviewImage *pi = BKE_previewimg_id_ensure(id);
 | 
						PreviewImage *pi = BKE_previewimg_id_ensure(id);
 | 
				
			||||||
	enum eIconSizes i;
 | 
						enum eIconSizes i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!pi)
 | 
						if (!pi) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < NUM_ICON_SIZES; i++) {
 | 
						for (i = 0; i < NUM_ICON_SIZES; i++) {
 | 
				
			||||||
		/* check if rect needs to be created; changed
 | 
							/* check if rect needs to be created; changed
 | 
				
			||||||
@@ -1809,8 +1842,9 @@ int UI_rnaptr_icon_get(bContext *C, PointerRNA *ptr, int rnaicon, const bool big
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ID *id = NULL;
 | 
						ID *id = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ptr->data)
 | 
						if (!ptr->data) {
 | 
				
			||||||
		return rnaicon;
 | 
							return rnaicon;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* try ID, material, texture or dynapaint slot */
 | 
						/* try ID, material, texture or dynapaint slot */
 | 
				
			||||||
	if (RNA_struct_is_ID(ptr->type)) {
 | 
						if (RNA_struct_is_ID(ptr->type)) {
 | 
				
			||||||
@@ -1825,12 +1859,15 @@ int UI_rnaptr_icon_get(bContext *C, PointerRNA *ptr, int rnaicon, const bool big
 | 
				
			|||||||
	else if (RNA_struct_is_a(ptr->type, &RNA_DynamicPaintSurface)) {
 | 
						else if (RNA_struct_is_a(ptr->type, &RNA_DynamicPaintSurface)) {
 | 
				
			||||||
		DynamicPaintSurface *surface = ptr->data;
 | 
							DynamicPaintSurface *surface = ptr->data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (surface->format == MOD_DPAINT_SURFACE_F_PTEX)
 | 
							if (surface->format == MOD_DPAINT_SURFACE_F_PTEX) {
 | 
				
			||||||
			return ICON_SHADING_TEXTURE;
 | 
								return ICON_SHADING_TEXTURE;
 | 
				
			||||||
		else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX)
 | 
							}
 | 
				
			||||||
 | 
							else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
 | 
				
			||||||
			return ICON_OUTLINER_DATA_MESH;
 | 
								return ICON_OUTLINER_DATA_MESH;
 | 
				
			||||||
		else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
 | 
							}
 | 
				
			||||||
 | 
							else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
 | 
				
			||||||
			return ICON_FILE_IMAGE;
 | 
								return ICON_FILE_IMAGE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (RNA_struct_is_a(ptr->type, &RNA_StudioLight)) {
 | 
						else if (RNA_struct_is_a(ptr->type, &RNA_StudioLight)) {
 | 
				
			||||||
		StudioLight *sl = ptr->data;
 | 
							StudioLight *sl = ptr->data;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,8 +236,9 @@ static int ui_item_fit(int item, int pos, int all, int available, bool is_last,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (all > available) {
 | 
						if (all > available) {
 | 
				
			||||||
		/* contents is bigger than available space */
 | 
							/* contents is bigger than available space */
 | 
				
			||||||
		if (is_last)
 | 
							if (is_last) {
 | 
				
			||||||
			return available - pos;
 | 
								return available - pos;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			float width = *extra_pixel + (item * available) / (float)all;
 | 
								float width = *extra_pixel + (item * available) / (float)all;
 | 
				
			||||||
			*extra_pixel = width - (int)width;
 | 
								*extra_pixel = width - (int)width;
 | 
				
			||||||
@@ -247,8 +248,9 @@ static int ui_item_fit(int item, int pos, int all, int available, bool is_last,
 | 
				
			|||||||
	else {
 | 
						else {
 | 
				
			||||||
		/* contents is smaller or equal to available space */
 | 
							/* contents is smaller or equal to available space */
 | 
				
			||||||
		if (alignment == UI_LAYOUT_ALIGN_EXPAND) {
 | 
							if (alignment == UI_LAYOUT_ALIGN_EXPAND) {
 | 
				
			||||||
			if (is_last)
 | 
								if (is_last) {
 | 
				
			||||||
				return available - pos;
 | 
									return available - pos;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				float width = *extra_pixel + (item * available) / (float)all;
 | 
									float width = *extra_pixel + (item * available) / (float)all;
 | 
				
			||||||
				*extra_pixel = width - (int)width;
 | 
									*extra_pixel = width - (int)width;
 | 
				
			||||||
@@ -286,8 +288,9 @@ static int ui_text_icon_width(uiLayout *layout, const char *name, int icon, bool
 | 
				
			|||||||
	bool variable;
 | 
						bool variable;
 | 
				
			||||||
	const int unit_x = UI_UNIT_X * (layout->scale[0] ? layout->scale[0] : 1.0f);
 | 
						const int unit_x = UI_UNIT_X * (layout->scale[0] ? layout->scale[0] : 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon && !name[0])
 | 
						if (icon && !name[0]) {
 | 
				
			||||||
		return unit_x;  /* icon only */
 | 
							return unit_x;  /* icon only */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	variable = ui_layout_variable_size(layout);
 | 
						variable = ui_layout_variable_size(layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -315,14 +318,22 @@ static void ui_item_size(uiItem *item, int *r_w, int *r_h)
 | 
				
			|||||||
	if (item->type == ITEM_BUTTON) {
 | 
						if (item->type == ITEM_BUTTON) {
 | 
				
			||||||
		uiButtonItem *bitem = (uiButtonItem *)item;
 | 
							uiButtonItem *bitem = (uiButtonItem *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (r_w) *r_w = BLI_rctf_size_x(&bitem->but->rect);
 | 
							if (r_w) {
 | 
				
			||||||
		if (r_h) *r_h = BLI_rctf_size_y(&bitem->but->rect);
 | 
								*r_w = BLI_rctf_size_x(&bitem->but->rect);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (r_h) {
 | 
				
			||||||
 | 
								*r_h = BLI_rctf_size_y(&bitem->but->rect);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		uiLayout *litem = (uiLayout *)item;
 | 
							uiLayout *litem = (uiLayout *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (r_w) *r_w = litem->w;
 | 
							if (r_w) {
 | 
				
			||||||
		if (r_h) *r_h = litem->h;
 | 
								*r_w = litem->w;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (r_h) {
 | 
				
			||||||
 | 
								*r_h = litem->h;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -331,12 +342,20 @@ static void ui_item_offset(uiItem *item, int *r_x, int *r_y)
 | 
				
			|||||||
	if (item->type == ITEM_BUTTON) {
 | 
						if (item->type == ITEM_BUTTON) {
 | 
				
			||||||
		uiButtonItem *bitem = (uiButtonItem *)item;
 | 
							uiButtonItem *bitem = (uiButtonItem *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (r_x) *r_x = bitem->but->rect.xmin;
 | 
							if (r_x) {
 | 
				
			||||||
		if (r_y) *r_y = bitem->but->rect.ymin;
 | 
								*r_x = bitem->but->rect.xmin;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (r_y) {
 | 
				
			||||||
 | 
								*r_y = bitem->but->rect.ymin;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (r_x) *r_x = 0;
 | 
							if (r_x) {
 | 
				
			||||||
		if (r_y) *r_y = 0;
 | 
								*r_x = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (r_y) {
 | 
				
			||||||
 | 
								*r_y = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -375,10 +394,12 @@ static void ui_item_move(uiItem *item, int delta_xmin, int delta_xmax)
 | 
				
			|||||||
	else {
 | 
						else {
 | 
				
			||||||
		uiLayout *litem = (uiLayout *)item;
 | 
							uiLayout *litem = (uiLayout *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (delta_xmin > 0)
 | 
							if (delta_xmin > 0) {
 | 
				
			||||||
			litem->x += delta_xmin;
 | 
								litem->x += delta_xmin;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			litem->w += delta_xmax;
 | 
								litem->w += delta_xmax;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -406,10 +427,12 @@ static uiLayout *ui_item_local_sublayout(uiLayout *test, uiLayout *layout, bool
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	uiLayout *sub;
 | 
						uiLayout *sub;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (uiLayoutGetLocalDir(test) == UI_LAYOUT_HORIZONTAL)
 | 
						if (uiLayoutGetLocalDir(test) == UI_LAYOUT_HORIZONTAL) {
 | 
				
			||||||
		sub = uiLayoutRow(layout, align);
 | 
							sub = uiLayoutRow(layout, align);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		sub = uiLayoutColumn(layout, align);
 | 
							sub = uiLayoutColumn(layout, align);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sub->space = 0;
 | 
						sub->space = 0;
 | 
				
			||||||
	return sub;
 | 
						return sub;
 | 
				
			||||||
@@ -428,14 +451,17 @@ static void ui_layer_but_cb(bContext *C, void *arg_but, void *arg_index)
 | 
				
			|||||||
	if (!shift) {
 | 
						if (!shift) {
 | 
				
			||||||
		RNA_property_boolean_set_index(ptr, prop, index, true);
 | 
							RNA_property_boolean_set_index(ptr, prop, index, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (i = 0; i < len; i++)
 | 
							for (i = 0; i < len; i++) {
 | 
				
			||||||
			if (i != index)
 | 
								if (i != index) {
 | 
				
			||||||
				RNA_property_boolean_set_index(ptr, prop, i, 0);
 | 
									RNA_property_boolean_set_index(ptr, prop, i, 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		RNA_property_update(C, ptr, prop);
 | 
							RNA_property_update(C, ptr, prop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (cbut = but->block->buttons.first; cbut; cbut = cbut->next)
 | 
							for (cbut = but->block->buttons.first; cbut; cbut = cbut->next) {
 | 
				
			||||||
			ui_but_update(cbut);
 | 
								ui_but_update(cbut);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -504,36 +530,42 @@ static void ui_item_array(
 | 
				
			|||||||
				const uint layer_flag = (1u << layer_num);
 | 
									const uint layer_flag = (1u << layer_num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (layer_used & layer_flag) {
 | 
									if (layer_used & layer_flag) {
 | 
				
			||||||
					if (layer_active & layer_flag)
 | 
										if (layer_active & layer_flag) {
 | 
				
			||||||
						icon = ICON_LAYER_ACTIVE;
 | 
											icon = ICON_LAYER_ACTIVE;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						icon = ICON_LAYER_USED;
 | 
											icon = ICON_LAYER_USED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					icon = ICON_BLANK1;
 | 
										icon = ICON_BLANK1;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				but = uiDefAutoButR(block, ptr, prop, layer_num, "", icon, x + butw * a, y + buth, butw, buth);
 | 
									but = uiDefAutoButR(block, ptr, prop, layer_num, "", icon, x + butw * a, y + buth, butw, buth);
 | 
				
			||||||
				if (subtype == PROP_LAYER_MEMBER)
 | 
									if (subtype == PROP_LAYER_MEMBER) {
 | 
				
			||||||
					UI_but_func_set(but, ui_layer_but_cb, but, POINTER_FROM_INT(layer_num));
 | 
										UI_but_func_set(but, ui_layer_but_cb, but, POINTER_FROM_INT(layer_num));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			for (a = 0; a < colbuts; a++) {
 | 
								for (a = 0; a < colbuts; a++) {
 | 
				
			||||||
				const int layer_num  = a + len / 2 + b * colbuts;
 | 
									const int layer_num  = a + len / 2 + b * colbuts;
 | 
				
			||||||
				const uint layer_flag = (1u << layer_num);
 | 
									const uint layer_flag = (1u << layer_num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (layer_used & layer_flag) {
 | 
									if (layer_used & layer_flag) {
 | 
				
			||||||
					if (layer_active & layer_flag)
 | 
										if (layer_active & layer_flag) {
 | 
				
			||||||
						icon = ICON_LAYER_ACTIVE;
 | 
											icon = ICON_LAYER_ACTIVE;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						icon = ICON_LAYER_USED;
 | 
											icon = ICON_LAYER_USED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					icon = ICON_BLANK1;
 | 
										icon = ICON_BLANK1;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				but = uiDefAutoButR(block, ptr, prop, layer_num, "", icon, x + butw * a, y, butw, buth);
 | 
									but = uiDefAutoButR(block, ptr, prop, layer_num, "", icon, x + butw * a, y, butw, buth);
 | 
				
			||||||
				if (subtype == PROP_LAYER_MEMBER)
 | 
									if (subtype == PROP_LAYER_MEMBER) {
 | 
				
			||||||
					UI_but_func_set(but, ui_layer_but_cb, but, POINTER_FROM_INT(layer_num));
 | 
										UI_but_func_set(but, ui_layer_but_cb, but, POINTER_FROM_INT(layer_num));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			UI_block_align_end(block);
 | 
								UI_block_align_end(block);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -547,7 +579,10 @@ static void ui_item_array(
 | 
				
			|||||||
		UI_block_layout_set_current(block, uiLayoutAbsolute(layout, true));
 | 
							UI_block_layout_set_current(block, uiLayoutAbsolute(layout, true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		totdim = RNA_property_array_dimension(ptr, prop, dim_size);
 | 
							totdim = RNA_property_array_dimension(ptr, prop, dim_size);
 | 
				
			||||||
		if (totdim != 2) return;    /* only 2D matrices supported in UI so far */
 | 
							if (totdim != 2) {
 | 
				
			||||||
 | 
								/* Only 2D matrices supported in UI so far. */
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		w /= dim_size[0];
 | 
							w /= dim_size[0];
 | 
				
			||||||
		/* h /= dim_size[1]; */ /* UNUSED */
 | 
							/* h /= dim_size[1]; */ /* UNUSED */
 | 
				
			||||||
@@ -557,8 +592,9 @@ static void ui_item_array(
 | 
				
			|||||||
			row = a / dim_size[0];
 | 
								row = a / dim_size[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			but = uiDefAutoButR(block, ptr, prop, a, "", ICON_NONE, x + w * col, y + (dim_size[1] * UI_UNIT_Y) - (row * UI_UNIT_Y), w, UI_UNIT_Y);
 | 
								but = uiDefAutoButR(block, ptr, prop, a, "", ICON_NONE, x + w * col, y + (dim_size[1] * UI_UNIT_Y) - (row * UI_UNIT_Y), w, UI_UNIT_Y);
 | 
				
			||||||
			if (slider && but->type == UI_BTYPE_NUM)
 | 
								if (slider && but->type == UI_BTYPE_NUM) {
 | 
				
			||||||
				but->type = UI_BTYPE_NUM_SLIDER;
 | 
									but->type = UI_BTYPE_NUM_SLIDER;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (subtype == PROP_DIRECTION && !expand) {
 | 
						else if (subtype == PROP_DIRECTION && !expand) {
 | 
				
			||||||
@@ -608,12 +644,15 @@ static void ui_item_array(
 | 
				
			|||||||
				        min_ii(w, ui_text_icon_width(layout, str_buf, icon, false)) : w);
 | 
									        min_ii(w, ui_text_icon_width(layout, str_buf, icon, false)) : w);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				but = uiDefAutoButR(block, ptr, prop, a, str_buf, icon, 0, 0, width_item, UI_UNIT_Y);
 | 
									but = uiDefAutoButR(block, ptr, prop, a, str_buf, icon, 0, 0, width_item, UI_UNIT_Y);
 | 
				
			||||||
				if (slider && but->type == UI_BTYPE_NUM)
 | 
									if (slider && but->type == UI_BTYPE_NUM) {
 | 
				
			||||||
					but->type = UI_BTYPE_NUM_SLIDER;
 | 
										but->type = UI_BTYPE_NUM_SLIDER;
 | 
				
			||||||
				if (toggle && but->type == UI_BTYPE_CHECKBOX)
 | 
									}
 | 
				
			||||||
 | 
									if (toggle && but->type == UI_BTYPE_CHECKBOX) {
 | 
				
			||||||
					but->type = UI_BTYPE_TOGGLE;
 | 
										but->type = UI_BTYPE_TOGGLE;
 | 
				
			||||||
				if ((a == 0) && (subtype == PROP_AXISANGLE))
 | 
									}
 | 
				
			||||||
 | 
									if ((a == 0) && (subtype == PROP_AXISANGLE)) {
 | 
				
			||||||
					UI_but_unit_type_set(but, PROP_UNIT_ROTATION);
 | 
										UI_but_unit_type_set(but, PROP_UNIT_ROTATION);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (boolarr) {
 | 
								if (boolarr) {
 | 
				
			||||||
@@ -665,10 +704,12 @@ static void ui_item_enum_expand_exec(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	BLI_assert(RNA_property_type(prop) == PROP_ENUM);
 | 
						BLI_assert(RNA_property_type(prop) == PROP_ENUM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (radial)
 | 
						if (radial) {
 | 
				
			||||||
		RNA_property_enum_items_gettexted_all(block->evil_C, ptr, prop, &item_array, NULL, &free);
 | 
							RNA_property_enum_items_gettexted_all(block->evil_C, ptr, prop, &item_array, NULL, &free);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item_array, NULL, &free);
 | 
							RNA_property_enum_items_gettexted(block->evil_C, ptr, prop, &item_array, NULL, &free);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* we dont want nested rows, cols in menus */
 | 
						/* we dont want nested rows, cols in menus */
 | 
				
			||||||
	if (radial) {
 | 
						if (radial) {
 | 
				
			||||||
@@ -721,12 +762,15 @@ static void ui_item_enum_expand_exec(
 | 
				
			|||||||
		value = item->value;
 | 
							value = item->value;
 | 
				
			||||||
		itemw = ui_text_icon_width(block->curlayout, icon_only ? "" : name, icon, 0);
 | 
							itemw = ui_text_icon_width(block->curlayout, icon_only ? "" : name, icon, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (icon && name[0] && !icon_only)
 | 
							if (icon && name[0] && !icon_only) {
 | 
				
			||||||
			but = uiDefIconTextButR_prop(block, but_type, 0, icon, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								but = uiDefIconTextButR_prop(block, but_type, 0, icon, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
		else if (icon)
 | 
							}
 | 
				
			||||||
 | 
							else if (icon) {
 | 
				
			||||||
			but = uiDefIconButR_prop(block, but_type, 0, icon, 0, 0, (is_first) ? itemw : ceilf(itemw - U.pixelsize), h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								but = uiDefIconButR_prop(block, but_type, 0, icon, 0, 0, (is_first) ? itemw : ceilf(itemw - U.pixelsize), h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			but = uiDefButR_prop(block, but_type, 0, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								but = uiDefButR_prop(block, but_type, 0, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
 | 
							if (RNA_property_flag(prop) & PROP_ENUM_FLAG) {
 | 
				
			||||||
			/* If this is set, assert since we're clobbering someone elses callback. */
 | 
								/* If this is set, assert since we're clobbering someone elses callback. */
 | 
				
			||||||
@@ -734,8 +778,9 @@ static void ui_item_enum_expand_exec(
 | 
				
			|||||||
			UI_but_func_set(but, ui_item_enum_expand_handle, but, POINTER_FROM_INT(value));
 | 
								UI_but_func_set(but, ui_item_enum_expand_handle, but, POINTER_FROM_INT(value));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (uiLayoutGetLocalDir(layout) != UI_LAYOUT_HORIZONTAL)
 | 
							if (uiLayoutGetLocalDir(layout) != UI_LAYOUT_HORIZONTAL) {
 | 
				
			||||||
			but->drawflag |= UI_BUT_TEXT_LEFT;
 | 
								but->drawflag |= UI_BUT_TEXT_LEFT;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Allow quick, inaccurate swipe motions to switch tabs
 | 
							/* Allow quick, inaccurate swipe motions to switch tabs
 | 
				
			||||||
		 * (no need to keep cursor over them). */
 | 
							 * (no need to keep cursor over them). */
 | 
				
			||||||
@@ -849,8 +894,9 @@ static uiBut *ui_item_with_label(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			but = uiDefButR_prop(block, UI_BTYPE_HOTKEY_EVENT, 0, buf, x, y, prop_but_width, h, ptr, prop, 0, 0, 0, -1, -1, NULL);
 | 
								but = uiDefButR_prop(block, UI_BTYPE_HOTKEY_EVENT, 0, buf, x, y, prop_but_width, h, ptr, prop, 0, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			UI_but_func_set(but, ui_keymap_but_cb, but, NULL);
 | 
								UI_but_func_set(but, ui_keymap_but_cb, but, NULL);
 | 
				
			||||||
			if (flag & UI_ITEM_R_IMMEDIATE)
 | 
								if (flag & UI_ITEM_R_IMMEDIATE) {
 | 
				
			||||||
				UI_but_flag_enable(but, UI_BUT_IMMEDIATE);
 | 
									UI_but_flag_enable(but, UI_BUT_IMMEDIATE);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
@@ -887,8 +933,9 @@ void UI_context_active_but_prop_get_filebrowser(
 | 
				
			|||||||
	*r_prop = NULL;
 | 
						*r_prop = NULL;
 | 
				
			||||||
	*r_is_undo = false;
 | 
						*r_is_undo = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ar)
 | 
						if (!ar) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next) {
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		for (but = block->buttons.first; but; but = but->next) {
 | 
							for (but = block->buttons.first; but; but = but->next) {
 | 
				
			||||||
@@ -932,8 +979,9 @@ static void ui_item_disabled(uiLayout *layout, const char *name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	UI_block_layout_set_current(block, layout);
 | 
						UI_block_layout_set_current(block, layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = "";
 | 
							name = "";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w = ui_text_icon_width(layout, name, 0, 0);
 | 
						w = ui_text_icon_width(layout, name, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -958,14 +1006,17 @@ static uiBut *uiItemFullO_ptr_ex(
 | 
				
			|||||||
	int w;
 | 
						int w;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name) {
 | 
						if (!name) {
 | 
				
			||||||
		if (ot && ot->srna && (flag & UI_ITEM_R_ICON_ONLY) == 0)
 | 
							if (ot && ot->srna && (flag & UI_ITEM_R_ICON_ONLY) == 0) {
 | 
				
			||||||
			name = RNA_struct_ui_name(ot->srna);
 | 
								name = RNA_struct_ui_name(ot->srna);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			name = "";
 | 
								name = "";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* create button */
 | 
						/* create button */
 | 
				
			||||||
	UI_block_layout_set_current(block, layout);
 | 
						UI_block_layout_set_current(block, layout);
 | 
				
			||||||
@@ -993,8 +1044,9 @@ static uiBut *uiItemFullO_ptr_ex(
 | 
				
			|||||||
	assert(but->optype != NULL);
 | 
						assert(but->optype != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* text alignment for toolbar buttons */
 | 
						/* text alignment for toolbar buttons */
 | 
				
			||||||
	if ((layout->root->type == UI_LAYOUT_TOOLBAR) && !icon)
 | 
						if ((layout->root->type == UI_LAYOUT_TOOLBAR) && !icon) {
 | 
				
			||||||
		but->drawflag |= UI_BUT_TEXT_LEFT;
 | 
							but->drawflag |= UI_BUT_TEXT_LEFT;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (flag & UI_ITEM_R_NO_BG) {
 | 
						if (flag & UI_ITEM_R_NO_BG) {
 | 
				
			||||||
		layout->emboss = prev_emboss;
 | 
							layout->emboss = prev_emboss;
 | 
				
			||||||
@@ -1004,8 +1056,9 @@ static uiBut *uiItemFullO_ptr_ex(
 | 
				
			|||||||
		but->flag |= UI_SELECT_DRAW;
 | 
							but->flag |= UI_SELECT_DRAW;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (layout->redalert)
 | 
						if (layout->redalert) {
 | 
				
			||||||
		UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
							UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* assign properties */
 | 
						/* assign properties */
 | 
				
			||||||
	if (properties || r_opptr) {
 | 
						if (properties || r_opptr) {
 | 
				
			||||||
@@ -1139,8 +1192,9 @@ void uiItemEnumO_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, int
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	RNA_property_enum_set(&ptr, prop, value);
 | 
						RNA_property_enum_set(&ptr, prop, value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
							name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
						uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1205,9 +1259,11 @@ void uiItemsFullEnumO_items(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				/* Check if there are more visible items for the next level. If not, we don't
 | 
									/* Check if there are more visible items for the next level. If not, we don't
 | 
				
			||||||
				 * add a new level and add the remaining item instead of the 'more' button. */
 | 
									 * add a new level and add the remaining item instead of the 'more' button. */
 | 
				
			||||||
				for (tmp = item + 1; tmp->identifier; tmp++)
 | 
									for (tmp = item + 1; tmp->identifier; tmp++) {
 | 
				
			||||||
					if (tmp->name)
 | 
										if (tmp->name) {
 | 
				
			||||||
						break;
 | 
											break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (tmp->identifier) { /* only true if loop above found item and did early-exit */
 | 
									if (tmp->identifier) { /* only true if loop above found item and did early-exit */
 | 
				
			||||||
					ui_pie_menu_level_create(block, ot, propname, properties, item_array, totitem, context, flag);
 | 
										ui_pie_menu_level_create(block, ot, propname, properties, item_array, totitem, context, flag);
 | 
				
			||||||
@@ -1374,8 +1430,9 @@ void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char
 | 
				
			|||||||
	RNA_property_enum_set(&ptr, prop, value);
 | 
						RNA_property_enum_set(&ptr, prop, value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* same as uiItemEnumO */
 | 
						/* same as uiItemEnumO */
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
							name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
						uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1418,8 +1475,9 @@ void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char
 | 
				
			|||||||
	RNA_property_enum_set(&ptr, prop, value);
 | 
						RNA_property_enum_set(&ptr, prop, value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* same as uiItemEnumO */
 | 
						/* same as uiItemEnumO */
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
							name = ui_menu_enumpropname(layout, &ptr, prop, value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
						uiItemFullO_ptr(layout, ot, name, icon, ptr.data, layout->root->opcontext, 0, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1525,8 +1583,9 @@ static void ui_item_rna_size(
 | 
				
			|||||||
	if (!w) {
 | 
						if (!w) {
 | 
				
			||||||
		if (type == PROP_ENUM && icon_only) {
 | 
							if (type == PROP_ENUM && icon_only) {
 | 
				
			||||||
			w = ui_text_icon_width(layout, "", ICON_BLANK1, compact);
 | 
								w = ui_text_icon_width(layout, "", ICON_BLANK1, compact);
 | 
				
			||||||
			if (index != RNA_ENUM_VALUE)
 | 
								if (index != RNA_ENUM_VALUE) {
 | 
				
			||||||
				w += 0.6f * UI_UNIT_X;
 | 
									w += 0.6f * UI_UNIT_X;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			/* not compact for float/int buttons, looks too squashed */
 | 
								/* not compact for float/int buttons, looks too squashed */
 | 
				
			||||||
@@ -1537,24 +1596,32 @@ static void ui_item_rna_size(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* increase height for arrays */
 | 
						/* increase height for arrays */
 | 
				
			||||||
	if (index == RNA_NO_INDEX && len > 0) {
 | 
						if (index == RNA_NO_INDEX && len > 0) {
 | 
				
			||||||
		if (!name[0] && icon == ICON_NONE)
 | 
							if (!name[0] && icon == ICON_NONE) {
 | 
				
			||||||
			h = 0;
 | 
								h = 0;
 | 
				
			||||||
		if (layout->item.flag & UI_ITEM_PROP_SEP)
 | 
							}
 | 
				
			||||||
 | 
							if (layout->item.flag & UI_ITEM_PROP_SEP) {
 | 
				
			||||||
			h = 0;
 | 
								h = 0;
 | 
				
			||||||
		if (ELEM(subtype, PROP_LAYER, PROP_LAYER_MEMBER))
 | 
							}
 | 
				
			||||||
 | 
							if (ELEM(subtype, PROP_LAYER, PROP_LAYER_MEMBER)) {
 | 
				
			||||||
			h += 2 * UI_UNIT_Y;
 | 
								h += 2 * UI_UNIT_Y;
 | 
				
			||||||
		else if (subtype == PROP_MATRIX)
 | 
							}
 | 
				
			||||||
 | 
							else if (subtype == PROP_MATRIX) {
 | 
				
			||||||
			h += ceilf(sqrtf(len)) * UI_UNIT_Y;
 | 
								h += ceilf(sqrtf(len)) * UI_UNIT_Y;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			h += len * UI_UNIT_Y;
 | 
								h += len * UI_UNIT_Y;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (ui_layout_variable_size(layout)) {
 | 
						else if (ui_layout_variable_size(layout)) {
 | 
				
			||||||
		if (type == PROP_BOOLEAN && name[0])
 | 
							if (type == PROP_BOOLEAN && name[0]) {
 | 
				
			||||||
			w += UI_UNIT_X / 5;
 | 
								w += UI_UNIT_X / 5;
 | 
				
			||||||
		else if (type == PROP_ENUM && !icon_only)
 | 
							}
 | 
				
			||||||
 | 
							else if (type == PROP_ENUM && !icon_only) {
 | 
				
			||||||
			w += UI_UNIT_X / 4;
 | 
								w += UI_UNIT_X / 4;
 | 
				
			||||||
		else if (type == PROP_FLOAT || type == PROP_INT)
 | 
							}
 | 
				
			||||||
 | 
							else if (type == PROP_FLOAT || type == PROP_INT) {
 | 
				
			||||||
			w += UI_UNIT_X * 3;
 | 
								w += UI_UNIT_X * 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*r_w = w;
 | 
						*r_w = w;
 | 
				
			||||||
@@ -1611,8 +1678,9 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon == ICON_NONE)
 | 
						if (icon == ICON_NONE) {
 | 
				
			||||||
		icon = RNA_property_ui_icon(prop);
 | 
							icon = RNA_property_ui_icon(prop);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (flag & UI_ITEM_R_ICON_ONLY) {
 | 
						if (flag & UI_ITEM_R_ICON_ONLY) {
 | 
				
			||||||
		/* pass */
 | 
							/* pass */
 | 
				
			||||||
@@ -1802,12 +1870,15 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	/* enum item */
 | 
						/* enum item */
 | 
				
			||||||
	else if (type == PROP_ENUM && index == RNA_ENUM_VALUE) {
 | 
						else if (type == PROP_ENUM && index == RNA_ENUM_VALUE) {
 | 
				
			||||||
		if (icon && name[0] && !icon_only)
 | 
							if (icon && name[0] && !icon_only) {
 | 
				
			||||||
			uiDefIconTextButR_prop(block, UI_BTYPE_ROW, 0, icon, name, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								uiDefIconTextButR_prop(block, UI_BTYPE_ROW, 0, icon, name, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
		else if (icon)
 | 
							}
 | 
				
			||||||
 | 
							else if (icon) {
 | 
				
			||||||
			uiDefIconButR_prop(block, UI_BTYPE_ROW, 0, icon, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								uiDefIconButR_prop(block, UI_BTYPE_ROW, 0, icon, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			uiDefButR_prop(block, UI_BTYPE_ROW, 0, name, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
								uiDefButR_prop(block, UI_BTYPE_ROW, 0, name, 0, 0, w, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* expanded enum */
 | 
						/* expanded enum */
 | 
				
			||||||
	else if (type == PROP_ENUM && expand) {
 | 
						else if (type == PROP_ENUM && expand) {
 | 
				
			||||||
@@ -1818,27 +1889,33 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
 | 
				
			|||||||
		but = ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, flag);
 | 
							but = ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, flag);
 | 
				
			||||||
		ui_but_add_search(but, ptr, prop, NULL, NULL);
 | 
							ui_but_add_search(but, ptr, prop, NULL, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (layout->redalert)
 | 
							if (layout->redalert) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
								UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (layout->activate_init)
 | 
							if (layout->activate_init) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
 | 
								UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* single button */
 | 
						/* single button */
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		but = uiDefAutoButR(block, ptr, prop, index, name, icon, 0, 0, w, h);
 | 
							but = uiDefAutoButR(block, ptr, prop, index, name, icon, 0, 0, w, h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (slider && but->type == UI_BTYPE_NUM)
 | 
							if (slider && but->type == UI_BTYPE_NUM) {
 | 
				
			||||||
			but->type = UI_BTYPE_NUM_SLIDER;
 | 
								but->type = UI_BTYPE_NUM_SLIDER;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (toggle && but->type == UI_BTYPE_CHECKBOX)
 | 
							if (toggle && but->type == UI_BTYPE_CHECKBOX) {
 | 
				
			||||||
			but->type = UI_BTYPE_TOGGLE;
 | 
								but->type = UI_BTYPE_TOGGLE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (layout->redalert)
 | 
							if (layout->redalert) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
								UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (layout->activate_init)
 | 
							if (layout->activate_init) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
 | 
								UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (use_prop_sep && (use_prop_sep_split_label == false)) {
 | 
							if (use_prop_sep && (use_prop_sep_split_label == false)) {
 | 
				
			||||||
			/* When the button uses it's own text right align it. */
 | 
								/* When the button uses it's own text right align it. */
 | 
				
			||||||
@@ -2040,8 +2117,9 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					ui_but_tip_from_enum_item(bt, &item[i]);
 | 
										ui_but_tip_from_enum_item(bt, &item[i]);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else {
 | 
				
			||||||
					uiItemS(column);
 | 
										uiItemS(column);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2160,15 +2238,18 @@ void uiItemPointerR_prop(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* get icon & name */
 | 
						/* get icon & name */
 | 
				
			||||||
	if (icon == ICON_NONE) {
 | 
						if (icon == ICON_NONE) {
 | 
				
			||||||
		if (type == PROP_POINTER)
 | 
							if (type == PROP_POINTER) {
 | 
				
			||||||
			icontype = RNA_property_pointer_type(ptr, prop);
 | 
								icontype = RNA_property_pointer_type(ptr, prop);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			icontype = RNA_property_pointer_type(searchptr, searchprop);
 | 
								icontype = RNA_property_pointer_type(searchptr, searchprop);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		icon = RNA_struct_ui_icon(icontype);
 | 
							icon = RNA_struct_ui_icon(icontype);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = RNA_property_ui_name(prop);
 | 
							name = RNA_property_ui_name(prop);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (use_prop_sep == false) {
 | 
						if (use_prop_sep == false) {
 | 
				
			||||||
		name = ui_item_name_add_colon(name, namestr);
 | 
							name = ui_item_name_add_colon(name, namestr);
 | 
				
			||||||
@@ -2239,10 +2320,12 @@ static uiBut *ui_item_menu(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	UI_block_layout_set_current(block, layout);
 | 
						UI_block_layout_set_current(block, layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = "";
 | 
							name = "";
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						}
 | 
				
			||||||
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w = ui_text_icon_width(layout, name, icon, 1);
 | 
						w = ui_text_icon_width(layout, name, icon, 1);
 | 
				
			||||||
	h = UI_UNIT_Y;
 | 
						h = UI_UNIT_Y;
 | 
				
			||||||
@@ -2304,8 +2387,9 @@ void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon)
 | 
				
			|||||||
		name = CTX_IFACE_(mt->translation_context, mt->label);
 | 
							name = CTX_IFACE_(mt->translation_context, mt->label);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_item_menu(
 | 
						ui_item_menu(
 | 
				
			||||||
	        layout, name, icon, ui_item_menutype_func, mt, NULL,
 | 
						        layout, name, icon, ui_item_menutype_func, mt, NULL,
 | 
				
			||||||
@@ -2404,10 +2488,12 @@ static uiBut *uiItemL_(uiLayout *layout, const char *name, int icon)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	UI_block_layout_set_current(block, layout);
 | 
						UI_block_layout_set_current(block, layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = "";
 | 
							name = "";
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						}
 | 
				
			||||||
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w = ui_text_icon_width(layout, name, icon, 0);
 | 
						w = ui_text_icon_width(layout, name, icon, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2450,9 +2536,11 @@ void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, const char *name, int icon)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	uiBut *but = uiItemL_(layout, name, icon);
 | 
						uiBut *but = uiItemL_(layout, name, icon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ptr && ptr->type)
 | 
						if (ptr && ptr->type) {
 | 
				
			||||||
		if (RNA_struct_is_ID(ptr->type))
 | 
							if (RNA_struct_is_ID(ptr->type)) {
 | 
				
			||||||
			UI_but_drag_set_id(but, ptr->id.data);
 | 
								UI_but_drag_set_id(but, ptr->id.data);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2466,19 +2554,24 @@ void uiItemV(uiLayout *layout, const char *name, int icon, int argval)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	UI_block_layout_set_current(block, layout);
 | 
						UI_block_layout_set_current(block, layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = "";
 | 
							name = "";
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						}
 | 
				
			||||||
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w = ui_text_icon_width(layout, name, icon, 0);
 | 
						w = ui_text_icon_width(layout, name, icon, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon && name[0])
 | 
						if (icon && name[0]) {
 | 
				
			||||||
		uiDefIconTextButI(block, UI_BTYPE_BUT, argval, icon, name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
							uiDefIconTextButI(block, UI_BTYPE_BUT, argval, icon, name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
				
			||||||
	else if (icon)
 | 
						}
 | 
				
			||||||
 | 
						else if (icon) {
 | 
				
			||||||
		uiDefIconButI(block, UI_BTYPE_BUT, argval, icon, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
							uiDefIconButI(block, UI_BTYPE_BUT, argval, icon, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		uiDefButI(block, UI_BTYPE_BUT, argval, name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
							uiDefButI(block, UI_BTYPE_BUT, argval, name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, -1, "");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* separator item */
 | 
					/* separator item */
 | 
				
			||||||
@@ -2522,8 +2615,9 @@ void uiItemSpacer(uiLayout *layout)
 | 
				
			|||||||
/* level items */
 | 
					/* level items */
 | 
				
			||||||
void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg)
 | 
					void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!func)
 | 
						if (!func) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_item_menu(layout, name, icon, func, arg, NULL, "", false);
 | 
						ui_item_menu(layout, name, icon, func, arg, NULL, "", false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2533,8 +2627,9 @@ void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN)
 | 
					void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!func)
 | 
						if (!func) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Second 'argN' only ensures it gets freed. */
 | 
						/* Second 'argN' only ensures it gets freed. */
 | 
				
			||||||
	ui_item_menu(layout, name, icon, func, argN, argN, "", false);
 | 
						ui_item_menu(layout, name, icon, func, argN, argN, "", false);
 | 
				
			||||||
@@ -2576,8 +2671,9 @@ void uiItemMenuEnumO_ptr(
 | 
				
			|||||||
		name = RNA_struct_ui_name(ot->srna);
 | 
							name = RNA_struct_ui_name(ot->srna);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
 | 
						lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
 | 
				
			||||||
	BLI_strncpy(lvl->opname, ot->idname, sizeof(lvl->opname));
 | 
						BLI_strncpy(lvl->opname, ot->idname, sizeof(lvl->opname));
 | 
				
			||||||
@@ -2632,10 +2728,12 @@ void uiItemMenuEnumR_prop(uiLayout *layout, struct PointerRNA *ptr, PropertyRNA
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	MenuItemLevel *lvl;
 | 
						MenuItemLevel *lvl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!name)
 | 
						if (!name) {
 | 
				
			||||||
		name = RNA_property_ui_name(prop);
 | 
							name = RNA_property_ui_name(prop);
 | 
				
			||||||
	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 | 
						}
 | 
				
			||||||
 | 
						if (layout->root->type == UI_LAYOUT_MENU && !icon) {
 | 
				
			||||||
		icon = ICON_BLANK1;
 | 
							icon = ICON_BLANK1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
 | 
						lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
 | 
				
			||||||
	lvl->rnapoin = *ptr;
 | 
						lvl->rnapoin = *ptr;
 | 
				
			||||||
@@ -2687,8 +2785,9 @@ static void ui_litem_estimate_row(uiLayout *litem)
 | 
				
			|||||||
		litem->w += itemw;
 | 
							litem->w += itemw;
 | 
				
			||||||
		litem->h = MAX2(itemh, litem->h);
 | 
							litem->h = MAX2(itemh, litem->h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (item->next)
 | 
							if (item->next) {
 | 
				
			||||||
			litem->w += litem->space;
 | 
								litem->w += litem->space;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (min_size_flag) {
 | 
						if (min_size_flag) {
 | 
				
			||||||
@@ -2720,11 +2819,13 @@ static void ui_litem_layout_row(uiLayout *litem)
 | 
				
			|||||||
		tot++;
 | 
							tot++;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (totw == 0)
 | 
						if (totw == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (w != 0)
 | 
						if (w != 0) {
 | 
				
			||||||
		w -= (tot - 1) * litem->space;
 | 
							w -= (tot - 1) * litem->space;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	fixedw = 0;
 | 
						fixedw = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* keep clamping items to fixed minimum size until all are done */
 | 
						/* keep clamping items to fixed minimum size until all are done */
 | 
				
			||||||
@@ -2736,16 +2837,19 @@ static void ui_litem_layout_row(uiLayout *litem)
 | 
				
			|||||||
		extra_pixel = 0.0f;
 | 
							extra_pixel = 0.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (item = litem->items.first; item; item = item->next) {
 | 
							for (item = litem->items.first; item; item = item->next) {
 | 
				
			||||||
			if (item->flag & UI_ITEM_FIXED)
 | 
								if (item->flag & UI_ITEM_FIXED) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ui_item_size(item, &itemw, &itemh);
 | 
								ui_item_size(item, &itemw, &itemh);
 | 
				
			||||||
			minw = ui_litem_min_width(itemw);
 | 
								minw = ui_litem_min_width(itemw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (w - lastw > 0)
 | 
								if (w - lastw > 0) {
 | 
				
			||||||
				neww = ui_item_fit(itemw, x, totw, w - lastw, !item->next, litem->alignment, &extra_pixel);
 | 
									neww = ui_item_fit(itemw, x, totw, w - lastw, !item->next, litem->alignment, &extra_pixel);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				neww = 0;  /* no space left, all will need clamping to minimum size */
 | 
									neww = 0;  /* no space left, all will need clamping to minimum size */
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			x += neww;
 | 
								x += neww;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2807,20 +2911,23 @@ static void ui_litem_layout_row(uiLayout *litem)
 | 
				
			|||||||
		/* align right/center */
 | 
							/* align right/center */
 | 
				
			||||||
		offset = 0;
 | 
							offset = 0;
 | 
				
			||||||
		if (litem->alignment == UI_LAYOUT_ALIGN_RIGHT) {
 | 
							if (litem->alignment == UI_LAYOUT_ALIGN_RIGHT) {
 | 
				
			||||||
			if (freew + fixedw > 0 && freew + fixedw < w)
 | 
								if (freew + fixedw > 0 && freew + fixedw < w) {
 | 
				
			||||||
				offset = w - (fixedw + freew);
 | 
									offset = w - (fixedw + freew);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (litem->alignment == UI_LAYOUT_ALIGN_CENTER) {
 | 
							else if (litem->alignment == UI_LAYOUT_ALIGN_CENTER) {
 | 
				
			||||||
			if (freew + fixedw > 0 && freew + fixedw < w)
 | 
								if (freew + fixedw > 0 && freew + fixedw < w) {
 | 
				
			||||||
				offset = (w - (fixedw + freew)) / 2;
 | 
									offset = (w - (fixedw + freew)) / 2;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* position item */
 | 
							/* position item */
 | 
				
			||||||
		ui_item_position(item, x + offset, y - itemh, itemw, itemh);
 | 
							ui_item_position(item, x + offset, y - itemh, itemw, itemh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		x += itemw;
 | 
							x += itemw;
 | 
				
			||||||
		if (item->next)
 | 
							if (item->next) {
 | 
				
			||||||
			x += litem->space;
 | 
								x += litem->space;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* add extra pixel */
 | 
						/* add extra pixel */
 | 
				
			||||||
@@ -2830,8 +2937,9 @@ static void ui_litem_layout_row(uiLayout *litem)
 | 
				
			|||||||
	    last_free_item && last_item && last_item->flag & UI_ITEM_FIXED)
 | 
						    last_free_item && last_item && last_item->flag & UI_ITEM_FIXED)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ui_item_move(last_free_item, 0, extra_pixel);
 | 
							ui_item_move(last_free_item, 0, extra_pixel);
 | 
				
			||||||
		for (item = last_free_item->next; item; item = item->next)
 | 
							for (item = last_free_item->next; item; item = item->next) {
 | 
				
			||||||
			ui_item_move(item, extra_pixel, extra_pixel);
 | 
								ui_item_move(item, extra_pixel, extra_pixel);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	litem->w = x - litem->x;
 | 
						litem->w = x - litem->x;
 | 
				
			||||||
@@ -2858,8 +2966,9 @@ static void ui_litem_estimate_column(uiLayout *litem, bool is_box)
 | 
				
			|||||||
		litem->w = MAX2(litem->w, itemw);
 | 
							litem->w = MAX2(litem->w, itemw);
 | 
				
			||||||
		litem->h += itemh;
 | 
							litem->h += itemh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (item->next && (!is_box || item != litem->items.first))
 | 
							if (item->next && (!is_box || item != litem->items.first)) {
 | 
				
			||||||
			litem->h += litem->space;
 | 
								litem->h += litem->space;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (min_size_flag) {
 | 
						if (min_size_flag) {
 | 
				
			||||||
@@ -2881,8 +2990,9 @@ static void ui_litem_layout_column(uiLayout *litem, bool is_box)
 | 
				
			|||||||
		y -= itemh;
 | 
							y -= itemh;
 | 
				
			||||||
		ui_item_position(item, x, y, litem->w, itemh);
 | 
							ui_item_position(item, x, y, litem->w, itemh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (item->next && (!is_box || item != litem->items.first))
 | 
							if (item->next && (!is_box || item != litem->items.first)) {
 | 
				
			||||||
			y -= litem->space;
 | 
								y -= litem->space;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (is_box) {
 | 
							if (is_box) {
 | 
				
			||||||
			item->flag |= UI_ITEM_BOX_ITEM;
 | 
								item->flag |= UI_ITEM_BOX_ITEM;
 | 
				
			||||||
@@ -2914,8 +3024,9 @@ static RadialDirection ui_get_radialbut_vec(float vec[2], short itemnum)
 | 
				
			|||||||
static bool ui_item_is_radial_displayable(uiItem *item)
 | 
					static bool ui_item_is_radial_displayable(uiItem *item)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((item->type == ITEM_BUTTON) && (((uiButtonItem *)item)->but->type == UI_BTYPE_LABEL))
 | 
						if ((item->type == ITEM_BUTTON) && (((uiButtonItem *)item)->but->type == UI_BTYPE_LABEL)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2923,8 +3034,9 @@ static bool ui_item_is_radial_displayable(uiItem *item)
 | 
				
			|||||||
static bool ui_item_is_radial_drawable(uiButtonItem *bitem)
 | 
					static bool ui_item_is_radial_drawable(uiButtonItem *bitem)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ELEM(bitem->but->type, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_SEPR_SPACER))
 | 
						if (ELEM(bitem->but->type, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_SEPR_SPACER)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2949,11 +3061,13 @@ static void ui_litem_layout_radial(uiLayout *litem)
 | 
				
			|||||||
	int minx = x, miny = y, maxx = x, maxy = y;
 | 
						int minx = x, miny = y, maxx = x, maxy = y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* first count total items */
 | 
						/* first count total items */
 | 
				
			||||||
	for (item = litem->items.first; item; item = item->next)
 | 
						for (item = litem->items.first; item; item = item->next) {
 | 
				
			||||||
		totitems++;
 | 
							totitems++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (totitems < 5)
 | 
						if (totitems < 5) {
 | 
				
			||||||
		litem->root->block->pie_data.flags |= UI_PIE_DEGREES_RANGE_LARGE;
 | 
							litem->root->block->pie_data.flags |= UI_PIE_DEGREES_RANGE_LARGE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (item = litem->items.first; item; item = item->next) {
 | 
						for (item = litem->items.first; item; item = item->next) {
 | 
				
			||||||
		/* not all button types are drawn in a radial menu, do filtering here */
 | 
							/* not all button types are drawn in a radial menu, do filtering here */
 | 
				
			||||||
@@ -3024,12 +3138,15 @@ static void ui_litem_layout_root_radial(uiLayout *litem)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void ui_litem_layout_root(uiLayout *litem)
 | 
					static void ui_litem_layout_root(uiLayout *litem)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (litem->root->type == UI_LAYOUT_HEADER)
 | 
						if (litem->root->type == UI_LAYOUT_HEADER) {
 | 
				
			||||||
		ui_litem_layout_row(litem);
 | 
							ui_litem_layout_row(litem);
 | 
				
			||||||
	else if (litem->root->type == UI_LAYOUT_PIEMENU)
 | 
						}
 | 
				
			||||||
 | 
						else if (litem->root->type == UI_LAYOUT_PIEMENU) {
 | 
				
			||||||
		ui_litem_layout_root_radial(litem);
 | 
							ui_litem_layout_root_radial(litem);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		ui_litem_layout_column(litem, false);
 | 
							ui_litem_layout_column(litem, false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* box layout */
 | 
					/* box layout */
 | 
				
			||||||
@@ -3055,16 +3172,24 @@ static void ui_litem_layout_box(uiLayout *litem)
 | 
				
			|||||||
	litem->x += style->boxspace;
 | 
						litem->x += style->boxspace;
 | 
				
			||||||
	litem->y -= style->boxspace;
 | 
						litem->y -= style->boxspace;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (w != 0) litem->w -= 2 * style->boxspace;
 | 
						if (w != 0) {
 | 
				
			||||||
	if (h != 0) litem->h -= 2 * style->boxspace;
 | 
							litem->w -= 2 * style->boxspace;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (h != 0) {
 | 
				
			||||||
 | 
							litem->h -= 2 * style->boxspace;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_litem_layout_column(litem, true);
 | 
						ui_litem_layout_column(litem, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	litem->x -= style->boxspace;
 | 
						litem->x -= style->boxspace;
 | 
				
			||||||
	litem->y -= style->boxspace;
 | 
						litem->y -= style->boxspace;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (w != 0) litem->w += 2 * style->boxspace;
 | 
						if (w != 0) {
 | 
				
			||||||
	if (h != 0) litem->h += 2 * style->boxspace;
 | 
							litem->w += 2 * style->boxspace;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (h != 0) {
 | 
				
			||||||
 | 
							litem->h += 2 * style->boxspace;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* roundbox around the sublayout */
 | 
						/* roundbox around the sublayout */
 | 
				
			||||||
	but = box->roundbox;
 | 
						but = box->roundbox;
 | 
				
			||||||
@@ -3607,10 +3732,12 @@ static void ui_litem_layout_absolute(uiLayout *litem)
 | 
				
			|||||||
	totw -= minx;
 | 
						totw -= minx;
 | 
				
			||||||
	toth -= miny;
 | 
						toth -= miny;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (litem->w && totw > 0)
 | 
						if (litem->w && totw > 0) {
 | 
				
			||||||
		scalex = (float)litem->w / (float)totw;
 | 
							scalex = (float)litem->w / (float)totw;
 | 
				
			||||||
	if (litem->h && toth > 0)
 | 
						}
 | 
				
			||||||
 | 
						if (litem->h && toth > 0) {
 | 
				
			||||||
		scaley = (float)litem->h / (float)toth;
 | 
							scaley = (float)litem->h / (float)toth;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	x = litem->x;
 | 
						x = litem->x;
 | 
				
			||||||
	y = litem->y - scaley * toth;
 | 
						y = litem->y - scaley * toth;
 | 
				
			||||||
@@ -3655,8 +3782,9 @@ static void ui_litem_layout_split(uiLayout *litem)
 | 
				
			|||||||
	const int tot = BLI_listbase_count(&litem->items);
 | 
						const int tot = BLI_listbase_count(&litem->items);
 | 
				
			||||||
	int itemh, x, y, w, colw = 0;
 | 
						int itemh, x, y, w, colw = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (tot == 0)
 | 
						if (tot == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	x = litem->x;
 | 
						x = litem->x;
 | 
				
			||||||
	y = litem->y;
 | 
						y = litem->y;
 | 
				
			||||||
@@ -3837,8 +3965,9 @@ uiLayout *uiLayoutRadial(uiLayout *layout)
 | 
				
			|||||||
	uiItem *item;
 | 
						uiItem *item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* radial layouts are only valid for radial menus */
 | 
						/* radial layouts are only valid for radial menus */
 | 
				
			||||||
	if (layout->root->type != UI_LAYOUT_PIEMENU)
 | 
						if (layout->root->type != UI_LAYOUT_PIEMENU) {
 | 
				
			||||||
		return ui_item_local_sublayout(layout, layout, 0);
 | 
							return ui_item_local_sublayout(layout, layout, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* only one radial wheel per root layout is allowed, so check and return that, if it exists */
 | 
						/* only one radial wheel per root layout is allowed, so check and return that, if it exists */
 | 
				
			||||||
	for (item = layout->root->layout->items.first; item; item = item->next) {
 | 
						for (item = layout->root->layout->items.first; item; item = item->next) {
 | 
				
			||||||
@@ -4135,8 +4264,9 @@ static void ui_item_estimate(uiItem *item)
 | 
				
			|||||||
	if (item->type != ITEM_BUTTON) {
 | 
						if (item->type != ITEM_BUTTON) {
 | 
				
			||||||
		uiLayout *litem = (uiLayout *)item;
 | 
							uiLayout *litem = (uiLayout *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (subitem = litem->items.first; subitem; subitem = subitem->next)
 | 
							for (subitem = litem->items.first; subitem; subitem = subitem->next) {
 | 
				
			||||||
			ui_item_estimate(subitem);
 | 
								ui_item_estimate(subitem);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (BLI_listbase_is_empty(&litem->items)) {
 | 
							if (BLI_listbase_is_empty(&litem->items)) {
 | 
				
			||||||
			litem->w = 0;
 | 
								litem->w = 0;
 | 
				
			||||||
@@ -4144,8 +4274,9 @@ static void ui_item_estimate(uiItem *item)
 | 
				
			|||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (litem->scale[0] != 0.0f || litem->scale[1] != 0.0f)
 | 
							if (litem->scale[0] != 0.0f || litem->scale[1] != 0.0f) {
 | 
				
			||||||
			ui_item_scale(litem, litem->scale);
 | 
								ui_item_scale(litem, litem->scale);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (litem->item.type) {
 | 
							switch (litem->item.type) {
 | 
				
			||||||
			case ITEM_LAYOUT_COLUMN:
 | 
								case ITEM_LAYOUT_COLUMN:
 | 
				
			||||||
@@ -4247,15 +4378,19 @@ static void ui_item_layout(uiItem *item)
 | 
				
			|||||||
	if (item->type != ITEM_BUTTON) {
 | 
						if (item->type != ITEM_BUTTON) {
 | 
				
			||||||
		uiLayout *litem = (uiLayout *)item;
 | 
							uiLayout *litem = (uiLayout *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (BLI_listbase_is_empty(&litem->items))
 | 
							if (BLI_listbase_is_empty(&litem->items)) {
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (litem->align)
 | 
							if (litem->align) {
 | 
				
			||||||
			ui_item_align(litem, ++litem->root->block->alignnr);
 | 
								ui_item_align(litem, ++litem->root->block->alignnr);
 | 
				
			||||||
		if (!litem->active)
 | 
							}
 | 
				
			||||||
 | 
							if (!litem->active) {
 | 
				
			||||||
			ui_item_flag(litem, UI_BUT_INACTIVE);
 | 
								ui_item_flag(litem, UI_BUT_INACTIVE);
 | 
				
			||||||
		if (!litem->enabled)
 | 
							}
 | 
				
			||||||
 | 
							if (!litem->enabled) {
 | 
				
			||||||
			ui_item_flag(litem, UI_BUT_DISABLED);
 | 
								ui_item_flag(litem, UI_BUT_DISABLED);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (litem->item.type) {
 | 
							switch (litem->item.type) {
 | 
				
			||||||
			case ITEM_LAYOUT_COLUMN:
 | 
								case ITEM_LAYOUT_COLUMN:
 | 
				
			||||||
@@ -4309,14 +4444,19 @@ static void ui_item_layout(uiItem *item)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void ui_layout_end(uiBlock *block, uiLayout *layout, int *x, int *y)
 | 
					static void ui_layout_end(uiBlock *block, uiLayout *layout, int *x, int *y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (layout->root->handlefunc)
 | 
						if (layout->root->handlefunc) {
 | 
				
			||||||
		UI_block_func_handle_set(block, layout->root->handlefunc, layout->root->argv);
 | 
							UI_block_func_handle_set(block, layout->root->handlefunc, layout->root->argv);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_item_estimate(&layout->item);
 | 
						ui_item_estimate(&layout->item);
 | 
				
			||||||
	ui_item_layout(&layout->item);
 | 
						ui_item_layout(&layout->item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (x) *x = layout->x;
 | 
						if (x) {
 | 
				
			||||||
	if (y) *y = layout->y;
 | 
							*x = layout->x;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (y) {
 | 
				
			||||||
 | 
							*y = layout->y;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ui_layout_free(uiLayout *layout)
 | 
					static void ui_layout_free(uiLayout *layout)
 | 
				
			||||||
@@ -4326,10 +4466,12 @@ static void ui_layout_free(uiLayout *layout)
 | 
				
			|||||||
	for (item = layout->items.first; item; item = next) {
 | 
						for (item = layout->items.first; item; item = next) {
 | 
				
			||||||
		next = item->next;
 | 
							next = item->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (item->type == ITEM_BUTTON)
 | 
							if (item->type == ITEM_BUTTON) {
 | 
				
			||||||
			MEM_freeN(item);
 | 
								MEM_freeN(item);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			ui_layout_free((uiLayout *)item);
 | 
								ui_layout_free((uiLayout *)item);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MEM_freeN(layout);
 | 
						MEM_freeN(layout);
 | 
				
			||||||
@@ -4375,8 +4517,9 @@ uiLayout *UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int s
 | 
				
			|||||||
	layout->context = NULL;
 | 
						layout->context = NULL;
 | 
				
			||||||
	layout->emboss = UI_EMBOSS_UNDEFINED;
 | 
						layout->emboss = UI_EMBOSS_UNDEFINED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (type == UI_LAYOUT_MENU || type == UI_LAYOUT_PIEMENU)
 | 
						if (type == UI_LAYOUT_MENU || type == UI_LAYOUT_PIEMENU) {
 | 
				
			||||||
		layout->space = 0;
 | 
							layout->space = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dir == UI_LAYOUT_HORIZONTAL) {
 | 
						if (dir == UI_LAYOUT_HORIZONTAL) {
 | 
				
			||||||
		layout->h = size;
 | 
							layout->h = size;
 | 
				
			||||||
@@ -4462,8 +4605,12 @@ void UI_block_layout_resolve(uiBlock *block, int *x, int *y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	BLI_assert(block->active);
 | 
						BLI_assert(block->active);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (x) *x = 0;
 | 
						if (x) {
 | 
				
			||||||
	if (y) *y = 0;
 | 
							*x = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (y) {
 | 
				
			||||||
 | 
							*y = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	block->curlayout = NULL;
 | 
						block->curlayout = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -257,8 +257,9 @@ static int reset_default_button_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* if there is a valid property that is editable... */
 | 
						/* if there is a valid property that is editable... */
 | 
				
			||||||
	if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
 | 
						if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
 | 
				
			||||||
		if (RNA_property_reset(&ptr, prop, (all) ? -1 : index))
 | 
							if (RNA_property_reset(&ptr, prop, (all) ? -1 : index)) {
 | 
				
			||||||
			return operator_button_property_finish(C, &ptr, prop);
 | 
								return operator_button_property_finish(C, &ptr, prop);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return OPERATOR_CANCELLED;
 | 
						return OPERATOR_CANCELLED;
 | 
				
			||||||
@@ -316,8 +317,9 @@ static int assign_default_button_exec(bContext *C, wmOperator *UNUSED(op))
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* if there is a valid property that is editable... */
 | 
						/* if there is a valid property that is editable... */
 | 
				
			||||||
	if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
 | 
						if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
 | 
				
			||||||
		if (RNA_property_assign_default(&ptr, prop))
 | 
							if (RNA_property_assign_default(&ptr, prop)) {
 | 
				
			||||||
			return operator_button_property_finish(C, &ptr, prop);
 | 
								return operator_button_property_finish(C, &ptr, prop);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return OPERATOR_CANCELLED;
 | 
						return OPERATOR_CANCELLED;
 | 
				
			||||||
@@ -1298,8 +1300,9 @@ static void edittranslation_find_po_file(const char *root, const char *uilng, ch
 | 
				
			|||||||
	BLI_snprintf(tstr, sizeof(tstr), "%s.po", uilng);
 | 
						BLI_snprintf(tstr, sizeof(tstr), "%s.po", uilng);
 | 
				
			||||||
	BLI_join_dirfile(path, maxlen, root, uilng);
 | 
						BLI_join_dirfile(path, maxlen, root, uilng);
 | 
				
			||||||
	BLI_path_append(path, maxlen, tstr);
 | 
						BLI_path_append(path, maxlen, tstr);
 | 
				
			||||||
	if (BLI_is_file(path))
 | 
						if (BLI_is_file(path)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Now try without the second iso code part (_ES in es_ES). */
 | 
						/* Now try without the second iso code part (_ES in es_ES). */
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1316,14 +1319,16 @@ static void edittranslation_find_po_file(const char *root, const char *uilng, ch
 | 
				
			|||||||
		if (tstr[0]) {
 | 
							if (tstr[0]) {
 | 
				
			||||||
			/* Because of some codes like sr_SR@latin... */
 | 
								/* Because of some codes like sr_SR@latin... */
 | 
				
			||||||
			tc = strchr(uilng, '@');
 | 
								tc = strchr(uilng, '@');
 | 
				
			||||||
			if (tc)
 | 
								if (tc) {
 | 
				
			||||||
				BLI_strncpy(tstr + szt, tc, sizeof(tstr) - szt);
 | 
									BLI_strncpy(tstr + szt, tc, sizeof(tstr) - szt);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			BLI_join_dirfile(path, maxlen, root, tstr);
 | 
								BLI_join_dirfile(path, maxlen, root, tstr);
 | 
				
			||||||
			strcat(tstr, ".po");
 | 
								strcat(tstr, ".po");
 | 
				
			||||||
			BLI_path_append(path, maxlen, tstr);
 | 
								BLI_path_append(path, maxlen, tstr);
 | 
				
			||||||
			if (BLI_is_file(path))
 | 
								if (BLI_is_file(path)) {
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1397,26 +1402,36 @@ static int edittranslation_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
		ret = WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &ptr);
 | 
							ret = WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Clean up */
 | 
							/* Clean up */
 | 
				
			||||||
		if (but_label.strinfo)
 | 
							if (but_label.strinfo) {
 | 
				
			||||||
			MEM_freeN(but_label.strinfo);
 | 
								MEM_freeN(but_label.strinfo);
 | 
				
			||||||
		if (rna_label.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_label.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_label.strinfo);
 | 
								MEM_freeN(rna_label.strinfo);
 | 
				
			||||||
		if (enum_label.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (enum_label.strinfo) {
 | 
				
			||||||
			MEM_freeN(enum_label.strinfo);
 | 
								MEM_freeN(enum_label.strinfo);
 | 
				
			||||||
		if (but_tip.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (but_tip.strinfo) {
 | 
				
			||||||
			MEM_freeN(but_tip.strinfo);
 | 
								MEM_freeN(but_tip.strinfo);
 | 
				
			||||||
		if (rna_tip.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_tip.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_tip.strinfo);
 | 
								MEM_freeN(rna_tip.strinfo);
 | 
				
			||||||
		if (enum_tip.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (enum_tip.strinfo) {
 | 
				
			||||||
			MEM_freeN(enum_tip.strinfo);
 | 
								MEM_freeN(enum_tip.strinfo);
 | 
				
			||||||
		if (rna_struct.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_struct.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_struct.strinfo);
 | 
								MEM_freeN(rna_struct.strinfo);
 | 
				
			||||||
		if (rna_prop.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_prop.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_prop.strinfo);
 | 
								MEM_freeN(rna_prop.strinfo);
 | 
				
			||||||
		if (rna_enum.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_enum.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_enum.strinfo);
 | 
								MEM_freeN(rna_enum.strinfo);
 | 
				
			||||||
		if (rna_ctxt.strinfo)
 | 
							}
 | 
				
			||||||
 | 
							if (rna_ctxt.strinfo) {
 | 
				
			||||||
			MEM_freeN(rna_ctxt.strinfo);
 | 
								MEM_freeN(rna_ctxt.strinfo);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1544,8 +1559,9 @@ bool UI_drop_color_poll(struct bContext *C, wmDrag *drag, const wmEvent *UNUSED(
 | 
				
			|||||||
		SpaceImage *sima = CTX_wm_space_image(C);
 | 
							SpaceImage *sima = CTX_wm_space_image(C);
 | 
				
			||||||
		ARegion *ar = CTX_wm_region(C);
 | 
							ARegion *ar = CTX_wm_region(C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (UI_but_active_drop_color(C))
 | 
							if (UI_but_active_drop_color(C)) {
 | 
				
			||||||
			return 1;
 | 
								return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (sima && (sima->mode == SI_MODE_PAINT) &&
 | 
							if (sima && (sima->mode == SI_MODE_PAINT) &&
 | 
				
			||||||
		    sima->image && (ar && ar->regiontype == RGN_TYPE_WINDOW))
 | 
							    sima->image && (ar && ar->regiontype == RGN_TYPE_WINDOW))
 | 
				
			||||||
@@ -1589,14 +1605,16 @@ static int drop_color_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
 | 
							if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
 | 
				
			||||||
			if (!gamma)
 | 
								if (!gamma) {
 | 
				
			||||||
				IMB_colormanagement_scene_linear_to_srgb_v3(color);
 | 
									IMB_colormanagement_scene_linear_to_srgb_v3(color);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
 | 
								RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
 | 
				
			||||||
			RNA_property_update(C, &but->rnapoin, but->rnaprop);
 | 
								RNA_property_update(C, &but->rnapoin, but->rnaprop);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
 | 
							else if (RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
 | 
				
			||||||
			if (gamma)
 | 
								if (gamma) {
 | 
				
			||||||
				IMB_colormanagement_srgb_to_scene_linear_v3(color);
 | 
									IMB_colormanagement_srgb_to_scene_linear_v3(color);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
 | 
								RNA_property_float_set_array(&but->rnapoin, but->rnaprop, color);
 | 
				
			||||||
			RNA_property_update(C, &but->rnapoin, but->rnaprop);
 | 
								RNA_property_update(C, &but->rnapoin, but->rnaprop);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,16 +134,21 @@ typedef enum eSpaceButtons_Align {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int panel_aligned(ScrArea *sa, ARegion *ar)
 | 
					static int panel_aligned(ScrArea *sa, ARegion *ar)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (sa->spacetype == SPACE_PROPERTIES && ar->regiontype == RGN_TYPE_WINDOW)
 | 
						if (sa->spacetype == SPACE_PROPERTIES && ar->regiontype == RGN_TYPE_WINDOW) {
 | 
				
			||||||
		return BUT_VERTICAL;
 | 
							return BUT_VERTICAL;
 | 
				
			||||||
	else if (sa->spacetype == SPACE_USERPREF && ar->regiontype == RGN_TYPE_WINDOW)
 | 
						}
 | 
				
			||||||
 | 
						else if (sa->spacetype == SPACE_USERPREF && ar->regiontype == RGN_TYPE_WINDOW) {
 | 
				
			||||||
		return BUT_VERTICAL;
 | 
							return BUT_VERTICAL;
 | 
				
			||||||
	else if (sa->spacetype == SPACE_FILE && ar->regiontype == RGN_TYPE_CHANNELS)
 | 
						}
 | 
				
			||||||
 | 
						else if (sa->spacetype == SPACE_FILE && ar->regiontype == RGN_TYPE_CHANNELS) {
 | 
				
			||||||
		return BUT_VERTICAL;
 | 
							return BUT_VERTICAL;
 | 
				
			||||||
	else if (sa->spacetype == SPACE_IMAGE && ar->regiontype == RGN_TYPE_PREVIEW)
 | 
						}
 | 
				
			||||||
 | 
						else if (sa->spacetype == SPACE_IMAGE && ar->regiontype == RGN_TYPE_PREVIEW) {
 | 
				
			||||||
		return BUT_VERTICAL;
 | 
							return BUT_VERTICAL;
 | 
				
			||||||
	else if (ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS, RGN_TYPE_HUD, RGN_TYPE_NAV_BAR, RGN_TYPE_EXECUTE))
 | 
						}
 | 
				
			||||||
 | 
						else if (ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS, RGN_TYPE_HUD, RGN_TYPE_NAV_BAR, RGN_TYPE_EXECUTE)) {
 | 
				
			||||||
		return BUT_VERTICAL;
 | 
							return BUT_VERTICAL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -313,10 +318,12 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, ListBase *lb, uiBlock *block, Pa
 | 
				
			|||||||
		BLI_strncpy(pa->panelname, idname, sizeof(pa->panelname));
 | 
							BLI_strncpy(pa->panelname, idname, sizeof(pa->panelname));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (pt->flag & PNL_DEFAULT_CLOSED) {
 | 
							if (pt->flag & PNL_DEFAULT_CLOSED) {
 | 
				
			||||||
			if (align == BUT_VERTICAL)
 | 
								if (align == BUT_VERTICAL) {
 | 
				
			||||||
				pa->flag |= PNL_CLOSEDY;
 | 
									pa->flag |= PNL_CLOSEDY;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				pa->flag |= PNL_CLOSEDX;
 | 
									pa->flag |= PNL_CLOSEDX;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pa->ofsx = 0;
 | 
							pa->ofsx = 0;
 | 
				
			||||||
@@ -378,13 +385,16 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, ListBase *lb, uiBlock *block, Pa
 | 
				
			|||||||
	if (newpanel) {
 | 
						if (newpanel) {
 | 
				
			||||||
		pa->sortorder = (palast) ? palast->sortorder + 1 : 0;
 | 
							pa->sortorder = (palast) ? palast->sortorder + 1 : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (panext = lb->first; panext; panext = panext->next)
 | 
							for (panext = lb->first; panext; panext = panext->next) {
 | 
				
			||||||
			if (panext != pa && panext->sortorder >= pa->sortorder)
 | 
								if (panext != pa && panext->sortorder >= pa->sortorder) {
 | 
				
			||||||
				panext->sortorder++;
 | 
									panext->sortorder++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (palast)
 | 
						if (palast) {
 | 
				
			||||||
		palast->runtime_flag &= ~PNL_LAST_ADDED;
 | 
							palast->runtime_flag &= ~PNL_LAST_ADDED;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* assign to block */
 | 
						/* assign to block */
 | 
				
			||||||
	block->panel = pa;
 | 
						block->panel = pa;
 | 
				
			||||||
@@ -395,8 +405,12 @@ Panel *UI_panel_begin(ScrArea *sa, ARegion *ar, ListBase *lb, uiBlock *block, Pa
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	*r_open = false;
 | 
						*r_open = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pa->paneltab) return pa;
 | 
						if (pa->paneltab) {
 | 
				
			||||||
	if (pa->flag & PNL_CLOSED) return pa;
 | 
							return pa;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (pa->flag & PNL_CLOSED) {
 | 
				
			||||||
 | 
							return pa;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*r_open = true;
 | 
						*r_open = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -429,15 +443,18 @@ void UI_panel_end(uiBlock *block, int width, int height)
 | 
				
			|||||||
		/* check if we need to do an animation */
 | 
							/* check if we need to do an animation */
 | 
				
			||||||
		if (!ELEM(width, 0, pa->sizex) || !ELEM(height, 0, pa->sizey)) {
 | 
							if (!ELEM(width, 0, pa->sizex) || !ELEM(height, 0, pa->sizey)) {
 | 
				
			||||||
			pa->runtime_flag |= PNL_ANIM_ALIGN;
 | 
								pa->runtime_flag |= PNL_ANIM_ALIGN;
 | 
				
			||||||
			if (height != 0)
 | 
								if (height != 0) {
 | 
				
			||||||
				pa->ofsy += pa->sizey - height;
 | 
									pa->ofsy += pa->sizey - height;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* update width/height if non-zero */
 | 
							/* update width/height if non-zero */
 | 
				
			||||||
		if (width != 0)
 | 
							if (width != 0) {
 | 
				
			||||||
			pa->sizex = width;
 | 
								pa->sizex = width;
 | 
				
			||||||
		if (height != 0)
 | 
							}
 | 
				
			||||||
 | 
							if (height != 0) {
 | 
				
			||||||
			pa->sizey = height;
 | 
								pa->sizey = height;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -639,10 +656,12 @@ static void ui_draw_aligned_panel_header(
 | 
				
			|||||||
	uchar col_title[4];
 | 
						uchar col_title[4];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* + 0.001f to avoid flirting with float inaccuracy */
 | 
						/* + 0.001f to avoid flirting with float inaccuracy */
 | 
				
			||||||
	if (panel->control & UI_PNL_CLOSE)
 | 
						if (panel->control & UI_PNL_CLOSE) {
 | 
				
			||||||
		pnl_icons = (panel->labelofs + (2.0f * PNL_ICON)) / block->aspect + 0.001f;
 | 
							pnl_icons = (panel->labelofs + (2.0f * PNL_ICON)) / block->aspect + 0.001f;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		pnl_icons = (panel->labelofs + (1.1f * PNL_ICON)) / block->aspect + 0.001f;
 | 
							pnl_icons = (panel->labelofs + (1.1f * PNL_ICON)) / block->aspect + 0.001f;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* draw text label */
 | 
						/* draw text label */
 | 
				
			||||||
	panel_title_color_get(show_background, col_title);
 | 
						panel_title_color_get(show_background, col_title);
 | 
				
			||||||
@@ -683,8 +702,12 @@ void ui_draw_aligned_panel(
 | 
				
			|||||||
	         * This may be changed in future. */
 | 
						         * This may be changed in future. */
 | 
				
			||||||
	        show_background);
 | 
						        show_background);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (panel->paneltab) return;
 | 
						if (panel->paneltab) {
 | 
				
			||||||
	if (panel->type && (panel->type->flag & PNL_NO_HEADER)) return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (panel->type && (panel->type->flag & PNL_NO_HEADER)) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* calculate header rect */
 | 
						/* calculate header rect */
 | 
				
			||||||
	/* + 0.001f to prevent flicker due to float inaccuracy */
 | 
						/* + 0.001f to prevent flicker due to float inaccuracy */
 | 
				
			||||||
@@ -787,8 +810,12 @@ void ui_draw_aligned_panel(
 | 
				
			|||||||
	else {
 | 
						else {
 | 
				
			||||||
		/* in some occasions, draw a border */
 | 
							/* in some occasions, draw a border */
 | 
				
			||||||
		if (panel->flag & PNL_SELECT) {
 | 
							if (panel->flag & PNL_SELECT) {
 | 
				
			||||||
			if (panel->control & UI_PNL_SOLID) UI_draw_roundbox_corner_set(UI_CNR_ALL);
 | 
								if (panel->control & UI_PNL_SOLID) {
 | 
				
			||||||
			else UI_draw_roundbox_corner_set(UI_CNR_NONE);
 | 
									UI_draw_roundbox_corner_set(UI_CNR_ALL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									UI_draw_roundbox_corner_set(UI_CNR_NONE);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			UI_GetThemeColorShade4fv(TH_BACK, -120, color);
 | 
								UI_GetThemeColorShade4fv(TH_BACK, -120, color);
 | 
				
			||||||
			UI_draw_roundbox_aa(false, 0.5f + rect->xmin, 0.5f + rect->ymin, 0.5f + rect->xmax, 0.5f + headrect.ymax + 1, 8, color);
 | 
								UI_draw_roundbox_aa(false, 0.5f + rect->xmin, 0.5f + rect->ymin, 0.5f + rect->xmax, 0.5f + headrect.ymax + 1, 8, color);
 | 
				
			||||||
@@ -806,8 +833,9 @@ void ui_draw_aligned_panel(
 | 
				
			|||||||
			immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
 | 
								immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (panel->control & UI_PNL_SCALE)
 | 
							if (panel->control & UI_PNL_SCALE) {
 | 
				
			||||||
			ui_draw_panel_scalewidget(pos, rect);
 | 
								ui_draw_panel_scalewidget(pos, rect);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		immUnbindProgram();
 | 
							immUnbindProgram();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -841,12 +869,15 @@ void ui_draw_aligned_panel(
 | 
				
			|||||||
		rgb_uchar_to_float(tria_color, col_title);
 | 
							rgb_uchar_to_float(tria_color, col_title);
 | 
				
			||||||
		tria_color[3] = 1.0f;
 | 
							tria_color[3] = 1.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (is_closed_y)
 | 
							if (is_closed_y) {
 | 
				
			||||||
			ui_draw_anti_tria_rect(&itemrect, 'h', tria_color);
 | 
								ui_draw_anti_tria_rect(&itemrect, 'h', tria_color);
 | 
				
			||||||
		else if (is_closed_x)
 | 
							}
 | 
				
			||||||
 | 
							else if (is_closed_x) {
 | 
				
			||||||
			ui_draw_anti_tria_rect(&itemrect, 'h', tria_color);
 | 
								ui_draw_anti_tria_rect(&itemrect, 'h', tria_color);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			ui_draw_anti_tria_rect(&itemrect, 'v', tria_color);
 | 
								ui_draw_anti_tria_rect(&itemrect, 'v', tria_color);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -854,16 +885,18 @@ void ui_draw_aligned_panel(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int get_panel_header(const Panel *pa)
 | 
					static int get_panel_header(const Panel *pa)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (pa->type && (pa->type->flag & PNL_NO_HEADER))
 | 
						if (pa->type && (pa->type->flag & PNL_NO_HEADER)) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return PNL_HEADER;
 | 
						return PNL_HEADER;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int get_panel_size_y(const Panel *pa)
 | 
					static int get_panel_size_y(const Panel *pa)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (pa->type && (pa->type->flag & PNL_NO_HEADER))
 | 
						if (pa->type && (pa->type->flag & PNL_NO_HEADER)) {
 | 
				
			||||||
		return pa->sizey;
 | 
							return pa->sizey;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return PNL_HEADER + pa->sizey;
 | 
						return PNL_HEADER + pa->sizey;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -872,8 +905,9 @@ static int get_panel_real_size_y(const Panel *pa)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int sizey = (pa->flag & PNL_CLOSED) ? 0 : pa->sizey;
 | 
						int sizey = (pa->flag & PNL_CLOSED) ? 0 : pa->sizey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pa->type && (pa->type->flag & PNL_NO_HEADER))
 | 
						if (pa->type && (pa->type->flag & PNL_NO_HEADER)) {
 | 
				
			||||||
		return sizey;
 | 
							return sizey;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return PNL_HEADER + sizey;
 | 
						return PNL_HEADER + sizey;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -887,17 +921,31 @@ int UI_panel_size_y(const Panel *pa)
 | 
				
			|||||||
 * change sizey or location when closed */
 | 
					 * change sizey or location when closed */
 | 
				
			||||||
static int get_panel_real_ofsy(Panel *pa)
 | 
					static int get_panel_real_ofsy(Panel *pa)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (pa->flag & PNL_CLOSEDY) return pa->ofsy + pa->sizey;
 | 
						if (pa->flag & PNL_CLOSEDY) {
 | 
				
			||||||
	else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) return pa->ofsy + pa->sizey;
 | 
							return pa->ofsy + pa->sizey;
 | 
				
			||||||
	else if (pa->paneltab) return pa->paneltab->ofsy;
 | 
						}
 | 
				
			||||||
	else return pa->ofsy;
 | 
						else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) {
 | 
				
			||||||
 | 
							return pa->ofsy + pa->sizey;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (pa->paneltab) {
 | 
				
			||||||
 | 
							return pa->paneltab->ofsy;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							return pa->ofsy;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int get_panel_real_ofsx(Panel *pa)
 | 
					static int get_panel_real_ofsx(Panel *pa)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (pa->flag & PNL_CLOSEDX) return pa->ofsx + get_panel_header(pa);
 | 
						if (pa->flag & PNL_CLOSEDX) {
 | 
				
			||||||
	else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDX)) return pa->ofsx + get_panel_header(pa);
 | 
							return pa->ofsx + get_panel_header(pa);
 | 
				
			||||||
	else return pa->ofsx + pa->sizex;
 | 
						}
 | 
				
			||||||
 | 
						else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDX)) {
 | 
				
			||||||
 | 
							return pa->ofsx + get_panel_header(pa);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							return pa->ofsx + pa->sizex;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct PanelSort {
 | 
					typedef struct PanelSort {
 | 
				
			||||||
@@ -916,10 +964,18 @@ static int find_leftmost_panel(const void *a1, const void *a2)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	const PanelSort *ps1 = a1, *ps2 = a2;
 | 
						const PanelSort *ps1 = a1, *ps2 = a2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps1->pa->ofsx > ps2->pa->ofsx) return 1;
 | 
						if (ps1->pa->ofsx > ps2->pa->ofsx) {
 | 
				
			||||||
	else if (ps1->pa->ofsx < ps2->pa->ofsx) return -1;
 | 
							return 1;
 | 
				
			||||||
	else if (ps1->pa->sortorder > ps2->pa->sortorder) return 1;
 | 
						}
 | 
				
			||||||
	else if (ps1->pa->sortorder < ps2->pa->sortorder) return -1;
 | 
						else if (ps1->pa->ofsx < ps2->pa->ofsx) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps1->pa->sortorder > ps2->pa->sortorder) {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps1->pa->sortorder < ps2->pa->sortorder) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -934,13 +990,25 @@ static int find_highest_panel(const void *a1, const void *a2)
 | 
				
			|||||||
	if (ps1->pa->type->flag & PNL_NO_HEADER && ps2->pa->type->flag & PNL_NO_HEADER) {
 | 
						if (ps1->pa->type->flag & PNL_NO_HEADER && ps2->pa->type->flag & PNL_NO_HEADER) {
 | 
				
			||||||
		/* skip and check for ofs and sortorder below */
 | 
							/* skip and check for ofs and sortorder below */
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (ps1->pa->type->flag & PNL_NO_HEADER) return -1;
 | 
						else if (ps1->pa->type->flag & PNL_NO_HEADER) {
 | 
				
			||||||
	else if (ps2->pa->type->flag & PNL_NO_HEADER) return 1;
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps2->pa->type->flag & PNL_NO_HEADER) {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps1->pa->ofsy + ps1->pa->sizey < ps2->pa->ofsy + ps2->pa->sizey) return 1;
 | 
						if (ps1->pa->ofsy + ps1->pa->sizey < ps2->pa->ofsy + ps2->pa->sizey) {
 | 
				
			||||||
	else if (ps1->pa->ofsy + ps1->pa->sizey > ps2->pa->ofsy + ps2->pa->sizey) return -1;
 | 
							return 1;
 | 
				
			||||||
	else if (ps1->pa->sortorder > ps2->pa->sortorder) return 1;
 | 
						}
 | 
				
			||||||
	else if (ps1->pa->sortorder < ps2->pa->sortorder) return -1;
 | 
						else if (ps1->pa->ofsy + ps1->pa->sizey > ps2->pa->ofsy + ps2->pa->sizey) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps1->pa->sortorder > ps2->pa->sortorder) {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps1->pa->sortorder < ps2->pa->sortorder) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -949,8 +1017,12 @@ static int compare_panel(const void *a1, const void *a2)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	const PanelSort *ps1 = a1, *ps2 = a2;
 | 
						const PanelSort *ps1 = a1, *ps2 = a2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps1->pa->sortorder > ps2->pa->sortorder) return 1;
 | 
						if (ps1->pa->sortorder > ps2->pa->sortorder) {
 | 
				
			||||||
	else if (ps1->pa->sortorder < ps2->pa->sortorder) return -1;
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (ps1->pa->sortorder < ps2->pa->sortorder) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -985,19 +1057,25 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
 | 
				
			|||||||
	bool has_category_tabs = UI_panel_category_is_visible(ar);
 | 
						bool has_category_tabs = UI_panel_category_is_visible(ar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* count active, not tabbed panels */
 | 
						/* count active, not tabbed panels */
 | 
				
			||||||
	for (pa = ar->panels.first; pa; pa = pa->next)
 | 
						for (pa = ar->panels.first; pa; pa = pa->next) {
 | 
				
			||||||
		if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL)
 | 
							if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
 | 
				
			||||||
			tot++;
 | 
								tot++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (tot == 0) return 0;
 | 
						if (tot == 0) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* extra; change close direction? */
 | 
						/* extra; change close direction? */
 | 
				
			||||||
	for (pa = ar->panels.first; pa; pa = pa->next) {
 | 
						for (pa = ar->panels.first; pa; pa = pa->next) {
 | 
				
			||||||
		if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
 | 
							if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
 | 
				
			||||||
			if ((pa->flag & PNL_CLOSEDX) && (align == BUT_VERTICAL))
 | 
								if ((pa->flag & PNL_CLOSEDX) && (align == BUT_VERTICAL)) {
 | 
				
			||||||
				pa->flag ^= PNL_CLOSED;
 | 
									pa->flag ^= PNL_CLOSED;
 | 
				
			||||||
			else if ((pa->flag & PNL_CLOSEDY) && (align == BUT_HORIZONTAL))
 | 
								}
 | 
				
			||||||
 | 
								else if ((pa->flag & PNL_CLOSEDY) && (align == BUT_HORIZONTAL)) {
 | 
				
			||||||
				pa->flag ^= PNL_CLOSED;
 | 
									pa->flag ^= PNL_CLOSED;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1015,17 +1093,21 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (drag) {
 | 
						if (drag) {
 | 
				
			||||||
		/* while we are dragging, we sort on location and update sortorder */
 | 
							/* while we are dragging, we sort on location and update sortorder */
 | 
				
			||||||
		if (align == BUT_VERTICAL)
 | 
							if (align == BUT_VERTICAL) {
 | 
				
			||||||
			qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel);
 | 
								qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel);
 | 
								qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (ps = panelsort, a = 0; a < tot; a++, ps++)
 | 
							for (ps = panelsort, a = 0; a < tot; a++, ps++) {
 | 
				
			||||||
			ps->orig->sortorder = a;
 | 
								ps->orig->sortorder = a;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		/* otherwise use sortorder */
 | 
							/* otherwise use sortorder */
 | 
				
			||||||
		qsort(panelsort, tot, sizeof(PanelSort), compare_panel);
 | 
							qsort(panelsort, tot, sizeof(PanelSort), compare_panel);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* no smart other default start loc! this keeps switching f5/f6/etc compatible */
 | 
						/* no smart other default start loc! this keeps switching f5/f6/etc compatible */
 | 
				
			||||||
	ps = panelsort;
 | 
						ps = panelsort;
 | 
				
			||||||
@@ -1111,10 +1193,12 @@ static void ui_panels_size(ScrArea *sa, ARegion *ar, int *x, int *y)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sizex == 0)
 | 
						if (sizex == 0) {
 | 
				
			||||||
		sizex = UI_PANEL_WIDTH;
 | 
							sizex = UI_PANEL_WIDTH;
 | 
				
			||||||
	if (sizey == 0)
 | 
						}
 | 
				
			||||||
 | 
						if (sizey == 0) {
 | 
				
			||||||
		sizey = -UI_PANEL_WIDTH;
 | 
							sizey = -UI_PANEL_WIDTH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*x = sizex;
 | 
						*x = sizex;
 | 
				
			||||||
	*y = sizey;
 | 
						*y = sizey;
 | 
				
			||||||
@@ -1173,9 +1257,11 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *x, int *y)
 | 
				
			|||||||
	Panel *panot, *panew, *patest, *pa, *firstpa;
 | 
						Panel *panot, *panew, *patest, *pa, *firstpa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* offset contents */
 | 
						/* offset contents */
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next)
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		if (block->active && block->panel)
 | 
							if (block->active && block->panel) {
 | 
				
			||||||
			ui_offset_panel_block(block);
 | 
								ui_offset_panel_block(block);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* consistency; are panels not made, whilst they have tabs */
 | 
						/* consistency; are panels not made, whilst they have tabs */
 | 
				
			||||||
	for (panot = ar->panels.first; panot; panot = panot->next) {
 | 
						for (panot = ar->panels.first; panot; panot = panot->next) {
 | 
				
			||||||
@@ -1204,21 +1290,27 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *x, int *y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* re-align, possibly with animation */
 | 
						/* re-align, possibly with animation */
 | 
				
			||||||
	if (panels_need_realign(sa, ar, &pa)) {
 | 
						if (panels_need_realign(sa, ar, &pa)) {
 | 
				
			||||||
		if (pa)
 | 
							if (pa) {
 | 
				
			||||||
			panel_activate_state(C, pa, PANEL_STATE_ANIMATION);
 | 
								panel_activate_state(C, pa, PANEL_STATE_ANIMATION);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			uiAlignPanelStep(sa, ar, 1.0, false);
 | 
								uiAlignPanelStep(sa, ar, 1.0, false);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* tag first panel */
 | 
						/* tag first panel */
 | 
				
			||||||
	firstpa = NULL;
 | 
						firstpa = NULL;
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next)
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		if (block->active && block->panel)
 | 
							if (block->active && block->panel) {
 | 
				
			||||||
			if (!firstpa || block->panel->sortorder < firstpa->sortorder)
 | 
								if (!firstpa || block->panel->sortorder < firstpa->sortorder) {
 | 
				
			||||||
				firstpa = block->panel;
 | 
									firstpa = block->panel;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (firstpa)
 | 
						if (firstpa) {
 | 
				
			||||||
		firstpa->runtime_flag |= PNL_FIRST;
 | 
							firstpa->runtime_flag |= PNL_FIRST;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* compute size taken up by panel */
 | 
						/* compute size taken up by panel */
 | 
				
			||||||
	ui_panels_size(sa, ar, x, y);
 | 
						ui_panels_size(sa, ar, x, y);
 | 
				
			||||||
@@ -1280,16 +1372,28 @@ static void check_panel_overlap(ARegion *ar, Panel *panel)
 | 
				
			|||||||
			if (pa->paneltab == NULL && (pa->runtime_flag & PNL_ACTIVE)) {
 | 
								if (pa->paneltab == NULL && (pa->runtime_flag & PNL_ACTIVE)) {
 | 
				
			||||||
				float safex = 0.2, safey = 0.2;
 | 
									float safex = 0.2, safey = 0.2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (pa->flag & PNL_CLOSEDX) safex = 0.05;
 | 
									if (pa->flag & PNL_CLOSEDX) {
 | 
				
			||||||
				else if (pa->flag & PNL_CLOSEDY) safey = 0.05;
 | 
										safex = 0.05;
 | 
				
			||||||
				else if (panel->flag & PNL_CLOSEDX) safex = 0.05;
 | 
									}
 | 
				
			||||||
				else if (panel->flag & PNL_CLOSEDY) safey = 0.05;
 | 
									else if (pa->flag & PNL_CLOSEDY) {
 | 
				
			||||||
 | 
										safey = 0.05;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else if (panel->flag & PNL_CLOSEDX) {
 | 
				
			||||||
 | 
										safex = 0.05;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else if (panel->flag & PNL_CLOSEDY) {
 | 
				
			||||||
 | 
										safey = 0.05;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (pa->ofsx > panel->ofsx - safex * panel->sizex)
 | 
									if (pa->ofsx > panel->ofsx - safex * panel->sizex) {
 | 
				
			||||||
					if (pa->ofsx + pa->sizex < panel->ofsx + (1.0f + safex) * panel->sizex)
 | 
										if (pa->ofsx + pa->sizex < panel->ofsx + (1.0f + safex) * panel->sizex) {
 | 
				
			||||||
						if (pa->ofsy > panel->ofsy - safey * panel->sizey)
 | 
											if (pa->ofsy > panel->ofsy - safey * panel->sizey) {
 | 
				
			||||||
							if (pa->ofsy + pa->sizey < panel->ofsy + (1.0f + safey) * panel->sizey)
 | 
												if (pa->ofsy + pa->sizey < panel->ofsy + (1.0f + safey) * panel->sizey) {
 | 
				
			||||||
								pa->flag |= PNL_OVERLAP;
 | 
													pa->flag |= PNL_OVERLAP;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1305,8 +1409,9 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel)
 | 
				
			|||||||
	short align = panel_aligned(sa, ar), dx = 0, dy = 0;
 | 
						short align = panel_aligned(sa, ar), dx = 0, dy = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* first clip for window, no dragging outside */
 | 
						/* first clip for window, no dragging outside */
 | 
				
			||||||
	if (!BLI_rcti_isect_pt_v(&ar->winrct, &event->x))
 | 
						if (!BLI_rcti_isect_pt_v(&ar->winrct, &event->x)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dx = (event->x - data->startx) & ~(PNL_GRID - 1);
 | 
						dx = (event->x - data->startx) & ~(PNL_GRID - 1);
 | 
				
			||||||
	dy = (event->y - data->starty) & ~(PNL_GRID - 1);
 | 
						dy = (event->y - data->starty) & ~(PNL_GRID - 1);
 | 
				
			||||||
@@ -1317,8 +1422,9 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel)
 | 
				
			|||||||
	if (data->state == PANEL_STATE_DRAG_SCALE) {
 | 
						if (data->state == PANEL_STATE_DRAG_SCALE) {
 | 
				
			||||||
		panel->sizex = MAX2(data->startsizex + dx, UI_PANEL_MINX);
 | 
							panel->sizex = MAX2(data->startsizex + dx, UI_PANEL_MINX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (data->startsizey - dy < UI_PANEL_MINY)
 | 
							if (data->startsizey - dy < UI_PANEL_MINY) {
 | 
				
			||||||
			dy = -UI_PANEL_MINY + data->startsizey;
 | 
								dy = -UI_PANEL_MINY + data->startsizey;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		panel->sizey = data->startsizey - dy;
 | 
							panel->sizey = data->startsizey - dy;
 | 
				
			||||||
		panel->ofsy = data->startofsy + dy;
 | 
							panel->ofsy = data->startofsy + dy;
 | 
				
			||||||
@@ -1331,7 +1437,9 @@ static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel)
 | 
				
			|||||||
		panel->ofsy = data->startofsy + dy;
 | 
							panel->ofsy = data->startofsy + dy;
 | 
				
			||||||
		check_panel_overlap(ar, panel);
 | 
							check_panel_overlap(ar, panel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (align) uiAlignPanelStep(sa, ar, 0.2, true);
 | 
							if (align) {
 | 
				
			||||||
 | 
								uiAlignPanelStep(sa, ar, 0.2, true);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ED_region_tag_redraw(ar);
 | 
						ED_region_tag_redraw(ar);
 | 
				
			||||||
@@ -1526,21 +1634,29 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in
 | 
				
			|||||||
	/* XXX weak code, currently it assumes layout style for location of widgets */
 | 
						/* XXX weak code, currently it assumes layout style for location of widgets */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check open/collapsed button */
 | 
						/* check open/collapsed button */
 | 
				
			||||||
	if (event == RETKEY)
 | 
						if (event == RETKEY) {
 | 
				
			||||||
		button = 1;
 | 
							button = 1;
 | 
				
			||||||
	else if (event == AKEY)
 | 
						}
 | 
				
			||||||
 | 
						else if (event == AKEY) {
 | 
				
			||||||
		button = 1;
 | 
							button = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	else if (ELEM(event, 0, RETKEY, LEFTMOUSE) && shift) {
 | 
						else if (ELEM(event, 0, RETKEY, LEFTMOUSE) && shift) {
 | 
				
			||||||
		block->panel->flag ^= PNL_PIN;
 | 
							block->panel->flag ^= PNL_PIN;
 | 
				
			||||||
		button = 2;
 | 
							button = 2;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (block->panel->flag & PNL_CLOSEDX) {
 | 
						else if (block->panel->flag & PNL_CLOSEDX) {
 | 
				
			||||||
		if (my >= block->rect.ymax) button = 1;
 | 
							if (my >= block->rect.ymax) {
 | 
				
			||||||
 | 
								button = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (block->panel->control & UI_PNL_CLOSE) {
 | 
						else if (block->panel->control & UI_PNL_CLOSE) {
 | 
				
			||||||
		/* whole of header can be used to collapse panel (except top-right corner) */
 | 
							/* whole of header can be used to collapse panel (except top-right corner) */
 | 
				
			||||||
		if (mx <= block->rect.xmax - 8 - PNL_ICON) button = 2;
 | 
							if (mx <= block->rect.xmax - 8 - PNL_ICON) {
 | 
				
			||||||
		//else if (mx <= block->rect.xmin + 10 + 2 * PNL_ICON + 2) button = 1;
 | 
								button = 2;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							//else if (mx <= block->rect.xmin + 10 + 2 * PNL_ICON + 2) {
 | 
				
			||||||
 | 
							//	button = 1;
 | 
				
			||||||
 | 
							//}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (mx < rect_leftmost) {
 | 
						else if (mx < rect_leftmost) {
 | 
				
			||||||
		button = 1;
 | 
							button = 1;
 | 
				
			||||||
@@ -1561,8 +1677,9 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in
 | 
				
			|||||||
			if (block->panel->flag & PNL_CLOSED) {
 | 
								if (block->panel->flag & PNL_CLOSED) {
 | 
				
			||||||
				block->panel->flag &= ~PNL_CLOSED;
 | 
									block->panel->flag &= ~PNL_CLOSED;
 | 
				
			||||||
				/* snap back up so full panel aligns with screen edge */
 | 
									/* snap back up so full panel aligns with screen edge */
 | 
				
			||||||
				if (block->panel->snap & PNL_SNAP_BOTTOM)
 | 
									if (block->panel->snap & PNL_SNAP_BOTTOM) {
 | 
				
			||||||
					block->panel->ofsy = 0;
 | 
										block->panel->ofsy = 0;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (event == LEFTMOUSE) {
 | 
									if (event == LEFTMOUSE) {
 | 
				
			||||||
					ui_panel_drag_collapse_handler_add(C, false);
 | 
										ui_panel_drag_collapse_handler_add(C, false);
 | 
				
			||||||
@@ -1578,8 +1695,9 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in
 | 
				
			|||||||
			else {
 | 
								else {
 | 
				
			||||||
				/* snap down to bottom screen edge */
 | 
									/* snap down to bottom screen edge */
 | 
				
			||||||
				block->panel->flag |= PNL_CLOSEDY;
 | 
									block->panel->flag |= PNL_CLOSEDY;
 | 
				
			||||||
				if (block->panel->snap & PNL_SNAP_BOTTOM)
 | 
									if (block->panel->snap & PNL_SNAP_BOTTOM) {
 | 
				
			||||||
					block->panel->ofsy = -block->panel->sizey;
 | 
										block->panel->ofsy = -block->panel->sizey;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (event == LEFTMOUSE) {
 | 
									if (event == LEFTMOUSE) {
 | 
				
			||||||
					ui_panel_drag_collapse_handler_add(C, true);
 | 
										ui_panel_drag_collapse_handler_add(C, true);
 | 
				
			||||||
@@ -1588,8 +1706,12 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			for (pa = ar->panels.first; pa; pa = pa->next) {
 | 
								for (pa = ar->panels.first; pa; pa = pa->next) {
 | 
				
			||||||
				if (pa->paneltab == block->panel) {
 | 
									if (pa->paneltab == block->panel) {
 | 
				
			||||||
					if (block->panel->flag & PNL_CLOSED) pa->flag |= PNL_CLOSED;
 | 
										if (block->panel->flag & PNL_CLOSED) {
 | 
				
			||||||
					else pa->flag &= ~PNL_CLOSED;
 | 
											pa->flag |= PNL_CLOSED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
 | 
											pa->flag &= ~PNL_CLOSED;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -2129,8 +2251,9 @@ static int ui_handle_panel_category_cycling(const wmEvent *event, ARegion *ar, c
 | 
				
			|||||||
	        (event->mval[0] > ((PanelCategoryDyn *)ar->panels_category.first)->rect.xmin));
 | 
						        (event->mval[0] > ((PanelCategoryDyn *)ar->panels_category.first)->rect.xmin));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* if mouse is inside non-tab region, ctrl key is required */
 | 
						/* if mouse is inside non-tab region, ctrl key is required */
 | 
				
			||||||
	if (is_mousewheel && !event->ctrl && !inside_tabregion)
 | 
						if (is_mousewheel && !event->ctrl && !inside_tabregion) {
 | 
				
			||||||
		return WM_UI_HANDLER_CONTINUE;
 | 
							return WM_UI_HANDLER_CONTINUE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (active_but && ui_but_supports_cycling(active_but)) {
 | 
						if (active_but && ui_but_supports_cycling(active_but)) {
 | 
				
			||||||
@@ -2238,11 +2361,13 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons
 | 
				
			|||||||
			if (event->type == AKEY && ((event->ctrl + event->oskey + event->shift + event->alt) == 0)) {
 | 
								if (event->type == AKEY && ((event->ctrl + event->oskey + event->shift + event->alt) == 0)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (pa->flag & PNL_CLOSEDY) {
 | 
									if (pa->flag & PNL_CLOSEDY) {
 | 
				
			||||||
					if ((block->rect.ymax <= my) && (block->rect.ymax + PNL_HEADER >= my))
 | 
										if ((block->rect.ymax <= my) && (block->rect.ymax + PNL_HEADER >= my)) {
 | 
				
			||||||
						ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift);
 | 
											ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else {
 | 
				
			||||||
					ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift);
 | 
										ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl, event->shift);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				retval = WM_UI_HANDLER_BREAK;
 | 
									retval = WM_UI_HANDLER_BREAK;
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
@@ -2305,11 +2430,13 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					/* if panel is closed, only zoom if mouse is over the header */
 | 
										/* if panel is closed, only zoom if mouse is over the header */
 | 
				
			||||||
					if (pa->flag & (PNL_CLOSEDX | PNL_CLOSEDY)) {
 | 
										if (pa->flag & (PNL_CLOSEDX | PNL_CLOSEDY)) {
 | 
				
			||||||
						if (inside_header)
 | 
											if (inside_header) {
 | 
				
			||||||
							zoom = 1;
 | 
												zoom = 1;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else
 | 
										else {
 | 
				
			||||||
						zoom = 1;
 | 
											zoom = 1;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (zoom) {
 | 
										if (zoom) {
 | 
				
			||||||
						ScrArea *sa = CTX_wm_area(C);
 | 
											ScrArea *sa = CTX_wm_area(C);
 | 
				
			||||||
@@ -2317,8 +2444,12 @@ int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *ar, cons
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
						if (sa->spacetype != SPACE_PROPERTIES) {
 | 
											if (sa->spacetype != SPACE_PROPERTIES) {
 | 
				
			||||||
							if (!(pa->control & UI_PNL_SCALE)) {
 | 
												if (!(pa->control & UI_PNL_SCALE)) {
 | 
				
			||||||
								if (event->type == PADPLUSKEY) sl->blockscale += 0.1;
 | 
													if (event->type == PADPLUSKEY) {
 | 
				
			||||||
								else sl->blockscale -= 0.1;
 | 
														sl->blockscale += 0.1;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													else {
 | 
				
			||||||
 | 
														sl->blockscale -= 0.1;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
								CLAMP(sl->blockscale, 0.6, 1.0);
 | 
													CLAMP(sl->blockscale, 0.6, 1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
								ED_region_tag_redraw(ar);
 | 
													ED_region_tag_redraw(ar);
 | 
				
			||||||
@@ -2349,28 +2480,35 @@ static int ui_handler_panel(bContext *C, const wmEvent *event, void *userdata)
 | 
				
			|||||||
		ARegion *ar = CTX_wm_region(C);
 | 
							ARegion *ar = CTX_wm_region(C);
 | 
				
			||||||
		int align = panel_aligned(sa, ar);
 | 
							int align = panel_aligned(sa, ar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (align)
 | 
							if (align) {
 | 
				
			||||||
			panel_activate_state(C, panel, PANEL_STATE_ANIMATION);
 | 
								panel_activate_state(C, panel, PANEL_STATE_ANIMATION);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			panel_activate_state(C, panel, PANEL_STATE_EXIT);
 | 
								panel_activate_state(C, panel, PANEL_STATE_EXIT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (event->type == MOUSEMOVE) {
 | 
						else if (event->type == MOUSEMOVE) {
 | 
				
			||||||
		if (data->state == PANEL_STATE_DRAG)
 | 
							if (data->state == PANEL_STATE_DRAG) {
 | 
				
			||||||
			ui_do_drag(C, event, panel);
 | 
								ui_do_drag(C, event, panel);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (event->type == TIMER && event->customdata == data->animtimer) {
 | 
						else if (event->type == TIMER && event->customdata == data->animtimer) {
 | 
				
			||||||
		if (data->state == PANEL_STATE_ANIMATION)
 | 
							if (data->state == PANEL_STATE_ANIMATION) {
 | 
				
			||||||
			ui_do_animate(C, panel);
 | 
								ui_do_animate(C, panel);
 | 
				
			||||||
		else if (data->state == PANEL_STATE_DRAG)
 | 
							}
 | 
				
			||||||
 | 
							else if (data->state == PANEL_STATE_DRAG) {
 | 
				
			||||||
			ui_do_drag(C, event, panel);
 | 
								ui_do_drag(C, event, panel);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data = panel->activedata;
 | 
						data = panel->activedata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data && data->state == PANEL_STATE_ANIMATION)
 | 
						if (data && data->state == PANEL_STATE_ANIMATION) {
 | 
				
			||||||
		return WM_UI_HANDLER_CONTINUE;
 | 
							return WM_UI_HANDLER_CONTINUE;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return WM_UI_HANDLER_BREAK;
 | 
							return WM_UI_HANDLER_BREAK;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ui_handler_remove_panel(bContext *C, void *userdata)
 | 
					static void ui_handler_remove_panel(bContext *C, void *userdata)
 | 
				
			||||||
@@ -2386,8 +2524,9 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat
 | 
				
			|||||||
	wmWindow *win = CTX_wm_window(C);
 | 
						wmWindow *win = CTX_wm_window(C);
 | 
				
			||||||
	ARegion *ar = CTX_wm_region(C);
 | 
						ARegion *ar = CTX_wm_region(C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data && data->state == state)
 | 
						if (data && data->state == state) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state == PANEL_STATE_EXIT || state == PANEL_STATE_ANIMATION) {
 | 
						if (state == PANEL_STATE_EXIT || state == PANEL_STATE_ANIMATION) {
 | 
				
			||||||
		if (data && data->state != PANEL_STATE_ANIMATION) {
 | 
							if (data && data->state != PANEL_STATE_ANIMATION) {
 | 
				
			||||||
@@ -2403,8 +2542,9 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		pa->flag &= ~PNL_SELECT;
 | 
							pa->flag &= ~PNL_SELECT;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		pa->flag |= PNL_SELECT;
 | 
							pa->flag |= PNL_SELECT;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data && data->animtimer) {
 | 
						if (data && data->animtimer) {
 | 
				
			||||||
		WM_event_remove_timer(CTX_wm_manager(C), win, data->animtimer);
 | 
							WM_event_remove_timer(CTX_wm_manager(C), win, data->animtimer);
 | 
				
			||||||
@@ -2425,8 +2565,9 @@ static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelStat
 | 
				
			|||||||
			WM_event_add_ui_handler(C, &win->modalhandlers, ui_handler_panel, ui_handler_remove_panel, pa, 0);
 | 
								WM_event_add_ui_handler(C, &win->modalhandlers, ui_handler_panel, ui_handler_remove_panel, pa, 0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ELEM(state, PANEL_STATE_ANIMATION, PANEL_STATE_DRAG))
 | 
							if (ELEM(state, PANEL_STATE_ANIMATION, PANEL_STATE_DRAG)) {
 | 
				
			||||||
			data->animtimer = WM_event_add_timer(CTX_wm_manager(C), win, TIMER, ANIMATION_INTERVAL);
 | 
								data->animtimer = WM_event_add_timer(CTX_wm_manager(C), win, TIMER, ANIMATION_INTERVAL);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		data->state = state;
 | 
							data->state = state;
 | 
				
			||||||
		data->startx = win->eventstate->x;
 | 
							data->startx = win->eventstate->x;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -81,18 +81,24 @@ bool ui_but_is_toggle(const uiBut *but)
 | 
				
			|||||||
bool ui_but_is_interactive(const uiBut *but, const bool labeledit)
 | 
					bool ui_but_is_interactive(const uiBut *but, const bool labeledit)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* note, UI_BTYPE_LABEL is included for highlights, this allows drags */
 | 
						/* note, UI_BTYPE_LABEL is included for highlights, this allows drags */
 | 
				
			||||||
	if ((but->type == UI_BTYPE_LABEL) && but->dragpoin == NULL)
 | 
						if ((but->type == UI_BTYPE_LABEL) && but->dragpoin == NULL) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if (ELEM(but->type, UI_BTYPE_ROUNDBOX, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_LISTBOX))
 | 
						}
 | 
				
			||||||
 | 
						if (ELEM(but->type, UI_BTYPE_ROUNDBOX, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_LISTBOX)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if (but->flag & UI_HIDDEN)
 | 
						}
 | 
				
			||||||
 | 
						if (but->flag & UI_HIDDEN) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if (but->flag & UI_SCROLLED)
 | 
						}
 | 
				
			||||||
 | 
						if (but->flag & UI_SCROLLED) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if ((but->type == UI_BTYPE_TEXT) && (but->dt == UI_EMBOSS_NONE) && !labeledit)
 | 
						}
 | 
				
			||||||
 | 
						if ((but->type == UI_BTYPE_TEXT) && (but->dt == UI_EMBOSS_NONE) && !labeledit) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	if ((but->type == UI_BTYPE_LISTROW) && labeledit)
 | 
						}
 | 
				
			||||||
 | 
						if ((but->type == UI_BTYPE_LISTROW) && labeledit) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -175,13 +181,15 @@ static bool ui_but_isect_pie_seg(const uiBlock *block, const uiBut *but)
 | 
				
			|||||||
	const float angle_range = (block->pie_data.flags & UI_PIE_DEGREES_RANGE_LARGE) ? M_PI_4 : M_PI_4 / 2.0;
 | 
						const float angle_range = (block->pie_data.flags & UI_PIE_DEGREES_RANGE_LARGE) ? M_PI_4 : M_PI_4 / 2.0;
 | 
				
			||||||
	float vec[2];
 | 
						float vec[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (block->pie_data.flags & UI_PIE_INVALID_DIR)
 | 
						if (block->pie_data.flags & UI_PIE_INVALID_DIR) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_but_pie_dir(but->pie_dir, vec);
 | 
						ui_but_pie_dir(but->pie_dir, vec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (saacos(dot_v2v2(vec, block->pie_data.pie_dir)) < angle_range)
 | 
						if (saacos(dot_v2v2(vec, block->pie_data.pie_dir)) < angle_range) {
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -195,8 +203,9 @@ bool ui_but_contains_point_px(const uiBut *but, const ARegion *ar, int x, int y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	uiBlock *block = but->block;
 | 
						uiBlock *block = but->block;
 | 
				
			||||||
	float mx, my;
 | 
						float mx, my;
 | 
				
			||||||
	if (!ui_region_contains_point_px(ar, x, y))
 | 
						if (!ui_region_contains_point_px(ar, x, y)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mx = x;
 | 
						mx = x;
 | 
				
			||||||
	my = y;
 | 
						my = y;
 | 
				
			||||||
@@ -246,10 +255,12 @@ uiBut *ui_but_find_mouse_over_ex(ARegion *ar, const int x, const int y, const bo
 | 
				
			|||||||
	uiBut *but, *butover = NULL;
 | 
						uiBut *but, *butover = NULL;
 | 
				
			||||||
	float mx, my;
 | 
						float mx, my;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//	if (!win->active)
 | 
					//	if (!win->active) {
 | 
				
			||||||
//		return NULL;
 | 
					//		return NULL;
 | 
				
			||||||
	if (!ui_region_contains_point_px(ar, x, y))
 | 
					//	}
 | 
				
			||||||
 | 
						if (!ui_region_contains_point_px(ar, x, y)) {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next) {
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		mx = x;
 | 
							mx = x;
 | 
				
			||||||
@@ -294,8 +305,9 @@ uiBut *ui_list_find_mouse_over_ex(ARegion *ar, int x, int y)
 | 
				
			|||||||
	uiBut *but;
 | 
						uiBut *but;
 | 
				
			||||||
	float mx, my;
 | 
						float mx, my;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ui_region_contains_point_px(ar, x, y))
 | 
						if (!ui_region_contains_point_px(ar, x, y)) {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next) {
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		mx = x;
 | 
							mx = x;
 | 
				
			||||||
@@ -328,7 +340,9 @@ uiBut *ui_but_prev(uiBut *but)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	while (but->prev) {
 | 
						while (but->prev) {
 | 
				
			||||||
		but = but->prev;
 | 
							but = but->prev;
 | 
				
			||||||
		if (ui_but_is_editable(but)) return but;
 | 
							if (ui_but_is_editable(but)) {
 | 
				
			||||||
 | 
								return but;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -337,7 +351,9 @@ uiBut *ui_but_next(uiBut *but)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	while (but->next) {
 | 
						while (but->next) {
 | 
				
			||||||
		but = but->next;
 | 
							but = but->next;
 | 
				
			||||||
		if (ui_but_is_editable(but)) return but;
 | 
							if (ui_but_is_editable(but)) {
 | 
				
			||||||
 | 
								return but;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -348,7 +364,9 @@ uiBut *ui_but_first(uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	but = block->buttons.first;
 | 
						but = block->buttons.first;
 | 
				
			||||||
	while (but) {
 | 
						while (but) {
 | 
				
			||||||
		if (ui_but_is_editable(but)) return but;
 | 
							if (ui_but_is_editable(but)) {
 | 
				
			||||||
 | 
								return but;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		but = but->next;
 | 
							but = but->next;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
@@ -360,7 +378,9 @@ uiBut *ui_but_last(uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	but = block->buttons.last;
 | 
						but = block->buttons.last;
 | 
				
			||||||
	while (but) {
 | 
						while (but) {
 | 
				
			||||||
		if (ui_but_is_editable(but)) return but;
 | 
							if (ui_but_is_editable(but)) {
 | 
				
			||||||
 | 
								return but;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		but = but->prev;
 | 
							but = but->prev;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
@@ -438,10 +458,13 @@ uiBut *ui_region_find_active_but(ARegion *ar)
 | 
				
			|||||||
	uiBlock *block;
 | 
						uiBlock *block;
 | 
				
			||||||
	uiBut *but;
 | 
						uiBut *but;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next)
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		for (but = block->buttons.first; but; but = but->next)
 | 
							for (but = block->buttons.first; but; but = but->next) {
 | 
				
			||||||
			if (but->active)
 | 
								if (but->active) {
 | 
				
			||||||
				return but;
 | 
									return but;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -461,8 +484,9 @@ bool ui_region_contains_point_px(const ARegion *ar, int x, int y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* check if the mouse is in the region */
 | 
						/* check if the mouse is in the region */
 | 
				
			||||||
	if (!BLI_rcti_isect_pt(&winrct, x, y)) {
 | 
						if (!BLI_rcti_isect_pt(&winrct, x, y)) {
 | 
				
			||||||
		for (uiBlock *block = ar->uiblocks.first; block; block = block->next)
 | 
							for (uiBlock *block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
			block->auto_open = false;
 | 
								block->auto_open = false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -178,8 +178,9 @@ static void ui_update_color_picker_buts_rgb(
 | 
				
			|||||||
	/* this updates button strings,
 | 
						/* this updates button strings,
 | 
				
			||||||
	 * is hackish... but button pointers are on stack of caller function */
 | 
						 * is hackish... but button pointers are on stack of caller function */
 | 
				
			||||||
	for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
						for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
				
			||||||
		if (bt->custom_data != cpicker)
 | 
							if (bt->custom_data != cpicker) {
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (bt->rnaprop) {
 | 
							if (bt->rnaprop) {
 | 
				
			||||||
			ui_but_v3_set(bt, rgb);
 | 
								ui_but_v3_set(bt, rgb);
 | 
				
			||||||
@@ -201,9 +202,15 @@ static void ui_update_color_picker_buts_rgb(
 | 
				
			|||||||
				IMB_colormanagement_scene_linear_to_srgb_v3(rgb_hex);
 | 
									IMB_colormanagement_scene_linear_to_srgb_v3(rgb_hex);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (rgb_hex[0] > 1.0f) rgb_hex[0] = modf(rgb_hex[0], &intpart);
 | 
								if (rgb_hex[0] > 1.0f) {
 | 
				
			||||||
			if (rgb_hex[1] > 1.0f) rgb_hex[1] = modf(rgb_hex[1], &intpart);
 | 
									rgb_hex[0] = modf(rgb_hex[0], &intpart);
 | 
				
			||||||
			if (rgb_hex[2] > 1.0f) rgb_hex[2] = modf(rgb_hex[2], &intpart);
 | 
								}
 | 
				
			||||||
 | 
								if (rgb_hex[1] > 1.0f) {
 | 
				
			||||||
 | 
									rgb_hex[1] = modf(rgb_hex[1], &intpart);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (rgb_hex[2] > 1.0f) {
 | 
				
			||||||
 | 
									rgb_hex[2] = modf(rgb_hex[2], &intpart);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			rgb_float_to_uchar(rgb_hex_uchar, rgb_hex);
 | 
								rgb_float_to_uchar(rgb_hex_uchar, rgb_hex);
 | 
				
			||||||
			BLI_snprintf(col, sizeof(col), "%02X%02X%02X", UNPACK3_EX((uint), rgb_hex_uchar, ));
 | 
								BLI_snprintf(col, sizeof(col), "%02X%02X%02X", UNPACK3_EX((uint), rgb_hex_uchar, ));
 | 
				
			||||||
@@ -252,8 +259,9 @@ static void ui_colorpicker_rna_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(a
 | 
				
			|||||||
		        but, but->block, but->custom_data, rgb);
 | 
							        but, but->block, but->custom_data, rgb);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (popup)
 | 
						if (popup) {
 | 
				
			||||||
		popup->menuretval = UI_RETURN_UPDATE;
 | 
							popup->menuretval = UI_RETURN_UPDATE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ui_color_wheel_rna_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(arg))
 | 
					static void ui_color_wheel_rna_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(arg))
 | 
				
			||||||
@@ -271,8 +279,9 @@ static void ui_color_wheel_rna_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(a
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ui_update_color_picker_buts_rgb(but, but->block, cpicker, rgb);
 | 
						ui_update_color_picker_buts_rgb(but, but->block, cpicker, rgb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (popup)
 | 
						if (popup) {
 | 
				
			||||||
		popup->menuretval = UI_RETURN_UPDATE;
 | 
							popup->menuretval = UI_RETURN_UPDATE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ui_colorpicker_hex_rna_cb(bContext *UNUSED(C), void *bt1, void *hexcl)
 | 
					static void ui_colorpicker_hex_rna_cb(bContext *UNUSED(C), void *bt1, void *hexcl)
 | 
				
			||||||
@@ -292,8 +301,9 @@ static void ui_colorpicker_hex_rna_cb(bContext *UNUSED(C), void *bt1, void *hexc
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ui_update_color_picker_buts_rgb(but, but->block, cpicker, rgb);
 | 
						ui_update_color_picker_buts_rgb(but, but->block, cpicker, rgb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (popup)
 | 
						if (popup) {
 | 
				
			||||||
		popup->menuretval = UI_RETURN_UPDATE;
 | 
							popup->menuretval = UI_RETURN_UPDATE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ui_popup_close_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(arg))
 | 
					static void ui_popup_close_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(arg))
 | 
				
			||||||
@@ -589,10 +599,12 @@ static int ui_colorpicker_small_wheel_cb(const bContext *UNUSED(C), uiBlock *blo
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	float add = 0.0f;
 | 
						float add = 0.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (event->type == WHEELUPMOUSE)
 | 
						if (event->type == WHEELUPMOUSE) {
 | 
				
			||||||
		add = 0.05f;
 | 
							add = 0.05f;
 | 
				
			||||||
	else if (event->type == WHEELDOWNMOUSE)
 | 
						}
 | 
				
			||||||
 | 
						else if (event->type == WHEELDOWNMOUSE) {
 | 
				
			||||||
		add = -0.05f;
 | 
							add = -0.05f;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (add != 0.0f) {
 | 
						if (add != 0.0f) {
 | 
				
			||||||
		uiBut *but;
 | 
							uiBut *but;
 | 
				
			||||||
@@ -615,8 +627,9 @@ static int ui_colorpicker_small_wheel_cb(const bContext *UNUSED(C), uiBlock *blo
 | 
				
			|||||||
				ui_but_v3_set(but, rgb);
 | 
									ui_but_v3_set(but, rgb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				ui_update_color_picker_buts_rgb(but, block, cpicker, rgb);
 | 
									ui_update_color_picker_buts_rgb(but, block, cpicker, rgb);
 | 
				
			||||||
				if (popup)
 | 
									if (popup) {
 | 
				
			||||||
					popup->menuretval = UI_RETURN_UPDATE;
 | 
										popup->menuretval = UI_RETURN_UPDATE;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				return 1;
 | 
									return 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,8 +75,9 @@ static uiBlock *ui_block_func_PIE(bContext *UNUSED(C), uiPopupBlockHandle *handl
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* in some cases we create the block before the region,
 | 
						/* in some cases we create the block before the region,
 | 
				
			||||||
	 * so we set it delayed here if necessary */
 | 
						 * so we set it delayed here if necessary */
 | 
				
			||||||
	if (BLI_findindex(&handle->region->uiblocks, block) == -1)
 | 
						if (BLI_findindex(&handle->region->uiblocks, block) == -1) {
 | 
				
			||||||
		UI_block_region_set(block, handle->region);
 | 
							UI_block_region_set(block, handle->region);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_block_layout_resolve(block, &width, &height);
 | 
						UI_block_layout_resolve(block, &width, &height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -134,8 +135,9 @@ uiPieMenu *UI_pie_menu_begin(struct bContext *C, const char *title, int icon, co
 | 
				
			|||||||
				event_type = EVENT_NONE;
 | 
									event_type = EVENT_NONE;
 | 
				
			||||||
				pie->block_radial->pie_data.flags |= UI_PIE_CLICK_STYLE;
 | 
									pie->block_radial->pie_data.flags |= UI_PIE_CLICK_STYLE;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else {
 | 
				
			||||||
				event_type = win->last_pie_event;
 | 
									event_type = win->last_pie_event;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			event_type = event->type;
 | 
								event_type = event->type;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -480,8 +480,9 @@ void UI_popup_menu_reports(bContext *C, ReportList *reports)
 | 
				
			|||||||
	uiPopupMenu *pup = NULL;
 | 
						uiPopupMenu *pup = NULL;
 | 
				
			||||||
	uiLayout *layout;
 | 
						uiLayout *layout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!CTX_wm_window(C))
 | 
						if (!CTX_wm_window(C)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (report = reports->list.first; report; report = report->next) {
 | 
						for (report = reports->list.first; report; report = report->next) {
 | 
				
			||||||
		int icon;
 | 
							int icon;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,8 +153,9 @@ static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, v
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* If menu slides out of other menu, override direction. */
 | 
							/* If menu slides out of other menu, override direction. */
 | 
				
			||||||
		bool slideout = ui_block_is_menu(pup->but->block);
 | 
							bool slideout = ui_block_is_menu(pup->but->block);
 | 
				
			||||||
		if (slideout)
 | 
							if (slideout) {
 | 
				
			||||||
			UI_block_direction_set(block, UI_DIR_RIGHT);
 | 
								UI_block_direction_set(block, UI_DIR_RIGHT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Store the button location for positioning the popover arrow hint. */
 | 
							/* Store the button location for positioning the popover arrow hint. */
 | 
				
			||||||
		if (!handle->refresh) {
 | 
							if (!handle->refresh) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,10 +95,12 @@ static void ui_popup_block_position(wmWindow *window, ARegion *butregion, uiBut
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* widget_roundbox_set has this correction too, keep in sync */
 | 
							/* widget_roundbox_set has this correction too, keep in sync */
 | 
				
			||||||
		if (but->type != UI_BTYPE_PULLDOWN) {
 | 
							if (but->type != UI_BTYPE_PULLDOWN) {
 | 
				
			||||||
			if (but->drawflag & UI_BUT_ALIGN_TOP)
 | 
								if (but->drawflag & UI_BUT_ALIGN_TOP) {
 | 
				
			||||||
				butrct.ymax += U.pixelsize;
 | 
									butrct.ymax += U.pixelsize;
 | 
				
			||||||
			if (but->drawflag & UI_BUT_ALIGN_LEFT)
 | 
								}
 | 
				
			||||||
 | 
								if (but->drawflag & UI_BUT_ALIGN_LEFT) {
 | 
				
			||||||
				butrct.xmin -= U.pixelsize;
 | 
									butrct.xmin -= U.pixelsize;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		handle->prev_butrct = butrct;
 | 
							handle->prev_butrct = butrct;
 | 
				
			||||||
@@ -148,44 +150,46 @@ static void ui_popup_block_position(wmWindow *window, ARegion *butregion, uiBut
 | 
				
			|||||||
		const float max_size_y = max_ff(size_y, handle->max_size_y);
 | 
							const float max_size_y = max_ff(size_y, handle->max_size_y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* check if there's space at all */
 | 
							/* check if there's space at all */
 | 
				
			||||||
		if (butrct.xmin - max_size_x + center_x > 0.0f) left = 1;
 | 
							if (butrct.xmin - max_size_x + center_x > 0.0f)  { left = 1; }
 | 
				
			||||||
		if (butrct.xmax + max_size_x - center_x < win_x) right = 1;
 | 
							if (butrct.xmax + max_size_x - center_x < win_x) { right = 1; }
 | 
				
			||||||
		if (butrct.ymin - max_size_y + center_y > 0.0f) down = 1;
 | 
							if (butrct.ymin - max_size_y + center_y > 0.0f)  { down = 1; }
 | 
				
			||||||
		if (butrct.ymax + max_size_y - center_y < win_y) top = 1;
 | 
							if (butrct.ymax + max_size_y - center_y < win_y) { top = 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (top == 0 && down == 0) {
 | 
							if (top == 0 && down == 0) {
 | 
				
			||||||
			if (butrct.ymin - max_size_y < win_y - butrct.ymax - max_size_y)
 | 
								if (butrct.ymin - max_size_y < win_y - butrct.ymax - max_size_y) {
 | 
				
			||||||
				top = 1;
 | 
									top = 1;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				down = 1;
 | 
									down = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		dir1 = (block->direction & UI_DIR_ALL);
 | 
							dir1 = (block->direction & UI_DIR_ALL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Secondary directions. */
 | 
							/* Secondary directions. */
 | 
				
			||||||
		if (dir1 & (UI_DIR_UP | UI_DIR_DOWN)) {
 | 
							if (dir1 & (UI_DIR_UP | UI_DIR_DOWN)) {
 | 
				
			||||||
			if      (dir1 & UI_DIR_LEFT)  dir2 = UI_DIR_LEFT;
 | 
								if      (dir1 & UI_DIR_LEFT)  { dir2 = UI_DIR_LEFT; }
 | 
				
			||||||
			else if (dir1 & UI_DIR_RIGHT) dir2 = UI_DIR_RIGHT;
 | 
								else if (dir1 & UI_DIR_RIGHT) { dir2 = UI_DIR_RIGHT; }
 | 
				
			||||||
			dir1 &= (UI_DIR_UP | UI_DIR_DOWN);
 | 
								dir1 &= (UI_DIR_UP | UI_DIR_DOWN);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((dir2 == 0) && (dir1 == UI_DIR_LEFT || dir1 == UI_DIR_RIGHT)) dir2 = UI_DIR_DOWN;
 | 
							if ((dir2 == 0) && (dir1 == UI_DIR_LEFT || dir1 == UI_DIR_RIGHT)) { dir2 = UI_DIR_DOWN; }
 | 
				
			||||||
		if ((dir2 == 0) && (dir1 == UI_DIR_UP   || dir1 == UI_DIR_DOWN))  dir2 = UI_DIR_LEFT;
 | 
							if ((dir2 == 0) && (dir1 == UI_DIR_UP   || dir1 == UI_DIR_DOWN))  { dir2 = UI_DIR_LEFT; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* no space at all? don't change */
 | 
							/* no space at all? don't change */
 | 
				
			||||||
		if (left || right) {
 | 
							if (left || right) {
 | 
				
			||||||
			if (dir1 == UI_DIR_LEFT  && left == 0)  dir1 = UI_DIR_RIGHT;
 | 
								if (dir1 == UI_DIR_LEFT  && left == 0)  { dir1 = UI_DIR_RIGHT; }
 | 
				
			||||||
			if (dir1 == UI_DIR_RIGHT && right == 0) dir1 = UI_DIR_LEFT;
 | 
								if (dir1 == UI_DIR_RIGHT && right == 0) { dir1 = UI_DIR_LEFT; }
 | 
				
			||||||
			/* this is aligning, not append! */
 | 
								/* this is aligning, not append! */
 | 
				
			||||||
			if (dir2 == UI_DIR_LEFT  && right == 0) dir2 = UI_DIR_RIGHT;
 | 
								if (dir2 == UI_DIR_LEFT  && right == 0) { dir2 = UI_DIR_RIGHT; }
 | 
				
			||||||
			if (dir2 == UI_DIR_RIGHT && left == 0)  dir2 = UI_DIR_LEFT;
 | 
								if (dir2 == UI_DIR_RIGHT && left == 0)  { dir2 = UI_DIR_LEFT; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (down || top) {
 | 
							if (down || top) {
 | 
				
			||||||
			if (dir1 == UI_DIR_UP   && top == 0)  dir1 = UI_DIR_DOWN;
 | 
								if (dir1 == UI_DIR_UP   && top == 0)  { dir1 = UI_DIR_DOWN; }
 | 
				
			||||||
			if (dir1 == UI_DIR_DOWN && down == 0) dir1 = UI_DIR_UP;
 | 
								if (dir1 == UI_DIR_DOWN && down == 0) { dir1 = UI_DIR_UP; }
 | 
				
			||||||
			BLI_assert(dir2 != UI_DIR_UP);
 | 
								BLI_assert(dir2 != UI_DIR_UP);
 | 
				
			||||||
//			if (dir2 == UI_DIR_UP   && top == 0)  dir2 = UI_DIR_DOWN;
 | 
					//			if (dir2 == UI_DIR_UP   && top == 0)  { dir2 = UI_DIR_DOWN; }
 | 
				
			||||||
			if (dir2 == UI_DIR_DOWN && down == 0) dir2 = UI_DIR_UP;
 | 
								if (dir2 == UI_DIR_DOWN && down == 0) { dir2 = UI_DIR_UP; }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		handle->prev_dir1 = dir1;
 | 
							handle->prev_dir1 = dir1;
 | 
				
			||||||
@@ -203,18 +207,18 @@ static void ui_popup_block_position(wmWindow *window, ARegion *butregion, uiBut
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (dir1 == UI_DIR_LEFT) {
 | 
						if (dir1 == UI_DIR_LEFT) {
 | 
				
			||||||
		offset_x = butrct.xmin - block->rect.xmax;
 | 
							offset_x = butrct.xmin - block->rect.xmax;
 | 
				
			||||||
		if (dir2 == UI_DIR_UP) offset_y = butrct.ymin - block->rect.ymin - center_y - UI_MENU_PADDING;
 | 
							if (dir2 == UI_DIR_UP) { offset_y = butrct.ymin - block->rect.ymin - center_y - UI_MENU_PADDING; }
 | 
				
			||||||
		else                   offset_y = butrct.ymax - block->rect.ymax + center_y + UI_MENU_PADDING;
 | 
								else                   { offset_y = butrct.ymax - block->rect.ymax + center_y + UI_MENU_PADDING; }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (dir1 == UI_DIR_RIGHT) {
 | 
						else if (dir1 == UI_DIR_RIGHT) {
 | 
				
			||||||
		offset_x = butrct.xmax - block->rect.xmin;
 | 
							offset_x = butrct.xmax - block->rect.xmin;
 | 
				
			||||||
		if (dir2 == UI_DIR_UP) offset_y = butrct.ymin - block->rect.ymin - center_y - UI_MENU_PADDING;
 | 
							if (dir2 == UI_DIR_UP) { offset_y = butrct.ymin - block->rect.ymin - center_y - UI_MENU_PADDING; }
 | 
				
			||||||
		else                   offset_y = butrct.ymax - block->rect.ymax + center_y + UI_MENU_PADDING;
 | 
							else                   { offset_y = butrct.ymax - block->rect.ymax + center_y + UI_MENU_PADDING; }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (dir1 == UI_DIR_UP) {
 | 
						else if (dir1 == UI_DIR_UP) {
 | 
				
			||||||
		offset_y = butrct.ymax - block->rect.ymin;
 | 
							offset_y = butrct.ymax - block->rect.ymin;
 | 
				
			||||||
		if (dir2 == UI_DIR_RIGHT) offset_x = butrct.xmax - block->rect.xmax + center_x;
 | 
							if (dir2 == UI_DIR_RIGHT) { offset_x = butrct.xmax - block->rect.xmax + center_x; }
 | 
				
			||||||
		else                      offset_x = butrct.xmin - block->rect.xmin - center_x;
 | 
							else                      { offset_x = butrct.xmin - block->rect.xmin - center_x; }
 | 
				
			||||||
		/* changed direction? */
 | 
							/* changed direction? */
 | 
				
			||||||
		if ((dir1 & block->direction) == 0) {
 | 
							if ((dir1 & block->direction) == 0) {
 | 
				
			||||||
			/* TODO: still do */
 | 
								/* TODO: still do */
 | 
				
			||||||
@@ -223,8 +227,8 @@ static void ui_popup_block_position(wmWindow *window, ARegion *butregion, uiBut
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else if (dir1 == UI_DIR_DOWN) {
 | 
						else if (dir1 == UI_DIR_DOWN) {
 | 
				
			||||||
		offset_y = butrct.ymin - block->rect.ymax;
 | 
							offset_y = butrct.ymin - block->rect.ymax;
 | 
				
			||||||
		if (dir2 == UI_DIR_RIGHT) offset_x = butrct.xmax - block->rect.xmax + center_x;
 | 
							if (dir2 == UI_DIR_RIGHT) { offset_x = butrct.xmax - block->rect.xmax + center_x; }
 | 
				
			||||||
		else                      offset_x = butrct.xmin - block->rect.xmin - center_x;
 | 
							else                      { offset_x = butrct.xmin - block->rect.xmin - center_x; }
 | 
				
			||||||
		/* changed direction? */
 | 
							/* changed direction? */
 | 
				
			||||||
		if ((dir1 & block->direction) == 0) {
 | 
							if ((dir1 & block->direction) == 0) {
 | 
				
			||||||
			/* TODO: still do */
 | 
								/* TODO: still do */
 | 
				
			||||||
@@ -257,23 +261,43 @@ static void ui_popup_block_position(wmWindow *window, ARegion *butregion, uiBut
 | 
				
			|||||||
		/* when you are outside parent button, safety there should be smaller */
 | 
							/* when you are outside parent button, safety there should be smaller */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* parent button to left */
 | 
							/* parent button to left */
 | 
				
			||||||
		if (midx < block->rect.xmin) block->safety.xmin = block->rect.xmin - 3;
 | 
							if (midx < block->rect.xmin) {
 | 
				
			||||||
		else block->safety.xmin = block->rect.xmin - 40;
 | 
								block->safety.xmin = block->rect.xmin - 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								block->safety.xmin = block->rect.xmin - 40;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		/* parent button to right */
 | 
							/* parent button to right */
 | 
				
			||||||
		if (midx > block->rect.xmax) block->safety.xmax = block->rect.xmax + 3;
 | 
							if (midx > block->rect.xmax) {
 | 
				
			||||||
		else block->safety.xmax = block->rect.xmax + 40;
 | 
								block->safety.xmax = block->rect.xmax + 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								block->safety.xmax = block->rect.xmax + 40;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* parent button on bottom */
 | 
							/* parent button on bottom */
 | 
				
			||||||
		if (midy < block->rect.ymin) block->safety.ymin = block->rect.ymin - 3;
 | 
							if (midy < block->rect.ymin) {
 | 
				
			||||||
		else block->safety.ymin = block->rect.ymin - 40;
 | 
								block->safety.ymin = block->rect.ymin - 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								block->safety.ymin = block->rect.ymin - 40;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		/* parent button on top */
 | 
							/* parent button on top */
 | 
				
			||||||
		if (midy > block->rect.ymax) block->safety.ymax = block->rect.ymax + 3;
 | 
							if (midy > block->rect.ymax) {
 | 
				
			||||||
		else block->safety.ymax = block->rect.ymax + 40;
 | 
								block->safety.ymax = block->rect.ymax + 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								block->safety.ymax = block->rect.ymax + 40;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* exception for switched pulldowns... */
 | 
							/* exception for switched pulldowns... */
 | 
				
			||||||
		if (dir1 && (dir1 & block->direction) == 0) {
 | 
							if (dir1 && (dir1 & block->direction) == 0) {
 | 
				
			||||||
			if (dir2 == UI_DIR_RIGHT) block->safety.xmax = block->rect.xmax + 3;
 | 
								if (dir2 == UI_DIR_RIGHT) {
 | 
				
			||||||
			if (dir2 == UI_DIR_LEFT)  block->safety.xmin = block->rect.xmin - 3;
 | 
									block->safety.xmax = block->rect.xmax + 3;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (dir2 == UI_DIR_LEFT) {
 | 
				
			||||||
 | 
									block->safety.xmin = block->rect.xmin - 3;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		block->direction = dir1;
 | 
							block->direction = dir1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -335,8 +359,9 @@ static void ui_block_region_draw(const bContext *C, ARegion *ar)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	uiBlock *block;
 | 
						uiBlock *block;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (block = ar->uiblocks.first; block; block = block->next)
 | 
						for (block = ar->uiblocks.first; block; block = block->next) {
 | 
				
			||||||
		UI_block_draw(C, block);
 | 
							UI_block_draw(C, block);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -409,11 +434,13 @@ void ui_popup_block_scrolltest(uiBlock *block)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	block->flag &= ~(UI_BLOCK_CLIPBOTTOM | UI_BLOCK_CLIPTOP);
 | 
						block->flag &= ~(UI_BLOCK_CLIPBOTTOM | UI_BLOCK_CLIPTOP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (bt = block->buttons.first; bt; bt = bt->next)
 | 
						for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
				
			||||||
		bt->flag &= ~UI_SCROLLED;
 | 
							bt->flag &= ~UI_SCROLLED;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (block->buttons.first == block->buttons.last)
 | 
						if (block->buttons.first == block->buttons.last) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* mark buttons that are outside boundary */
 | 
						/* mark buttons that are outside boundary */
 | 
				
			||||||
	for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
						for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
				
			||||||
@@ -430,12 +457,14 @@ void ui_popup_block_scrolltest(uiBlock *block)
 | 
				
			|||||||
	/* mark buttons overlapping arrows, if we have them */
 | 
						/* mark buttons overlapping arrows, if we have them */
 | 
				
			||||||
	for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
						for (bt = block->buttons.first; bt; bt = bt->next) {
 | 
				
			||||||
		if (block->flag & UI_BLOCK_CLIPBOTTOM) {
 | 
							if (block->flag & UI_BLOCK_CLIPBOTTOM) {
 | 
				
			||||||
			if (bt->rect.ymin < block->rect.ymin + UI_MENU_SCROLL_ARROW)
 | 
								if (bt->rect.ymin < block->rect.ymin + UI_MENU_SCROLL_ARROW) {
 | 
				
			||||||
				bt->flag |= UI_SCROLLED;
 | 
									bt->flag |= UI_SCROLLED;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (block->flag & UI_BLOCK_CLIPTOP) {
 | 
							if (block->flag & UI_BLOCK_CLIPTOP) {
 | 
				
			||||||
			if (bt->rect.ymax > block->rect.ymax - UI_MENU_SCROLL_ARROW)
 | 
								if (bt->rect.ymax > block->rect.ymax - UI_MENU_SCROLL_ARROW) {
 | 
				
			||||||
				bt->flag |= UI_SCROLLED;
 | 
									bt->flag |= UI_SCROLLED;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -454,8 +483,9 @@ static void ui_popup_block_remove(bContext *C, uiPopupBlockHandle *handle)
 | 
				
			|||||||
		WM_event_add_mousemove(C);
 | 
							WM_event_add_mousemove(C);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (handle->scrolltimer)
 | 
						if (handle->scrolltimer) {
 | 
				
			||||||
		WM_event_remove_timer(CTX_wm_manager(C), win, handle->scrolltimer);
 | 
							WM_event_remove_timer(CTX_wm_manager(C), win, handle->scrolltimer);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -485,10 +515,12 @@ uiBlock *ui_popup_block_refresh(
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* create ui block */
 | 
						/* create ui block */
 | 
				
			||||||
	if (create_func)
 | 
						if (create_func) {
 | 
				
			||||||
		block = create_func(C, ar, arg);
 | 
							block = create_func(C, ar, arg);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		block = handle_create_func(C, handle, arg);
 | 
							block = handle_create_func(C, handle, arg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* callbacks _must_ leave this for us, otherwise we can't call UI_block_update_from_old */
 | 
						/* callbacks _must_ leave this for us, otherwise we can't call UI_block_update_from_old */
 | 
				
			||||||
	BLI_assert(!block->endblock);
 | 
						BLI_assert(!block->endblock);
 | 
				
			||||||
@@ -503,8 +535,9 @@ uiBlock *ui_popup_block_refresh(
 | 
				
			|||||||
		MEM_freeN(handle);
 | 
							MEM_freeN(handle);
 | 
				
			||||||
		handle = block->handle;
 | 
							handle = block->handle;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		block->handle = handle;
 | 
							block->handle = handle;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ar->regiondata = handle;
 | 
						ar->regiondata = handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -550,13 +583,21 @@ uiBlock *ui_popup_block_refresh(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		/* only try translation if area is large enough */
 | 
							/* only try translation if area is large enough */
 | 
				
			||||||
		if (BLI_rctf_size_x(&block->rect) < winx - (2.0f * win_width)) {
 | 
							if (BLI_rctf_size_x(&block->rect) < winx - (2.0f * win_width)) {
 | 
				
			||||||
			if (block->rect.xmin < win_width )   x_offset += win_width - block->rect.xmin;
 | 
								if (block->rect.xmin < win_width ) {
 | 
				
			||||||
			if (block->rect.xmax > winx - win_width) x_offset += winx - win_width - block->rect.xmax;
 | 
									x_offset += win_width - block->rect.xmin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (block->rect.xmax > winx - win_width) {
 | 
				
			||||||
 | 
									x_offset += winx - win_width - block->rect.xmax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (BLI_rctf_size_y(&block->rect) < winy - (2.0f * win_width)) {
 | 
							if (BLI_rctf_size_y(&block->rect) < winy - (2.0f * win_width)) {
 | 
				
			||||||
			if (block->rect.ymin < win_width )   y_offset += win_width - block->rect.ymin;
 | 
								if (block->rect.ymin < win_width ) {
 | 
				
			||||||
			if (block->rect.ymax > winy - win_width) y_offset += winy - win_width - block->rect.ymax;
 | 
									y_offset += win_width - block->rect.ymin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (block->rect.ymax > winy - win_width) {
 | 
				
			||||||
 | 
									y_offset += winy - win_width - block->rect.ymax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/* if we are offsetting set up initial data for timeout functionality */
 | 
							/* if we are offsetting set up initial data for timeout functionality */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -566,8 +607,9 @@ uiBlock *ui_popup_block_refresh(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			UI_block_translate(block, x_offset, y_offset);
 | 
								UI_block_translate(block, x_offset, y_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (U.pie_initial_timeout > 0)
 | 
								if (U.pie_initial_timeout > 0) {
 | 
				
			||||||
				block->pie_data.flags |= UI_PIE_INITIAL_DIRECTION;
 | 
									block->pie_data.flags |= UI_PIE_INITIAL_DIRECTION;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ar->winrct.xmin = 0;
 | 
							ar->winrct.xmin = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,8 +108,9 @@ bool UI_search_item_add(uiSearchItems *items, const char *name, void *poin, int
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* hijack for finding active item */
 | 
						/* hijack for finding active item */
 | 
				
			||||||
	if (items->active) {
 | 
						if (items->active) {
 | 
				
			||||||
		if (poin == items->active)
 | 
							if (poin == items->active) {
 | 
				
			||||||
			items->offset_i = items->totitem;
 | 
								items->offset_i = items->totitem;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		items->totitem++;
 | 
							items->totitem++;
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -125,12 +126,15 @@ bool UI_search_item_add(uiSearchItems *items, const char *name, void *poin, int
 | 
				
			|||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (items->names)
 | 
						if (items->names) {
 | 
				
			||||||
		BLI_strncpy(items->names[items->totitem], name, items->maxstrlen);
 | 
							BLI_strncpy(items->names[items->totitem], name, items->maxstrlen);
 | 
				
			||||||
	if (items->pointers)
 | 
						}
 | 
				
			||||||
 | 
						if (items->pointers) {
 | 
				
			||||||
		items->pointers[items->totitem] = poin;
 | 
							items->pointers[items->totitem] = poin;
 | 
				
			||||||
	if (items->icons)
 | 
						}
 | 
				
			||||||
 | 
						if (items->icons) {
 | 
				
			||||||
		items->icons[items->totitem] = iconid;
 | 
							items->icons[items->totitem] = iconid;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	items->totitem++;
 | 
						items->totitem++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -275,8 +279,9 @@ void ui_searchbox_event(bContext *C, ARegion *ar, uiBut *but, const wmEvent *eve
 | 
				
			|||||||
	uiSearchboxData *data = ar->regiondata;
 | 
						uiSearchboxData *data = ar->regiondata;
 | 
				
			||||||
	int type = event->type, val = event->val;
 | 
						int type = event->type, val = event->val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (type == MOUSEPAN)
 | 
						if (type == MOUSEPAN) {
 | 
				
			||||||
		ui_pan_to_scroll(event, &type, &val);
 | 
							ui_pan_to_scroll(event, &type, &val);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (type) {
 | 
						switch (type) {
 | 
				
			||||||
		case WHEELUPMOUSE:
 | 
							case WHEELUPMOUSE:
 | 
				
			||||||
@@ -354,8 +359,9 @@ void ui_searchbox_update(bContext *C, ARegion *ar, uiBut *but, const bool reset)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* callback */
 | 
						/* callback */
 | 
				
			||||||
	if (but->search_func)
 | 
						if (but->search_func) {
 | 
				
			||||||
		but->search_func(C, but->search_arg, but->editstr, &data->items);
 | 
							but->search_func(C, but->search_arg, but->editstr, &data->items);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* handle case where editstr is equal to one of items */
 | 
						/* handle case where editstr is equal to one of items */
 | 
				
			||||||
	if (reset && data->active == -1) {
 | 
						if (reset && data->active == -1) {
 | 
				
			||||||
@@ -369,8 +375,9 @@ void ui_searchbox_update(bContext *C, ARegion *ar, uiBut *but, const bool reset)
 | 
				
			|||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (data->items.totitem == 1 && but->editstr[0])
 | 
							if (data->items.totitem == 1 && but->editstr[0]) {
 | 
				
			||||||
			data->active = 0;
 | 
								data->active = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* validate selected item */
 | 
						/* validate selected item */
 | 
				
			||||||
@@ -521,8 +528,9 @@ ARegion *ui_searchbox_create_generic(bContext *C, ARegion *butregion, uiBut *but
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* special case, hardcoded feature, not draw backdrop when called from menus,
 | 
						/* special case, hardcoded feature, not draw backdrop when called from menus,
 | 
				
			||||||
	 * assume for design that popup already added it */
 | 
						 * assume for design that popup already added it */
 | 
				
			||||||
	if (but->block->flag & UI_BLOCK_SEARCH_MENU)
 | 
						if (but->block->flag & UI_BLOCK_SEARCH_MENU) {
 | 
				
			||||||
		data->noback = true;
 | 
							data->noback = true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->a1 > 0 && but->a2 > 0) {
 | 
						if (but->a1 > 0 && but->a2 > 0) {
 | 
				
			||||||
		data->preview = true;
 | 
							data->preview = true;
 | 
				
			||||||
@@ -605,8 +613,9 @@ ARegion *ui_searchbox_create_generic(bContext *C, ARegion *butregion, uiBut *but
 | 
				
			|||||||
		if (rect_i.ymin < 0) {
 | 
							if (rect_i.ymin < 0) {
 | 
				
			||||||
			int newy1 = but->rect.ymax + ofsy;
 | 
								int newy1 = but->rect.ymax + ofsy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (butregion->v2d.cur.xmin != butregion->v2d.cur.xmax)
 | 
								if (butregion->v2d.cur.xmin != butregion->v2d.cur.xmax) {
 | 
				
			||||||
				newy1 = UI_view2d_view_to_region_y(&butregion->v2d, newy1);
 | 
									newy1 = UI_view2d_view_to_region_y(&butregion->v2d, newy1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			newy1 += butregion->winrct.ymin;
 | 
								newy1 += butregion->winrct.ymin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -645,8 +654,9 @@ ARegion *ui_searchbox_create_generic(bContext *C, ARegion *butregion, uiBut *but
 | 
				
			|||||||
	data->items.names = MEM_callocN(data->items.maxitem * sizeof(void *), "search names");
 | 
						data->items.names = MEM_callocN(data->items.maxitem * sizeof(void *), "search names");
 | 
				
			||||||
	data->items.pointers = MEM_callocN(data->items.maxitem * sizeof(void *), "search pointers");
 | 
						data->items.pointers = MEM_callocN(data->items.maxitem * sizeof(void *), "search pointers");
 | 
				
			||||||
	data->items.icons = MEM_callocN(data->items.maxitem * sizeof(int), "search icons");
 | 
						data->items.icons = MEM_callocN(data->items.maxitem * sizeof(int), "search icons");
 | 
				
			||||||
	for (i = 0; i < data->items.maxitem; i++)
 | 
						for (i = 0; i < data->items.maxitem; i++) {
 | 
				
			||||||
		data->items.names[i] = MEM_callocN(but->hardmax + 1, "search pointers");
 | 
							data->items.names[i] = MEM_callocN(but->hardmax + 1, "search pointers");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ar;
 | 
						return ar;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -784,8 +794,9 @@ void ui_but_search_refresh(uiBut *but)
 | 
				
			|||||||
	items->maxitem = 10;
 | 
						items->maxitem = 10;
 | 
				
			||||||
	items->maxstrlen = 256;
 | 
						items->maxstrlen = 256;
 | 
				
			||||||
	items->names = MEM_callocN(items->maxitem * sizeof(void *), "search names");
 | 
						items->names = MEM_callocN(items->maxitem * sizeof(void *), "search names");
 | 
				
			||||||
	for (x1 = 0; x1 < items->maxitem; x1++)
 | 
						for (x1 = 0; x1 < items->maxitem; x1++) {
 | 
				
			||||||
		items->names[x1] = MEM_callocN(but->hardmax + 1, "search names");
 | 
							items->names[x1] = MEM_callocN(but->hardmax + 1, "search names");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->search_func(but->block->evil_C, but->search_arg, but->drawstr, items);
 | 
						but->search_func(but->block->evil_C, but->search_arg, but->drawstr, items);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -839,20 +839,27 @@ static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Free strinfo's... */
 | 
						/* Free strinfo's... */
 | 
				
			||||||
	if (but_tip.strinfo)
 | 
						if (but_tip.strinfo) {
 | 
				
			||||||
		MEM_freeN(but_tip.strinfo);
 | 
							MEM_freeN(but_tip.strinfo);
 | 
				
			||||||
	if (enum_label.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (enum_label.strinfo) {
 | 
				
			||||||
		MEM_freeN(enum_label.strinfo);
 | 
							MEM_freeN(enum_label.strinfo);
 | 
				
			||||||
	if (enum_tip.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (enum_tip.strinfo) {
 | 
				
			||||||
		MEM_freeN(enum_tip.strinfo);
 | 
							MEM_freeN(enum_tip.strinfo);
 | 
				
			||||||
	if (op_keymap.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (op_keymap.strinfo) {
 | 
				
			||||||
		MEM_freeN(op_keymap.strinfo);
 | 
							MEM_freeN(op_keymap.strinfo);
 | 
				
			||||||
	if (prop_keymap.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (prop_keymap.strinfo) {
 | 
				
			||||||
		MEM_freeN(prop_keymap.strinfo);
 | 
							MEM_freeN(prop_keymap.strinfo);
 | 
				
			||||||
	if (rna_struct.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (rna_struct.strinfo) {
 | 
				
			||||||
		MEM_freeN(rna_struct.strinfo);
 | 
							MEM_freeN(rna_struct.strinfo);
 | 
				
			||||||
	if (rna_prop.strinfo)
 | 
						}
 | 
				
			||||||
 | 
						if (rna_prop.strinfo) {
 | 
				
			||||||
		MEM_freeN(rna_prop.strinfo);
 | 
							MEM_freeN(rna_prop.strinfo);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data->fields_len == 0) {
 | 
						if (data->fields_len == 0) {
 | 
				
			||||||
		MEM_freeN(data);
 | 
							MEM_freeN(data);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,8 +58,9 @@ void ui_region_temp_remove(bContext *C, bScreen *sc, ARegion *ar)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	BLI_assert(ar->regiontype == RGN_TYPE_TEMPORARY);
 | 
						BLI_assert(ar->regiontype == RGN_TYPE_TEMPORARY);
 | 
				
			||||||
	BLI_assert(BLI_findindex(&sc->regionbase, ar) != -1);
 | 
						BLI_assert(BLI_findindex(&sc->regionbase, ar) != -1);
 | 
				
			||||||
	if (win)
 | 
						if (win) {
 | 
				
			||||||
		wm_draw_region_clear(win, ar);
 | 
							wm_draw_region_clear(win, ar);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ED_region_exit(C, ar);
 | 
						ED_region_exit(C, ar);
 | 
				
			||||||
	BKE_area_region_free(NULL, ar);     /* NULL: no spacetype */
 | 
						BKE_area_region_free(NULL, ar);     /* NULL: no spacetype */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -257,16 +257,19 @@ void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const ch
 | 
				
			|||||||
		BLF_shadow_offset(fs->uifont_id, fs->shadx, fs->shady);
 | 
							BLF_shadow_offset(fs->uifont_id, fs->shadx, fs->shady);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
						BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
				
			||||||
	BLF_disable(fs->uifont_id, BLF_ROTATION);
 | 
						BLF_disable(fs->uifont_id, BLF_ROTATION);
 | 
				
			||||||
	BLF_disable(fs->uifont_id, BLF_CLIPPING);
 | 
						BLF_disable(fs->uifont_id, BLF_CLIPPING);
 | 
				
			||||||
	if (fs->shadow)
 | 
						if (fs->shadow) {
 | 
				
			||||||
		BLF_disable(fs->uifont_id, BLF_SHADOW);
 | 
							BLF_disable(fs->uifont_id, BLF_SHADOW);
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						}
 | 
				
			||||||
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -277,16 +280,18 @@ void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const ch
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const char *str, const uchar col[4])
 | 
					void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const char *str, const uchar col[4])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_fontstyle_set(fs);
 | 
						UI_fontstyle_set(fs);
 | 
				
			||||||
	BLF_position(fs->uifont_id, x, y, 0.0f);
 | 
						BLF_position(fs->uifont_id, x, y, 0.0f);
 | 
				
			||||||
	BLF_color4ubv(fs->uifont_id, col);
 | 
						BLF_color4ubv(fs->uifont_id, col);
 | 
				
			||||||
	BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
						BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -296,8 +301,9 @@ void UI_fontstyle_draw_simple_backdrop(
 | 
				
			|||||||
        const uiFontStyle *fs, float x, float y, const char *str,
 | 
					        const uiFontStyle *fs, float x, float y, const char *str,
 | 
				
			||||||
        const float col_fg[4], const float col_bg[4])
 | 
					        const float col_fg[4], const float col_bg[4])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_fontstyle_set(fs);
 | 
						UI_fontstyle_set(fs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -324,8 +330,9 @@ void UI_fontstyle_draw_simple_backdrop(
 | 
				
			|||||||
	BLF_color4fv(fs->uifont_id, col_fg);
 | 
						BLF_color4fv(fs->uifont_id, col_fg);
 | 
				
			||||||
	BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
						BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -373,14 +380,17 @@ int UI_fontstyle_string_width(const uiFontStyle *fs, const char *str)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int width;
 | 
						int width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fs->kerning == 1) /* for BLF_width */
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
 | 
							/* for BLF_width */
 | 
				
			||||||
		BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_fontstyle_set(fs);
 | 
						UI_fontstyle_set(fs);
 | 
				
			||||||
	width = BLF_width(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
						width = BLF_width(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fs->kerning == 1)
 | 
						if (fs->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fs->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return width;
 | 
						return width;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -404,8 +414,9 @@ void uiStyleInit(void)
 | 
				
			|||||||
	uchar *monofont_ttf = (uchar *)datatoc_bmonofont_ttf;
 | 
						uchar *monofont_ttf = (uchar *)datatoc_bmonofont_ttf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* recover from uninitialized dpi */
 | 
						/* recover from uninitialized dpi */
 | 
				
			||||||
	if (U.dpi == 0)
 | 
						if (U.dpi == 0) {
 | 
				
			||||||
		U.dpi = 72;
 | 
							U.dpi = 72;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	CLAMP(U.dpi, 48, 144);
 | 
						CLAMP(U.dpi, 48, 144);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (font = U.uifonts.first; font; font = font->next) {
 | 
						for (font = U.uifonts.first; font; font = font->next) {
 | 
				
			||||||
@@ -479,8 +490,9 @@ void uiStyleInit(void)
 | 
				
			|||||||
		BLF_default_set(font->blf_id);
 | 
							BLF_default_set(font->blf_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (font->blf_id == -1) {
 | 
							if (font->blf_id == -1) {
 | 
				
			||||||
			if (G.debug & G_DEBUG)
 | 
								if (G.debug & G_DEBUG) {
 | 
				
			||||||
				printf("%s: error, no fonts available\n", __func__);
 | 
									printf("%s: error, no fonts available\n", __func__);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			/* ? just for speed to initialize?
 | 
								/* ? just for speed to initialize?
 | 
				
			||||||
@@ -563,8 +575,9 @@ void uiStyleInit(void)
 | 
				
			|||||||
	 * \note This isn't good that the render font depends on the preferences,
 | 
						 * \note This isn't good that the render font depends on the preferences,
 | 
				
			||||||
	 * keep for now though, since without this there is no way to display many unicode chars.
 | 
						 * keep for now though, since without this there is no way to display many unicode chars.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (blf_mono_font_render == -1)
 | 
						if (blf_mono_font_render == -1) {
 | 
				
			||||||
		blf_mono_font_render = BLF_load_mem_unique("monospace", monofont_ttf, monofont_size);
 | 
							blf_mono_font_render = BLF_load_mem_unique("monospace", monofont_ttf, monofont_size);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BLF_size(blf_mono_font_render, 12 * U.pixelsize, 72);
 | 
						BLF_size(blf_mono_font_render, 12 * U.pixelsize, 72);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,8 +143,9 @@ static void template_add_button_search_menu(
 | 
				
			|||||||
			UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
 | 
								UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((idfrom && idfrom->lib) || !editable)
 | 
							if ((idfrom && idfrom->lib) || !editable) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
								UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (use_big_size) {
 | 
							if (use_big_size) {
 | 
				
			||||||
			uiLayoutRow(layout, true);
 | 
								uiLayoutRow(layout, true);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -165,8 +166,9 @@ static void template_add_button_search_menu(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
 | 
							UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((idfrom && idfrom->lib) || !editable)
 | 
							if ((idfrom && idfrom->lib) || !editable) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
								UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -451,8 +453,12 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
 | 
				
			|||||||
			break;
 | 
								break;
 | 
				
			||||||
		case UI_ID_FAKE_USER:
 | 
							case UI_ID_FAKE_USER:
 | 
				
			||||||
			if (id) {
 | 
								if (id) {
 | 
				
			||||||
				if (id->flag & LIB_FAKEUSER) id_us_plus(id);
 | 
									if (id->flag & LIB_FAKEUSER) {
 | 
				
			||||||
				else id_us_min(id);
 | 
										id_us_plus(id);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										id_us_min(id);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
@@ -665,8 +671,9 @@ static void template_ID(
 | 
				
			|||||||
	block = uiLayoutGetBlock(layout);
 | 
						block = uiLayoutGetBlock(layout);
 | 
				
			||||||
	UI_block_align_begin(block);
 | 
						UI_block_align_begin(block);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (idptr.type)
 | 
						if (idptr.type) {
 | 
				
			||||||
		type = idptr.type;
 | 
							type = idptr.type;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (flag & UI_ID_BROWSE) {
 | 
						if (flag & UI_ID_BROWSE) {
 | 
				
			||||||
		template_add_button_search_menu(
 | 
							template_add_button_search_menu(
 | 
				
			||||||
@@ -686,7 +693,9 @@ static void template_ID(
 | 
				
			|||||||
		        block, UI_BTYPE_TEXT, 0, name, 0, 0, TEMPLATE_SEARCH_TEXTBUT_WIDTH, TEMPLATE_SEARCH_TEXTBUT_HEIGHT,
 | 
							        block, UI_BTYPE_TEXT, 0, name, 0, 0, TEMPLATE_SEARCH_TEXTBUT_WIDTH, TEMPLATE_SEARCH_TEXTBUT_HEIGHT,
 | 
				
			||||||
		        &idptr, "name", -1, 0, 0, -1, -1, RNA_struct_ui_description(type));
 | 
							        &idptr, "name", -1, 0, 0, -1, -1, RNA_struct_ui_description(type));
 | 
				
			||||||
		UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), POINTER_FROM_INT(UI_ID_RENAME));
 | 
							UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), POINTER_FROM_INT(UI_ID_RENAME));
 | 
				
			||||||
		if (user_alert) UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
							if (user_alert) {
 | 
				
			||||||
 | 
								UI_but_flag_enable(but, UI_BUT_REDALERT);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (id->lib) {
 | 
							if (id->lib) {
 | 
				
			||||||
			if (id->tag & LIB_TAG_INDIRECT) {
 | 
								if (id->tag & LIB_TAG_INDIRECT) {
 | 
				
			||||||
@@ -788,8 +797,9 @@ static void template_ID(
 | 
				
			|||||||
			UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), POINTER_FROM_INT(UI_ID_OPEN));
 | 
								UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), POINTER_FROM_INT(UI_ID_OPEN));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((idfrom && idfrom->lib) || !editable)
 | 
							if ((idfrom && idfrom->lib) || !editable) {
 | 
				
			||||||
			UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
								UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* delete button */
 | 
						/* delete button */
 | 
				
			||||||
@@ -925,10 +935,12 @@ static void ui_template_id(
 | 
				
			|||||||
		template_ui->filter = 0;
 | 
							template_ui->filter = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (newop)
 | 
						if (newop) {
 | 
				
			||||||
		flag |= UI_ID_ADD_NEW;
 | 
							flag |= UI_ID_ADD_NEW;
 | 
				
			||||||
	if (openop)
 | 
						}
 | 
				
			||||||
 | 
						if (openop) {
 | 
				
			||||||
		flag |= UI_ID_OPEN;
 | 
							flag |= UI_ID_OPEN;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type = RNA_property_pointer_type(ptr, prop);
 | 
						type = RNA_property_pointer_type(ptr, prop);
 | 
				
			||||||
	idcode = RNA_type_to_ID_code(type);
 | 
						idcode = RNA_type_to_ID_code(type);
 | 
				
			||||||
@@ -1054,8 +1066,9 @@ void uiTemplateAnyID(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Label - either use the provided text, or will become "ID-Block:" */
 | 
						/* Label - either use the provided text, or will become "ID-Block:" */
 | 
				
			||||||
	if (text) {
 | 
						if (text) {
 | 
				
			||||||
		if (text[0])
 | 
							if (text[0]) {
 | 
				
			||||||
			uiItemL(row, text, ICON_NONE);
 | 
								uiItemL(row, text, ICON_NONE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		uiItemL(row, IFACE_("ID-Block:"), ICON_NONE);
 | 
							uiItemL(row, IFACE_("ID-Block:"), ICON_NONE);
 | 
				
			||||||
@@ -1349,9 +1362,11 @@ static void modifiers_convertToReal(bContext *C, void *ob_v, void *md_v)
 | 
				
			|||||||
static int modifier_can_delete(ModifierData *md)
 | 
					static int modifier_can_delete(ModifierData *md)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* fluid particle modifier can't be deleted here */
 | 
						/* fluid particle modifier can't be deleted here */
 | 
				
			||||||
	if (md->type == eModifierType_ParticleSystem)
 | 
						if (md->type == eModifierType_ParticleSystem) {
 | 
				
			||||||
		if (((ParticleSystemModifierData *)md)->psys->part->type == PART_FLUID)
 | 
							if (((ParticleSystemModifierData *)md)->psys->part->type == PART_FLUID) {
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1597,10 +1612,12 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
 | 
				
			|||||||
	vmd = modifiers_getVirtualModifierList(ob, &virtualModifierData);
 | 
						vmd = modifiers_getVirtualModifierList(ob, &virtualModifierData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; vmd; i++, vmd = vmd->next) {
 | 
						for (i = 0; vmd; i++, vmd = vmd->next) {
 | 
				
			||||||
		if (md == vmd)
 | 
							if (md == vmd) {
 | 
				
			||||||
			return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex);
 | 
								return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex);
 | 
				
			||||||
		else if (vmd->mode & eModifierMode_Virtual)
 | 
							}
 | 
				
			||||||
 | 
							else if (vmd->mode & eModifierMode_Virtual) {
 | 
				
			||||||
			i--;
 | 
								i--;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
@@ -1729,8 +1746,9 @@ uiLayout *uiTemplateGpencilModifier(uiLayout *layout, bContext *UNUSED(C), Point
 | 
				
			|||||||
	/* find modifier and draw it */
 | 
						/* find modifier and draw it */
 | 
				
			||||||
	vmd = ob->greasepencil_modifiers.first;
 | 
						vmd = ob->greasepencil_modifiers.first;
 | 
				
			||||||
	for (i = 0; vmd; i++, vmd = vmd->next) {
 | 
						for (i = 0; vmd; i++, vmd = vmd->next) {
 | 
				
			||||||
		if (md == vmd)
 | 
							if (md == vmd) {
 | 
				
			||||||
			return gpencil_draw_modifier(layout, ob, md);
 | 
								return gpencil_draw_modifier(layout, ob, md);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
@@ -1848,8 +1866,9 @@ uiLayout *uiTemplateShaderFx(uiLayout *layout, bContext *UNUSED(C), PointerRNA *
 | 
				
			|||||||
	/* find modifier and draw it */
 | 
						/* find modifier and draw it */
 | 
				
			||||||
	vfx = ob->shader_fx.first;
 | 
						vfx = ob->shader_fx.first;
 | 
				
			||||||
	for (i = 0; vfx; i++, vfx = vfx->next) {
 | 
						for (i = 0; vfx; i++, vfx = vfx->next) {
 | 
				
			||||||
		if (fx == vfx)
 | 
							if (fx == vfx) {
 | 
				
			||||||
			return gpencil_draw_shaderfx(layout, ob, fx);
 | 
								return gpencil_draw_shaderfx(layout, ob, fx);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
@@ -1939,8 +1958,9 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
 | 
				
			|||||||
		case B_CONSTRAINT_CHANGETARGET:
 | 
							case B_CONSTRAINT_CHANGETARGET:
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Main *bmain = CTX_data_main(C);
 | 
								Main *bmain = CTX_data_main(C);
 | 
				
			||||||
			if (ob->pose)
 | 
								if (ob->pose) {
 | 
				
			||||||
				BKE_pose_tag_recalc(bmain, ob->pose); /* checks & sorts pose channels */
 | 
									BKE_pose_tag_recalc(bmain, ob->pose); /* checks & sorts pose channels */
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			DEG_relations_tag_update(bmain);
 | 
								DEG_relations_tag_update(bmain);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1950,13 +1970,20 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* note: RNA updates now call this, commenting else it gets called twice.
 | 
						/* note: RNA updates now call this, commenting else it gets called twice.
 | 
				
			||||||
	 * if there are problems because of this, then rna needs changed update functions.
 | 
						 * if there are problems because of this, then rna needs changed update functions. */
 | 
				
			||||||
	 *
 | 
					#if 0
 | 
				
			||||||
	 * object_test_constraints(ob);
 | 
						object_test_constraints(ob);
 | 
				
			||||||
	 * if (ob->pose) BKE_pose_update_constraint_flags(ob->pose); */
 | 
						if (ob->pose) {
 | 
				
			||||||
 | 
							BKE_pose_update_constraint_flags(ob->pose);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ob->type == OB_ARMATURE) DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_TRANSFORM);
 | 
						if (ob->type == OB_ARMATURE) {
 | 
				
			||||||
	else DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
 | 
							DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_TRANSFORM);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
 | 
						WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1984,14 +2011,17 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
 | 
				
			|||||||
		/* exception for 'Null' constraint - it doesn't have constraint typeinfo! */
 | 
							/* exception for 'Null' constraint - it doesn't have constraint typeinfo! */
 | 
				
			||||||
		BLI_strncpy(typestr, (con->type == CONSTRAINT_TYPE_NULL) ? IFACE_("Null") : IFACE_("Unknown"), sizeof(typestr));
 | 
							BLI_strncpy(typestr, (con->type == CONSTRAINT_TYPE_NULL) ? IFACE_("Null") : IFACE_("Unknown"), sizeof(typestr));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		BLI_strncpy(typestr, IFACE_(cti->name), sizeof(typestr));
 | 
							BLI_strncpy(typestr, IFACE_(cti->name), sizeof(typestr));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* determine whether constraint is proxy protected or not */
 | 
						/* determine whether constraint is proxy protected or not */
 | 
				
			||||||
	if (BKE_constraints_proxylocked_owner(ob, pchan))
 | 
						if (BKE_constraints_proxylocked_owner(ob, pchan)) {
 | 
				
			||||||
		proxy_protected = (con->flag & CONSTRAINT_PROXY_LOCAL) == 0;
 | 
							proxy_protected = (con->flag & CONSTRAINT_PROXY_LOCAL) == 0;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		proxy_protected = 0;
 | 
							proxy_protected = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* unless button has own callback, it adds this callback to button */
 | 
						/* unless button has own callback, it adds this callback to button */
 | 
				
			||||||
	block = uiLayoutGetBlock(layout);
 | 
						block = uiLayoutGetBlock(layout);
 | 
				
			||||||
@@ -2018,14 +2048,16 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
 | 
				
			|||||||
	uiDefBut(block, UI_BTYPE_LABEL, B_CONSTRAINT_TEST, typestr,
 | 
						uiDefBut(block, UI_BTYPE_LABEL, B_CONSTRAINT_TEST, typestr,
 | 
				
			||||||
	         xco + 0.5f * UI_UNIT_X, yco, 5 * UI_UNIT_X, 0.9f * UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "");
 | 
						         xco + 0.5f * UI_UNIT_X, yco, 5 * UI_UNIT_X, 0.9f * UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (con->flag & CONSTRAINT_DISABLE)
 | 
						if (con->flag & CONSTRAINT_DISABLE) {
 | 
				
			||||||
		uiLayoutSetRedAlert(row, true);
 | 
							uiLayoutSetRedAlert(row, true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (proxy_protected == 0) {
 | 
						if (proxy_protected == 0) {
 | 
				
			||||||
		uiItemR(row, &ptr, "name", 0, "", ICON_NONE);
 | 
							uiItemR(row, &ptr, "name", 0, "", ICON_NONE);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		uiItemL(row, con->name, ICON_NONE);
 | 
							uiItemL(row, con->name, ICON_NONE);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uiLayoutSetRedAlert(row, false);
 | 
						uiLayoutSetRedAlert(row, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2056,11 +2088,13 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
 | 
				
			|||||||
			if (con->prev) {
 | 
								if (con->prev) {
 | 
				
			||||||
				prev_proxylock = (con->prev->flag & CONSTRAINT_PROXY_LOCAL) ? 0 : 1;
 | 
									prev_proxylock = (con->prev->flag & CONSTRAINT_PROXY_LOCAL) ? 0 : 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else {
 | 
				
			||||||
				prev_proxylock = 0;
 | 
									prev_proxylock = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else {
 | 
				
			||||||
			prev_proxylock = 0;
 | 
								prev_proxylock = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		show_upbut = ((prev_proxylock == 0) && (con->prev));
 | 
							show_upbut = ((prev_proxylock == 0) && (con->prev));
 | 
				
			||||||
		show_downbut = (con->next) ? 1 : 0;
 | 
							show_downbut = (con->next) ? 1 : 0;
 | 
				
			||||||
@@ -2076,11 +2110,13 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
 | 
				
			|||||||
		/* up/down */
 | 
							/* up/down */
 | 
				
			||||||
		if (show_upbut || show_downbut) {
 | 
							if (show_upbut || show_downbut) {
 | 
				
			||||||
			UI_block_align_begin(block);
 | 
								UI_block_align_begin(block);
 | 
				
			||||||
			if (show_upbut)
 | 
								if (show_upbut) {
 | 
				
			||||||
				uiItemO(row, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
 | 
									uiItemO(row, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (show_downbut)
 | 
								if (show_downbut) {
 | 
				
			||||||
				uiItemO(row, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
 | 
									uiItemO(row, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			UI_block_align_end(block);
 | 
								UI_block_align_end(block);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2091,8 +2127,9 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set but-locks for protected settings (magic numbers are used here!) */
 | 
						/* Set but-locks for protected settings (magic numbers are used here!) */
 | 
				
			||||||
	if (proxy_protected)
 | 
						if (proxy_protected) {
 | 
				
			||||||
		UI_block_lock_set(block, true, IFACE_("Cannot edit Proxy-Protected Constraint"));
 | 
							UI_block_lock_set(block, true, IFACE_("Cannot edit Proxy-Protected Constraint"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Draw constraint data */
 | 
						/* Draw constraint data */
 | 
				
			||||||
	if ((con->flag & CONSTRAINT_EXPAND) == 0) {
 | 
						if ((con->flag & CONSTRAINT_EXPAND) == 0) {
 | 
				
			||||||
@@ -2134,8 +2171,9 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
 | 
				
			|||||||
	/* hrms, the temporal constraint should not draw! */
 | 
						/* hrms, the temporal constraint should not draw! */
 | 
				
			||||||
	if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
 | 
						if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
 | 
				
			||||||
		bKinematicConstraint *data = con->data;
 | 
							bKinematicConstraint *data = con->data;
 | 
				
			||||||
		if (data->flag & CONSTRAINT_IK_TEMP)
 | 
							if (data->flag & CONSTRAINT_IK_TEMP) {
 | 
				
			||||||
			return NULL;
 | 
								return NULL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return draw_constraint(layout, ob, con);
 | 
						return draw_constraint(layout, ob, con);
 | 
				
			||||||
@@ -2187,20 +2225,26 @@ void uiTemplatePreview(
 | 
				
			|||||||
	pparent = NULL;
 | 
						pparent = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (id && (GS(id->name) == ID_TE)) {
 | 
						if (id && (GS(id->name) == ID_TE)) {
 | 
				
			||||||
		if (parent && (GS(parent->name) == ID_MA))
 | 
							if (parent && (GS(parent->name) == ID_MA)) {
 | 
				
			||||||
			pr_texture = &((Material *)parent)->pr_texture;
 | 
								pr_texture = &((Material *)parent)->pr_texture;
 | 
				
			||||||
		else if (parent && (GS(parent->name) == ID_WO))
 | 
							}
 | 
				
			||||||
 | 
							else if (parent && (GS(parent->name) == ID_WO)) {
 | 
				
			||||||
			pr_texture = &((World *)parent)->pr_texture;
 | 
								pr_texture = &((World *)parent)->pr_texture;
 | 
				
			||||||
		else if (parent && (GS(parent->name) == ID_LA))
 | 
							}
 | 
				
			||||||
 | 
							else if (parent && (GS(parent->name) == ID_LA)) {
 | 
				
			||||||
			pr_texture = &((Light *)parent)->pr_texture;
 | 
								pr_texture = &((Light *)parent)->pr_texture;
 | 
				
			||||||
		else if (parent && (GS(parent->name) == ID_LS))
 | 
							}
 | 
				
			||||||
 | 
							else if (parent && (GS(parent->name) == ID_LS)) {
 | 
				
			||||||
			pr_texture = &((FreestyleLineStyle *)parent)->pr_texture;
 | 
								pr_texture = &((FreestyleLineStyle *)parent)->pr_texture;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (pr_texture) {
 | 
							if (pr_texture) {
 | 
				
			||||||
			if (*pr_texture == TEX_PR_OTHER)
 | 
								if (*pr_texture == TEX_PR_OTHER) {
 | 
				
			||||||
				pid = parent;
 | 
									pid = parent;
 | 
				
			||||||
			else if (*pr_texture == TEX_PR_BOTH)
 | 
								}
 | 
				
			||||||
 | 
								else if (*pr_texture == TEX_PR_BOTH) {
 | 
				
			||||||
				pparent = parent;
 | 
									pparent = parent;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2246,8 +2290,12 @@ void uiTemplatePreview(
 | 
				
			|||||||
	/* add buttons */
 | 
						/* add buttons */
 | 
				
			||||||
	if (pid && show_buttons) {
 | 
						if (pid && show_buttons) {
 | 
				
			||||||
		if (GS(pid->name) == ID_MA || (pparent && GS(pparent->name) == ID_MA)) {
 | 
							if (GS(pid->name) == ID_MA || (pparent && GS(pparent->name) == ID_MA)) {
 | 
				
			||||||
			if (GS(pid->name) == ID_MA) ma = (Material *)pid;
 | 
								if (GS(pid->name) == ID_MA) {
 | 
				
			||||||
			else ma = (Material *)pparent;
 | 
									ma = (Material *)pid;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									ma = (Material *)pparent;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* Create RNA Pointer */
 | 
								/* Create RNA Pointer */
 | 
				
			||||||
			RNA_pointer_create(&ma->id, &RNA_Material, ma, &material_ptr);
 | 
								RNA_pointer_create(&ma->id, &RNA_Material, ma, &material_ptr);
 | 
				
			||||||
@@ -2430,8 +2478,12 @@ static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v)
 | 
				
			|||||||
	float pos = 0.5f;
 | 
						float pos = 0.5f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (coba->tot > 1) {
 | 
						if (coba->tot > 1) {
 | 
				
			||||||
		if (coba->cur > 0) pos = (coba->data[coba->cur - 1].pos + coba->data[coba->cur].pos) * 0.5f;
 | 
							if (coba->cur > 0) {
 | 
				
			||||||
		else pos = (coba->data[coba->cur + 1].pos + coba->data[coba->cur].pos) * 0.5f;
 | 
								pos = (coba->data[coba->cur - 1].pos + coba->data[coba->cur].pos) * 0.5f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								pos = (coba->data[coba->cur + 1].pos + coba->data[coba->cur].pos) * 0.5f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BKE_colorband_element_add(coba, pos)) {
 | 
						if (BKE_colorband_element_add(coba, pos)) {
 | 
				
			||||||
@@ -2569,12 +2621,14 @@ void uiTemplateColorRamp(uiLayout *layout, PointerRNA *ptr, const char *propname
 | 
				
			|||||||
	ID *id;
 | 
						ID *id;
 | 
				
			||||||
	rctf rect;
 | 
						rctf rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prop || RNA_property_type(prop) != PROP_POINTER)
 | 
						if (!prop || RNA_property_type(prop) != PROP_POINTER) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_ColorRamp))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_ColorRamp)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb");
 | 
						cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb");
 | 
				
			||||||
	cb->ptr = *ptr;
 | 
						cb->ptr = *ptr;
 | 
				
			||||||
@@ -2733,12 +2787,14 @@ void uiTemplateHistogram(uiLayout *layout, PointerRNA *ptr, const char *propname
 | 
				
			|||||||
	uiLayout *col;
 | 
						uiLayout *col;
 | 
				
			||||||
	Histogram *hist;
 | 
						Histogram *hist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prop || RNA_property_type(prop) != PROP_POINTER)
 | 
						if (!prop || RNA_property_type(prop) != PROP_POINTER) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Histogram))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Histogram)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	hist = (Histogram *)cptr.data;
 | 
						hist = (Histogram *)cptr.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (hist->height < UI_UNIT_Y) {
 | 
						if (hist->height < UI_UNIT_Y) {
 | 
				
			||||||
@@ -2768,12 +2824,14 @@ void uiTemplateWaveform(uiLayout *layout, PointerRNA *ptr, const char *propname)
 | 
				
			|||||||
	uiLayout *col;
 | 
						uiLayout *col;
 | 
				
			||||||
	Scopes *scopes;
 | 
						Scopes *scopes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prop || RNA_property_type(prop) != PROP_POINTER)
 | 
						if (!prop || RNA_property_type(prop) != PROP_POINTER) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Scopes))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Scopes)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	scopes = (Scopes *)cptr.data;
 | 
						scopes = (Scopes *)cptr.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	col = uiLayoutColumn(layout, true);
 | 
						col = uiLayoutColumn(layout, true);
 | 
				
			||||||
@@ -2803,12 +2861,14 @@ void uiTemplateVectorscope(uiLayout *layout, PointerRNA *ptr, const char *propna
 | 
				
			|||||||
	uiLayout *col;
 | 
						uiLayout *col;
 | 
				
			||||||
	Scopes *scopes;
 | 
						Scopes *scopes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prop || RNA_property_type(prop) != PROP_POINTER)
 | 
						if (!prop || RNA_property_type(prop) != PROP_POINTER) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Scopes))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Scopes)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	scopes = (Scopes *)cptr.data;
 | 
						scopes = (Scopes *)cptr.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (scopes->vecscope_height < UI_UNIT_Y) {
 | 
						if (scopes->vecscope_height < UI_UNIT_Y) {
 | 
				
			||||||
@@ -2858,28 +2918,36 @@ static void curvemap_buttons_zoom_out(bContext *C, void *cumap_v, void *UNUSED(u
 | 
				
			|||||||
	if (BLI_rctf_size_x(&cumap->curr) < 20.0f * BLI_rctf_size_x(&cumap->clipr)) {
 | 
						if (BLI_rctf_size_x(&cumap->curr) < 20.0f * BLI_rctf_size_x(&cumap->clipr)) {
 | 
				
			||||||
		d = d1 = 0.15f * BLI_rctf_size_x(&cumap->curr);
 | 
							d = d1 = 0.15f * BLI_rctf_size_x(&cumap->curr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (cumap->flag & CUMA_DO_CLIP)
 | 
							if (cumap->flag & CUMA_DO_CLIP) {
 | 
				
			||||||
			if (cumap->curr.xmin - d < cumap->clipr.xmin)
 | 
								if (cumap->curr.xmin - d < cumap->clipr.xmin) {
 | 
				
			||||||
				d1 = cumap->curr.xmin - cumap->clipr.xmin;
 | 
									d1 = cumap->curr.xmin - cumap->clipr.xmin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cumap->curr.xmin -= d1;
 | 
							cumap->curr.xmin -= d1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		d1 = d;
 | 
							d1 = d;
 | 
				
			||||||
		if (cumap->flag & CUMA_DO_CLIP)
 | 
							if (cumap->flag & CUMA_DO_CLIP) {
 | 
				
			||||||
			if (cumap->curr.xmax + d > cumap->clipr.xmax)
 | 
								if (cumap->curr.xmax + d > cumap->clipr.xmax) {
 | 
				
			||||||
				d1 = -cumap->curr.xmax + cumap->clipr.xmax;
 | 
									d1 = -cumap->curr.xmax + cumap->clipr.xmax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cumap->curr.xmax += d1;
 | 
							cumap->curr.xmax += d1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		d = d1 = 0.15f * BLI_rctf_size_y(&cumap->curr);
 | 
							d = d1 = 0.15f * BLI_rctf_size_y(&cumap->curr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (cumap->flag & CUMA_DO_CLIP)
 | 
							if (cumap->flag & CUMA_DO_CLIP) {
 | 
				
			||||||
			if (cumap->curr.ymin - d < cumap->clipr.ymin)
 | 
								if (cumap->curr.ymin - d < cumap->clipr.ymin) {
 | 
				
			||||||
				d1 = cumap->curr.ymin - cumap->clipr.ymin;
 | 
									d1 = cumap->curr.ymin - cumap->clipr.ymin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cumap->curr.ymin -= d1;
 | 
							cumap->curr.ymin -= d1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		d1 = d;
 | 
							d1 = d;
 | 
				
			||||||
		if (cumap->flag & CUMA_DO_CLIP)
 | 
							if (cumap->flag & CUMA_DO_CLIP) {
 | 
				
			||||||
			if (cumap->curr.ymax + d > cumap->clipr.ymax)
 | 
								if (cumap->curr.ymax + d > cumap->clipr.ymax) {
 | 
				
			||||||
				d1 = -cumap->curr.ymax + cumap->clipr.ymax;
 | 
									d1 = -cumap->curr.ymax + cumap->clipr.ymax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cumap->curr.ymax += d1;
 | 
							cumap->curr.ymax += d1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3067,8 +3135,9 @@ static void curvemap_buttons_reset(bContext *C, void *cb_v, void *cumap_v)
 | 
				
			|||||||
	int a;
 | 
						int a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cumap->preset = CURVE_PRESET_LINE;
 | 
						cumap->preset = CURVE_PRESET_LINE;
 | 
				
			||||||
	for (a = 0; a < CM_TOT; a++)
 | 
						for (a = 0; a < CM_TOT; a++) {
 | 
				
			||||||
		curvemap_reset(cumap->cm + a, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
 | 
							curvemap_reset(cumap->cm + a, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cumap->black[0] = cumap->black[1] = cumap->black[2] = 0.0f;
 | 
						cumap->black[0] = cumap->black[1] = cumap->black[2] = 0.0f;
 | 
				
			||||||
	cumap->white[0] = cumap->white[1] = cumap->white[2] = 1.0f;
 | 
						cumap->white[0] = cumap->white[1] = cumap->white[2] = 1.0f;
 | 
				
			||||||
@@ -3163,11 +3232,13 @@ static void curvemap_buttons_layout(
 | 
				
			|||||||
			UI_but_func_set(bt, curvemap_buttons_redraw, NULL, NULL);
 | 
								UI_but_func_set(bt, curvemap_buttons_redraw, NULL, NULL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_RIGHT);
 | 
							uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_RIGHT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (labeltype == 'h')
 | 
						if (labeltype == 'h') {
 | 
				
			||||||
		bg = UI_GRAD_H;
 | 
							bg = UI_GRAD_H;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* operation buttons */
 | 
						/* operation buttons */
 | 
				
			||||||
	sub = uiLayoutRow(row, true);
 | 
						sub = uiLayoutRow(row, true);
 | 
				
			||||||
@@ -3180,16 +3251,19 @@ static void curvemap_buttons_layout(
 | 
				
			|||||||
	bt = uiDefIconBut(block, UI_BTYPE_BUT, 0, ICON_ZOOM_OUT, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Zoom out"));
 | 
						bt = uiDefIconBut(block, UI_BTYPE_BUT, 0, ICON_ZOOM_OUT, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Zoom out"));
 | 
				
			||||||
	UI_but_func_set(bt, curvemap_buttons_zoom_out, cumap, NULL);
 | 
						UI_but_func_set(bt, curvemap_buttons_zoom_out, cumap, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (brush)
 | 
						if (brush) {
 | 
				
			||||||
		bt = uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_DOWNARROW_HLT, 0, 0, dx, dx, TIP_("Tools"));
 | 
							bt = uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_DOWNARROW_HLT, 0, 0, dx, dx, TIP_("Tools"));
 | 
				
			||||||
	else if (neg_slope)
 | 
						}
 | 
				
			||||||
 | 
						else if (neg_slope) {
 | 
				
			||||||
		bt = uiDefIconBlockBut(
 | 
							bt = uiDefIconBlockBut(
 | 
				
			||||||
		        block, curvemap_tools_negslope_func, cumap, 0, ICON_DOWNARROW_HLT,
 | 
							        block, curvemap_tools_negslope_func, cumap, 0, ICON_DOWNARROW_HLT,
 | 
				
			||||||
		        0, 0, dx, dx, TIP_("Tools"));
 | 
							        0, 0, dx, dx, TIP_("Tools"));
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		bt = uiDefIconBlockBut(
 | 
							bt = uiDefIconBlockBut(
 | 
				
			||||||
		        block, curvemap_tools_posslope_func, cumap, 0, ICON_DOWNARROW_HLT,
 | 
							        block, curvemap_tools_posslope_func, cumap, 0, ICON_DOWNARROW_HLT,
 | 
				
			||||||
		        0, 0, dx, dx, TIP_("Tools"));
 | 
							        0, 0, dx, dx, TIP_("Tools"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
 | 
						UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3274,8 +3348,9 @@ void uiTemplateCurveMapping(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_CurveMapping))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_CurveMapping)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb");
 | 
						cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb");
 | 
				
			||||||
	cb->ptr = *ptr;
 | 
						cb->ptr = *ptr;
 | 
				
			||||||
@@ -3417,8 +3492,9 @@ void uiTemplatePalette(uiLayout *layout, PointerRNA *ptr, const char *propname,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cptr = RNA_property_pointer_get(ptr, prop);
 | 
						cptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
	if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Palette))
 | 
						if (!cptr.data || !RNA_struct_is_a(cptr.type, &RNA_Palette)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	block = uiLayoutGetBlock(layout);
 | 
						block = uiLayoutGetBlock(layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3489,8 +3565,9 @@ static void handle_layer_buttons(bContext *C, void *arg1, void *arg2)
 | 
				
			|||||||
		/* Normally clicking only selects one layer */
 | 
							/* Normally clicking only selects one layer */
 | 
				
			||||||
		RNA_property_boolean_set_index(&but->rnapoin, but->rnaprop, cur, true);
 | 
							RNA_property_boolean_set_index(&but->rnapoin, but->rnaprop, cur, true);
 | 
				
			||||||
		for (i = 0; i < tot; ++i) {
 | 
							for (i = 0; i < tot; ++i) {
 | 
				
			||||||
			if (i != cur)
 | 
								if (i != cur) {
 | 
				
			||||||
				RNA_property_boolean_set_index(&but->rnapoin, but->rnaprop, i, false);
 | 
									RNA_property_boolean_set_index(&but->rnapoin, but->rnaprop, i, false);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3535,8 +3612,9 @@ void uiTemplateLayers(
 | 
				
			|||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (RNA_property_array_length(used_ptr, used_prop) < layers)
 | 
							if (RNA_property_array_length(used_ptr, used_prop) < layers) {
 | 
				
			||||||
			used_prop = NULL;
 | 
								used_prop = NULL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* layers are laid out going across rows, with the columns being divided into groups */
 | 
						/* layers are laid out going across rows, with the columns being divided into groups */
 | 
				
			||||||
@@ -3557,10 +3635,12 @@ void uiTemplateLayers(
 | 
				
			|||||||
				int icon = 0;
 | 
									int icon = 0;
 | 
				
			||||||
				int butlay = 1 << layer;
 | 
									int butlay = 1 << layer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (active_layer & butlay)
 | 
									if (active_layer & butlay) {
 | 
				
			||||||
					icon = ICON_LAYER_ACTIVE;
 | 
										icon = ICON_LAYER_ACTIVE;
 | 
				
			||||||
				else if (used_prop && RNA_property_boolean_get_index(used_ptr, used_prop, layer))
 | 
									}
 | 
				
			||||||
 | 
									else if (used_prop && RNA_property_boolean_get_index(used_ptr, used_prop, layer)) {
 | 
				
			||||||
					icon = ICON_LAYER_USED;
 | 
										icon = ICON_LAYER_USED;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				but = uiDefAutoButR(block, ptr, prop, layer, "", icon, 0, 0, UI_UNIT_X / 2, UI_UNIT_Y / 2);
 | 
									but = uiDefAutoButR(block, ptr, prop, layer, "", icon, 0, 0, UI_UNIT_X / 2, UI_UNIT_Y / 2);
 | 
				
			||||||
				UI_but_func_set(but, handle_layer_buttons, but, POINTER_FROM_INT(layer));
 | 
									UI_but_func_set(but, handle_layer_buttons, but, POINTER_FROM_INT(layer));
 | 
				
			||||||
@@ -3754,13 +3834,16 @@ static void uilist_prepare(
 | 
				
			|||||||
	const bool use_auto_size = (ui_list->list_grip < (rows - UI_LIST_AUTO_SIZE_THRESHOLD));
 | 
						const bool use_auto_size = (ui_list->list_grip < (rows - UI_LIST_AUTO_SIZE_THRESHOLD));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* default rows */
 | 
						/* default rows */
 | 
				
			||||||
	if (rows <= 0)
 | 
						if (rows <= 0) {
 | 
				
			||||||
		rows = 5;
 | 
							rows = 5;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	dyn_data->visual_height_min = rows;
 | 
						dyn_data->visual_height_min = rows;
 | 
				
			||||||
	if (maxrows < rows)
 | 
						if (maxrows < rows) {
 | 
				
			||||||
		maxrows = max_ii(rows, 5);
 | 
							maxrows = max_ii(rows, 5);
 | 
				
			||||||
	if (columns <= 0)
 | 
						}
 | 
				
			||||||
 | 
						if (columns <= 0) {
 | 
				
			||||||
		columns = 9;
 | 
							columns = 9;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (columns > 1) {
 | 
						if (columns > 1) {
 | 
				
			||||||
		dyn_data->height = (int)ceil((double)len / (double)columns);
 | 
							dyn_data->height = (int)ceil((double)len / (double)columns);
 | 
				
			||||||
@@ -4093,8 +4176,9 @@ void uiTemplateList(
 | 
				
			|||||||
					sub = uiLayoutRow(overlap, false);
 | 
										sub = uiLayoutRow(overlap, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					icon = UI_rnaptr_icon_get(C, itemptr, rnaicon, false);
 | 
										icon = UI_rnaptr_icon_get(C, itemptr, rnaicon, false);
 | 
				
			||||||
					if (icon == ICON_DOT)
 | 
										if (icon == ICON_DOT) {
 | 
				
			||||||
						icon = ICON_NONE;
 | 
											icon = ICON_NONE;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					draw_item(ui_list, C, sub, dataptr, itemptr, icon, active_dataptr, active_propname,
 | 
										draw_item(ui_list, C, sub, dataptr, itemptr, icon, active_dataptr, active_propname,
 | 
				
			||||||
					          org_i, flt_flag);
 | 
										          org_i, flt_flag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4130,8 +4214,9 @@ void uiTemplateList(
 | 
				
			|||||||
				int org_i = items_ptr[activei].org_idx;
 | 
									int org_i = items_ptr[activei].org_idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				icon = UI_rnaptr_icon_get(C, itemptr, rnaicon, false);
 | 
									icon = UI_rnaptr_icon_get(C, itemptr, rnaicon, false);
 | 
				
			||||||
				if (icon == ICON_DOT)
 | 
									if (icon == ICON_DOT) {
 | 
				
			||||||
					icon = ICON_NONE;
 | 
										icon = ICON_NONE;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				draw_item(ui_list, C, row, dataptr, itemptr, icon, active_dataptr, active_propname, org_i, 0);
 | 
									draw_item(ui_list, C, row, dataptr, itemptr, icon, active_dataptr, active_propname, org_i, 0);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			/* if list is empty, add in dummy button */
 | 
								/* if list is empty, add in dummy button */
 | 
				
			||||||
@@ -4144,8 +4229,9 @@ void uiTemplateList(
 | 
				
			|||||||
			but = uiDefIconTextButR_prop(
 | 
								but = uiDefIconTextButR_prop(
 | 
				
			||||||
			        block, UI_BTYPE_NUM, 0, 0, numstr, 0, 0, UI_UNIT_X * 5, UI_UNIT_Y,
 | 
								        block, UI_BTYPE_NUM, 0, 0, numstr, 0, 0, UI_UNIT_X * 5, UI_UNIT_Y,
 | 
				
			||||||
			        active_dataptr, activeprop, 0, 0, 0, 0, 0, "");
 | 
								        active_dataptr, activeprop, 0, 0, 0, 0, 0, "");
 | 
				
			||||||
			if (dyn_data->items_shown == 0)
 | 
								if (dyn_data->items_shown == 0) {
 | 
				
			||||||
				UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
									UI_but_flag_enable(but, UI_BUT_DISABLED);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case UILST_LAYOUT_GRID:
 | 
							case UILST_LAYOUT_GRID:
 | 
				
			||||||
			box = uiLayoutListBox(layout, ui_list, dataptr, prop, active_dataptr, activeprop);
 | 
								box = uiLayoutListBox(layout, ui_list, dataptr, prop, active_dataptr, activeprop);
 | 
				
			||||||
@@ -4164,8 +4250,9 @@ void uiTemplateList(
 | 
				
			|||||||
					int flt_flag = items_ptr[i].flt_flag;
 | 
										int flt_flag = items_ptr[i].flt_flag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					/* create button */
 | 
										/* create button */
 | 
				
			||||||
					if (!(i % columns))
 | 
										if (!(i % columns)) {
 | 
				
			||||||
						subrow = uiLayoutRow(col, false);
 | 
											subrow = uiLayoutRow(col, false);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					subblock = uiLayoutGetBlock(subrow);
 | 
										subblock = uiLayoutGetBlock(subrow);
 | 
				
			||||||
					overlap = uiLayoutOverlap(subrow);
 | 
										overlap = uiLayoutOverlap(subrow);
 | 
				
			||||||
@@ -4272,8 +4359,9 @@ static void operator_call_cb(bContext *C, void *UNUSED(arg1), void *arg2)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	wmOperatorType *ot = arg2;
 | 
						wmOperatorType *ot = arg2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ot)
 | 
						if (ot) {
 | 
				
			||||||
		WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, NULL);
 | 
							WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, NULL);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool has_word_prefix(const char *haystack, const char *needle, size_t needle_len)
 | 
					static bool has_word_prefix(const char *haystack, const char *needle, size_t needle_len)
 | 
				
			||||||
@@ -4306,8 +4394,9 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char
 | 
				
			|||||||
		const char *ot_ui_name = CTX_IFACE_(ot->translation_context, ot->name);
 | 
							const char *ot_ui_name = CTX_IFACE_(ot->translation_context, ot->name);
 | 
				
			||||||
		int index;
 | 
							int index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((ot->flag & OPTYPE_INTERNAL) && (G.debug & G_DEBUG_WM) == 0)
 | 
							if ((ot->flag & OPTYPE_INTERNAL) && (G.debug & G_DEBUG_WM) == 0) {
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* match name against all search words */
 | 
							/* match name against all search words */
 | 
				
			||||||
		for (index = 0; index < words_len; index++) {
 | 
							for (index = 0; index < words_len; index++) {
 | 
				
			||||||
@@ -4334,8 +4423,9 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (false == UI_search_item_add(items, name, ot, 0))
 | 
									if (false == UI_search_item_add(items, name, ot, 0)) {
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -4600,14 +4690,16 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
 | 
				
			|||||||
	UI_block_func_handle_set(block, do_running_jobs, NULL);
 | 
						UI_block_func_handle_set(block, do_running_jobs, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sa->spacetype == SPACE_SEQ) {
 | 
						if (sa->spacetype == SPACE_SEQ) {
 | 
				
			||||||
		if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY))
 | 
							if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY)) {
 | 
				
			||||||
			owner = sa;
 | 
								owner = sa;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		handle_event = B_STOPSEQ;
 | 
							handle_event = B_STOPSEQ;
 | 
				
			||||||
		icon = ICON_SEQUENCE;
 | 
							icon = ICON_SEQUENCE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (sa->spacetype == SPACE_CLIP) {
 | 
						else if (sa->spacetype == SPACE_CLIP) {
 | 
				
			||||||
		if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY))
 | 
							if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY)) {
 | 
				
			||||||
			owner = sa;
 | 
								owner = sa;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		handle_event = B_STOPCLIP;
 | 
							handle_event = B_STOPCLIP;
 | 
				
			||||||
		icon = ICON_TRACKER;
 | 
							icon = ICON_TRACKER;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -4716,9 +4808,10 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (screen->animtimer)
 | 
						if (screen->animtimer) {
 | 
				
			||||||
		uiDefIconTextBut(block, UI_BTYPE_BUT, B_STOPANIM, ICON_CANCEL, IFACE_("Anim Player"), 0, 0, UI_UNIT_X * 5.0f, UI_UNIT_Y,
 | 
							uiDefIconTextBut(block, UI_BTYPE_BUT, B_STOPANIM, ICON_CANCEL, IFACE_("Anim Player"), 0, 0, UI_UNIT_X * 5.0f, UI_UNIT_Y,
 | 
				
			||||||
		                 NULL, 0.0f, 0.0f, 0, 0, TIP_("Stop animation playback"));
 | 
							                 NULL, 0.0f, 0.0f, 0, 0, TIP_("Stop animation playback"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/************************* Reports for Last Operator Template **************************/
 | 
					/************************* Reports for Last Operator Template **************************/
 | 
				
			||||||
@@ -4737,11 +4830,15 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C)
 | 
				
			|||||||
	int icon;
 | 
						int icon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* if the report display has timed out, don't show */
 | 
						/* if the report display has timed out, don't show */
 | 
				
			||||||
	if (!reports->reporttimer) return;
 | 
						if (!reports->reporttimer) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rti = (ReportTimerInfo *)reports->reporttimer->customdata;
 | 
						rti = (ReportTimerInfo *)reports->reporttimer->customdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!rti || rti->widthfac == 0.0f || !report) return;
 | 
						if (!rti || rti->widthfac == 0.0f || !report) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_abs = uiLayoutAbsolute(layout, false);
 | 
						ui_abs = uiLayoutAbsolute(layout, false);
 | 
				
			||||||
	block = uiLayoutGetBlock(ui_abs);
 | 
						block = uiLayoutGetBlock(ui_abs);
 | 
				
			||||||
@@ -4771,11 +4868,13 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C)
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	UI_block_emboss_set(block, UI_EMBOSS_NONE);
 | 
						UI_block_emboss_set(block, UI_EMBOSS_NONE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (reports->list.first != reports->list.last)
 | 
						if (reports->list.first != reports->list.last) {
 | 
				
			||||||
		uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_reports_to_textblock", WM_OP_INVOKE_REGION_WIN, icon, 2, 0, UI_UNIT_X,
 | 
							uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_reports_to_textblock", WM_OP_INVOKE_REGION_WIN, icon, 2, 0, UI_UNIT_X,
 | 
				
			||||||
		              UI_UNIT_Y, TIP_("Click to see the remaining reports in text block: 'Recent Reports'"));
 | 
							              UI_UNIT_Y, TIP_("Click to see the remaining reports in text block: 'Recent Reports'"));
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		uiDefIconBut(block, UI_BTYPE_LABEL, 0, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "");
 | 
							uiDefIconBut(block, UI_BTYPE_LABEL, 0, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	UI_block_emboss_set(block, UI_EMBOSS);
 | 
						UI_block_emboss_set(block, UI_EMBOSS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4837,8 +4936,9 @@ static void template_keymap_item_properties(uiLayout *layout, const char *title,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	uiItemS(layout);
 | 
						uiItemS(layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (title)
 | 
						if (title) {
 | 
				
			||||||
		uiItemL(layout, title, ICON_NONE);
 | 
							uiItemL(layout, title, ICON_NONE);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	flow = uiLayoutColumnFlow(layout, 2, false);
 | 
						flow = uiLayoutColumnFlow(layout, 2, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4954,8 +5054,9 @@ void uiTemplateColormanagedViewSettings(uiLayout *layout, bContext *UNUSED(C), P
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	col = uiLayoutColumn(layout, false);
 | 
						col = uiLayoutColumn(layout, false);
 | 
				
			||||||
	uiItemR(col, &view_transform_ptr, "use_curve_mapping", 0, NULL, ICON_NONE);
 | 
						uiItemR(col, &view_transform_ptr, "use_curve_mapping", 0, NULL, ICON_NONE);
 | 
				
			||||||
	if (view_settings->flag & COLORMANAGE_VIEW_USE_CURVES)
 | 
						if (view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
 | 
				
			||||||
		uiTemplateCurveMapping(col, &view_transform_ptr, "curve_mapping", 'c', true, false, false, false);
 | 
							uiTemplateCurveMapping(col, &view_transform_ptr, "curve_mapping", 'c', true, false, false, false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/********************************* Component Menu *************************************/
 | 
					/********************************* Component Menu *************************************/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,15 +61,19 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
 | 
				
			|||||||
	switch (RNA_property_type(prop)) {
 | 
						switch (RNA_property_type(prop)) {
 | 
				
			||||||
		case PROP_BOOLEAN:
 | 
							case PROP_BOOLEAN:
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (RNA_property_array_check(prop) && index == -1)
 | 
								if (RNA_property_array_check(prop) && index == -1) {
 | 
				
			||||||
				return NULL;
 | 
									return NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (icon && name && name[0] == '\0')
 | 
								if (icon && name && name[0] == '\0') {
 | 
				
			||||||
				but = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else if (icon)
 | 
								}
 | 
				
			||||||
 | 
								else if (icon) {
 | 
				
			||||||
				but = uiDefIconTextButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconTextButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				but = uiDefButR_prop(block, UI_BTYPE_CHECKBOX, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefButR_prop(block, UI_BTYPE_CHECKBOX, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		case PROP_INT:
 | 
							case PROP_INT:
 | 
				
			||||||
@@ -83,10 +87,12 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
 | 
				
			|||||||
					return NULL;
 | 
										return NULL;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (RNA_property_subtype(prop) == PROP_PERCENTAGE || RNA_property_subtype(prop) == PROP_FACTOR)
 | 
								else if (RNA_property_subtype(prop) == PROP_PERCENTAGE || RNA_property_subtype(prop) == PROP_FACTOR) {
 | 
				
			||||||
				but = uiDefButR_prop(block, UI_BTYPE_NUM_SLIDER, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefButR_prop(block, UI_BTYPE_NUM_SLIDER, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				but = uiDefButR_prop(block, UI_BTYPE_NUM, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefButR_prop(block, UI_BTYPE_NUM, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (RNA_property_flag(prop) & PROP_TEXTEDIT_UPDATE) {
 | 
								if (RNA_property_flag(prop) & PROP_TEXTEDIT_UPDATE) {
 | 
				
			||||||
				UI_but_flag_enable(but, UI_BUT_TEXTEDIT_UPDATE);
 | 
									UI_but_flag_enable(but, UI_BUT_TEXTEDIT_UPDATE);
 | 
				
			||||||
@@ -94,20 +100,26 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
 | 
				
			|||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		case PROP_ENUM:
 | 
							case PROP_ENUM:
 | 
				
			||||||
			if (icon && name && name[0] == '\0')
 | 
								if (icon && name && name[0] == '\0') {
 | 
				
			||||||
				but = uiDefIconButR_prop(block, UI_BTYPE_MENU, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconButR_prop(block, UI_BTYPE_MENU, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else if (icon)
 | 
								}
 | 
				
			||||||
 | 
								else if (icon) {
 | 
				
			||||||
				but = uiDefIconTextButR_prop(block, UI_BTYPE_MENU, 0, icon, NULL, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconTextButR_prop(block, UI_BTYPE_MENU, 0, icon, NULL, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				but = uiDefButR_prop(block, UI_BTYPE_MENU, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefButR_prop(block, UI_BTYPE_MENU, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case PROP_STRING:
 | 
							case PROP_STRING:
 | 
				
			||||||
			if (icon && name && name[0] == '\0')
 | 
								if (icon && name && name[0] == '\0') {
 | 
				
			||||||
				but = uiDefIconButR_prop(block, UI_BTYPE_TEXT, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconButR_prop(block, UI_BTYPE_TEXT, 0, icon, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else if (icon)
 | 
								}
 | 
				
			||||||
 | 
								else if (icon) {
 | 
				
			||||||
				but = uiDefIconTextButR_prop(block, UI_BTYPE_TEXT, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefIconTextButR_prop(block, UI_BTYPE_TEXT, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				but = uiDefButR_prop(block, UI_BTYPE_TEXT, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
									but = uiDefButR_prop(block, UI_BTYPE_TEXT, 0, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (RNA_property_flag(prop) & PROP_TEXTEDIT_UPDATE) {
 | 
								if (RNA_property_flag(prop) & PROP_TEXTEDIT_UPDATE) {
 | 
				
			||||||
				/* TEXTEDIT_UPDATE is usually used for search buttons. For these we also want
 | 
									/* TEXTEDIT_UPDATE is usually used for search buttons. For these we also want
 | 
				
			||||||
@@ -121,8 +133,9 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
 | 
				
			|||||||
				PointerRNA pptr = RNA_property_pointer_get(ptr, prop);
 | 
									PointerRNA pptr = RNA_property_pointer_get(ptr, prop);
 | 
				
			||||||
				icon = RNA_struct_ui_icon(pptr.type ? pptr.type : RNA_property_pointer_type(ptr, prop));
 | 
									icon = RNA_struct_ui_icon(pptr.type ? pptr.type : RNA_property_pointer_type(ptr, prop));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (icon == ICON_DOT)
 | 
								if (icon == ICON_DOT) {
 | 
				
			||||||
				icon = 0;
 | 
									icon = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			but = uiDefIconTextButR_prop(block, UI_BTYPE_SEARCH_MENU, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
								but = uiDefIconTextButR_prop(block, UI_BTYPE_SEARCH_MENU, 0, icon, name, x1, y1, x2, y2, ptr, prop, index, 0, 0, -1, -1, NULL);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
@@ -183,8 +196,9 @@ eAutoPropButsReturn uiDefAutoButsRNA(
 | 
				
			|||||||
				if (label_align == UI_BUT_LABEL_ALIGN_COLUMN) {
 | 
									if (label_align == UI_BUT_LABEL_ALIGN_COLUMN) {
 | 
				
			||||||
					col = uiLayoutColumn(layout, true);
 | 
										col = uiLayoutColumn(layout, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (!is_boolean)
 | 
										if (!is_boolean) {
 | 
				
			||||||
						uiItemL(col, name, ICON_NONE);
 | 
											uiItemL(col, name, ICON_NONE);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					BLI_assert(label_align == UI_BUT_LABEL_ALIGN_SPLIT_COLUMN);
 | 
										BLI_assert(label_align == UI_BUT_LABEL_ALIGN_SPLIT_COLUMN);
 | 
				
			||||||
@@ -247,10 +261,12 @@ static int sort_search_items_list(const void *a, const void *b)
 | 
				
			|||||||
	const CollItemSearch *cis1 = a;
 | 
						const CollItemSearch *cis1 = a;
 | 
				
			||||||
	const CollItemSearch *cis2 = b;
 | 
						const CollItemSearch *cis2 = b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BLI_strcasecmp(cis1->name, cis2->name) > 0)
 | 
						if (BLI_strcasecmp(cis1->name, cis2->name) > 0) {
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char *str, uiSearchItems *items)
 | 
					void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char *str, uiSearchItems *items)
 | 
				
			||||||
@@ -266,14 +282,17 @@ void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char
 | 
				
			|||||||
	RNA_PROP_BEGIN (&data->search_ptr, itemptr, data->search_prop)
 | 
						RNA_PROP_BEGIN (&data->search_ptr, itemptr, data->search_prop)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (flag & PROP_ID_SELF_CHECK)
 | 
							if (flag & PROP_ID_SELF_CHECK) {
 | 
				
			||||||
			if (itemptr.data == data->target_ptr.id.data)
 | 
								if (itemptr.data == data->target_ptr.id.data) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* use filter */
 | 
							/* use filter */
 | 
				
			||||||
		if (RNA_property_type(data->target_prop) == PROP_POINTER) {
 | 
							if (RNA_property_type(data->target_prop) == PROP_POINTER) {
 | 
				
			||||||
			if (RNA_property_pointer_poll(&data->target_ptr, data->target_prop, &itemptr) == 0)
 | 
								if (RNA_property_pointer_poll(&data->target_ptr, data->target_prop, &itemptr) == 0) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		name = RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL); /* could use the string length here */
 | 
							name = RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL); /* could use the string length here */
 | 
				
			||||||
@@ -322,8 +341,9 @@ int UI_icon_from_id(ID *id)
 | 
				
			|||||||
	PointerRNA ptr;
 | 
						PointerRNA ptr;
 | 
				
			||||||
	short idcode;
 | 
						short idcode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (id == NULL)
 | 
						if (id == NULL) {
 | 
				
			||||||
		return ICON_NONE;
 | 
							return ICON_NONE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	idcode = GS(id->name);
 | 
						idcode = GS(id->name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -331,10 +351,12 @@ int UI_icon_from_id(ID *id)
 | 
				
			|||||||
	if (idcode == ID_OB) {
 | 
						if (idcode == ID_OB) {
 | 
				
			||||||
		ob = (Object *)id;
 | 
							ob = (Object *)id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ob->type == OB_EMPTY)
 | 
							if (ob->type == OB_EMPTY) {
 | 
				
			||||||
			return ICON_EMPTY_DATA;
 | 
								return ICON_EMPTY_DATA;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			return UI_icon_from_id(ob->data);
 | 
								return UI_icon_from_id(ob->data);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* otherwise get it through RNA, creating the pointer
 | 
						/* otherwise get it through RNA, creating the pointer
 | 
				
			||||||
@@ -347,14 +369,18 @@ int UI_icon_from_id(ID *id)
 | 
				
			|||||||
/* see: report_type_str */
 | 
					/* see: report_type_str */
 | 
				
			||||||
int UI_icon_from_report_type(int type)
 | 
					int UI_icon_from_report_type(int type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (type & RPT_ERROR_ALL)
 | 
						if (type & RPT_ERROR_ALL) {
 | 
				
			||||||
		return ICON_ERROR;
 | 
							return ICON_ERROR;
 | 
				
			||||||
	else if (type & RPT_WARNING_ALL)
 | 
						}
 | 
				
			||||||
 | 
						else if (type & RPT_WARNING_ALL) {
 | 
				
			||||||
		return ICON_ERROR;
 | 
							return ICON_ERROR;
 | 
				
			||||||
	else if (type & RPT_INFO_ALL)
 | 
						}
 | 
				
			||||||
 | 
						else if (type & RPT_INFO_ALL) {
 | 
				
			||||||
		return ICON_INFO;
 | 
							return ICON_INFO;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		return ICON_NONE;
 | 
							return ICON_NONE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/********************************** Misc **************************************/
 | 
					/********************************** Misc **************************************/
 | 
				
			||||||
@@ -598,8 +624,9 @@ void UI_butstore_update(uiBlock *block)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (LIKELY(block->butstore.first == NULL))
 | 
						if (LIKELY(block->butstore.first == NULL)) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* warning, loop-in-loop, in practice we only store <10 buttons at a time,
 | 
						/* warning, loop-in-loop, in practice we only store <10 buttons at a time,
 | 
				
			||||||
	 * so this isn't going to be a problem, if that changes old-new mapping can be cached first */
 | 
						 * so this isn't going to be a problem, if that changes old-new mapping can be cached first */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -439,16 +439,20 @@ GPUBatch *ui_batch_roundbox_get(bool filled, bool antialiased)
 | 
				
			|||||||
	GPUBatch **batch = NULL;
 | 
						GPUBatch **batch = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (filled) {
 | 
						if (filled) {
 | 
				
			||||||
		if (antialiased)
 | 
							if (antialiased) {
 | 
				
			||||||
			batch = &g_ui_batch_cache.roundbox_simple_aa;
 | 
								batch = &g_ui_batch_cache.roundbox_simple_aa;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			batch = &g_ui_batch_cache.roundbox_simple;
 | 
								batch = &g_ui_batch_cache.roundbox_simple;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (antialiased)
 | 
							if (antialiased) {
 | 
				
			||||||
			BLI_assert(0); /* Use GL_LINE_SMOOTH instead!!: */
 | 
								BLI_assert(0); /* Use GL_LINE_SMOOTH instead!!: */
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			batch = &g_ui_batch_cache.roundbox_simple_outline;
 | 
								batch = &g_ui_batch_cache.roundbox_simple_outline;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (*batch == NULL) {
 | 
						if (*batch == NULL) {
 | 
				
			||||||
@@ -653,8 +657,9 @@ static int round_box_shadow_edges(float (*vert)[2], const rcti *rect, float rad,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	rad += step;
 | 
						rad += step;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (2.0f * rad > BLI_rcti_size_y(rect))
 | 
						if (2.0f * rad > BLI_rcti_size_y(rect)) {
 | 
				
			||||||
		rad = 0.5f * BLI_rcti_size_y(rect);
 | 
							rad = 0.5f * BLI_rcti_size_y(rect);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minx = rect->xmin - step;
 | 
						minx = rect->xmin - step;
 | 
				
			||||||
	miny = rect->ymin - step;
 | 
						miny = rect->ymin - step;
 | 
				
			||||||
@@ -746,11 +751,13 @@ static void round_box__edges(uiWidgetBase *wt, int roundboxalign, const rcti *re
 | 
				
			|||||||
	        BLI_rcti_size_x(rect) * hnum,
 | 
						        BLI_rcti_size_x(rect) * hnum,
 | 
				
			||||||
	        BLI_rcti_size_y(rect) * vnum);
 | 
						        BLI_rcti_size_y(rect) * vnum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (2.0f * rad > minsize)
 | 
						if (2.0f * rad > minsize) {
 | 
				
			||||||
		rad = 0.5f * minsize;
 | 
							rad = 0.5f * minsize;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (2.0f * (radi + 1.0f) > minsize)
 | 
						if (2.0f * (radi + 1.0f) > minsize) {
 | 
				
			||||||
		radi = 0.5f * minsize - U.pixelsize;
 | 
							radi = 0.5f * minsize - U.pixelsize;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wt->uniform_params.rad = rad;
 | 
						wt->uniform_params.rad = rad;
 | 
				
			||||||
	wt->uniform_params.radi = radi;
 | 
						wt->uniform_params.radi = radi;
 | 
				
			||||||
@@ -986,8 +993,9 @@ static void widget_draw_vertex_buffer(uint pos, uint col, int mode,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	immBegin(mode, totvert);
 | 
						immBegin(mode, totvert);
 | 
				
			||||||
	for (int i = 0; i < totvert; ++i) {
 | 
						for (int i = 0; i < totvert; ++i) {
 | 
				
			||||||
		if (quads_col)
 | 
							if (quads_col) {
 | 
				
			||||||
			immAttr4ubv(col, quads_col[i]);
 | 
								immAttr4ubv(col, quads_col[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		immVertex2fv(pos, quads_pos[i]);
 | 
							immVertex2fv(pos, quads_pos[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	immEnd();
 | 
						immEnd();
 | 
				
			||||||
@@ -1147,8 +1155,9 @@ void UI_widgetbase_draw_cache_flush(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	float checker_params[3] = {UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 8.0f};
 | 
						float checker_params[3] = {UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 8.0f};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (g_widget_base_batch.count == 0)
 | 
						if (g_widget_base_batch.count == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GPUBatch *batch = g_widget_base_batch.batch;
 | 
						GPUBatch *batch = g_widget_base_batch.batch;
 | 
				
			||||||
	if (g_widget_base_batch.count == 1) {
 | 
						if (g_widget_base_batch.count == 1) {
 | 
				
			||||||
@@ -1307,8 +1316,9 @@ static void widget_draw_preview(BIFIconID icon, float alpha, const rcti *rect)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int w, h, size;
 | 
						int w, h, size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (icon == ICON_NONE)
 | 
						if (icon == ICON_NONE) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w = BLI_rcti_size_x(rect);
 | 
						w = BLI_rcti_size_x(rect);
 | 
				
			||||||
	h = BLI_rcti_size_y(rect);
 | 
						h = BLI_rcti_size_y(rect);
 | 
				
			||||||
@@ -1346,16 +1356,24 @@ static void widget_draw_icon(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* this icon doesn't need draw... */
 | 
						/* this icon doesn't need draw... */
 | 
				
			||||||
	if (icon == ICON_BLANK1 && (but->flag & UI_BUT_ICON_SUBMENU) == 0) return;
 | 
						if (icon == ICON_BLANK1 && (but->flag & UI_BUT_ICON_SUBMENU) == 0) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	aspect = but->block->aspect / UI_DPI_FAC;
 | 
						aspect = but->block->aspect / UI_DPI_FAC;
 | 
				
			||||||
	height = ICON_DEFAULT_HEIGHT / aspect;
 | 
						height = ICON_DEFAULT_HEIGHT / aspect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* calculate blend color */
 | 
						/* calculate blend color */
 | 
				
			||||||
	if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_ROW, UI_BTYPE_TOGGLE_N, UI_BTYPE_LISTROW)) {
 | 
						if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_ROW, UI_BTYPE_TOGGLE_N, UI_BTYPE_LISTROW)) {
 | 
				
			||||||
		if (but->flag & UI_SELECT) {}
 | 
							if (but->flag & UI_SELECT) {
 | 
				
			||||||
		else if (but->flag & UI_ACTIVE) {}
 | 
								/* pass */
 | 
				
			||||||
		else alpha = 0.75f;
 | 
							}
 | 
				
			||||||
 | 
							else if (but->flag & UI_ACTIVE) {
 | 
				
			||||||
 | 
								/* pass */
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								alpha = 0.75f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if ((but->type == UI_BTYPE_LABEL)) {
 | 
						else if ((but->type == UI_BTYPE_LABEL)) {
 | 
				
			||||||
		/* extra feature allows more alpha blending */
 | 
							/* extra feature allows more alpha blending */
 | 
				
			||||||
@@ -1376,12 +1394,15 @@ static void widget_draw_icon(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (but->drawflag & UI_BUT_ICON_LEFT) {
 | 
							if (but->drawflag & UI_BUT_ICON_LEFT) {
 | 
				
			||||||
			/* special case - icon_only pie buttons */
 | 
								/* special case - icon_only pie buttons */
 | 
				
			||||||
			if (ui_block_is_pie_menu(but->block) && !ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_POPOVER) && but->str && but->str[0] == '\0')
 | 
								if (ui_block_is_pie_menu(but->block) && !ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_POPOVER) && but->str && but->str[0] == '\0') {
 | 
				
			||||||
				xs = rect->xmin + 2.0f * ofs;
 | 
									xs = rect->xmin + 2.0f * ofs;
 | 
				
			||||||
			else if (but->dt == UI_EMBOSS_NONE || but->type == UI_BTYPE_LABEL)
 | 
								}
 | 
				
			||||||
 | 
								else if (but->dt == UI_EMBOSS_NONE || but->type == UI_BTYPE_LABEL) {
 | 
				
			||||||
				xs = rect->xmin + 2.0f * ofs;
 | 
									xs = rect->xmin + 2.0f * ofs;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				xs = rect->xmin + 4.0f * ofs;
 | 
									xs = rect->xmin + 4.0f * ofs;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			xs = (rect->xmin + rect->xmax - height) / 2.0f;
 | 
								xs = (rect->xmin + rect->xmax - height) / 2.0f;
 | 
				
			||||||
@@ -1504,7 +1525,8 @@ float UI_text_clip_middle_ex(
 | 
				
			|||||||
	/* need to set this first */
 | 
						/* need to set this first */
 | 
				
			||||||
	UI_fontstyle_set(fstyle);
 | 
						UI_fontstyle_set(fstyle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1) {  /* for BLF_width */
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
 | 
							/* for BLF_width */
 | 
				
			||||||
		BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1653,15 +1675,19 @@ static void ui_text_clip_cursor(const uiFontStyle *fstyle, uiBut *but, const rct
 | 
				
			|||||||
	/* need to set this first */
 | 
						/* need to set this first */
 | 
				
			||||||
	UI_fontstyle_set(fstyle);
 | 
						UI_fontstyle_set(fstyle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1) /* for BLF_width */
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
 | 
							/* for BLF_width */
 | 
				
			||||||
		BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* define ofs dynamically */
 | 
						/* define ofs dynamically */
 | 
				
			||||||
	if (but->ofs > but->pos)
 | 
						if (but->ofs > but->pos) {
 | 
				
			||||||
		but->ofs = but->pos;
 | 
							but->ofs = but->pos;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (BLF_width(fstyle->uifont_id, but->editstr, INT_MAX) <= okwidth)
 | 
						if (BLF_width(fstyle->uifont_id, but->editstr, INT_MAX) <= okwidth) {
 | 
				
			||||||
		but->ofs = 0;
 | 
							but->ofs = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->strwidth = BLF_width(fstyle->uifont_id, but->editstr + but->ofs, INT_MAX);
 | 
						but->strwidth = BLF_width(fstyle->uifont_id, but->editstr + but->ofs, INT_MAX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1681,17 +1707,21 @@ static void ui_text_clip_cursor(const uiFontStyle *fstyle, uiBut *but, const rct
 | 
				
			|||||||
			else {
 | 
								else {
 | 
				
			||||||
				int bytes;
 | 
									int bytes;
 | 
				
			||||||
				/* shift string to the left */
 | 
									/* shift string to the left */
 | 
				
			||||||
				if (width < 20 && but->ofs > 0)
 | 
									if (width < 20 && but->ofs > 0) {
 | 
				
			||||||
					ui_text_clip_give_prev_off(but, but->editstr);
 | 
										ui_text_clip_give_prev_off(but, but->editstr);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				bytes = BLI_str_utf8_size(BLI_str_find_prev_char_utf8(but->editstr, but->editstr + len));
 | 
									bytes = BLI_str_utf8_size(BLI_str_find_prev_char_utf8(but->editstr, but->editstr + len));
 | 
				
			||||||
				if (bytes == -1)
 | 
									if (bytes == -1) {
 | 
				
			||||||
					bytes = 1;
 | 
										bytes = 1;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				len -= bytes;
 | 
									len -= bytes;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			but->strwidth = BLF_width(fstyle->uifont_id, but->editstr + but->ofs, len - but->ofs);
 | 
								but->strwidth = BLF_width(fstyle->uifont_id, but->editstr + but->ofs, len - but->ofs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (but->strwidth < 10) break;
 | 
								if (but->strwidth < 10) {
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1716,8 +1746,10 @@ static void ui_text_clip_right_label(const uiFontStyle *fstyle, uiBut *but, cons
 | 
				
			|||||||
	/* need to set this first */
 | 
						/* need to set this first */
 | 
				
			||||||
	UI_fontstyle_set(fstyle);
 | 
						UI_fontstyle_set(fstyle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1) /* for BLF_width */
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
 | 
							/* for BLF_width */
 | 
				
			||||||
		BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr, sizeof(but->drawstr));
 | 
						but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr, sizeof(but->drawstr));
 | 
				
			||||||
	but->ofs = 0;
 | 
						but->ofs = 0;
 | 
				
			||||||
@@ -1749,7 +1781,9 @@ static void ui_text_clip_right_label(const uiFontStyle *fstyle, uiBut *but, cons
 | 
				
			|||||||
			// BLI_assert(strlen(but->drawstr) == drawstr_len);
 | 
								// BLI_assert(strlen(but->drawstr) == drawstr_len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs, sizeof(but->drawstr) - but->ofs);
 | 
								but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs, sizeof(but->drawstr) - but->ofs);
 | 
				
			||||||
			if (but->strwidth < 10) break;
 | 
								if (but->strwidth < 10) {
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1757,7 +1791,9 @@ static void ui_text_clip_right_label(const uiFontStyle *fstyle, uiBut *but, cons
 | 
				
			|||||||
		while ((but->strwidth > okwidth) && (but->ofs < 2)) {
 | 
							while ((but->strwidth > okwidth) && (but->ofs < 2)) {
 | 
				
			||||||
			ui_text_clip_give_next_off(but, but->drawstr);
 | 
								ui_text_clip_give_next_off(but, but->drawstr);
 | 
				
			||||||
			but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs, sizeof(but->drawstr) - but->ofs);
 | 
								but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs, sizeof(but->drawstr) - but->ofs);
 | 
				
			||||||
			if (but->strwidth < 10) break;
 | 
								if (but->strwidth < 10) {
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1773,8 +1809,9 @@ static void ui_text_clip_right_label(const uiFontStyle *fstyle, uiBut *but, cons
 | 
				
			|||||||
		but->drawstr[drawstr_len] = 0;
 | 
							but->drawstr[drawstr_len] = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1)
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef WITH_INPUT_IME
 | 
					#ifdef WITH_INPUT_IME
 | 
				
			||||||
@@ -1848,9 +1885,10 @@ static void widget_draw_text(const uiFontStyle *fstyle, const uiWidgetColors *wc
 | 
				
			|||||||
		align = UI_STYLE_TEXT_CENTER;
 | 
							align = UI_STYLE_TEXT_CENTER;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1) /* for BLF_width */
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
 | 
							/* for BLF_width */
 | 
				
			||||||
		BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Special case: when we're entering text for multiple buttons,
 | 
						/* Special case: when we're entering text for multiple buttons,
 | 
				
			||||||
	 * don't draw the text for any of the multi-editing buttons */
 | 
						 * don't draw the text for any of the multi-editing buttons */
 | 
				
			||||||
@@ -1974,8 +2012,9 @@ static void widget_draw_text(const uiFontStyle *fstyle, const uiWidgetColors *wc
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fstyle->kerning == 1)
 | 
						if (fstyle->kerning == 1) {
 | 
				
			||||||
		BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
							BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
	ui_rasterpos_safe(x, y, but->aspect);
 | 
						ui_rasterpos_safe(x, y, but->aspect);
 | 
				
			||||||
@@ -2038,8 +2077,9 @@ static void widget_draw_text(const uiFontStyle *fstyle, const uiWidgetColors *wc
 | 
				
			|||||||
				BLI_strncpy(fixedbuf, drawstr + but->ofs, min_ii(sizeof(fixedbuf), drawlen));
 | 
									BLI_strncpy(fixedbuf, drawstr + but->ofs, min_ii(sizeof(fixedbuf), drawlen));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				str = strchr(fixedbuf, but->menu_key - 32); /* upper case */
 | 
									str = strchr(fixedbuf, but->menu_key - 32); /* upper case */
 | 
				
			||||||
				if (str == NULL)
 | 
									if (str == NULL) {
 | 
				
			||||||
					str = strchr(fixedbuf, but->menu_key);
 | 
										str = strchr(fixedbuf, but->menu_key);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (str) {
 | 
									if (str) {
 | 
				
			||||||
					int ul_index = -1;
 | 
										int ul_index = -1;
 | 
				
			||||||
@@ -2175,11 +2215,13 @@ static void widget_draw_text_icon(const uiFontStyle *fstyle, const uiWidgetColor
 | 
				
			|||||||
			/* pass (even if its a menu toolbar) */
 | 
								/* pass (even if its a menu toolbar) */
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (ui_block_is_pie_menu(but->block)) {
 | 
							else if (ui_block_is_pie_menu(but->block)) {
 | 
				
			||||||
			if (but->dt == UI_EMBOSS_RADIAL)
 | 
								if (but->dt == UI_EMBOSS_RADIAL) {
 | 
				
			||||||
				rect->xmin += 0.3f * U.widget_unit;
 | 
									rect->xmin += 0.3f * U.widget_unit;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (ui_block_is_menu(but->block))
 | 
							else if (ui_block_is_menu(but->block)) {
 | 
				
			||||||
			rect->xmin += 0.2f * U.widget_unit;
 | 
								rect->xmin += 0.2f * U.widget_unit;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		widget_draw_icon(but, icon, alpha, rect, wcol->text);
 | 
							widget_draw_icon(but, icon, alpha, rect, wcol->text);
 | 
				
			||||||
		if (show_menu_icon) {
 | 
							if (show_menu_icon) {
 | 
				
			||||||
@@ -2324,33 +2366,44 @@ static void widget_state(uiWidgetType *wt, int state, int drawflag)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (state & UI_SELECT) {
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
		copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
 | 
							copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
 | 
				
			||||||
		if (drawflag & UI_BUT_ANIMATED_CHANGED)
 | 
							if (drawflag & UI_BUT_ANIMATED_CHANGED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_changed_sel, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_changed_sel, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED_KEY)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED_KEY) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_key_sel, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_key_sel, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_anim_sel, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_anim_sel, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_DRIVEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_DRIVEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_driven_sel, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_driven_sel, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_OVERRIDEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_OVERRIDEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden_sel, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden_sel, wcol_state->blend);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
 | 
							copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & UI_SELECT)
 | 
							if (state & UI_SELECT) {
 | 
				
			||||||
			SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
 | 
								SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (drawflag & UI_BUT_ANIMATED_CHANGED)
 | 
							if (drawflag & UI_BUT_ANIMATED_CHANGED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_changed, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_changed, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED_KEY)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED_KEY) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_key, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_key, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_anim, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_anim, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_DRIVEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_DRIVEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_driven, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_driven, wcol_state->blend);
 | 
				
			||||||
		else if (state & UI_BUT_OVERRIDEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_OVERRIDEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden, wcol_state->blend);
 | 
								widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden, wcol_state->blend);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & UI_ACTIVE) { /* mouse over? */
 | 
							if (state & UI_ACTIVE) { /* mouse over? */
 | 
				
			||||||
			widget_active_color(wt->wcol.inner);
 | 
								widget_active_color(wt->wcol.inner);
 | 
				
			||||||
@@ -2394,31 +2447,42 @@ static void widget_state_numslider(uiWidgetType *wt, int state, int drawflag)
 | 
				
			|||||||
	/* TODO: maybe we should have separate settings for the blending colors used for this case? */
 | 
						/* TODO: maybe we should have separate settings for the blending colors used for this case? */
 | 
				
			||||||
	if (state & UI_SELECT) {
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (drawflag & UI_BUT_ANIMATED_CHANGED)
 | 
							if (drawflag & UI_BUT_ANIMATED_CHANGED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_changed_sel, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_changed_sel, blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED_KEY)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED_KEY) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_key_sel, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_key_sel, blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_anim_sel, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_anim_sel, blend);
 | 
				
			||||||
		else if (state & UI_BUT_DRIVEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_DRIVEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_driven_sel, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_driven_sel, blend);
 | 
				
			||||||
		else if (state & UI_BUT_OVERRIDEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_OVERRIDEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_overridden_sel, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_overridden_sel, blend);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & UI_SELECT)
 | 
							if (state & UI_SELECT) {
 | 
				
			||||||
			SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
 | 
								SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (drawflag & UI_BUT_ANIMATED_CHANGED)
 | 
							if (drawflag & UI_BUT_ANIMATED_CHANGED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_changed, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_changed, blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED_KEY)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED_KEY) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_key, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_key, blend);
 | 
				
			||||||
		else if (state & UI_BUT_ANIMATED)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_ANIMATED) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_anim, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_anim, blend);
 | 
				
			||||||
		else if (state & UI_BUT_DRIVEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_DRIVEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_driven, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_driven, blend);
 | 
				
			||||||
		else if (state & UI_BUT_OVERRIDEN)
 | 
							}
 | 
				
			||||||
 | 
							else if (state & UI_BUT_OVERRIDEN) {
 | 
				
			||||||
			widget_state_blend(wt->wcol.item, wcol_state->inner_overridden, blend);
 | 
								widget_state_blend(wt->wcol.item, wcol_state->inner_overridden, blend);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2431,10 +2495,12 @@ static void widget_state_option_menu(uiWidgetType *wt, int state, int drawflag)
 | 
				
			|||||||
	widget_state(wt, state, drawflag);
 | 
						widget_state(wt, state, drawflag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* if not selected we get theme from menu back */
 | 
						/* if not selected we get theme from menu back */
 | 
				
			||||||
	if (state & UI_SELECT)
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
		copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text_sel);
 | 
							copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text_sel);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text);
 | 
							copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2525,14 +2591,17 @@ static void widget_softshadow(const rcti *rect, int roundboxalign, const float r
 | 
				
			|||||||
	const float radout = UI_ThemeMenuShadowWidth();
 | 
						const float radout = UI_ThemeMenuShadowWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* disabled shadow */
 | 
						/* disabled shadow */
 | 
				
			||||||
	if (radout == 0.0f)
 | 
						if (radout == 0.0f) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* prevent tooltips to not show round shadow */
 | 
						/* prevent tooltips to not show round shadow */
 | 
				
			||||||
	if (radout > 0.2f * BLI_rcti_size_y(&rect1))
 | 
						if (radout > 0.2f * BLI_rcti_size_y(&rect1)) {
 | 
				
			||||||
		rect1.ymax -= 0.2f * BLI_rcti_size_y(&rect1);
 | 
							rect1.ymax -= 0.2f * BLI_rcti_size_y(&rect1);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		rect1.ymax -= radout;
 | 
							rect1.ymax -= radout;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* inner part */
 | 
						/* inner part */
 | 
				
			||||||
	totvert = round_box_shadow_edges(wtb.inner_v, &rect1, radin, roundboxalign & (UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT), 0.0f);
 | 
						totvert = round_box_shadow_edges(wtb.inner_v, &rect1, radin, roundboxalign & (UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT), 0.0f);
 | 
				
			||||||
@@ -2638,10 +2707,12 @@ void ui_hsvcircle_pos_from_vals(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ang = 2.0f * (float)M_PI * hsv[0] + (float)M_PI_2;
 | 
						ang = 2.0f * (float)M_PI * hsv[0] + (float)M_PI_2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cpicker->use_color_cubic && (U.color_picker_type == USER_CP_CIRCLE_HSV))
 | 
						if (cpicker->use_color_cubic && (U.color_picker_type == USER_CP_CIRCLE_HSV)) {
 | 
				
			||||||
		radius_t = (1.0f - pow3f(1.0f - hsv[1]));
 | 
							radius_t = (1.0f - pow3f(1.0f - hsv[1]));
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		radius_t = hsv[1];
 | 
							radius_t = hsv[1];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	radius = clamp_f(radius_t, 0.0f, 1.0f) * radius;
 | 
						radius = clamp_f(radius_t, 0.0f, 1.0f) * radius;
 | 
				
			||||||
	*r_xpos = centx + cosf(-ang) * radius;
 | 
						*r_xpos = centx + cosf(-ang) * radius;
 | 
				
			||||||
@@ -2986,10 +3057,12 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect)
 | 
				
			|||||||
	ui_but_v3_get(but, rgb);
 | 
						ui_but_v3_get(but, rgb);
 | 
				
			||||||
	ui_scene_linear_to_color_picker_space(but, rgb);
 | 
						ui_scene_linear_to_color_picker_space(but, rgb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (but->a1 == UI_GRAD_L_ALT)
 | 
						if (but->a1 == UI_GRAD_L_ALT) {
 | 
				
			||||||
		rgb_to_hsl_v(rgb, hsv);
 | 
							rgb_to_hsl_v(rgb, hsv);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		rgb_to_hsv_v(rgb, hsv);
 | 
							rgb_to_hsv_v(rgb, hsv);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	v = hsv[2];
 | 
						v = hsv[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* map v from property range to [0,1] */
 | 
						/* map v from property range to [0,1] */
 | 
				
			||||||
@@ -3078,8 +3151,9 @@ static void widget_numbut_draw(uiWidgetColors *wcol, rcti *rect, int state, int
 | 
				
			|||||||
	const float rad = wcol->roundness * BLI_rcti_size_y(rect);
 | 
						const float rad = wcol->roundness * BLI_rcti_size_y(rect);
 | 
				
			||||||
	const int handle_width = min_ii(BLI_rcti_size_x(rect) / 3, BLI_rcti_size_y(rect) * 0.7f);
 | 
						const int handle_width = min_ii(BLI_rcti_size_x(rect) / 3, BLI_rcti_size_y(rect) * 0.7f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state & UI_SELECT)
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
		SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
							SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	widget_init(&wtb);
 | 
						widget_init(&wtb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3198,16 +3272,19 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s
 | 
				
			|||||||
	/* determine horizontal/vertical */
 | 
						/* determine horizontal/vertical */
 | 
				
			||||||
	horizontal = (BLI_rcti_size_x(rect) > BLI_rcti_size_y(rect));
 | 
						horizontal = (BLI_rcti_size_x(rect) > BLI_rcti_size_y(rect));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (horizontal)
 | 
						if (horizontal) {
 | 
				
			||||||
		rad = wcol->roundness * BLI_rcti_size_y(rect);
 | 
							rad = wcol->roundness * BLI_rcti_size_y(rect);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		rad = wcol->roundness * BLI_rcti_size_x(rect);
 | 
							rad = wcol->roundness * BLI_rcti_size_x(rect);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wtb.uniform_params.shade_dir = (horizontal) ? 1.0f : 0.0;
 | 
						wtb.uniform_params.shade_dir = (horizontal) ? 1.0f : 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* draw back part, colors swapped and shading inverted */
 | 
						/* draw back part, colors swapped and shading inverted */
 | 
				
			||||||
	if (horizontal)
 | 
						if (horizontal) {
 | 
				
			||||||
		SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
							SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	round_box_edges(&wtb, UI_CNR_ALL, rect, rad);
 | 
						round_box_edges(&wtb, UI_CNR_ALL, rect, rad);
 | 
				
			||||||
	widgetbase_draw(&wtb, wcol);
 | 
						widgetbase_draw(&wtb, wcol);
 | 
				
			||||||
@@ -3221,9 +3298,12 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		copy_v4_v4_char(wcol->inner, wcol->item);
 | 
							copy_v4_v4_char(wcol->inner, wcol->item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (wcol->shadetop > wcol->shadedown)
 | 
							if (wcol->shadetop > wcol->shadedown) {
 | 
				
			||||||
			wcol->shadetop += 20;   /* XXX violates themes... */
 | 
								wcol->shadetop += 20;   /* XXX violates themes... */
 | 
				
			||||||
		else wcol->shadedown += 20;
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								wcol->shadedown += 20;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & UI_SCROLL_PRESSED) {
 | 
							if (state & UI_SCROLL_PRESSED) {
 | 
				
			||||||
			wcol->inner[0] = wcol->inner[0] >= 250 ? 255 : wcol->inner[0] + 5;
 | 
								wcol->inner[0] = wcol->inner[0] >= 250 ? 255 : wcol->inner[0] + 5;
 | 
				
			||||||
@@ -3242,9 +3322,15 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s
 | 
				
			|||||||
		round_box_edges(&wtb, UI_CNR_ALL, slider, rad);
 | 
							round_box_edges(&wtb, UI_CNR_ALL, slider, rad);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & UI_SCROLL_ARROWS) {
 | 
							if (state & UI_SCROLL_ARROWS) {
 | 
				
			||||||
			if (wcol->item[0] > 48) wcol->item[0] -= 48;
 | 
								if (wcol->item[0] > 48) {
 | 
				
			||||||
			if (wcol->item[1] > 48) wcol->item[1] -= 48;
 | 
									wcol->item[0] -= 48;
 | 
				
			||||||
			if (wcol->item[2] > 48) wcol->item[2] -= 48;
 | 
								}
 | 
				
			||||||
 | 
								if (wcol->item[1] > 48) {
 | 
				
			||||||
 | 
									wcol->item[1] -= 48;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (wcol->item[2] > 48) {
 | 
				
			||||||
 | 
									wcol->item[2] -= 48;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			wcol->item[3] = 255;
 | 
								wcol->item[3] = 255;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (horizontal) {
 | 
								if (horizontal) {
 | 
				
			||||||
@@ -3318,10 +3404,12 @@ static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state & UI_SELECT)
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
		state = UI_SCROLL_PRESSED;
 | 
							state = UI_SCROLL_PRESSED;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		state = 0;
 | 
							state = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	UI_draw_widget_scroll(wcol, rect, &rect1, state);
 | 
						UI_draw_widget_scroll(wcol, rect, &rect1, state);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3484,8 +3572,9 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
 | 
				
			|||||||
		round_box_edges(&wtb, roundboxalign, rect, rad);
 | 
							round_box_edges(&wtb, roundboxalign, rect, rad);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ui_but_is_color_gamma(but))
 | 
						if (!ui_but_is_color_gamma(but)) {
 | 
				
			||||||
		ui_block_cm_to_display_space_v3(but->block, col);
 | 
							ui_block_cm_to_display_space_v3(but->block, col);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rgba_float_to_uchar((uchar *)wcol->inner, col);
 | 
						rgba_float_to_uchar((uchar *)wcol->inner, col);
 | 
				
			||||||
	const bool show_alpha_checkers = (wcol->inner[3] < 255);
 | 
						const bool show_alpha_checkers = (wcol->inner[3] < 255);
 | 
				
			||||||
@@ -3560,8 +3649,9 @@ static void widget_textbut(uiWidgetColors *wcol, rcti *rect, int state, int roun
 | 
				
			|||||||
	uiWidgetBase wtb;
 | 
						uiWidgetBase wtb;
 | 
				
			||||||
	float rad;
 | 
						float rad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state & UI_SELECT)
 | 
						if (state & UI_SELECT) {
 | 
				
			||||||
		SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
							SWAP(short, wcol->shadetop, wcol->shadedown);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	widget_init(&wtb);
 | 
						widget_init(&wtb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3744,10 +3834,12 @@ static void widget_state_label(uiWidgetType *wt, int state, int drawflag)
 | 
				
			|||||||
	else {
 | 
						else {
 | 
				
			||||||
		/* call this for option button */
 | 
							/* call this for option button */
 | 
				
			||||||
		widget_state(wt, state, drawflag);
 | 
							widget_state(wt, state, drawflag);
 | 
				
			||||||
		if (state & UI_SELECT)
 | 
							if (state & UI_SELECT) {
 | 
				
			||||||
			UI_GetThemeColor3ubv(TH_TEXT_HI, (uchar *)wt->wcol.text);
 | 
								UI_GetThemeColor3ubv(TH_TEXT_HI, (uchar *)wt->wcol.text);
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			UI_GetThemeColor3ubv(TH_TEXT, (uchar *)wt->wcol.text);
 | 
								UI_GetThemeColor3ubv(TH_TEXT, (uchar *)wt->wcol.text);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (state & UI_BUT_REDALERT) {
 | 
						if (state & UI_BUT_REDALERT) {
 | 
				
			||||||
@@ -4109,10 +4201,12 @@ static int widget_roundbox_set(uiBut *but, rcti *rect)
 | 
				
			|||||||
	if ((but->drawflag & UI_BUT_ALIGN) && but->type != UI_BTYPE_PULLDOWN) {
 | 
						if ((but->drawflag & UI_BUT_ALIGN) && but->type != UI_BTYPE_PULLDOWN) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* ui_popup_block_position has this correction too, keep in sync */
 | 
							/* ui_popup_block_position has this correction too, keep in sync */
 | 
				
			||||||
		if (but->drawflag & (UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_STITCH_TOP))
 | 
							if (but->drawflag & (UI_BUT_ALIGN_TOP | UI_BUT_ALIGN_STITCH_TOP)) {
 | 
				
			||||||
			rect->ymax += U.pixelsize;
 | 
								rect->ymax += U.pixelsize;
 | 
				
			||||||
		if (but->drawflag & (UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_STITCH_LEFT))
 | 
							}
 | 
				
			||||||
 | 
							if (but->drawflag & (UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_STITCH_LEFT)) {
 | 
				
			||||||
			rect->xmin -= U.pixelsize;
 | 
								rect->xmin -= U.pixelsize;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (but->drawflag & UI_BUT_ALIGN) {
 | 
							switch (but->drawflag & UI_BUT_ALIGN) {
 | 
				
			||||||
			case UI_BUT_ALIGN_TOP:
 | 
								case UI_BUT_ALIGN_TOP:
 | 
				
			||||||
@@ -4149,10 +4243,10 @@ static int widget_roundbox_set(uiBut *but, rcti *rect)
 | 
				
			|||||||
	if (but->active && (but->type != UI_BTYPE_POPOVER)) {
 | 
						if (but->active && (but->type != UI_BTYPE_POPOVER)) {
 | 
				
			||||||
		int direction = ui_but_menu_direction(but);
 | 
							int direction = ui_but_menu_direction(but);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if      (direction == UI_DIR_UP)    roundbox &= ~(UI_CNR_TOP_RIGHT    | UI_CNR_TOP_LEFT);
 | 
							if      (direction == UI_DIR_UP)    { roundbox &= ~(UI_CNR_TOP_RIGHT    | UI_CNR_TOP_LEFT); }
 | 
				
			||||||
		else if (direction == UI_DIR_DOWN)  roundbox &= ~(UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT);
 | 
							else if (direction == UI_DIR_DOWN)  { roundbox &= ~(UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT); }
 | 
				
			||||||
		else if (direction == UI_DIR_LEFT)  roundbox &= ~(UI_CNR_TOP_LEFT     | UI_CNR_BOTTOM_LEFT);
 | 
							else if (direction == UI_DIR_LEFT)  { roundbox &= ~(UI_CNR_TOP_LEFT     | UI_CNR_BOTTOM_LEFT); }
 | 
				
			||||||
		else if (direction == UI_DIR_RIGHT) roundbox &= ~(UI_CNR_TOP_RIGHT    | UI_CNR_BOTTOM_RIGHT);
 | 
							else if (direction == UI_DIR_RIGHT) { roundbox &= ~(UI_CNR_TOP_RIGHT    | UI_CNR_BOTTOM_RIGHT); }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return roundbox;
 | 
						return roundbox;
 | 
				
			||||||
@@ -4441,25 +4535,31 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE))
 | 
							if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) {
 | 
				
			||||||
			if (but->dt != UI_EMBOSS_PULLDOWN)
 | 
								if (but->dt != UI_EMBOSS_PULLDOWN) {
 | 
				
			||||||
				disabled = true;
 | 
									disabled = true;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (drawflag & UI_BUT_TEXT_RIGHT) {
 | 
							if (drawflag & UI_BUT_TEXT_RIGHT) {
 | 
				
			||||||
			state |= UI_STATE_TEXT_BEFORE_WIDGET;
 | 
								state |= UI_STATE_TEXT_BEFORE_WIDGET;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (disabled)
 | 
							if (disabled) {
 | 
				
			||||||
			ui_widget_color_disabled(wt);
 | 
								ui_widget_color_disabled(wt);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		wt->state(wt, state, drawflag);
 | 
							wt->state(wt, state, drawflag);
 | 
				
			||||||
		if (wt->custom)
 | 
							if (wt->custom) {
 | 
				
			||||||
			wt->custom(but, &wt->wcol, rect, state, roundboxalign);
 | 
								wt->custom(but, &wt->wcol, rect, state, roundboxalign);
 | 
				
			||||||
		else if (wt->draw)
 | 
							}
 | 
				
			||||||
 | 
							else if (wt->draw) {
 | 
				
			||||||
			wt->draw(&wt->wcol, rect, state, roundboxalign);
 | 
								wt->draw(&wt->wcol, rect, state, roundboxalign);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (disabled)
 | 
							if (disabled) {
 | 
				
			||||||
			GPU_blend(true);
 | 
								GPU_blend(true);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef USE_UI_POPOVER_ONCE
 | 
					#ifdef USE_UI_POPOVER_ONCE
 | 
				
			||||||
		if (but->block->flag & UI_BLOCK_POPOVER_ONCE) {
 | 
							if (but->block->flag & UI_BLOCK_POPOVER_ONCE) {
 | 
				
			||||||
@@ -4480,12 +4580,15 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		wt->text(fstyle, &wt->wcol, but, rect);
 | 
							wt->text(fstyle, &wt->wcol, but, rect);
 | 
				
			||||||
		if (disabled)
 | 
							if (disabled) {
 | 
				
			||||||
			GPU_blend(false);
 | 
								GPU_blend(false);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//		if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE))
 | 
					//		if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) {
 | 
				
			||||||
//			if (but->dt != UI_EMBOSS_PULLDOWN)
 | 
					//			if (but->dt != UI_EMBOSS_PULLDOWN) {
 | 
				
			||||||
//				widget_disabled(&disablerect);
 | 
					//				widget_disabled(&disablerect);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4516,10 +4619,12 @@ void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect)
 | 
				
			|||||||
	uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK);
 | 
						uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wt->state(wt, 0, 0);
 | 
						wt->state(wt, 0, 0);
 | 
				
			||||||
	if (block)
 | 
						if (block) {
 | 
				
			||||||
		wt->draw(&wt->wcol, rect, block->flag, block->direction);
 | 
							wt->draw(&wt->wcol, rect, block->flag, block->direction);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		wt->draw(&wt->wcol, rect, 0, 0);
 | 
							wt->draw(&wt->wcol, rect, 0, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ui_draw_clip_tri(block, rect, wt);
 | 
						ui_draw_clip_tri(block, rect, wt);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -4776,7 +4881,9 @@ void ui_draw_menu_item(const uiFontStyle *fstyle, rcti *rect, const char *name,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* text location offset */
 | 
						/* text location offset */
 | 
				
			||||||
	rect->xmin += 0.25f * UI_UNIT_X;
 | 
						rect->xmin += 0.25f * UI_UNIT_X;
 | 
				
			||||||
	if (iconid) rect->xmin += UI_DPI_ICON_SIZE;
 | 
						if (iconid) {
 | 
				
			||||||
 | 
							rect->xmin += UI_DPI_ICON_SIZE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* cut string in 2 parts? */
 | 
						/* cut string in 2 parts? */
 | 
				
			||||||
	if (use_sep) {
 | 
						if (use_sep) {
 | 
				
			||||||
@@ -4787,7 +4894,8 @@ void ui_draw_menu_item(const uiFontStyle *fstyle, rcti *rect, const char *name,
 | 
				
			|||||||
			/* need to set this first */
 | 
								/* need to set this first */
 | 
				
			||||||
			UI_fontstyle_set(fstyle);
 | 
								UI_fontstyle_set(fstyle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (fstyle->kerning == 1) { /* for BLF_width */
 | 
								if (fstyle->kerning == 1) {
 | 
				
			||||||
 | 
									/* for BLF_width */
 | 
				
			||||||
				BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
									BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4868,8 +4976,9 @@ void ui_draw_preview_item(const uiFontStyle *fstyle, rcti *rect, const char *nam
 | 
				
			|||||||
	trect.xmax = trect.xmin + font_dims[0] + U.widget_unit / 2;
 | 
						trect.xmax = trect.xmin + font_dims[0] + U.widget_unit / 2;
 | 
				
			||||||
	trect.ymin += U.widget_unit / 2;
 | 
						trect.ymin += U.widget_unit / 2;
 | 
				
			||||||
	trect.ymax = trect.ymin + font_dims[1];
 | 
						trect.ymax = trect.ymin + font_dims[1];
 | 
				
			||||||
	if (trect.xmax > rect->xmax - PREVIEW_PAD)
 | 
						if (trect.xmax > rect->xmax - PREVIEW_PAD) {
 | 
				
			||||||
		trect.xmax = rect->xmax - PREVIEW_PAD;
 | 
							trect.xmax = rect->xmax - PREVIEW_PAD;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		char drawstr[UI_MAX_DRAW_STR];
 | 
							char drawstr[UI_MAX_DRAW_STR];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,18 +167,24 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			switch (colorid) {
 | 
								switch (colorid) {
 | 
				
			||||||
				case TH_BACK:
 | 
									case TH_BACK:
 | 
				
			||||||
					if (ELEM(theme_regionid, RGN_TYPE_WINDOW, RGN_TYPE_PREVIEW))
 | 
										if (ELEM(theme_regionid, RGN_TYPE_WINDOW, RGN_TYPE_PREVIEW)) {
 | 
				
			||||||
						cp = ts->back;
 | 
											cp = ts->back;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_CHANNELS)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_CHANNELS) {
 | 
				
			||||||
						cp = ts->list;
 | 
											cp = ts->list;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_HEADER)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_HEADER) {
 | 
				
			||||||
						cp = ts->header;
 | 
											cp = ts->header;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_NAV_BAR)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_NAV_BAR) {
 | 
				
			||||||
						cp = ts->navigation_bar;
 | 
											cp = ts->navigation_bar;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_EXECUTE)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_EXECUTE) {
 | 
				
			||||||
						cp = ts->execution_buts;
 | 
											cp = ts->execution_buts;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						cp = ts->button;
 | 
											cp = ts->button;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					copy_v4_v4_char(back, cp);
 | 
										copy_v4_v4_char(back, cp);
 | 
				
			||||||
					if (!ED_region_is_overlap(spacetype, theme_regionid)) {
 | 
										if (!ED_region_is_overlap(spacetype, theme_regionid)) {
 | 
				
			||||||
@@ -195,34 +201,46 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
 | 
				
			|||||||
					setting = ts->show_back_grad;
 | 
										setting = ts->show_back_grad;
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case TH_TEXT:
 | 
									case TH_TEXT:
 | 
				
			||||||
					if (theme_regionid == RGN_TYPE_WINDOW)
 | 
										if (theme_regionid == RGN_TYPE_WINDOW) {
 | 
				
			||||||
						cp = ts->text;
 | 
											cp = ts->text;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_CHANNELS)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_CHANNELS) {
 | 
				
			||||||
						cp = ts->list_text;
 | 
											cp = ts->list_text;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_HEADER)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_HEADER) {
 | 
				
			||||||
						cp = ts->header_text;
 | 
											cp = ts->header_text;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						cp = ts->button_text;
 | 
											cp = ts->button_text;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case TH_TEXT_HI:
 | 
									case TH_TEXT_HI:
 | 
				
			||||||
					if (theme_regionid == RGN_TYPE_WINDOW)
 | 
										if (theme_regionid == RGN_TYPE_WINDOW) {
 | 
				
			||||||
						cp = ts->text_hi;
 | 
											cp = ts->text_hi;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_CHANNELS)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_CHANNELS) {
 | 
				
			||||||
						cp = ts->list_text_hi;
 | 
											cp = ts->list_text_hi;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_HEADER)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_HEADER) {
 | 
				
			||||||
						cp = ts->header_text_hi;
 | 
											cp = ts->header_text_hi;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						cp = ts->button_text_hi;
 | 
											cp = ts->button_text_hi;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case TH_TITLE:
 | 
									case TH_TITLE:
 | 
				
			||||||
					if (theme_regionid == RGN_TYPE_WINDOW)
 | 
										if (theme_regionid == RGN_TYPE_WINDOW) {
 | 
				
			||||||
						cp = ts->title;
 | 
											cp = ts->title;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_CHANNELS)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_CHANNELS) {
 | 
				
			||||||
						cp = ts->list_title;
 | 
											cp = ts->list_title;
 | 
				
			||||||
					else if (theme_regionid == RGN_TYPE_HEADER)
 | 
										}
 | 
				
			||||||
 | 
										else if (theme_regionid == RGN_TYPE_HEADER) {
 | 
				
			||||||
						cp = ts->header_title;
 | 
											cp = ts->header_title;
 | 
				
			||||||
					else
 | 
										}
 | 
				
			||||||
 | 
										else {
 | 
				
			||||||
						cp = ts->button_title;
 | 
											cp = ts->button_title;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case TH_HEADER:
 | 
									case TH_HEADER:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,10 +103,12 @@ BLI_INLINE void clamp_rctf_to_rcti(rcti *dst, const rctf *src)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int view2d_scroll_mapped(int scroll)
 | 
					static int view2d_scroll_mapped(int scroll)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (scroll & V2D_SCROLL_HORIZONTAL_FULLR)
 | 
						if (scroll & V2D_SCROLL_HORIZONTAL_FULLR) {
 | 
				
			||||||
		scroll &= ~(V2D_SCROLL_HORIZONTAL);
 | 
							scroll &= ~(V2D_SCROLL_HORIZONTAL);
 | 
				
			||||||
	if (scroll & V2D_SCROLL_VERTICAL_FULLR)
 | 
						}
 | 
				
			||||||
 | 
						if (scroll & V2D_SCROLL_VERTICAL_FULLR) {
 | 
				
			||||||
		scroll &= ~(V2D_SCROLL_VERTICAL);
 | 
							scroll &= ~(V2D_SCROLL_VERTICAL);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return scroll;
 | 
						return scroll;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -137,18 +139,22 @@ static void view2d_masks(View2D *v2d, bool check_scrollers, const rcti *mask_scr
 | 
				
			|||||||
		/* check size if hiding flag is set: */
 | 
							/* check size if hiding flag is set: */
 | 
				
			||||||
		if (v2d->scroll & V2D_SCROLL_HORIZONTAL_HIDE) {
 | 
							if (v2d->scroll & V2D_SCROLL_HORIZONTAL_HIDE) {
 | 
				
			||||||
			if (!(v2d->scroll & V2D_SCROLL_SCALE_HORIZONTAL)) {
 | 
								if (!(v2d->scroll & V2D_SCROLL_SCALE_HORIZONTAL)) {
 | 
				
			||||||
				if (BLI_rctf_size_x(&v2d->tot) > BLI_rctf_size_x(&v2d->cur))
 | 
									if (BLI_rctf_size_x(&v2d->tot) > BLI_rctf_size_x(&v2d->cur)) {
 | 
				
			||||||
					v2d->scroll &= ~V2D_SCROLL_HORIZONTAL_FULLR;
 | 
										v2d->scroll &= ~V2D_SCROLL_HORIZONTAL_FULLR;
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					v2d->scroll |= V2D_SCROLL_HORIZONTAL_FULLR;
 | 
										v2d->scroll |= V2D_SCROLL_HORIZONTAL_FULLR;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (v2d->scroll & V2D_SCROLL_VERTICAL_HIDE) {
 | 
							if (v2d->scroll & V2D_SCROLL_VERTICAL_HIDE) {
 | 
				
			||||||
			if (!(v2d->scroll & V2D_SCROLL_SCALE_VERTICAL)) {
 | 
								if (!(v2d->scroll & V2D_SCROLL_SCALE_VERTICAL)) {
 | 
				
			||||||
				if (BLI_rctf_size_y(&v2d->tot) + 0.01f > BLI_rctf_size_y(&v2d->cur))
 | 
									if (BLI_rctf_size_y(&v2d->tot) + 0.01f > BLI_rctf_size_y(&v2d->cur)) {
 | 
				
			||||||
					v2d->scroll &= ~V2D_SCROLL_VERTICAL_FULLR;
 | 
										v2d->scroll &= ~V2D_SCROLL_VERTICAL_FULLR;
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					v2d->scroll |= V2D_SCROLL_VERTICAL_FULLR;
 | 
										v2d->scroll |= V2D_SCROLL_VERTICAL_FULLR;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -377,10 +383,12 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
 | 
				
			|||||||
	/* set 'tot' rect before setting cur? */
 | 
						/* set 'tot' rect before setting cur? */
 | 
				
			||||||
	/* XXX confusing stuff here still -
 | 
						/* XXX confusing stuff here still -
 | 
				
			||||||
	 * I made this function not check scroller hide - that happens in totrect_set */
 | 
						 * I made this function not check scroller hide - that happens in totrect_set */
 | 
				
			||||||
	if (tot_changed)
 | 
						if (tot_changed) {
 | 
				
			||||||
		UI_view2d_totRect_set_resize(v2d, winx, winy, !do_init);
 | 
							UI_view2d_totRect_set_resize(v2d, winx, winy, !do_init);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		ui_view2d_curRect_validate_resize(v2d, !do_init, 0);
 | 
							ui_view2d_curRect_validate_resize(v2d, !do_init, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -423,19 +431,29 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
	curheight = height = BLI_rctf_size_y(cur);
 | 
						curheight = height = BLI_rctf_size_y(cur);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* if zoom is locked, size on the appropriate axis is reset to mask size */
 | 
						/* if zoom is locked, size on the appropriate axis is reset to mask size */
 | 
				
			||||||
	if (v2d->keepzoom & V2D_LOCKZOOM_X)
 | 
						if (v2d->keepzoom & V2D_LOCKZOOM_X) {
 | 
				
			||||||
		width = winx;
 | 
							width = winx;
 | 
				
			||||||
	if (v2d->keepzoom & V2D_LOCKZOOM_Y)
 | 
						}
 | 
				
			||||||
 | 
						if (v2d->keepzoom & V2D_LOCKZOOM_Y) {
 | 
				
			||||||
		height = winy;
 | 
							height = winy;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* values used to divide, so make it safe
 | 
						/* values used to divide, so make it safe
 | 
				
			||||||
	 * NOTE: width and height must use FLT_MIN instead of 1, otherwise it is impossible to
 | 
						 * NOTE: width and height must use FLT_MIN instead of 1, otherwise it is impossible to
 | 
				
			||||||
	 *       get enough resolution in Graph Editor for editing some curves
 | 
						 *       get enough resolution in Graph Editor for editing some curves
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (width < FLT_MIN) width = 1;
 | 
						if (width < FLT_MIN) {
 | 
				
			||||||
	if (height < FLT_MIN) height = 1;
 | 
							width = 1;
 | 
				
			||||||
	if (winx < 1) winx = 1;
 | 
						}
 | 
				
			||||||
	if (winy < 1) winy = 1;
 | 
						if (height < FLT_MIN) {
 | 
				
			||||||
 | 
							height = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (winx < 1) {
 | 
				
			||||||
 | 
							winx = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (winy < 1) {
 | 
				
			||||||
 | 
							winy = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* V2D_LIMITZOOM indicates that zoom level should be preserved when the window size changes */
 | 
						/* V2D_LIMITZOOM indicates that zoom level should be preserved when the window size changes */
 | 
				
			||||||
	if (resize && (v2d->keepzoom & V2D_KEEPZOOM)) {
 | 
						if (resize && (v2d->keepzoom & V2D_KEEPZOOM)) {
 | 
				
			||||||
@@ -445,16 +463,18 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
			zoom = winx / width;
 | 
								zoom = winx / width;
 | 
				
			||||||
			oldzoom = v2d->oldwinx / curwidth;
 | 
								oldzoom = v2d->oldwinx / curwidth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (oldzoom != zoom)
 | 
								if (oldzoom != zoom) {
 | 
				
			||||||
				width *= zoom / oldzoom;
 | 
									width *= zoom / oldzoom;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) {
 | 
							if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) {
 | 
				
			||||||
			zoom = winy / height;
 | 
								zoom = winy / height;
 | 
				
			||||||
			oldzoom = v2d->oldwiny / curheight;
 | 
								oldzoom = v2d->oldwiny / curheight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (oldzoom != zoom)
 | 
								if (oldzoom != zoom) {
 | 
				
			||||||
				height *= zoom / oldzoom;
 | 
									height *= zoom / oldzoom;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits
 | 
						/* keepzoom (V2D_LIMITZOOM set), indicates that zoom level on each axis must not exceed limits
 | 
				
			||||||
@@ -499,8 +519,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
		/* when a window edge changes, the aspect ratio can't be used to
 | 
							/* when a window edge changes, the aspect ratio can't be used to
 | 
				
			||||||
		 * find which is the best new 'cur' rect. that's why it stores 'old'
 | 
							 * find which is the best new 'cur' rect. that's why it stores 'old'
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (winx != v2d->oldwinx) do_x = true;
 | 
							if (winx != v2d->oldwinx) {
 | 
				
			||||||
		if (winy != v2d->oldwiny) do_y = true;
 | 
								do_x = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (winy != v2d->oldwiny) {
 | 
				
			||||||
 | 
								do_y = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		curRatio = height / width;
 | 
							curRatio = height / width;
 | 
				
			||||||
		winRatio = winy / winx;
 | 
							winRatio = winy / winx;
 | 
				
			||||||
@@ -509,8 +533,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
		if (do_x == do_y) {
 | 
							if (do_x == do_y) {
 | 
				
			||||||
			if (do_x && do_y) {
 | 
								if (do_x && do_y) {
 | 
				
			||||||
				/* here is 1,1 case, so all others must be 0,0 */
 | 
									/* here is 1,1 case, so all others must be 0,0 */
 | 
				
			||||||
				if (fabsf(winx - v2d->oldwinx) > fabsf(winy - v2d->oldwiny)) do_y = false;
 | 
									if (fabsf(winx - v2d->oldwinx) > fabsf(winy - v2d->oldwiny)) {
 | 
				
			||||||
				else do_x = false;
 | 
										do_y = false;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										do_x = false;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (winRatio > curRatio) {
 | 
								else if (winRatio > curRatio) {
 | 
				
			||||||
				do_x = false;
 | 
									do_x = false;
 | 
				
			||||||
@@ -587,10 +615,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
				cur->xmax += width - BLI_rctf_size_x(cur);
 | 
									cur->xmax += width - BLI_rctf_size_x(cur);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (v2d->keepofs & V2D_KEEPOFS_X) {
 | 
								else if (v2d->keepofs & V2D_KEEPOFS_X) {
 | 
				
			||||||
				if (v2d->align & V2D_ALIGN_NO_POS_X)
 | 
									if (v2d->align & V2D_ALIGN_NO_POS_X) {
 | 
				
			||||||
					cur->xmin -= width - BLI_rctf_size_x(cur);
 | 
										cur->xmin -= width - BLI_rctf_size_x(cur);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					cur->xmax += width - BLI_rctf_size_x(cur);
 | 
										cur->xmax += width - BLI_rctf_size_x(cur);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				temp = BLI_rctf_cent_x(cur);
 | 
									temp = BLI_rctf_cent_x(cur);
 | 
				
			||||||
@@ -605,10 +635,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
				cur->ymax += height - BLI_rctf_size_y(cur);
 | 
									cur->ymax += height - BLI_rctf_size_y(cur);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (v2d->keepofs & V2D_KEEPOFS_Y) {
 | 
								else if (v2d->keepofs & V2D_KEEPOFS_Y) {
 | 
				
			||||||
				if (v2d->align & V2D_ALIGN_NO_POS_Y)
 | 
									if (v2d->align & V2D_ALIGN_NO_POS_Y) {
 | 
				
			||||||
					cur->ymin -= height - BLI_rctf_size_y(cur);
 | 
										cur->ymin -= height - BLI_rctf_size_y(cur);
 | 
				
			||||||
				else
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
					cur->ymax += height - BLI_rctf_size_y(cur);
 | 
										cur->ymax += height - BLI_rctf_size_y(cur);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				temp = BLI_rctf_cent_y(cur);
 | 
									temp = BLI_rctf_cent_y(cur);
 | 
				
			||||||
@@ -631,8 +663,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
		/* width */
 | 
							/* width */
 | 
				
			||||||
		if ((curwidth > totwidth) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_X | V2D_LIMITZOOM))) {
 | 
							if ((curwidth > totwidth) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_X | V2D_LIMITZOOM))) {
 | 
				
			||||||
			/* if zoom doesn't have to be maintained, just clamp edges */
 | 
								/* if zoom doesn't have to be maintained, just clamp edges */
 | 
				
			||||||
			if (cur->xmin < tot->xmin) cur->xmin = tot->xmin;
 | 
								if (cur->xmin < tot->xmin) {
 | 
				
			||||||
			if (cur->xmax > tot->xmax) cur->xmax = tot->xmax;
 | 
									cur->xmin = tot->xmin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (cur->xmax > tot->xmax) {
 | 
				
			||||||
 | 
									cur->xmax = tot->xmax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (v2d->keeptot == V2D_KEEPTOT_STRICT) {
 | 
							else if (v2d->keeptot == V2D_KEEPTOT_STRICT) {
 | 
				
			||||||
			/* This is an exception for the outliner (and later channel-lists, headers)
 | 
								/* This is an exception for the outliner (and later channel-lists, headers)
 | 
				
			||||||
@@ -715,8 +751,12 @@ static void ui_view2d_curRect_validate_resize(View2D *v2d, bool resize, bool mas
 | 
				
			|||||||
		/* height */
 | 
							/* height */
 | 
				
			||||||
		if ((curheight > totheight) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_Y | V2D_LIMITZOOM))) {
 | 
							if ((curheight > totheight) && !(v2d->keepzoom & (V2D_KEEPZOOM | V2D_LOCKZOOM_Y | V2D_LIMITZOOM))) {
 | 
				
			||||||
			/* if zoom doesn't have to be maintained, just clamp edges */
 | 
								/* if zoom doesn't have to be maintained, just clamp edges */
 | 
				
			||||||
			if (cur->ymin < tot->ymin) cur->ymin = tot->ymin;
 | 
								if (cur->ymin < tot->ymin) {
 | 
				
			||||||
			if (cur->ymax > tot->ymax) cur->ymax = tot->ymax;
 | 
									cur->ymin = tot->ymin;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (cur->ymax > tot->ymax) {
 | 
				
			||||||
 | 
									cur->ymax = tot->ymax;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			/* This here occurs when:
 | 
								/* This here occurs when:
 | 
				
			||||||
@@ -814,8 +854,9 @@ void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag)
 | 
				
			|||||||
	ARegion *ar;
 | 
						ARegion *ar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* don't continue if no view syncing to be done */
 | 
						/* don't continue if no view syncing to be done */
 | 
				
			||||||
	if ((v2dcur->flag & (V2D_VIEWSYNC_SCREEN_TIME | V2D_VIEWSYNC_AREA_VERTICAL)) == 0)
 | 
						if ((v2dcur->flag & (V2D_VIEWSYNC_SCREEN_TIME | V2D_VIEWSYNC_AREA_VERTICAL)) == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check if doing within area syncing (i.e. channels/vertical) */
 | 
						/* check if doing within area syncing (i.e. channels/vertical) */
 | 
				
			||||||
	if ((v2dcur->flag & V2D_VIEWSYNC_AREA_VERTICAL) && (area)) {
 | 
						if ((v2dcur->flag & V2D_VIEWSYNC_AREA_VERTICAL) && (area)) {
 | 
				
			||||||
@@ -936,14 +977,17 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, bool resiz
 | 
				
			|||||||
	/* hrumf! */
 | 
						/* hrumf! */
 | 
				
			||||||
	/* XXX: there are work arounds for this in the panel and file browse code. */
 | 
						/* XXX: there are work arounds for this in the panel and file browse code. */
 | 
				
			||||||
	/* round to int, because this is called with width + V2D_SCROLL_WIDTH */
 | 
						/* round to int, because this is called with width + V2D_SCROLL_WIDTH */
 | 
				
			||||||
//	if (scroll & V2D_SCROLL_HORIZONTAL)
 | 
					//	if (scroll & V2D_SCROLL_HORIZONTAL) {
 | 
				
			||||||
//		width -= (int)V2D_SCROLL_WIDTH;
 | 
					//		width -= (int)V2D_SCROLL_WIDTH;
 | 
				
			||||||
//	if (scroll & V2D_SCROLL_VERTICAL)
 | 
					//	}
 | 
				
			||||||
 | 
					//	if (scroll & V2D_SCROLL_VERTICAL) {
 | 
				
			||||||
//		height -= (int)V2D_SCROLL_HEIGHT;
 | 
					//		height -= (int)V2D_SCROLL_HEIGHT;
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ELEM(0, width, height)) {
 | 
						if (ELEM(0, width, height)) {
 | 
				
			||||||
		if (G.debug & G_DEBUG)
 | 
							if (G.debug & G_DEBUG) {
 | 
				
			||||||
			printf("Error: View2D totRect set exiting: v2d=%p width=%d height=%d\n", (void *)v2d, width, height);  // XXX temp debug info
 | 
								printf("Error: View2D totRect set exiting: v2d=%p width=%d height=%d\n", (void *)v2d, width, height);  // XXX temp debug info
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1012,10 +1056,12 @@ bool UI_view2d_tab_set(View2D *v2d, int tab)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* if tab changed, change offset */
 | 
						/* if tab changed, change offset */
 | 
				
			||||||
	if (tab != v2d->tab_cur && v2d->tab_offset) {
 | 
						if (tab != v2d->tab_cur && v2d->tab_offset) {
 | 
				
			||||||
		if (tab < v2d->tab_num)
 | 
							if (tab < v2d->tab_num) {
 | 
				
			||||||
			offset = &v2d->tab_offset[tab * 2];
 | 
								offset = &v2d->tab_offset[tab * 2];
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			offset = default_offset;
 | 
								offset = default_offset;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v2d->cur.xmax += offset[0] - v2d->cur.xmin;
 | 
							v2d->cur.xmax += offset[0] - v2d->cur.xmin;
 | 
				
			||||||
		v2d->cur.xmin = offset[0];
 | 
							v2d->cur.xmin = offset[0];
 | 
				
			||||||
@@ -1083,15 +1129,19 @@ static void view2d_map_cur_using_mask(View2D *v2d, rctf *curmasked)
 | 
				
			|||||||
			float dx = BLI_rctf_size_x(&v2d->cur) / (sizex + 1);
 | 
								float dx = BLI_rctf_size_x(&v2d->cur) / (sizex + 1);
 | 
				
			||||||
			float dy = BLI_rctf_size_y(&v2d->cur) / (sizey + 1);
 | 
								float dy = BLI_rctf_size_y(&v2d->cur) / (sizey + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (v2d->mask.xmin != 0)
 | 
								if (v2d->mask.xmin != 0) {
 | 
				
			||||||
				curmasked->xmin -= dx * (float)v2d->mask.xmin;
 | 
									curmasked->xmin -= dx * (float)v2d->mask.xmin;
 | 
				
			||||||
			if (v2d->mask.xmax + 1 != v2d->winx)
 | 
								}
 | 
				
			||||||
 | 
								if (v2d->mask.xmax + 1 != v2d->winx) {
 | 
				
			||||||
				curmasked->xmax += dx * (float)(v2d->winx - v2d->mask.xmax - 1);
 | 
									curmasked->xmax += dx * (float)(v2d->winx - v2d->mask.xmax - 1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (v2d->mask.ymin != 0)
 | 
								if (v2d->mask.ymin != 0) {
 | 
				
			||||||
				curmasked->ymin -= dy * (float)v2d->mask.ymin;
 | 
									curmasked->ymin -= dy * (float)v2d->mask.ymin;
 | 
				
			||||||
			if (v2d->mask.ymax + 1 != v2d->winy)
 | 
								}
 | 
				
			||||||
 | 
								if (v2d->mask.ymax + 1 != v2d->winy) {
 | 
				
			||||||
				curmasked->ymax += dy * (float)(v2d->winy - v2d->mask.ymax - 1);
 | 
									curmasked->ymax += dy * (float)(v2d->winy - v2d->mask.ymax - 1);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1110,10 +1160,12 @@ void UI_view2d_view_ortho(View2D *v2d)
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	/* XXX brecht: instead of zero at least use a tiny offset, otherwise
 | 
						/* XXX brecht: instead of zero at least use a tiny offset, otherwise
 | 
				
			||||||
	 * pixel rounding is effectively random due to float inaccuracy */
 | 
						 * pixel rounding is effectively random due to float inaccuracy */
 | 
				
			||||||
	if (sizex > 0)
 | 
						if (sizex > 0) {
 | 
				
			||||||
		xofs = eps * BLI_rctf_size_x(&v2d->cur) / sizex;
 | 
							xofs = eps * BLI_rctf_size_x(&v2d->cur) / sizex;
 | 
				
			||||||
	if (sizey > 0)
 | 
						}
 | 
				
			||||||
 | 
						if (sizey > 0) {
 | 
				
			||||||
		yofs = eps * BLI_rctf_size_y(&v2d->cur) / sizey;
 | 
							yofs = eps * BLI_rctf_size_y(&v2d->cur) / sizey;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* apply mask-based adjustments to cur rect (due to scrollers),
 | 
						/* apply mask-based adjustments to cur rect (due to scrollers),
 | 
				
			||||||
	 * to eliminate scaling artifacts */
 | 
						 * to eliminate scaling artifacts */
 | 
				
			||||||
@@ -1157,10 +1209,12 @@ void UI_view2d_view_orthoSpecial(ARegion *ar, View2D *v2d, const bool xaxis)
 | 
				
			|||||||
	view2d_map_cur_using_mask(v2d, &curmasked);
 | 
						view2d_map_cur_using_mask(v2d, &curmasked);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* only set matrix with 'cur' coordinates on relevant axes */
 | 
						/* only set matrix with 'cur' coordinates on relevant axes */
 | 
				
			||||||
	if (xaxis)
 | 
						if (xaxis) {
 | 
				
			||||||
		wmOrtho2(curmasked.xmin - xofs, curmasked.xmax - xofs, -yofs, ar->winy - yofs);
 | 
							wmOrtho2(curmasked.xmin - xofs, curmasked.xmax - xofs, -yofs, ar->winy - yofs);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		wmOrtho2(-xofs, ar->winx - xofs, curmasked.ymin - yofs, curmasked.ymax - yofs);
 | 
							wmOrtho2(-xofs, ar->winx - xofs, curmasked.ymin - yofs, curmasked.ymax - yofs);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1201,9 +1255,15 @@ static void step_to_grid(float *step, int *power, int unit)
 | 
				
			|||||||
	rem = (float)pow(10.0, rem);
 | 
						rem = (float)pow(10.0, rem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (loga < 0.0f) {
 | 
						if (loga < 0.0f) {
 | 
				
			||||||
		if (rem < 0.2f) rem = 0.2f;
 | 
							if (rem < 0.2f) {
 | 
				
			||||||
		else if (rem < 0.5f) rem = 0.5f;
 | 
								rem = 0.2f;
 | 
				
			||||||
		else rem = 1.0f;
 | 
							}
 | 
				
			||||||
 | 
							else if (rem < 0.5f) {
 | 
				
			||||||
 | 
								rem = 0.5f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								rem = 1.0f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		*step = rem * (float)pow(10.0, (*power));
 | 
							*step = rem * (float)pow(10.0, (*power));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1216,18 +1276,28 @@ static void step_to_grid(float *step, int *power, int unit)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* prevents printing 1.0 2.0 3.0 etc */
 | 
							/* prevents printing 1.0 2.0 3.0 etc */
 | 
				
			||||||
		if (rem == 1.0f) (*power)++;
 | 
							if (rem == 1.0f) {
 | 
				
			||||||
 | 
								(*power)++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (rem < 2.0f) rem = 2.0f;
 | 
							if (rem < 2.0f) {
 | 
				
			||||||
		else if (rem < 5.0f) rem = 5.0f;
 | 
								rem = 2.0f;
 | 
				
			||||||
		else rem = 10.0f;
 | 
							}
 | 
				
			||||||
 | 
							else if (rem < 5.0f) {
 | 
				
			||||||
 | 
								rem = 5.0f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								rem = 10.0f;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		*step = rem * (float)pow(10.0, (*power));
 | 
							*step = rem * (float)pow(10.0, (*power));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		(*power)++;
 | 
							(*power)++;
 | 
				
			||||||
		/* prevents printing 1.0, 2.0, 3.0, etc. */
 | 
							/* prevents printing 1.0, 2.0, 3.0, etc. */
 | 
				
			||||||
		if (rem == 10.0f) (*power)++;
 | 
							if (rem == 10.0f) {
 | 
				
			||||||
 | 
								(*power)++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1254,8 +1324,9 @@ View2DGrid *UI_view2d_grid_calc(
 | 
				
			|||||||
	float space, seconddiv;
 | 
						float space, seconddiv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that there are at least some workable args */
 | 
						/* check that there are at least some workable args */
 | 
				
			||||||
	if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) && ELEM(V2D_ARG_DUMMY, yunits, yclamp))
 | 
						if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) && ELEM(V2D_ARG_DUMMY, yunits, yclamp)) {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* grid here is allocated... */
 | 
						/* grid here is allocated... */
 | 
				
			||||||
	grid = MEM_callocN(sizeof(View2DGrid), "View2DGrid");
 | 
						grid = MEM_callocN(sizeof(View2DGrid), "View2DGrid");
 | 
				
			||||||
@@ -1308,17 +1379,23 @@ View2DGrid *UI_view2d_grid_calc(
 | 
				
			|||||||
	/* calculate start position */
 | 
						/* calculate start position */
 | 
				
			||||||
	if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) {
 | 
						if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) {
 | 
				
			||||||
		grid->startx = seconddiv * (v2d->cur.xmin / seconddiv - (float)fmod(v2d->cur.xmin / seconddiv, grid->dx / seconddiv));
 | 
							grid->startx = seconddiv * (v2d->cur.xmin / seconddiv - (float)fmod(v2d->cur.xmin / seconddiv, grid->dx / seconddiv));
 | 
				
			||||||
		if (v2d->cur.xmin < 0.0f) grid->startx -= grid->dx;
 | 
							if (v2d->cur.xmin < 0.0f) {
 | 
				
			||||||
 | 
								grid->startx -= grid->dx;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		grid->startx = v2d->cur.xmin;
 | 
							grid->startx = v2d->cur.xmin;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) {
 | 
						if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) {
 | 
				
			||||||
		grid->starty = (v2d->cur.ymin - (float)fmod(v2d->cur.ymin, grid->dy));
 | 
							grid->starty = (v2d->cur.ymin - (float)fmod(v2d->cur.ymin, grid->dy));
 | 
				
			||||||
		if (v2d->cur.ymin < 0.0f) grid->starty -= grid->dy;
 | 
							if (v2d->cur.ymin < 0.0f) {
 | 
				
			||||||
 | 
								grid->starty -= grid->dy;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		grid->starty = v2d->cur.ymin;
 | 
							grid->starty = v2d->cur.ymin;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return grid;
 | 
						return grid;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1333,8 +1410,9 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
 | 
				
			|||||||
	uchar grid_line_color[3];
 | 
						uchar grid_line_color[3];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check for grid first, as it may not exist */
 | 
						/* check for grid first, as it may not exist */
 | 
				
			||||||
	if (grid == NULL)
 | 
						if (grid == NULL) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Count the needed vertices for the gridlines */
 | 
						/* Count the needed vertices for the gridlines */
 | 
				
			||||||
	unsigned vertex_count = 0;
 | 
						unsigned vertex_count = 0;
 | 
				
			||||||
@@ -1348,18 +1426,22 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
 | 
				
			|||||||
		vertex_count += 2 * (horizontal_major_step + 1);	/* major gridlines */
 | 
							vertex_count += 2 * (horizontal_major_step + 1);	/* major gridlines */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* fine lines */
 | 
							/* fine lines */
 | 
				
			||||||
		if (flag & V2D_HORIZONTAL_FINELINES)
 | 
							if (flag & V2D_HORIZONTAL_FINELINES) {
 | 
				
			||||||
			vertex_count += 2 * (horizontal_major_step + 1);
 | 
								vertex_count += 2 * (horizontal_major_step + 1);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* axes */
 | 
						/* axes */
 | 
				
			||||||
	if (flag & V2D_HORIZONTAL_AXIS)
 | 
						if (flag & V2D_HORIZONTAL_AXIS) {
 | 
				
			||||||
		vertex_count += 2;
 | 
							vertex_count += 2;
 | 
				
			||||||
	if (flag & V2D_VERTICAL_AXIS)
 | 
						}
 | 
				
			||||||
 | 
						if (flag & V2D_VERTICAL_AXIS) {
 | 
				
			||||||
		vertex_count += 2;
 | 
							vertex_count += 2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* If there is nothing to render, exit early */
 | 
						/* If there is nothing to render, exit early */
 | 
				
			||||||
	if (vertex_count == 0)
 | 
						if (vertex_count == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GPUVertFormat *format = immVertexFormat();
 | 
						GPUVertFormat *format = immVertexFormat();
 | 
				
			||||||
	uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
 | 
						uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
 | 
				
			||||||
@@ -1481,26 +1563,34 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step)
 | 
				
			|||||||
	int count_x, count_y;
 | 
						int count_x, count_y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	start_x = v2d->cur.xmin;
 | 
						start_x = v2d->cur.xmin;
 | 
				
			||||||
	if (start_x < 0.0)
 | 
						if (start_x < 0.0) {
 | 
				
			||||||
		start_x += -(float)fmod(v2d->cur.xmin, step);
 | 
							start_x += -(float)fmod(v2d->cur.xmin, step);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		start_x += (step - (float)fmod(v2d->cur.xmin, step));
 | 
							start_x += (step - (float)fmod(v2d->cur.xmin, step));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (start_x > v2d->cur.xmax)
 | 
						if (start_x > v2d->cur.xmax) {
 | 
				
			||||||
		count_x = 0;
 | 
							count_x = 0;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		count_x = (v2d->cur.xmax - start_x) / step + 1;
 | 
							count_x = (v2d->cur.xmax - start_x) / step + 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	start_y = v2d->cur.ymin;
 | 
						start_y = v2d->cur.ymin;
 | 
				
			||||||
	if (start_y < 0.0)
 | 
						if (start_y < 0.0) {
 | 
				
			||||||
		start_y += -(float)fmod(v2d->cur.ymin, step);
 | 
							start_y += -(float)fmod(v2d->cur.ymin, step);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		start_y += (step - (float)fabs(fmod(v2d->cur.ymin, step)));
 | 
							start_y += (step - (float)fabs(fmod(v2d->cur.ymin, step)));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (start_y > v2d->cur.ymax)
 | 
						if (start_y > v2d->cur.ymax) {
 | 
				
			||||||
		count_y = 0;
 | 
							count_y = 0;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		count_y = (v2d->cur.ymax - start_y) / step + 1;
 | 
							count_y = (v2d->cur.ymax - start_y) / step + 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (count_x > 0 || count_y > 0) {
 | 
						if (count_x > 0 || count_y > 0) {
 | 
				
			||||||
		GPUVertFormat *format = immVertexFormat();
 | 
							GPUVertFormat *format = immVertexFormat();
 | 
				
			||||||
@@ -1542,8 +1632,9 @@ void UI_view2d_constant_grid_draw(View2D *v2d, float step)
 | 
				
			|||||||
void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_size, int totlevels)
 | 
					void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_size, int totlevels)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Exit if there is nothing to draw */
 | 
						/* Exit if there is nothing to draw */
 | 
				
			||||||
	if (totlevels == 0)
 | 
						if (totlevels == 0) {
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int offset = -10;
 | 
						int offset = -10;
 | 
				
			||||||
	float lstep = step;
 | 
						float lstep = step;
 | 
				
			||||||
@@ -1567,13 +1658,15 @@ void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_s
 | 
				
			|||||||
		UI_GetThemeColorShade3ubv(colorid, offset, grid_line_color);
 | 
							UI_GetThemeColorShade3ubv(colorid, offset, grid_line_color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		int i = (int)(v2d->cur.xmin / lstep);
 | 
							int i = (int)(v2d->cur.xmin / lstep);
 | 
				
			||||||
		if (v2d->cur.xmin > 0.0f)
 | 
							if (v2d->cur.xmin > 0.0f) {
 | 
				
			||||||
			i++;
 | 
								i++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		float start = i * lstep;
 | 
							float start = i * lstep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (; start < v2d->cur.xmax; start += lstep, ++i) {
 | 
							for (; start < v2d->cur.xmax; start += lstep, ++i) {
 | 
				
			||||||
			if (i == 0 || (level < totlevels - 1 && i % level_size == 0))
 | 
								if (i == 0 || (level < totlevels - 1 && i % level_size == 0)) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			immAttrSkip(color);
 | 
								immAttrSkip(color);
 | 
				
			||||||
			immVertex2f(pos, start, v2d->cur.ymin);
 | 
								immVertex2f(pos, start, v2d->cur.ymin);
 | 
				
			||||||
@@ -1582,13 +1675,15 @@ void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_s
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		i = (int)(v2d->cur.ymin / lstep);
 | 
							i = (int)(v2d->cur.ymin / lstep);
 | 
				
			||||||
		if (v2d->cur.ymin > 0.0f)
 | 
							if (v2d->cur.ymin > 0.0f) {
 | 
				
			||||||
			i++;
 | 
								i++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		start = i * lstep;
 | 
							start = i * lstep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (; start < v2d->cur.ymax; start += lstep, ++i) {
 | 
							for (; start < v2d->cur.ymax; start += lstep, ++i) {
 | 
				
			||||||
			if (i == 0 || (level < totlevels - 1 && i % level_size == 0))
 | 
								if (i == 0 || (level < totlevels - 1 && i % level_size == 0)) {
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			immAttrSkip(color);
 | 
								immAttrSkip(color);
 | 
				
			||||||
			immVertex2f(pos, v2d->cur.xmin, start);
 | 
								immVertex2f(pos, v2d->cur.xmin, start);
 | 
				
			||||||
@@ -1684,15 +1779,19 @@ View2DScrollers *UI_view2d_scrollers_calc(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* width of sliders */
 | 
						/* width of sliders */
 | 
				
			||||||
	smaller = (int)(0.1f * U.widget_unit);
 | 
						smaller = (int)(0.1f * U.widget_unit);
 | 
				
			||||||
	if (scroll & V2D_SCROLL_BOTTOM)
 | 
						if (scroll & V2D_SCROLL_BOTTOM) {
 | 
				
			||||||
		hor.ymin += smaller;
 | 
							hor.ymin += smaller;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		hor.ymax -= smaller;
 | 
							hor.ymax -= smaller;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (scroll & V2D_SCROLL_LEFT)
 | 
						if (scroll & V2D_SCROLL_LEFT) {
 | 
				
			||||||
		vert.xmin += smaller;
 | 
							vert.xmin += smaller;
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		vert.xmax -= smaller;
 | 
							vert.xmax -= smaller;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CLAMP(vert.ymin, vert.ymin, vert.ymax - V2D_SCROLLER_HANDLE_SIZE);
 | 
						CLAMP(vert.ymin, vert.ymin, vert.ymax - V2D_SCROLLER_HANDLE_SIZE);
 | 
				
			||||||
	CLAMP(hor.xmin, hor.xmin, hor.xmax - V2D_SCROLLER_HANDLE_SIZE);
 | 
						CLAMP(hor.xmin, hor.xmin, hor.xmax - V2D_SCROLLER_HANDLE_SIZE);
 | 
				
			||||||
@@ -1711,23 +1810,30 @@ View2DScrollers *UI_view2d_scrollers_calc(
 | 
				
			|||||||
		/* scroller 'button' extents */
 | 
							/* scroller 'button' extents */
 | 
				
			||||||
		totsize = BLI_rctf_size_x(&v2d->tot);
 | 
							totsize = BLI_rctf_size_x(&v2d->tot);
 | 
				
			||||||
		scrollsize = (float)BLI_rcti_size_x(&hor);
 | 
							scrollsize = (float)BLI_rcti_size_x(&hor);
 | 
				
			||||||
		if (totsize == 0.0f) totsize = 1.0f;  /* avoid divide by zero */
 | 
							if (totsize == 0.0f) {
 | 
				
			||||||
 | 
								totsize = 1.0f;  /* avoid divide by zero */
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fac1 = (v2d->cur.xmin - v2d->tot.xmin) / totsize;
 | 
							fac1 = (v2d->cur.xmin - v2d->tot.xmin) / totsize;
 | 
				
			||||||
		if (fac1 <= 0.0f)
 | 
							if (fac1 <= 0.0f) {
 | 
				
			||||||
			scrollers->hor_min = hor.xmin;
 | 
								scrollers->hor_min = hor.xmin;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			scrollers->hor_min = (int)(hor.xmin + (fac1 * scrollsize));
 | 
								scrollers->hor_min = (int)(hor.xmin + (fac1 * scrollsize));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fac2 = (v2d->cur.xmax - v2d->tot.xmin) / totsize;
 | 
							fac2 = (v2d->cur.xmax - v2d->tot.xmin) / totsize;
 | 
				
			||||||
		if (fac2 >= 1.0f)
 | 
							if (fac2 >= 1.0f) {
 | 
				
			||||||
			scrollers->hor_max = hor.xmax;
 | 
								scrollers->hor_max = hor.xmax;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			scrollers->hor_max = (int)(hor.xmin + (fac2 * scrollsize));
 | 
								scrollers->hor_max = (int)(hor.xmin + (fac2 * scrollsize));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* prevent inverted sliders */
 | 
							/* prevent inverted sliders */
 | 
				
			||||||
		if (scrollers->hor_min > scrollers->hor_max)
 | 
							if (scrollers->hor_min > scrollers->hor_max) {
 | 
				
			||||||
			scrollers->hor_min = scrollers->hor_max;
 | 
								scrollers->hor_min = scrollers->hor_max;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		/* prevent sliders from being too small, and disappearing */
 | 
							/* prevent sliders from being too small, and disappearing */
 | 
				
			||||||
		if ((scrollers->hor_max - scrollers->hor_min) < V2D_SCROLLER_HANDLE_SIZE) {
 | 
							if ((scrollers->hor_max - scrollers->hor_min) < V2D_SCROLLER_HANDLE_SIZE) {
 | 
				
			||||||
			scrollers->hor_max = scrollers->hor_min + V2D_SCROLLER_HANDLE_SIZE;
 | 
								scrollers->hor_max = scrollers->hor_min + V2D_SCROLLER_HANDLE_SIZE;
 | 
				
			||||||
@@ -1743,23 +1849,30 @@ View2DScrollers *UI_view2d_scrollers_calc(
 | 
				
			|||||||
		/* scroller 'button' extents */
 | 
							/* scroller 'button' extents */
 | 
				
			||||||
		totsize    =        BLI_rctf_size_y(&v2d->tot);
 | 
							totsize    =        BLI_rctf_size_y(&v2d->tot);
 | 
				
			||||||
		scrollsize = (float)BLI_rcti_size_y(&vert);
 | 
							scrollsize = (float)BLI_rcti_size_y(&vert);
 | 
				
			||||||
		if (totsize == 0.0f) totsize = 1.0f;  /* avoid divide by zero */
 | 
							if (totsize == 0.0f) {
 | 
				
			||||||
 | 
								totsize = 1.0f;  /* avoid divide by zero */
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fac1 = (v2d->cur.ymin - v2d->tot.ymin) / totsize;
 | 
							fac1 = (v2d->cur.ymin - v2d->tot.ymin) / totsize;
 | 
				
			||||||
		if (fac1 <= 0.0f)
 | 
							if (fac1 <= 0.0f) {
 | 
				
			||||||
			scrollers->vert_min = vert.ymin;
 | 
								scrollers->vert_min = vert.ymin;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			scrollers->vert_min = (int)(vert.ymin + (fac1 * scrollsize));
 | 
								scrollers->vert_min = (int)(vert.ymin + (fac1 * scrollsize));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fac2 = (v2d->cur.ymax - v2d->tot.ymin) / totsize;
 | 
							fac2 = (v2d->cur.ymax - v2d->tot.ymin) / totsize;
 | 
				
			||||||
		if (fac2 >= 1.0f)
 | 
							if (fac2 >= 1.0f) {
 | 
				
			||||||
			scrollers->vert_max = vert.ymax;
 | 
								scrollers->vert_max = vert.ymax;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			scrollers->vert_max = (int)(vert.ymin + (fac2 * scrollsize));
 | 
								scrollers->vert_max = (int)(vert.ymin + (fac2 * scrollsize));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* prevent inverted sliders */
 | 
							/* prevent inverted sliders */
 | 
				
			||||||
		if (scrollers->vert_min > scrollers->vert_max)
 | 
							if (scrollers->vert_min > scrollers->vert_max) {
 | 
				
			||||||
			scrollers->vert_min = scrollers->vert_max;
 | 
								scrollers->vert_min = scrollers->vert_max;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		/* prevent sliders from being too small, and disappearing */
 | 
							/* prevent sliders from being too small, and disappearing */
 | 
				
			||||||
		if ((scrollers->vert_max - scrollers->vert_min) < V2D_SCROLLER_HANDLE_SIZE) {
 | 
							if ((scrollers->vert_max - scrollers->vert_min) < V2D_SCROLLER_HANDLE_SIZE) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1821,10 +1934,12 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power
 | 
				
			|||||||
	len = strlen(timecode_str);
 | 
						len = strlen(timecode_str);
 | 
				
			||||||
	if (dir == 'h') {
 | 
						if (dir == 'h') {
 | 
				
			||||||
		/* seconds/timecode display has slightly longer strings... */
 | 
							/* seconds/timecode display has slightly longer strings... */
 | 
				
			||||||
		if (unit == V2D_UNIT_SECONDS)
 | 
							if (unit == V2D_UNIT_SECONDS) {
 | 
				
			||||||
			x -= 3 * len;
 | 
								x -= 3 * len;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			x -= 4 * len;
 | 
								x -= 4 * len;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Add degree sympbol to end of string for vertical scrollbar? */
 | 
						/* Add degree sympbol to end of string for vertical scrollbar? */
 | 
				
			||||||
@@ -1916,8 +2031,9 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
 | 
				
			|||||||
					dfac *= 2.0f;
 | 
										dfac *= 2.0f;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (vs->xunits == V2D_UNIT_FRAMES)
 | 
								if (vs->xunits == V2D_UNIT_FRAMES) {
 | 
				
			||||||
				grid->powerx = 1;
 | 
									grid->powerx = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* draw numbers in the appropriate range */
 | 
								/* draw numbers in the appropriate range */
 | 
				
			||||||
			if (dfac > 0.0f) {
 | 
								if (dfac > 0.0f) {
 | 
				
			||||||
@@ -1928,8 +2044,9 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
 | 
				
			|||||||
				for (; fac < hor.xmax - 0.5f * U.widget_unit; fac += dfac, val += grid->dx) {
 | 
									for (; fac < hor.xmax - 0.5f * U.widget_unit; fac += dfac, val += grid->dx) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					/* make prints look nicer for scrollers */
 | 
										/* make prints look nicer for scrollers */
 | 
				
			||||||
					if (fac < hor.xmin + 0.5f * U.widget_unit)
 | 
										if (fac < hor.xmin + 0.5f * U.widget_unit) {
 | 
				
			||||||
						continue;
 | 
											continue;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					switch (vs->xunits) {
 | 
										switch (vs->xunits) {
 | 
				
			||||||
						case V2D_UNIT_FRAMES:       /* frames (as whole numbers)*/
 | 
											case V2D_UNIT_FRAMES:       /* frames (as whole numbers)*/
 | 
				
			||||||
@@ -2018,8 +2135,9 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			/* if vertical clamping (to whole numbers) is used (i.e. in Sequencer),
 | 
								/* if vertical clamping (to whole numbers) is used (i.e. in Sequencer),
 | 
				
			||||||
			 * apply correction */
 | 
								 * apply correction */
 | 
				
			||||||
			if (vs->yclamp == V2D_GRID_CLAMP)
 | 
								if (vs->yclamp == V2D_GRID_CLAMP) {
 | 
				
			||||||
				fac += 0.5f * dfac;
 | 
									fac += 0.5f * dfac;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* draw vertical steps */
 | 
								/* draw vertical steps */
 | 
				
			||||||
			if (dfac > 0.0f) {
 | 
								if (dfac > 0.0f) {
 | 
				
			||||||
@@ -2029,8 +2147,9 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
 | 
				
			|||||||
				for (; fac < vert.ymax - 10; fac += dfac, val += grid->dy) {
 | 
									for (; fac < vert.ymax - 10; fac += dfac, val += grid->dy) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					/* make prints look nicer for scrollers */
 | 
										/* make prints look nicer for scrollers */
 | 
				
			||||||
					if (fac < vert.ymin + 10)
 | 
										if (fac < vert.ymin + 10) {
 | 
				
			||||||
						continue;
 | 
											continue;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					scroll_printstr(scene, (float)(vert.xmax) - 2.0f, fac, val, grid->powery, vs->yunits, 'v');
 | 
										scroll_printstr(scene, (float)(vert.xmax) - 2.0f, fac, val, grid->powery, vs->yunits, 'v');
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -2127,23 +2246,31 @@ void UI_view2d_listview_view_to_cell(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* sizes must not be negative */
 | 
						/* sizes must not be negative */
 | 
				
			||||||
	if ((v2d == NULL) || ((columnwidth <= 0) && (rowheight <= 0))) {
 | 
						if ((v2d == NULL) || ((columnwidth <= 0) && (rowheight <= 0))) {
 | 
				
			||||||
		if (column) *column = 0;
 | 
							if (column) {
 | 
				
			||||||
		if (row) *row = 0;
 | 
								*column = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (row) {
 | 
				
			||||||
 | 
								*row = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* get column */
 | 
						/* get column */
 | 
				
			||||||
	if ((column) && (columnwidth > 0))
 | 
						if ((column) && (columnwidth > 0)) {
 | 
				
			||||||
		*column = x / columnwidth;
 | 
							*column = x / columnwidth;
 | 
				
			||||||
	else if (column)
 | 
						}
 | 
				
			||||||
 | 
						else if (column) {
 | 
				
			||||||
		*column = 0;
 | 
							*column = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* get row */
 | 
						/* get row */
 | 
				
			||||||
	if ((row) && (rowheight > 0))
 | 
						if ((row) && (rowheight > 0)) {
 | 
				
			||||||
		*row = y / rowheight;
 | 
							*row = y / rowheight;
 | 
				
			||||||
	else if (row)
 | 
						}
 | 
				
			||||||
 | 
						else if (row) {
 | 
				
			||||||
		*row = 0;
 | 
							*row = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -2350,8 +2477,12 @@ View2D *UI_view2d_fromcontext(const bContext *C)
 | 
				
			|||||||
	ScrArea *area = CTX_wm_area(C);
 | 
						ScrArea *area = CTX_wm_area(C);
 | 
				
			||||||
	ARegion *region = CTX_wm_region(C);
 | 
						ARegion *region = CTX_wm_region(C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (area == NULL) return NULL;
 | 
						if (area == NULL) {
 | 
				
			||||||
	if (region == NULL) return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (region == NULL) {
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return &(region->v2d);
 | 
						return &(region->v2d);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2361,8 +2492,12 @@ View2D *UI_view2d_fromcontext_rwin(const bContext *C)
 | 
				
			|||||||
	ScrArea *sa = CTX_wm_area(C);
 | 
						ScrArea *sa = CTX_wm_area(C);
 | 
				
			||||||
	ARegion *region = CTX_wm_region(C);
 | 
						ARegion *region = CTX_wm_region(C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sa == NULL) return NULL;
 | 
						if (sa == NULL) {
 | 
				
			||||||
	if (region == NULL) return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (region == NULL) {
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if (region->regiontype != RGN_TYPE_WINDOW) {
 | 
						if (region->regiontype != RGN_TYPE_WINDOW) {
 | 
				
			||||||
		ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
 | 
							ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
 | 
				
			||||||
		return ar ? &(ar->v2d) : NULL;
 | 
							return ar ? &(ar->v2d) : NULL;
 | 
				
			||||||
@@ -2381,16 +2516,24 @@ View2D *UI_view2d_fromcontext_rwin(const bContext *C)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
void UI_view2d_scale_get(View2D *v2d, float *x, float *y)
 | 
					void UI_view2d_scale_get(View2D *v2d, float *x, float *y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (x) *x = BLI_rcti_size_x(&v2d->mask) / BLI_rctf_size_x(&v2d->cur);
 | 
						if (x) {
 | 
				
			||||||
	if (y) *y = BLI_rcti_size_y(&v2d->mask) / BLI_rctf_size_y(&v2d->cur);
 | 
							*x = BLI_rcti_size_x(&v2d->mask) / BLI_rctf_size_x(&v2d->cur);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (y) {
 | 
				
			||||||
 | 
							*y = BLI_rcti_size_y(&v2d->mask) / BLI_rctf_size_y(&v2d->cur);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Same as ``UI_view2d_scale_get() - 1.0f / x, y``
 | 
					 * Same as ``UI_view2d_scale_get() - 1.0f / x, y``
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void UI_view2d_scale_get_inverse(View2D *v2d, float *x, float *y)
 | 
					void UI_view2d_scale_get_inverse(View2D *v2d, float *x, float *y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (x) *x = BLI_rctf_size_x(&v2d->cur) / BLI_rcti_size_x(&v2d->mask);
 | 
						if (x) {
 | 
				
			||||||
	if (y) *y = BLI_rctf_size_y(&v2d->cur) / BLI_rcti_size_y(&v2d->mask);
 | 
							*x = BLI_rctf_size_x(&v2d->cur) / BLI_rcti_size_x(&v2d->mask);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (y) {
 | 
				
			||||||
 | 
							*y = BLI_rctf_size_y(&v2d->cur) / BLI_rcti_size_y(&v2d->mask);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -2400,8 +2543,12 @@ void UI_view2d_scale_get_inverse(View2D *v2d, float *x, float *y)
 | 
				
			|||||||
void UI_view2d_center_get(struct View2D *v2d, float *x, float *y)
 | 
					void UI_view2d_center_get(struct View2D *v2d, float *x, float *y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* get center */
 | 
						/* get center */
 | 
				
			||||||
	if (x) *x = BLI_rctf_cent_x(&v2d->cur);
 | 
						if (x) {
 | 
				
			||||||
	if (y) *y = BLI_rctf_cent_y(&v2d->cur);
 | 
							*x = BLI_rctf_cent_x(&v2d->cur);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (y) {
 | 
				
			||||||
 | 
							*y = BLI_rctf_cent_y(&v2d->cur);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void UI_view2d_center_set(struct View2D *v2d, float x, float y)
 | 
					void UI_view2d_center_set(struct View2D *v2d, float x, float y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -2465,10 +2612,14 @@ char UI_view2d_mouse_in_scrollers_ex(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* check if within scrollbars */
 | 
						/* check if within scrollbars */
 | 
				
			||||||
	if (scroll & V2D_SCROLL_HORIZONTAL) {
 | 
						if (scroll & V2D_SCROLL_HORIZONTAL) {
 | 
				
			||||||
		if (IN_2D_HORIZ_SCROLL(v2d, co)) return 'h';
 | 
							if (IN_2D_HORIZ_SCROLL(v2d, co)) {
 | 
				
			||||||
 | 
								return 'h';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (scroll & V2D_SCROLL_VERTICAL) {
 | 
						if (scroll & V2D_SCROLL_VERTICAL) {
 | 
				
			||||||
		if (IN_2D_VERT_SCROLL(v2d, co)) return 'v';
 | 
							if (IN_2D_VERT_SCROLL(v2d, co)) {
 | 
				
			||||||
 | 
								return 'v';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* not found */
 | 
						/* not found */
 | 
				
			||||||
@@ -2582,17 +2733,20 @@ void UI_view2d_text_cache_draw(ARegion *ar)
 | 
				
			|||||||
		int xofs = 0, yofs;
 | 
							int xofs = 0, yofs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		yofs = ceil(0.5f * (BLI_rcti_size_y(&v2s->rect) - default_height));
 | 
							yofs = ceil(0.5f * (BLI_rcti_size_y(&v2s->rect) - default_height));
 | 
				
			||||||
		if (yofs < 1) yofs = 1;
 | 
							if (yofs < 1) {
 | 
				
			||||||
 | 
								yofs = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (col_pack_prev != v2s->col.pack) {
 | 
							if (col_pack_prev != v2s->col.pack) {
 | 
				
			||||||
			BLF_color3ubv(font_id, v2s->col.ub);
 | 
								BLF_color3ubv(font_id, v2s->col.ub);
 | 
				
			||||||
			col_pack_prev = v2s->col.pack;
 | 
								col_pack_prev = v2s->col.pack;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (v2s->rect.xmin >= v2s->rect.xmax)
 | 
							if (v2s->rect.xmin >= v2s->rect.xmax) {
 | 
				
			||||||
			BLF_draw_default(
 | 
								BLF_draw_default(
 | 
				
			||||||
			        (float)(v2s->mval[0] + xofs), (float)(v2s->mval[1] + yofs), 0.0,
 | 
								        (float)(v2s->mval[0] + xofs), (float)(v2s->mval[1] + yofs), 0.0,
 | 
				
			||||||
			        v2s->str, BLF_DRAW_STR_DUMMY_MAX);
 | 
								        v2s->str, BLF_DRAW_STR_DUMMY_MAX);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			BLF_enable(font_id, BLF_CLIPPING);
 | 
								BLF_enable(font_id, BLF_CLIPPING);
 | 
				
			||||||
			BLF_clipping(font_id, v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, v2s->rect.ymax + 4);
 | 
								BLF_clipping(font_id, v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, v2s->rect.ymax + 4);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,13 +104,15 @@ static int view_pan_init(bContext *C, wmOperator *op)
 | 
				
			|||||||
	float winx, winy;
 | 
						float winx, winy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* regions now have v2d-data by default, so check for region */
 | 
						/* regions now have v2d-data by default, so check for region */
 | 
				
			||||||
	if (ar == NULL)
 | 
						if (ar == NULL) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check if panning is allowed at all */
 | 
						/* check if panning is allowed at all */
 | 
				
			||||||
	v2d = &ar->v2d;
 | 
						v2d = &ar->v2d;
 | 
				
			||||||
	if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y))
 | 
						if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y)) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set custom-data for operator */
 | 
						/* set custom-data for operator */
 | 
				
			||||||
	vpd = MEM_callocN(sizeof(v2dViewPanData), "v2dViewPanData");
 | 
						vpd = MEM_callocN(sizeof(v2dViewPanData), "v2dViewPanData");
 | 
				
			||||||
@@ -138,13 +140,15 @@ static bool view_pan_poll(bContext *C)
 | 
				
			|||||||
	View2D *v2d;
 | 
						View2D *v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check if there's a region in context to work with */
 | 
						/* check if there's a region in context to work with */
 | 
				
			||||||
	if (ar == NULL)
 | 
						if (ar == NULL) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	v2d = &ar->v2d;
 | 
						v2d = &ar->v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that 2d-view can pan */
 | 
						/* check that 2d-view can pan */
 | 
				
			||||||
	if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y))
 | 
						if ((v2d->keepofs & V2D_LOCKOFS_X) && (v2d->keepofs & V2D_LOCKOFS_Y)) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* view can pan */
 | 
						/* view can pan */
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
@@ -207,8 +211,9 @@ static void view_pan_exit(wmOperator *op)
 | 
				
			|||||||
/* for 'redo' only, with no user input */
 | 
					/* for 'redo' only, with no user input */
 | 
				
			||||||
static int view_pan_exec(bContext *C, wmOperator *op)
 | 
					static int view_pan_exec(bContext *C, wmOperator *op)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_CANCELLED;
 | 
							return OPERATOR_CANCELLED;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view_pan_apply(C, op);
 | 
						view_pan_apply(C, op);
 | 
				
			||||||
	view_pan_exit(op);
 | 
						view_pan_exit(op);
 | 
				
			||||||
@@ -223,8 +228,9 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 | 
				
			|||||||
	View2D *v2d;
 | 
						View2D *v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set up customdata */
 | 
						/* set up customdata */
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vpd = op->customdata;
 | 
						vpd = op->customdata;
 | 
				
			||||||
	v2d = vpd->v2d;
 | 
						v2d = vpd->v2d;
 | 
				
			||||||
@@ -246,12 +252,15 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 | 
				
			|||||||
	RNA_int_set(op->ptr, "deltax", 0);
 | 
						RNA_int_set(op->ptr, "deltax", 0);
 | 
				
			||||||
	RNA_int_set(op->ptr, "deltay", 0);
 | 
						RNA_int_set(op->ptr, "deltay", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (v2d->keepofs & V2D_LOCKOFS_X)
 | 
						if (v2d->keepofs & V2D_LOCKOFS_X) {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR);
 | 
				
			||||||
	else if (v2d->keepofs & V2D_LOCKOFS_Y)
 | 
						}
 | 
				
			||||||
 | 
						else if (v2d->keepofs & V2D_LOCKOFS_Y) {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* add temp handler */
 | 
						/* add temp handler */
 | 
				
			||||||
	WM_event_add_modal_handler(C, op);
 | 
						WM_event_add_modal_handler(C, op);
 | 
				
			||||||
@@ -347,8 +356,9 @@ static int view_scrollright_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	v2dViewPanData *vpd;
 | 
						v2dViewPanData *vpd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* initialize default settings (and validate if ok to run) */
 | 
						/* initialize default settings (and validate if ok to run) */
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* also, check if can pan in horizontal axis */
 | 
						/* also, check if can pan in horizontal axis */
 | 
				
			||||||
	vpd = op->customdata;
 | 
						vpd = op->customdata;
 | 
				
			||||||
@@ -391,8 +401,9 @@ static int view_scrollleft_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	v2dViewPanData *vpd;
 | 
						v2dViewPanData *vpd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* initialize default settings (and validate if ok to run) */
 | 
						/* initialize default settings (and validate if ok to run) */
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* also, check if can pan in horizontal axis */
 | 
						/* also, check if can pan in horizontal axis */
 | 
				
			||||||
	vpd = op->customdata;
 | 
						vpd = op->customdata;
 | 
				
			||||||
@@ -434,8 +445,9 @@ static int view_scrolldown_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	v2dViewPanData *vpd;
 | 
						v2dViewPanData *vpd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* initialize default settings (and validate if ok to run) */
 | 
						/* initialize default settings (and validate if ok to run) */
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* also, check if can pan in vertical axis */
 | 
						/* also, check if can pan in vertical axis */
 | 
				
			||||||
	vpd = op->customdata;
 | 
						vpd = op->customdata;
 | 
				
			||||||
@@ -485,8 +497,9 @@ static int view_scrollup_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	v2dViewPanData *vpd;
 | 
						v2dViewPanData *vpd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* initialize default settings (and validate if ok to run) */
 | 
						/* initialize default settings (and validate if ok to run) */
 | 
				
			||||||
	if (!view_pan_init(C, op))
 | 
						if (!view_pan_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* also, check if can pan in vertical axis */
 | 
						/* also, check if can pan in vertical axis */
 | 
				
			||||||
	vpd = op->customdata;
 | 
						vpd = op->customdata;
 | 
				
			||||||
@@ -577,8 +590,9 @@ static void view_zoom_axis_lock_defaults(bContext *C, bool r_do_zoom_xy[2])
 | 
				
			|||||||
	if (sa && sa->spacetype == SPACE_SEQ) {
 | 
						if (sa && sa->spacetype == SPACE_SEQ) {
 | 
				
			||||||
		ARegion *ar = CTX_wm_region(C);
 | 
							ARegion *ar = CTX_wm_region(C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ar && ar->regiontype == RGN_TYPE_WINDOW)
 | 
							if (ar && ar->regiontype == RGN_TYPE_WINDOW) {
 | 
				
			||||||
			r_do_zoom_xy[1] = false;
 | 
								r_do_zoom_xy[1] = false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -590,13 +604,15 @@ static int view_zoomdrag_init(bContext *C, wmOperator *op)
 | 
				
			|||||||
	View2D *v2d;
 | 
						View2D *v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* regions now have v2d-data by default, so check for region */
 | 
						/* regions now have v2d-data by default, so check for region */
 | 
				
			||||||
	if (ar == NULL)
 | 
						if (ar == NULL) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	v2d = &ar->v2d;
 | 
						v2d = &ar->v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that 2d-view is zoomable */
 | 
						/* check that 2d-view is zoomable */
 | 
				
			||||||
	if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y))
 | 
						if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) {
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set custom-data for operator */
 | 
						/* set custom-data for operator */
 | 
				
			||||||
	vzd = MEM_callocN(sizeof(v2dViewZoomData), "v2dViewZoomData");
 | 
						vzd = MEM_callocN(sizeof(v2dViewZoomData), "v2dViewZoomData");
 | 
				
			||||||
@@ -616,18 +632,21 @@ static bool view_zoom_poll(bContext *C)
 | 
				
			|||||||
	View2D *v2d;
 | 
						View2D *v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check if there's a region in context to work with */
 | 
						/* check if there's a region in context to work with */
 | 
				
			||||||
	if (ar == NULL)
 | 
						if (ar == NULL) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Do not show that in 3DView context. */
 | 
						/* Do not show that in 3DView context. */
 | 
				
			||||||
	if (CTX_wm_region_view3d(C))
 | 
						if (CTX_wm_region_view3d(C)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	v2d = &ar->v2d;
 | 
						v2d = &ar->v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that 2d-view is zoomable */
 | 
						/* check that 2d-view is zoomable */
 | 
				
			||||||
	if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y))
 | 
						if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y)) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* view is zoomable */
 | 
						/* view is zoomable */
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
@@ -662,10 +681,12 @@ static void view_zoomstep_apply_ex(
 | 
				
			|||||||
			v2d->cur.xmax -= 2 * dx;
 | 
								v2d->cur.xmax -= 2 * dx;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (v2d->keepofs & V2D_KEEPOFS_X) {
 | 
							else if (v2d->keepofs & V2D_KEEPOFS_X) {
 | 
				
			||||||
			if (v2d->align & V2D_ALIGN_NO_POS_X)
 | 
								if (v2d->align & V2D_ALIGN_NO_POS_X) {
 | 
				
			||||||
				v2d->cur.xmin += 2 * dx;
 | 
									v2d->cur.xmin += 2 * dx;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				v2d->cur.xmax -= 2 * dx;
 | 
									v2d->cur.xmax -= 2 * dx;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -696,10 +717,12 @@ static void view_zoomstep_apply_ex(
 | 
				
			|||||||
			v2d->cur.ymax -= 2 * dy;
 | 
								v2d->cur.ymax -= 2 * dy;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (v2d->keepofs & V2D_KEEPOFS_Y) {
 | 
							else if (v2d->keepofs & V2D_KEEPOFS_Y) {
 | 
				
			||||||
			if (v2d->align & V2D_ALIGN_NO_POS_Y)
 | 
								if (v2d->align & V2D_ALIGN_NO_POS_Y) {
 | 
				
			||||||
				v2d->cur.ymin += 2 * dy;
 | 
									v2d->cur.ymin += 2 * dy;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				v2d->cur.ymax -= 2 * dy;
 | 
									v2d->cur.ymax -= 2 * dy;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -768,8 +791,9 @@ static int view_zoomin_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	bool do_zoom_xy[2];
 | 
						bool do_zoom_xy[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that there's an active region, as View2D data resides there */
 | 
						/* check that there's an active region, as View2D data resides there */
 | 
				
			||||||
	if (!view_zoom_poll(C))
 | 
						if (!view_zoom_poll(C)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
						view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
				
			||||||
@@ -790,8 +814,9 @@ static int view_zoomin_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	v2dViewZoomData *vzd;
 | 
						v2dViewZoomData *vzd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!view_zoomdrag_init(C, op))
 | 
						if (!view_zoomdrag_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vzd = op->customdata;
 | 
						vzd = op->customdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -835,8 +860,9 @@ static int view_zoomout_exec(bContext *C, wmOperator *op)
 | 
				
			|||||||
	bool do_zoom_xy[2];
 | 
						bool do_zoom_xy[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* check that there's an active region, as View2D data resides there */
 | 
						/* check that there's an active region, as View2D data resides there */
 | 
				
			||||||
	if (!view_zoom_poll(C))
 | 
						if (!view_zoom_poll(C)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
						view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -856,8 +882,9 @@ static int view_zoomout_invoke(bContext *C, wmOperator *op, const wmEvent *event
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	v2dViewZoomData *vzd;
 | 
						v2dViewZoomData *vzd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!view_zoomdrag_init(C, op))
 | 
						if (!view_zoomdrag_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vzd = op->customdata;
 | 
						vzd = op->customdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -995,8 +1022,9 @@ static void view_zoomdrag_exit(bContext *C, wmOperator *op)
 | 
				
			|||||||
	if (op->customdata) {
 | 
						if (op->customdata) {
 | 
				
			||||||
		v2dViewZoomData *vzd = op->customdata;
 | 
							v2dViewZoomData *vzd = op->customdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (vzd->timer)
 | 
							if (vzd->timer) {
 | 
				
			||||||
			WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer);
 | 
								WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		MEM_freeN(op->customdata);
 | 
							MEM_freeN(op->customdata);
 | 
				
			||||||
		op->customdata = NULL;
 | 
							op->customdata = NULL;
 | 
				
			||||||
@@ -1011,8 +1039,9 @@ static void view_zoomdrag_cancel(bContext *C, wmOperator *op)
 | 
				
			|||||||
/* for 'redo' only, with no user input */
 | 
					/* for 'redo' only, with no user input */
 | 
				
			||||||
static int view_zoomdrag_exec(bContext *C, wmOperator *op)
 | 
					static int view_zoomdrag_exec(bContext *C, wmOperator *op)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!view_zoomdrag_init(C, op))
 | 
						if (!view_zoomdrag_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view_zoomdrag_apply(C, op);
 | 
						view_zoomdrag_apply(C, op);
 | 
				
			||||||
	view_zoomdrag_exit(C, op);
 | 
						view_zoomdrag_exit(C, op);
 | 
				
			||||||
@@ -1027,8 +1056,9 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even
 | 
				
			|||||||
	View2D *v2d;
 | 
						View2D *v2d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set up customdata */
 | 
						/* set up customdata */
 | 
				
			||||||
	if (!view_zoomdrag_init(C, op))
 | 
						if (!view_zoomdrag_init(C, op)) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vzd = op->customdata;
 | 
						vzd = op->customdata;
 | 
				
			||||||
	v2d = vzd->v2d;
 | 
						v2d = vzd->v2d;
 | 
				
			||||||
@@ -1044,17 +1074,20 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even
 | 
				
			|||||||
		 */
 | 
							 */
 | 
				
			||||||
		fac = 0.01f * (event->prevx - event->x);
 | 
							fac = 0.01f * (event->prevx - event->x);
 | 
				
			||||||
		dx = fac * BLI_rctf_size_x(&v2d->cur) / 10.0f;
 | 
							dx = fac * BLI_rctf_size_x(&v2d->cur) / 10.0f;
 | 
				
			||||||
		if (event->type == MOUSEPAN)
 | 
							if (event->type == MOUSEPAN) {
 | 
				
			||||||
			fac = 0.01f * (event->prevy - event->y);
 | 
								fac = 0.01f * (event->prevy - event->y);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		dy = fac * BLI_rctf_size_y(&v2d->cur) / 10.0f;
 | 
							dy = fac * BLI_rctf_size_y(&v2d->cur) / 10.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* support trackpad zoom to always zoom entirely - the v2d code uses portrait or
 | 
							/* support trackpad zoom to always zoom entirely - the v2d code uses portrait or
 | 
				
			||||||
		 * landscape exceptions */
 | 
							 * landscape exceptions */
 | 
				
			||||||
		if (v2d->keepzoom & V2D_KEEPASPECT) {
 | 
							if (v2d->keepzoom & V2D_KEEPASPECT) {
 | 
				
			||||||
			if (fabsf(dx) > fabsf(dy))
 | 
								if (fabsf(dx) > fabsf(dy)) {
 | 
				
			||||||
				dy = dx;
 | 
									dy = dx;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				dx = dy;
 | 
									dx = dy;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		RNA_float_set(op->ptr, "deltax", dx);
 | 
							RNA_float_set(op->ptr, "deltax", dx);
 | 
				
			||||||
		RNA_float_set(op->ptr, "deltay", dy);
 | 
							RNA_float_set(op->ptr, "deltay", dy);
 | 
				
			||||||
@@ -1083,12 +1116,15 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, const wmEvent *even
 | 
				
			|||||||
		        &vzd->mx_2d, &vzd->my_2d);
 | 
							        &vzd->mx_2d, &vzd->my_2d);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (v2d->keepofs & V2D_LOCKOFS_X)
 | 
						if (v2d->keepofs & V2D_LOCKOFS_X) {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_NS_SCROLLCURSOR);
 | 
				
			||||||
	else if (v2d->keepofs & V2D_LOCKOFS_Y)
 | 
						}
 | 
				
			||||||
 | 
						else if (v2d->keepofs & V2D_LOCKOFS_Y) {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_EW_SCROLLCURSOR);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR);
 | 
							WM_cursor_modal_set(window, BC_NSEW_SCROLLCURSOR);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* add temp handler */
 | 
						/* add temp handler */
 | 
				
			||||||
	WM_event_add_modal_handler(C, op);
 | 
						WM_event_add_modal_handler(C, op);
 | 
				
			||||||
@@ -1136,8 +1172,9 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event
 | 
				
			|||||||
			float fac, zoomfac = 0.01f;
 | 
								float fac, zoomfac = 0.01f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* some view2d's (graph) don't have min/max zoom, or extreme ones */
 | 
								/* some view2d's (graph) don't have min/max zoom, or extreme ones */
 | 
				
			||||||
			if (v2d->maxzoom > 0.0f)
 | 
								if (v2d->maxzoom > 0.0f) {
 | 
				
			||||||
				zoomfac = clamp_f(0.001f * v2d->maxzoom, 0.001f, 0.01f);
 | 
									zoomfac = clamp_f(0.001f * v2d->maxzoom, 0.001f, 0.01f);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* x-axis transform */
 | 
								/* x-axis transform */
 | 
				
			||||||
			fac = zoomfac * (event->x - vzd->lastx);
 | 
								fac = zoomfac * (event->x - vzd->lastx);
 | 
				
			||||||
@@ -1152,10 +1189,12 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event
 | 
				
			|||||||
		/* support zoom to always zoom entirely - the v2d code uses portrait or
 | 
							/* support zoom to always zoom entirely - the v2d code uses portrait or
 | 
				
			||||||
		 * landscape exceptions */
 | 
							 * landscape exceptions */
 | 
				
			||||||
		if (v2d->keepzoom & V2D_KEEPASPECT) {
 | 
							if (v2d->keepzoom & V2D_KEEPASPECT) {
 | 
				
			||||||
			if (fabsf(dx) > fabsf(dy))
 | 
								if (fabsf(dx) > fabsf(dy)) {
 | 
				
			||||||
				dy = dx;
 | 
									dy = dx;
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				dx = dy;
 | 
									dx = dy;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* set transform amount, and add current deltas to stored total delta (for redo) */
 | 
							/* set transform amount, and add current deltas to stored total delta (for redo) */
 | 
				
			||||||
@@ -1180,15 +1219,19 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, const wmEvent *event
 | 
				
			|||||||
		if (event->val == KM_RELEASE) {
 | 
							if (event->val == KM_RELEASE) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* for redo, store the overall deltas - need to respect zoom-locks here... */
 | 
								/* for redo, store the overall deltas - need to respect zoom-locks here... */
 | 
				
			||||||
			if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0)
 | 
								if ((v2d->keepzoom & V2D_LOCKZOOM_X) == 0) {
 | 
				
			||||||
				RNA_float_set(op->ptr, "deltax", vzd->dx);
 | 
									RNA_float_set(op->ptr, "deltax", vzd->dx);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				RNA_float_set(op->ptr, "deltax", 0);
 | 
									RNA_float_set(op->ptr, "deltax", 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0)
 | 
								if ((v2d->keepzoom & V2D_LOCKZOOM_Y) == 0) {
 | 
				
			||||||
				RNA_float_set(op->ptr, "deltay", vzd->dy);
 | 
									RNA_float_set(op->ptr, "deltay", vzd->dy);
 | 
				
			||||||
			else
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
				RNA_float_set(op->ptr, "deltay", 0);
 | 
									RNA_float_set(op->ptr, "deltay", 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* free customdata */
 | 
								/* free customdata */
 | 
				
			||||||
			view_zoomdrag_exit(C, op);
 | 
								view_zoomdrag_exit(C, op);
 | 
				
			||||||
@@ -1363,8 +1406,9 @@ static int view2d_ndof_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				bool do_zoom_xy[2];
 | 
									bool do_zoom_xy[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (U.ndof_flag & NDOF_ZOOM_INVERT)
 | 
									if (U.ndof_flag & NDOF_ZOOM_INVERT) {
 | 
				
			||||||
					zoom_factor = -zoom_factor;
 | 
										zoom_factor = -zoom_factor;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
									view_zoom_axis_lock_defaults(C, do_zoom_xy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1440,12 +1484,16 @@ static float smooth_view_rect_to_fac(const rctf *rect_a, const rctf *rect_b)
 | 
				
			|||||||
		/* axis translation normalized to scale */
 | 
							/* axis translation normalized to scale */
 | 
				
			||||||
		tfac = fabsf(cent_a[i] - cent_b[i]) / min_ff(size_a[i], size_b[i]);
 | 
							tfac = fabsf(cent_a[i] - cent_b[i]) / min_ff(size_a[i], size_b[i]);
 | 
				
			||||||
		fac_max = max_ff(fac_max, tfac);
 | 
							fac_max = max_ff(fac_max, tfac);
 | 
				
			||||||
		if (fac_max >= 1.0f) break;
 | 
							if (fac_max >= 1.0f) {
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* axis scale difference, x2 so doubling or half gives 1.0f */
 | 
							/* axis scale difference, x2 so doubling or half gives 1.0f */
 | 
				
			||||||
		tfac = (1.0f - (min_ff(size_a[i], size_b[i]) / max_ff(size_a[i], size_b[i]))) * 2.0f;
 | 
							tfac = (1.0f - (min_ff(size_a[i], size_b[i]) / max_ff(size_a[i], size_b[i]))) * 2.0f;
 | 
				
			||||||
		fac_max = max_ff(fac_max, tfac);
 | 
							fac_max = max_ff(fac_max, tfac);
 | 
				
			||||||
		if (fac_max >= 1.0f) break;
 | 
							if (fac_max >= 1.0f) {
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return min_ff(fac_max, 1.0f);
 | 
						return min_ff(fac_max, 1.0f);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1468,7 +1516,9 @@ void UI_view2d_smooth_view(
 | 
				
			|||||||
	sms.new_cur = v2d->cur;
 | 
						sms.new_cur = v2d->cur;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* store the options we want to end with */
 | 
						/* store the options we want to end with */
 | 
				
			||||||
	if (cur) sms.new_cur = *cur;
 | 
						if (cur) {
 | 
				
			||||||
 | 
							sms.new_cur = *cur;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cur) {
 | 
						if (cur) {
 | 
				
			||||||
		fac = smooth_view_rect_to_fac(&v2d->cur, cur);
 | 
							fac = smooth_view_rect_to_fac(&v2d->cur, cur);
 | 
				
			||||||
@@ -1477,8 +1527,9 @@ void UI_view2d_smooth_view(
 | 
				
			|||||||
	if (smooth_viewtx && fac > FLT_EPSILON) {
 | 
						if (smooth_viewtx && fac > FLT_EPSILON) {
 | 
				
			||||||
		bool changed = false;
 | 
							bool changed = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (BLI_rctf_compare(&sms.new_cur, &v2d->cur, FLT_EPSILON) == false)
 | 
							if (BLI_rctf_compare(&sms.new_cur, &v2d->cur, FLT_EPSILON) == false) {
 | 
				
			||||||
			changed = true;
 | 
								changed = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* The new view is different from the old one
 | 
							/* The new view is different from the old one
 | 
				
			||||||
		 * so animate the view */
 | 
							 * so animate the view */
 | 
				
			||||||
@@ -1491,11 +1542,13 @@ void UI_view2d_smooth_view(
 | 
				
			|||||||
			sms.time_allowed *= (double)fac;
 | 
								sms.time_allowed *= (double)fac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* keep track of running timer! */
 | 
								/* keep track of running timer! */
 | 
				
			||||||
			if (v2d->sms == NULL)
 | 
								if (v2d->sms == NULL) {
 | 
				
			||||||
				v2d->sms = MEM_mallocN(sizeof(struct SmoothView2DStore), "smoothview v2d");
 | 
									v2d->sms = MEM_mallocN(sizeof(struct SmoothView2DStore), "smoothview v2d");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			*v2d->sms = sms;
 | 
								*v2d->sms = sms;
 | 
				
			||||||
			if (v2d->smooth_timer)
 | 
								if (v2d->smooth_timer) {
 | 
				
			||||||
				WM_event_remove_timer(wm, win, v2d->smooth_timer);
 | 
									WM_event_remove_timer(wm, win, v2d->smooth_timer);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			/* TIMER1 is hardcoded in keymap */
 | 
								/* TIMER1 is hardcoded in keymap */
 | 
				
			||||||
			/* max 30 frs/sec */
 | 
								/* max 30 frs/sec */
 | 
				
			||||||
			v2d->smooth_timer = WM_event_add_timer(wm, win, TIMER1, 1.0 / 100.0);
 | 
								v2d->smooth_timer = WM_event_add_timer(wm, win, TIMER1, 1.0 / 100.0);
 | 
				
			||||||
@@ -1523,13 +1576,16 @@ static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const w
 | 
				
			|||||||
	float step;
 | 
						float step;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* escape if not our timer */
 | 
						/* escape if not our timer */
 | 
				
			||||||
	if (v2d->smooth_timer == NULL || v2d->smooth_timer != event->customdata)
 | 
						if (v2d->smooth_timer == NULL || v2d->smooth_timer != event->customdata) {
 | 
				
			||||||
		return OPERATOR_PASS_THROUGH;
 | 
							return OPERATOR_PASS_THROUGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sms->time_allowed != 0.0)
 | 
						if (sms->time_allowed != 0.0) {
 | 
				
			||||||
		step = (float)((v2d->smooth_timer->duration) / sms->time_allowed);
 | 
							step = (float)((v2d->smooth_timer->duration) / sms->time_allowed);
 | 
				
			||||||
	else
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		step = 1.0f;
 | 
							step = 1.0f;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* end timer */
 | 
						/* end timer */
 | 
				
			||||||
	if (step >= 1.0f) {
 | 
						if (step >= 1.0f) {
 | 
				
			||||||
@@ -1662,14 +1718,24 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_
 | 
				
			|||||||
	 * - 'bubble' fills entire scroller
 | 
						 * - 'bubble' fills entire scroller
 | 
				
			||||||
	 * - 'bubble' completely out of view on either side
 | 
						 * - 'bubble' completely out of view on either side
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if ((sh_min <= sc_min) && (sh_max >= sc_max)) in_view = 0;
 | 
						if ((sh_min <= sc_min) && (sh_max >= sc_max)) {
 | 
				
			||||||
 | 
							in_view = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if (sh_min == sh_max) {
 | 
						if (sh_min == sh_max) {
 | 
				
			||||||
		if (sh_min <= sc_min) in_view = 0;
 | 
							if (sh_min <= sc_min) {
 | 
				
			||||||
		if (sh_max >= sc_max) in_view = 0;
 | 
								in_view = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (sh_max >= sc_max) {
 | 
				
			||||||
 | 
								in_view = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		if (sh_max <= sc_min) in_view = 0;
 | 
							if (sh_max <= sc_min) {
 | 
				
			||||||
		if (sh_min >= sc_max) in_view = 0;
 | 
								in_view = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (sh_min >= sc_max) {
 | 
				
			||||||
 | 
								in_view = 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1685,16 +1751,21 @@ static short mouse_in_scroller_handle(int mouse, int sc_min, int sc_max, int sh_
 | 
				
			|||||||
	out_min = mouse < (sh_min - V2D_SCROLLER_HANDLE_SIZE);
 | 
						out_min = mouse < (sh_min - V2D_SCROLLER_HANDLE_SIZE);
 | 
				
			||||||
	out_max = mouse > (sh_max + V2D_SCROLLER_HANDLE_SIZE);
 | 
						out_max = mouse > (sh_max + V2D_SCROLLER_HANDLE_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (in_bar)
 | 
						if (in_bar) {
 | 
				
			||||||
		return SCROLLHANDLE_BAR;
 | 
							return SCROLLHANDLE_BAR;
 | 
				
			||||||
	else if (in_max)
 | 
						}
 | 
				
			||||||
 | 
						else if (in_max) {
 | 
				
			||||||
		return SCROLLHANDLE_MAX;
 | 
							return SCROLLHANDLE_MAX;
 | 
				
			||||||
	else if (in_min)
 | 
						}
 | 
				
			||||||
 | 
						else if (in_min) {
 | 
				
			||||||
		return SCROLLHANDLE_MIN;
 | 
							return SCROLLHANDLE_MIN;
 | 
				
			||||||
	else if (out_min)
 | 
						}
 | 
				
			||||||
 | 
						else if (out_min) {
 | 
				
			||||||
		return SCROLLHANDLE_MIN_OUTSIDE;
 | 
							return SCROLLHANDLE_MIN_OUTSIDE;
 | 
				
			||||||
	else if (out_max)
 | 
						}
 | 
				
			||||||
 | 
						else if (out_max) {
 | 
				
			||||||
		return SCROLLHANDLE_MAX_OUTSIDE;
 | 
							return SCROLLHANDLE_MAX_OUTSIDE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* unlikely to happen, though we just cover it in case */
 | 
						/* unlikely to happen, though we just cover it in case */
 | 
				
			||||||
	return SCROLLHANDLE_BAR;
 | 
						return SCROLLHANDLE_BAR;
 | 
				
			||||||
@@ -1833,19 +1904,23 @@ static void scroller_activate_apply(bContext *C, wmOperator *op)
 | 
				
			|||||||
	switch (vsm->zone) {
 | 
						switch (vsm->zone) {
 | 
				
			||||||
		case SCROLLHANDLE_MIN:
 | 
							case SCROLLHANDLE_MIN:
 | 
				
			||||||
			/* only expand view on axis if zoom is allowed */
 | 
								/* only expand view on axis if zoom is allowed */
 | 
				
			||||||
			if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X))
 | 
								if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X)) {
 | 
				
			||||||
				v2d->cur.xmin -= temp;
 | 
									v2d->cur.xmin -= temp;
 | 
				
			||||||
			if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y))
 | 
								}
 | 
				
			||||||
 | 
								if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) {
 | 
				
			||||||
				v2d->cur.ymin -= temp;
 | 
									v2d->cur.ymin -= temp;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SCROLLHANDLE_MAX:
 | 
							case SCROLLHANDLE_MAX:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* only expand view on axis if zoom is allowed */
 | 
								/* only expand view on axis if zoom is allowed */
 | 
				
			||||||
			if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X))
 | 
								if ((vsm->scroller == 'h') && !(v2d->keepzoom & V2D_LOCKZOOM_X)) {
 | 
				
			||||||
				v2d->cur.xmax += temp;
 | 
									v2d->cur.xmax += temp;
 | 
				
			||||||
			if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y))
 | 
								}
 | 
				
			||||||
 | 
								if ((vsm->scroller == 'v') && !(v2d->keepzoom & V2D_LOCKZOOM_Y)) {
 | 
				
			||||||
				v2d->cur.ymax += temp;
 | 
									v2d->cur.ymax += temp;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SCROLLHANDLE_MIN_OUTSIDE:
 | 
							case SCROLLHANDLE_MIN_OUTSIDE:
 | 
				
			||||||
@@ -1925,10 +2000,12 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, const wmEvent *e
 | 
				
			|||||||
			if (event->val == KM_RELEASE) {
 | 
								if (event->val == KM_RELEASE) {
 | 
				
			||||||
				/* single-click was in empty space outside bubble, so scroll by 1 'page' */
 | 
									/* single-click was in empty space outside bubble, so scroll by 1 'page' */
 | 
				
			||||||
				if (ELEM(vsm->zone, SCROLLHANDLE_MIN_OUTSIDE, SCROLLHANDLE_MAX_OUTSIDE)) {
 | 
									if (ELEM(vsm->zone, SCROLLHANDLE_MIN_OUTSIDE, SCROLLHANDLE_MAX_OUTSIDE)) {
 | 
				
			||||||
					if (vsm->zone == SCROLLHANDLE_MIN_OUTSIDE)
 | 
										if (vsm->zone == SCROLLHANDLE_MIN_OUTSIDE) {
 | 
				
			||||||
						vsm->delta = -vsm->scrollbarwidth * 0.8f;
 | 
											vsm->delta = -vsm->scrollbarwidth * 0.8f;
 | 
				
			||||||
					else if (vsm->zone == SCROLLHANDLE_MAX_OUTSIDE)
 | 
										}
 | 
				
			||||||
 | 
										else if (vsm->zone == SCROLLHANDLE_MAX_OUTSIDE) {
 | 
				
			||||||
						vsm->delta = vsm->scrollbarwidth * 0.8f;
 | 
											vsm->delta = vsm->scrollbarwidth * 0.8f;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					scroller_activate_apply(C, op);
 | 
										scroller_activate_apply(C, op);
 | 
				
			||||||
					scroller_activate_exit(C, op);
 | 
										scroller_activate_exit(C, op);
 | 
				
			||||||
@@ -2023,10 +2100,12 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, const wmEvent *
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* activate the scroller */
 | 
							/* activate the scroller */
 | 
				
			||||||
		if (vsm->scroller == 'h')
 | 
							if (vsm->scroller == 'h') {
 | 
				
			||||||
			v2d->scroll_ui |= V2D_SCROLL_H_ACTIVE;
 | 
								v2d->scroll_ui |= V2D_SCROLL_H_ACTIVE;
 | 
				
			||||||
		else
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
			v2d->scroll_ui |= V2D_SCROLL_V_ACTIVE;
 | 
								v2d->scroll_ui |= V2D_SCROLL_V_ACTIVE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* still ok, so can add */
 | 
							/* still ok, so can add */
 | 
				
			||||||
		WM_event_add_modal_handler(C, op);
 | 
							WM_event_add_modal_handler(C, op);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user