[Bf-blender-cvs] [b98fe9e7074] master: Cleanup: move functions into doxy sections

Campbell Barton noreply at git.blender.org
Thu Mar 21 04:20:50 CET 2019


Commit: b98fe9e70740ebfbd8910454036819d3a5fcd330
Author: Campbell Barton
Date:   Thu Mar 21 14:19:45 2019 +1100
Branches: master
https://developer.blender.org/rBb98fe9e70740ebfbd8910454036819d3a5fcd330

Cleanup: move functions into doxy sections

Also use const args for queries.

===================================================================

M	source/blender/editors/include/UI_view2d.h
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/view2d.c

===================================================================

diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h
index 8c944760972..df1dd0f5f63 100644
--- a/source/blender/editors/include/UI_view2d.h
+++ b/source/blender/editors/include/UI_view2d.h
@@ -218,10 +218,10 @@ void UI_view2d_center_set(struct View2D *v2d, float x, float y);
 void UI_view2d_offset(struct View2D *v2d, float xfac, float yfac);
 
 char UI_view2d_mouse_in_scrollers_ex(
-        const struct ARegion *ar, struct View2D *v2d, int x, int y,
+        const struct ARegion *ar, const struct View2D *v2d, int x, int y,
         int *r_scroll);
 char UI_view2d_mouse_in_scrollers(
-        const struct ARegion *ar, struct View2D *v2d, int x, int y);
+        const struct ARegion *ar, const struct View2D *v2d, int x, int y);
 
 /* cached text drawing in v2d, to allow pixel-aligned draw as post process */
 void UI_view2d_text_cache_add(struct View2D *v2d, float x, float y,
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 03f11e1e3f2..5c8099eb205 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -391,10 +391,11 @@ typedef struct uiAfterFunc {
 } uiAfterFunc;
 
 
-
 static bool ui_but_is_interactive(const uiBut *but, const bool labeledit);
-static bool ui_but_contains_pt(uiBut *but, float mx, float my);
-static bool ui_but_contains_point_px(ARegion *ar, uiBut *but, int x, int y);
+static bool ui_but_contains_pt(const uiBut *but, float mx, float my);
+static bool ui_but_contains_point_px(ARegion *ar, const uiBut *but, int x, int y);
+static bool ui_but_contains_point_px_icon(const uiBut *but, ARegion *ar, const wmEvent *event);
+static bool ui_region_contains_point_px(const ARegion *ar, int x, int y);
 static uiBut *ui_but_find_mouse_over_ex(ARegion *ar, const int x, const int y, const bool labeledit);
 static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonActivateType type);
 static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState state);
@@ -416,39 +417,206 @@ static bool but_copypaste_curve_alive = false;
 
 /** \} */
 
+
 /* -------------------------------------------------------------------- */
-/** \name Snap Values
+/** \name UI Queries
  * \{ */
 
-enum eSnapType {
-	SNAP_OFF = 0,
-	SNAP_ON,
-	SNAP_ON_SMALL,
-};
+void ui_but_pie_dir(RadialDirection dir, float vec[2])
+{
+	float angle;
 
-static enum eSnapType ui_event_to_snap(const wmEvent *event)
+	BLI_assert(dir != UI_RADIAL_NONE);
+
+	angle = DEG2RADF((float)ui_radial_dir_to_angle[dir]);
+	vec[0] = cosf(angle);
+	vec[1] = sinf(angle);
+}
+
+static bool ui_but_isect_pie_seg(const uiBlock *block, const uiBut *but)
 {
-	return (event->ctrl) ? (event->shift) ? SNAP_ON_SMALL : SNAP_ON : SNAP_OFF;
+	const float angle_range = (block->pie_data.flags & UI_PIE_DEGREES_RANGE_LARGE) ? M_PI_4 : M_PI_4 / 2.0;
+	float vec[2];
+
+	if (block->pie_data.flags & UI_PIE_INVALID_DIR)
+		return false;
+
+	ui_but_pie_dir(but->pie_dir, vec);
+
+	if (saacos(dot_v2v2(vec, block->pie_data.pie_dir)) < angle_range)
+		return true;
+
+	return false;
 }
 
-static bool ui_event_is_snap(const wmEvent *event)
+static bool ui_but_contains_pt(const uiBut *but, float mx, float my)
 {
-	return (ELEM(event->type, LEFTCTRLKEY, RIGHTCTRLKEY) ||
-	        ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY));
+	return BLI_rctf_isect_pt(&but->rect, mx, my);
 }
 
