Blender V5.0
interface_query.cc File Reference
#include "BLI_listbase.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "DNA_screen_types.h"
#include "BKE_screen.hh"
#include "UI_view2d.hh"
#include "RNA_access.hh"
#include "interface_intern.hh"
#include "UI_abstract_view.hh"
#include "WM_api.hh"
#include "WM_types.hh"

Go to the source code of this file.

Classes

struct  ListRowFindIndexData

Functions

Button (#uiBut) Spatial
void ui_but_pie_dir (RadialDirection dir, float vec[2])
static bool ui_but_isect_pie_seg (const uiBlock *block, const uiBut *but)
bool ui_but_contains_pt (const uiBut *but, float mx, float my)
bool ui_but_contains_rect (const uiBut *but, const rctf *rect)
bool ui_but_contains_point_px (const uiBut *but, const ARegion *region, const int xy[2])
bool ui_but_contains_point_px_icon (const uiBut *but, ARegion *region, const wmEvent *event)
static uiButui_but_find (const ARegion *region, const uiButFindPollFn find_poll, const void *find_custom_data)
uiButui_but_find_mouse_over_ex (const ARegion *region, const int xy[2], const bool labeledit, const bool for_tooltip, const uiButFindPollFn find_poll, const void *find_custom_data)
uiButUI_but_find_mouse_over (const ARegion *region, const wmEvent *event)
uiButui_but_find_rect_over (const ARegion *region, const rcti *rect_px)
uiButui_list_find_mouse_over_ex (const ARegion *region, const int xy[2])
uiButui_list_find_mouse_over (const ARegion *region, const wmEvent *event)
uiListUI_list_find_mouse_over (const ARegion *region, const wmEvent *event)
static bool ui_list_contains_row (const uiBut *listbox_but, const uiBut *listrow_but)
static bool ui_but_is_listrow (const uiBut *but, const void *)
uiButui_list_row_find_mouse_over (const ARegion *region, const int xy[2])
static bool ui_but_is_listrow_at_index (const uiBut *but, const void *customdata)
uiButui_list_row_find_index (const ARegion *region, const int index, uiBut *listbox)
static bool ui_but_is_view_item_fn (const uiBut *but, const void *)
uiButui_view_item_find_mouse_over (const ARegion *region, const int xy[2])
static bool ui_but_is_active_view_item (const uiBut *but, const void *)
uiButui_view_item_find_active (const ARegion *region)
uiButui_view_item_find_search_highlight (const ARegion *region)
Button (#uiBut) Relations
uiButui_but_prev (uiBut *but)
uiButui_but_next (uiBut *but)
uiButui_but_first (uiBlock *block)
uiButui_but_last (uiBlock *block)
bool ui_but_is_cursor_warp (const uiBut *but)
bool ui_but_contains_password (const uiBut *but)
Button (#uiBut) Text
size_t ui_but_drawstr_len_without_sep_char (const uiBut *but)
blender::StringRef ui_but_drawstr_without_sep_char (const uiBut *but)
size_t ui_but_tip_len_only_first_line (const uiBut *but)
Block (#uiBlock) State
uiButui_block_active_but_get (const uiBlock *block)
bool ui_block_is_menu (const uiBlock *block)
bool ui_block_is_popover (const uiBlock *block)
bool ui_block_is_pie_menu (const uiBlock *block)
bool ui_block_is_popup_any (const uiBlock *block)
static const uiButui_but_next_non_separator (const uiBut *but)
bool UI_block_is_empty_ex (const uiBlock *block, const bool skip_title)
bool UI_block_is_empty (const uiBlock *block)
bool UI_block_can_add_separator (const uiBlock *block)
bool UI_block_has_active_default_button (const uiBlock *block)
Block (#uiBlock) Spatial
uiBlockui_block_find_mouse_over_ex (const ARegion *region, const int xy[2], bool only_clip)
uiBlockui_block_find_mouse_over (const ARegion *region, const wmEvent *event, bool only_clip)
Region (#ARegion) State
uiButui_region_find_active_but (ARegion *region)
uiButui_region_find_first_but_test_flag (ARegion *region, int flag_include, int flag_exclude)
Region (#ARegion) Spatial
bool ui_region_contains_point_px (const ARegion *region, const int xy[2])
bool ui_region_contains_rect_px (const ARegion *region, const rcti *rect_px)
Screen (#bScreen) Spatial
ARegionui_screen_region_find_mouse_over_ex (bScreen *screen, const int xy[2])
ARegionui_screen_region_find_mouse_over (bScreen *screen, const wmEvent *event)
Manage Internal State
void ui_interface_tag_script_reload_queries ()

Button (#uiBut) State

static wmOperatorTypeg_ot_tool_set_by_id = nullptr
bool ui_but_is_editable (const uiBut *but)
bool ui_but_is_editable_as_text (const uiBut *but)
bool ui_but_is_toggle (const uiBut *but)
bool ui_but_is_interactive_ex (const uiBut *but, const bool labeledit, const bool for_tooltip)
bool ui_but_is_interactive (const uiBut *but, const bool labeledit)
bool UI_but_is_utf8 (const uiBut *but)
bool ui_but_is_popover_once_compat (const uiBut *but)
bool ui_but_has_array_value (const uiBut *but)
bool UI_but_is_tool (const uiBut *but)
bool UI_but_has_quick_tooltip (const uiBut *but)
int ui_but_icon (const uiBut *but)

Detailed Description

Utilities to inspect the interface, extract information.

Definition in file interface_query.cc.

Function Documentation

◆ ui_block_active_but_get()

uiBut * ui_block_active_but_get ( const uiBlock * block)

◆ UI_block_can_add_separator()

bool UI_block_can_add_separator ( const uiBlock * block)

◆ ui_block_find_mouse_over()

uiBlock * ui_block_find_mouse_over ( const ARegion * region,
const wmEvent * event,
bool only_clip )

Definition at line 759 of file interface_query.cc.

References ui_block_find_mouse_over_ex(), and wmEvent::xy.

Referenced by ui_block_find_mouse_over_ex().

◆ ui_block_find_mouse_over_ex()

uiBlock * ui_block_find_mouse_over_ex ( const ARegion * region,
const int xy[2],
bool only_clip )

◆ UI_block_has_active_default_button()

bool UI_block_has_active_default_button ( const uiBlock * block)

Return true when the block has a default button. Use this for popups to detect when pressing "Return" will run an action.

Definition at line 723 of file interface_query.cc.

References uiBlock::buttons, UI_BUT_ACTIVE_DEFAULT, and UI_HIDDEN.

Referenced by UI_popup_block_template_confirm(), and wm_block_dialog_create().

◆ UI_block_is_empty()

bool UI_block_is_empty ( const uiBlock * block)

Definition at line 709 of file interface_query.cc.

References UI_block_is_empty_ex().

◆ UI_block_is_empty_ex()

bool UI_block_is_empty_ex ( const uiBlock * block,
const bool skip_title )

◆ ui_block_is_menu()

◆ ui_block_is_pie_menu()

◆ ui_block_is_popover()

bool ui_block_is_popover ( const uiBlock * block)

◆ ui_block_is_popup_any()

◆ ui_but_contains_password()

bool ui_but_contains_password ( const uiBut * but)

Definition at line 602 of file interface_query.cc.

References PROP_PASSWORD, RNA_property_subtype(), and uiBut::rnaprop.

Referenced by ui_but_copy(), and ui_list_find_mouse_over_ex().

◆ ui_but_contains_point_px()

bool ui_but_contains_point_px ( const uiBut * but,
const ARegion * region,
const int xy[2] )

◆ ui_but_contains_point_px_icon()

◆ ui_but_contains_pt()

bool ui_but_contains_pt ( const uiBut * but,
float mx,
float my )

◆ ui_but_contains_rect()

bool ui_but_contains_rect ( const uiBut * but,
const rctf * rect )

Definition at line 256 of file interface_query.cc.

References BLI_rctf_isect(), and uiBut::rect.

Referenced by ui_but_find_rect_over().

◆ ui_but_drawstr_len_without_sep_char()

size_t ui_but_drawstr_len_without_sep_char ( const uiBut * but)

◆ ui_but_drawstr_without_sep_char()

◆ ui_but_find()

uiBut * ui_but_find ( const ARegion * region,
const uiButFindPollFn find_poll,
const void * find_custom_data )
static

◆ UI_but_find_mouse_over()

uiBut * UI_but_find_mouse_over ( const ARegion * region,
const wmEvent * event )

Find a button under the mouse cursor, ignoring non-interactive ones (like labels). Holding Ctrl over a label button that can be Ctrl-Clicked to turn into an edit button will return that. Labels that are only interactive for the sake of displaying a tooltip are ignored too.

Definition at line 371 of file interface_query.cc.

References KM_CTRL, wmEvent::modifier, ui_but_find_mouse_over_ex(), and wmEvent::xy.

Referenced by eyedropper_get_property_button_under_mouse(), blender::ed::space_node::node_group_enter_exit_invoke(), ui_handle_button_event(), and ui_handler_region_menu().

◆ ui_but_find_mouse_over_ex()

uiBut * ui_but_find_mouse_over_ex ( const ARegion * region,
const int xy[2],
const bool labeledit,
const bool for_tooltip,
const uiButFindPollFn find_poll,
const void * find_custom_data )

◆ ui_but_find_rect_over()

◆ ui_but_first()

uiBut * ui_but_first ( uiBlock * block)

◆ ui_but_has_array_value()

bool ui_but_has_array_value ( const uiBut * but)

◆ UI_but_has_quick_tooltip()

bool UI_but_has_quick_tooltip ( const uiBut * but)

◆ ui_but_icon()

◆ ui_but_is_active_view_item()

bool ui_but_is_active_view_item ( const uiBut * but,
const void *  )
static

◆ ui_but_is_cursor_warp()

◆ ui_but_is_editable()

◆ ui_but_is_editable_as_text()

bool ui_but_is_editable_as_text ( const uiBut * but)

◆ ui_but_is_interactive()

bool ui_but_is_interactive ( const uiBut * but,
const bool labeledit )

◆ ui_but_is_interactive_ex()

bool ui_but_is_interactive_ex ( const uiBut * but,
const bool labeledit,
const bool for_tooltip )

Can we mouse over the button or is it hidden/disabled/layout.

Note
ctrl is kind of a hack currently, so that non-embossed ButType::Text button behaves as a label when ctrl is not pressed.

Definition at line 68 of file interface_query.cc.

References ELEM, uiBut::emboss, uiBut::flag, blender::ui::AbstractViewItem::is_interactive(), Label, ListBox, ListRow, blender::ui::None, blender::ui::NoneOrStatus, PreviewTile, Roundbox, Sepr, SeprLine, Text, uiBut::tip, uiBut::tip_custom_func, uiBut::tip_func, uiBut::tip_quick_func, uiBut::type, ui_but_drag_is_draggable(), UI_HIDDEN, UI_SCROLLED, uiButViewItem::view_item, and ViewItem.

Referenced by ui_but_find_mouse_over_ex(), and ui_but_is_interactive().

◆ ui_but_is_listrow()

bool ui_but_is_listrow ( const uiBut * but,
const void *  )
static

Definition at line 462 of file interface_query.cc.

References ListRow, and uiBut::type.

Referenced by ui_but_is_listrow_at_index(), and ui_list_row_find_mouse_over().

◆ ui_but_is_listrow_at_index()

bool ui_but_is_listrow_at_index ( const uiBut * but,
const void * customdata )
static

◆ ui_but_is_popover_once_compat()

bool ui_but_is_popover_once_compat ( const uiBut * but)

Definition at line 129 of file interface_query.cc.

References But, Decorator, ELEM, uiBut::type, and ui_but_is_toggle().

Referenced by ui_draw_but(), and ui_handle_button_event().

◆ ui_but_is_toggle()

bool ui_but_is_toggle ( const uiBut * but)

◆ UI_but_is_tool()

◆ UI_but_is_utf8()

◆ ui_but_is_view_item_fn()

bool ui_but_is_view_item_fn ( const uiBut * but,
const void *  )
static

Definition at line 494 of file interface_query.cc.

References uiBut::type, and ViewItem.

Referenced by ui_view_item_find_mouse_over().

◆ ui_but_isect_pie_seg()

◆ ui_but_last()

◆ ui_but_next()

uiBut * ui_but_next ( uiBut * but)

◆ ui_but_next_non_separator()

const uiBut * ui_but_next_non_separator ( const uiBut * but)
static

◆ ui_but_pie_dir()

void ui_but_pie_dir ( RadialDirection dir,
float vec[2] )

◆ ui_but_prev()

uiBut * ui_but_prev ( uiBut * but)

◆ ui_but_tip_len_only_first_line()

size_t ui_but_tip_len_only_first_line ( const uiBut * but)

◆ ui_interface_tag_script_reload_queries()

void ui_interface_tag_script_reload_queries ( )

Definition at line 883 of file interface_query.cc.

References g_ot_tool_set_by_id.

Referenced by UI_interface_tag_script_reload().

◆ ui_list_contains_row()

bool ui_list_contains_row ( const uiBut * listbox_but,
const uiBut * listrow_but )
static

Definition at line 454 of file interface_query.cc.

References BLI_assert, ListBox, ListRow, uiBut::type, and ui_but_rna_equals().

Referenced by ui_but_is_listrow_at_index().

◆ UI_list_find_mouse_over()

uiList * UI_list_find_mouse_over ( const ARegion * region,
const wmEvent * event )

◆ ui_list_find_mouse_over()

uiBut * ui_list_find_mouse_over ( const ARegion * region,
const wmEvent * event )

◆ ui_list_find_mouse_over_ex()

uiBut * ui_list_find_mouse_over_ex ( const ARegion * region,
const int xy[2] )

◆ ui_list_row_find_index()

uiBut * ui_list_row_find_index ( const ARegion * region,
const int index,
uiBut * listbox )

◆ ui_list_row_find_mouse_over()

uiBut * ui_list_row_find_mouse_over ( const ARegion * region,
const int xy[2] )

Definition at line 467 of file interface_query.cc.

References ui_but_find_mouse_over_ex(), ui_but_is_listrow(), and xy.

◆ ui_region_contains_point_px()

◆ ui_region_contains_rect_px()

bool ui_region_contains_rect_px ( const ARegion * region,
const rcti * rect_px )

◆ ui_region_find_active_but()

◆ ui_region_find_first_but_test_flag()

uiBut * ui_region_find_first_but_test_flag ( ARegion * region,
int flag_include,
int flag_exclude )

Definition at line 782 of file interface_query.cc.

References LISTBASE_FOREACH, and ARegion::runtime.

Referenced by ui_block_find_mouse_over_ex(), and ui_handle_menu_event().

◆ ui_screen_region_find_mouse_over()

ARegion * ui_screen_region_find_mouse_over ( bScreen * screen,
const wmEvent * event )

◆ ui_screen_region_find_mouse_over_ex()

ARegion * ui_screen_region_find_mouse_over_ex ( bScreen * screen,
const int xy[2] )

◆ ui_view_item_find_active()

uiBut * ui_view_item_find_active ( const ARegion * region)

◆ ui_view_item_find_mouse_over()

uiBut * ui_view_item_find_mouse_over ( const ARegion * region,
const int xy[2] )

Definition at line 499 of file interface_query.cc.

References ui_but_find_mouse_over_ex(), ui_but_is_view_item_fn(), and xy.

◆ ui_view_item_find_search_highlight()

Variable Documentation

◆ g_ot_tool_set_by_id

wmOperatorType* g_ot_tool_set_by_id = nullptr
static

Definition at line 140 of file interface_query.cc.

Referenced by UI_but_is_tool(), and ui_interface_tag_script_reload_queries().