UI: ignore events in empty region overlap areas
[blender.git] / source / blender / editors / interface / interface_intern.h
index 86ca224..4af7fdd 100644 (file)
@@ -172,21 +172,25 @@ struct uiBut {
   /* both these values use depends on the button type
    * (polymorphic struct or union would be nicer for this stuff) */
 
-  /* (type == UI_BTYPE_HSVCUBE),    Use UI_GRAD_* values.
-   * (type == UI_BTYPE_NUM),        Use to store RNA 'step' value, for dragging and click-step.
-   * (type == UI_BTYPE_LABEL),      Use (a1 == 1.0f) to use a2 as a blending factor (wow, this is imaginative!).
-   * (type == UI_BTYPE_SCROLL)      Use as scroll size.
-   * (type == UI_BTYPE_SEARCH_MENU) Use as number or rows.
-   * (type == UI_BTYPE_COLOR)       Use as indication of color palette
-   * (type == UI_BTYPE_PROGRESS_BAR) Use to store progress (0..1).
+  /**
+   * For #uiBut.type:
+   * - UI_BTYPE_HSVCUBE:      Use UI_GRAD_* values.
+   * - UI_BTYPE_NUM:          Use to store RNA 'step' value, for dragging and click-step.
+   * - UI_BTYPE_LABEL:        Use `(a1 == 1.0f)` to use a2 as a blending factor (imaginative!).
+   * - UI_BTYPE_SCROLL:       Use as scroll size.
+   * - UI_BTYPE_SEARCH_MENU:  Use as number or rows.
+   * - UI_BTYPE_COLOR:        Use as indication of color palette.
+   * - UI_BTYPE_PROGRESS_BAR: Use to store progress (0..1).
    */
   float a1;
 
-  /* (type == UI_BTYPE_HSVCIRCLE ), Use to store the luminosity.
-   * (type == UI_BTYPE_NUM),        Use to store RNA 'precision' value, for dragging and click-step.
-   * (type == UI_BTYPE_LABEL),      If (a1 == 1.0f) use a2 as a blending factor.
-   * (type == UI_BTYPE_SEARCH_MENU) Use as number or columns.
-   * (type == UI_BTYPE_COLOR)       Use as index in palette (not so good, needs refactor)
+  /**
+   * For #uiBut.type:
+   * - UI_BTYPE_HSVCIRCLE:    Use to store the luminosity.
+   * - UI_BTYPE_NUM:          Use to store RNA 'precision' value, for dragging and click-step.
+   * - UI_BTYPE_LABEL:        If `(a1 == 1.0f)` use a2 as a blending factor.
+   * - UI_BTYPE_SEARCH_MENU:  Use as number or columns.
+   * - UI_BTYPE_COLOR:        Use as index in palette (not so good, needs refactor).
    */
   float a2;
 
@@ -456,7 +460,12 @@ extern void ui_block_to_window_rctf(const struct ARegion *ar,
 extern float ui_block_to_window_scale(const struct ARegion *ar, uiBlock *block);
 extern void ui_window_to_block_fl(const struct ARegion *ar, uiBlock *block, float *x, float *y);
 extern void ui_window_to_block(const struct ARegion *ar, uiBlock *block, int *x, int *y);
+extern void ui_window_to_block_rctf(const struct ARegion *ar,
+                                    uiBlock *block,
+                                    rctf *rct_dst,
+                                    const rctf *rct_src);
 extern void ui_window_to_region(const ARegion *ar, int *x, int *y);
+extern void ui_window_to_region_rcti(const ARegion *ar, rcti *rect_dst, const rcti *rct_src);
 extern void ui_region_to_window(const struct ARegion *ar, int *x, int *y);
 extern void ui_region_winrct_get_no_margin(const struct ARegion *ar, struct rcti *r_rect);
 
@@ -894,6 +903,7 @@ void ui_but_pie_dir(RadialDirection dir, float vec[2]);
 bool ui_but_is_cursor_warp(const uiBut *but) ATTR_WARN_UNUSED_RESULT;
 
 bool ui_but_contains_pt(const uiBut *but, float mx, float my) ATTR_WARN_UNUSED_RESULT;
+bool ui_but_contains_rect(const uiBut *but, const rctf *rect);
 bool ui_but_contains_point_px_icon(const uiBut *but,
                                    struct ARegion *ar,
                                    const struct wmEvent *event) ATTR_WARN_UNUSED_RESULT;
@@ -909,6 +919,8 @@ uiBut *ui_but_find_mouse_over_ex(struct ARegion *ar,
                                  const bool labeledit) ATTR_WARN_UNUSED_RESULT;
 uiBut *ui_but_find_mouse_over(struct ARegion *ar,
                               const struct wmEvent *event) ATTR_WARN_UNUSED_RESULT;
+uiBut *ui_but_find_rect_over(const struct ARegion *ar,
+                             const rcti *rect_px) ATTR_WARN_UNUSED_RESULT;
 
 uiBut *ui_list_find_mouse_over_ex(struct ARegion *ar, int x, int y) ATTR_WARN_UNUSED_RESULT;
 
@@ -927,6 +939,7 @@ bool ui_block_is_popup_any(const uiBlock *block) ATTR_WARN_UNUSED_RESULT;
 uiBut *ui_region_find_first_but_test_flag(struct ARegion *ar, int flag_include, int flag_exclude);
 uiBut *ui_region_find_active_but(struct ARegion *ar) ATTR_WARN_UNUSED_RESULT;
 bool ui_region_contains_point_px(const struct ARegion *ar, int x, int y) ATTR_WARN_UNUSED_RESULT;
+bool ui_region_contains_rect_px(const struct ARegion *ar, const rcti *rect_px);
 
 /* interface_context_menu.c */
 bool ui_popup_context_menu_for_button(struct bContext *C, uiBut *but);