-static void ui_color_snap_hue(const enum eSnapType snap, float *r_hue)
+static bool ui_but_contains_point_px(ARegion *ar, const uiBut *but, int x, int y)
 {
-	const float snap_increment = (snap == SNAP_ON_SMALL) ? 24 : 12;
-	BLI_assert(snap != SNAP_OFF);
-	*r_hue = roundf((*r_hue) * snap_increment) / snap_increment;
+	uiBlock *block = but->block;
+	float mx, my;
+	if (!ui_region_contains_point_px(ar, x, y))
+		return false;
+
+	mx = x;
+	my = y;
+
+	ui_window_to_block_fl(ar, block, &mx, &my);
+
+	if (but->pie_dir != UI_RADIAL_NONE) {
+		if (!ui_but_isect_pie_seg(block, but)) {
+			return false;
+		}
+	}
+	else if (!ui_but_contains_pt(but, mx, my)) {
+		return false;
+	}
+
+	return true;
 }
 
-/** \} */
+static bool ui_but_contains_point_px_icon(const uiBut *but, ARegion *ar, const wmEvent *event)
+{
+	rcti rect;
+	int x = event->x, y = event->y;
 
-/* -------------------------------------------------------------------- */
-/** \name General Utilities
- * \{ */
+	ui_window_to_block(ar, but->block, &x, &y);
+
+	BLI_rcti_rctf_copy(&rect, &but->rect);
+
+	if (but->imb || but->type == UI_BTYPE_COLOR) {
+		/* use button size itself */
+	}
+	else if (but->drawflag & UI_BUT_ICON_LEFT) {
+		rect.xmax = rect.xmin + (BLI_rcti_size_y(&rect));
+	}
+	else {
+		int delta = BLI_rcti_size_x(&rect) - BLI_rcti_size_y(&rect);
+		rect.xmin += delta / 2;
+		rect.xmax -= delta / 2;
+	}
+
+	return BLI_rcti_isect_pt(&rect, x, y);
+}
+
+static bool ui_region_contains_point_px(const ARegion *ar, int x, int y)
+{
+	rcti winrct;
+
+	/* scale down area rect to exclude shadow */
+	ui_region_winrct_get_no_margin(ar, &winrct);
+
+	/* check if the mouse is in the region */
+	if (!BLI_rcti_isect_pt(&winrct, x, y)) {
+		for (uiBlock *block = ar->uiblocks.first; block; block = block->next)
+			block->auto_open = false;
+
+		return false;
+	}
+
+	/* also, check that with view2d, that the mouse is not over the scrollbars
+	 * NOTE: care is needed here, since the mask rect may include the scrollbars
+	 * even when they are not visible, so we need to make a copy of the mask to
+	 * use to check
+	 */
+	if (ar->v2d.mask.xmin != ar->v2d.mask.xmax) {
+		const View2D *v2d = &ar->v2d;
+		int mx, my;
+
+		/* convert window coordinates to region coordinates */
+		mx = x;
+		my = y;
+		ui_window_to_region(ar, &mx, &my);
+
+		/* check if in the rect */
+		if (!BLI_rcti_isect_pt(&v2d->mask, mx, my) || UI_view2d_mouse_in_scrollers(ar, &ar->v2d, x, y)) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+/* x and y are only used in case event is NULL... */
+static uiBut *ui_but_find_mouse_over_ex(ARegion *ar, const int x, const int y, const bool labeledit)
+{
+	uiBlock *block;
+	uiBut *but, *butover = NULL;
+	float mx, my;
+
+//	if (!win->active)
+//		return NULL;
+	if (!ui_region_contains_point_px(ar, x, y))
+		return NULL;
+
+	for (block = ar->uiblocks.first; block; block = block->next) {
+		mx = x;
+		my = y;
+		ui_window_to_block_fl(ar, block, &mx, &my);
+
+		for (but = block->buttons.last; but; but = but->prev) {
+			if (ui_but_is_interactive(but, labeledit)) {
+				if (but->pie_dir != UI_RADIAL_NONE) {
+					if (ui_but_isect_pie_seg(block, but)) {
+						butover = but;
+						break;
+					}
+				}
+				else if (ui_but_contains_pt(but, mx, my)) {
+					butover = but;
+					break;
+				}
+			}
+		}
+
+		/* CLIP_EVENTS prevents the event from reaching other blocks */
+		if (block->flag & UI_BLOCK_CLIP_EVENTS) {
+			/* check if mouse is inside block */
+			if (BLI_rctf_isect_pt(&block->rect, mx, my)) {
+				break;
+			}
+		}
+	}
+
+	return butover;
+}
+
+uiBut *ui_but_find_mouse_over(ARegion *ar, const wmEvent *event)
+{
+	return ui_but_find_mouse_over_ex(ar, event->x, event->y, event->ctrl != 0);
+}
+
+static uiBut *ui_list_find_mouse_over_ex(ARegion *ar, int x, int y)
+{
+	uiBlock *block;
+	uiBut *but;
+	float mx, my;
+
+	if (!ui_region_contains_point_px(ar, x, y))
+		return NULL;
+
+	for (block = ar->uiblocks.first; block; block = block->next) {
+		mx = x;
+		my = y;
+		ui_window_to_block_fl(ar, block, &mx, &my);
+
+		for (but = block->buttons.last; but; but = but->prev) {
+			if (but->type == UI_BTYPE_LISTBOX && ui_but_contains_pt(but, mx, my)) {
+				return but;
+			}
+		}
+	}
+
+	return NULL;
+}
+
+static uiBut *ui_list_find_mouse_over(ARegion *ar, const wmEvent *event)
+{
+	return ui_list_find_mouse_over_ex(ar, event->x, event->y);
+}
 
 /* assumes event type is MOUSEPAN */
 void ui_pan_to_scroll(const wmEvent *event, int *type, int *val)
@@ -525,7 +693,7 @@ static uiBut *ui_but_last(uiBlock *block)
 	return NULL;
 }
 
-static bool ui_but_is_cursor_warp(uiBut *but)
+static bool ui_but_is_cursor_warp(const uiBut *but)
 {
 	if (U.uiflag & USER_CONTINUOUS_MOUSE) {
 		if (ELEM(but->type,
@@ -539,43 +707,111 @@ static bool ui_but_is_cursor_warp(uiBut *but)
 	return false;
 }
 
+static bool ui_but_contains_password(const uiBut *but)
+{
+	return but->rnaprop && (RNA_property_subtype(but->rnaprop) == PROP_PASSWORD);
+}
+
 /**
- * Ignore mouse movements within some horizontal pixel threshold before starting to drag
+ * Can we mouse over the button or is it hidden/disabled/layout.
+ * \note ctrl is kind of a hack currently,
+ * so that non-embossed UI_BTYPE_TEXT button behaves as a label when ctrl is not pressed.
  */
-static bool ui_but_dragedit_update_mval(uiHandleButtonData *data, int mx)
+static bool ui_but_is_interactive(const uiBut *but, const bool labeledit)
 {
-	if (mx == data->draglastx)
+	/* note, UI_BTYPE_LABEL is included for highlights, this allows drags */
+	if ((but->type == UI_BTYPE_LABEL) && but->dragpoin == NULL)
+		return false;
+	if (ELEM(but->type, UI_BTYPE_ROUNDBOX, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE, UI_BTYPE_LISTBOX))
+		return false;
+	if (but->flag & UI_HIDDEN)
+		return false;
+	if (but->flag & UI_SCROLLED)
+		return false;
+	if ((but->type == UI_BTYPE_TEXT) && (but->dt == UI_EMBOSS_NONE) && !labeledit)
+		return false;
+	if ((but->type == UI_BTYPE_LISTROW) && labeledit)
 		return false;
-
-	if (data->draglock) {
-		if (ABS(mx - data->dragstartx) <= BUTTON_DRAGLOCK_THRESH) {
-			return false;
-		}
-#ifdef USE_DRAG_MULTINUM
-		if (ELEM(data->multi_data.init, BUTTON_MULTI_INIT_UNSET, BUTTON_MULTI_INIT_SETUP)) {
-			return false;
-		}
-#endif
-		data->draglock = false;
-		data->dragstartx = mx;  /* ignore mouse movement within drag-lock */
-	}
 
 	return true;
 }
 
-static float ui_mouse_scale_warp_factor(const bool shift)
+static bool ui_but_find_select_in_enum__cmp(const uiBut *but_a, const uiBut *but_b)
 {
-	return shift ? 0.05f : 1.0f;
+	return ((but_a->type == but_b->type) &&
+	        (but_a->alignnr == but_b->alignnr) &&
+	        (but_a->poin == but_b->poin) &&
+	        (but_a->rnapoin.type == but_b->rnapoin.type) &&
+	        (but_a->rnaprop == bu

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list