Control
继承
简要描述
所有用户界面节点都从Control继承。控件的锚点和边距相对于其父节点调整位置和大小。
描述
所有与UI相关的节点的基类。Control拥有定义其范围的边界矩形,相对于其父控件或当前视口的锚点位置以及表示锚点偏移的边距。当节点的任何父节点或屏幕尺寸更改时,边距会自动更新。
有关IdeaXR的UI系统、锚点、边距和容器的更多信息,请参见手册中的相关教程。要构建灵活的UI,您需要一起使用从Control和Container节点继承的UI元素。
用户界面节点和输入
IdeaXR首先通过调用Node._input将输入事件发送到场景的根节点。Node._input将事件从节点树向下转发到鼠标光标或键盘焦点上的节点。节点调用MainLoop._input_event可以获取该事件。一旦调用了accept_event,其他节点将不能接收该事件。当接收事件后,Node._unhandled_input将不会对事件进行处理。
键盘焦点中只能有一个Control节点。仅焦点所在的节点将接收键盘事件。要获得焦点,需要调用grap_focus。当另一个节点获取焦点或者聚焦的节点隐藏时,Control节点将失去焦点。
将mouse_filter设置为MOUSE_FILTER_IGNORE,Control节点会忽略鼠标或触摸事件。将图标放在按钮顶部时,需要这个设置。
Theme资源会更改控件的外观。如果更改Control节点上的Theme,它将影响其所有子节点。要覆盖某些主题的参数,请调用add_*_override
的某一个方法,例如add_font_override。也可以使用检查器覆盖主题。
成员
类型 | 属性名 | 默认值 |
---|---|---|
float | anchor_bottom | 0.0 |
float | anchor_left | 0.0 |
float | anchor_right | 0.0 |
float | anchor_top | 0.0 |
int | focus_mode | 0 |
NodePath | focus_neighbour_bottom | NodePath("") |
NodePath | focus_neighbour_left | NodePath("") |
NodePath | focus_neighbour_right | NodePath("") |
NodePath | focus_neighbour_top | NodePath("") |
NodePath | focus_next | NodePath("") |
NodePath | focus_previous | NodePath("") |
int | grow_horizontal | 1 |
int | grow_vertical | 1 |
String | hint_tooltip | "" |
float | margin_bottom | 0.0 |
float | margin_left | 0.0 |
float | margin_right | 0.0 |
float | margin_top | 0.0 |
int | mouse_default_cursor_shape | 0 |
int | mouse_filter | 0 |
bool | rect_clip_content | false |
Vector2 | rect_global_position | |
Vector2 | rect_min_size | Vector2( 0, 0 ) |
Vector2 | rect_pivot_offset | Vector2( 0, 0 ) |
Vector2 | rect_position | Vector2( 0, 0 ) |
float | rect_rotation | 0.0 |
Vector2 | rect_scale | Vector2( 1, 1 ) |
Vector2 | rect_size | Vector2( 0, 0 ) |
int | size_flags_horizontal | 1 |
float | size_flags_stretch_ratio | 1.0 |
int | size_flags_vertical | 1 |
Theme | theme |
方法
返回值类型 | 方法名称 |
---|---|
bool | _clips_input() virtual |
Vector2 | _get_minimum_size() virtual |
void | _gui_input(event: InputEvent) virtual |
Object | _make_custom_tooltip(for_text: String) virtual |
void | accept_event() |
void | add_color_override(name: String, color: Color) |
void | add_constant_override(#method-add_constant_override)(name: String, constant: int) |
void | add_font_override(name: String, font: Font) |
void | add_icon_override(name: String, texture: Texture) |
void | add_shader_override(name: String, shader: Shader) |
void | add_stylebox_override(name: String, stylebox: StyleBox) |
bool | can_drop_data(position: Vector2, data: Variant) virtual |
void | drop_data(position: Vector2, data: Variant) virtual |
void | force_drag(data: Variant, preview: Control) |
float | get_anchor(margin: int) const |
Vector2 | get_begin() const |
Color | get_color(name: String, type: String = "") const |
Vector2 | get_combined_minimum_size() const |
int | get_constant(#method-get_constant)(name: String, type: String = "") const |
int | get_cursor_shape(position: Vector2 = Vector2( 0, 0 )) const |
Variant | get_drag_data(position: Vector2) virtual |
Vector2 | get_end() const |
NodePath | get_focus_neighbour(margin: int) const |
Control | get_focus_owner() const |
Font | get_font(name: String, type: String = "") const |
Rect2 | get_global_rect() const |
Texture | get_icon(name: String, type: String = "") const |
float | get_margin(margin: int) const |
Vector2 | get_minimum_size() const |
Vector2 | get_parent_area_size() const |
Control | get_parent_control() const |
Rect2 | get_rect() const |
float | get_rotation() const |
StyleBox | get_stylebox(name: String, type: String = "") const |
String | get_tooltip(at_position: Vector2 = Vector2( 0, 0 )) const |
void | grab_click_focus() |
void | grab_focus() |
bool | has_color(name: String, type: String = "") const |
bool | has_color_override(name: String) const |
bool | has_constant(#method-has_constant)(name: String, type: String = "") const |
bool | has_constant_override(#method-has_constant_override)(name: String) const |
bool | has_focus() const |
bool | has_font(name: String, type: String = "") const |
bool | has_font_override(name: String) const |
bool | has_icon(name: String, type: String = "") const |
bool | has_icon_override(name: String) const |
bool | has_point(point: Vector2) virtual |
bool | has_shader_override(name: String) const |
bool | has_stylebox(name: String, type: String = "") const |
bool | has_stylebox_override(name: String) const |
void | minimum_size_changed() |
void | release_focus() |
void | set_anchor(margin: int, anchor: float, keep_margin: bool = false, push_opposite_anchor: bool = true) |
void | set_anchor_and_margin(margin: int, anchor: float, offset: float, push_opposite_anchor: bool = false) |
void | set_anchors_and_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0) |
void | set_anchors_preset(preset: int, keep_margins: bool = false) |
void | set_begin(position: Vector2) |
void | set_drag_forwarding(target: Control) |
void | set_drag_preview(control: Control) |
void | set_end(position: Vector2) |
void | set_focus_neighbour(margin: int, neighbour: NodePath) |
void | set_global_position(position: Vector2, keep_margins: bool = false) |
void | set_margin(margin: int, offset: float) |
void | set_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0) |
void | set_position(position: Vector2, keep_margins: bool = false) |
void | set_rotation(radians: float) |
void | set_size(size: Vector2, keep_margins: bool = false) |
void | show_modal(exclusive: bool = false) |
void | warp_mouse(to_position: Vector2) |
信号
- **focus_entered**
在节点获得键盘焦点时发出。
- **focus_exited**
当节点失去键盘焦点时发出。
- **gui_input**
在节点收到InputEvent时发出。
- **minimum_size_changed**
当节点的最小大小更改时发出。
- **modal_closed**
当模态Control关闭时发出。参见show_modal。
- **mouse_entered**
当鼠标进入控件的Rect
区域时触发,前提是其控件的mouse_filter允许事件到达该控件。
- **mouse_exited**
当鼠标离开控件的Rect
区域时发出,条件是其控件的mouse_filter允许事件到达它。
- **resized**
当控件更改大小时发出。
- **size_flags_changed**
当大小标志更改时发出。请参阅size_flags_horizontal和size_flags_vertical。
枚举
enum FocusMode:
- **FOCUS_NONE = 0**
该节点无法获取焦点。与focus_mode一起使用。
- **FOCUS_CLICK = 1**
该节点只能抓住鼠标单击的焦点。与focus_mode一起使用。
- **FOCUS_ALL = 2**
该节点可以获取焦点于鼠标单击或使用键盘上的箭头和Tab键。与focus_mode一起使用。
enum CursorShape:
- **CURSOR_ARROW = 0**
当用户将鼠标在节点悬停时,显示系统的箭头鼠标光标。与mouse_default_cursor_shape成员一起使用。
- **CURSOR_IBEAM = 1**
当用户将鼠标在节点悬停时,显示系统的I型鼠标光标。它告诉用户他们可以突出显示或插入文本。
- **CURSOR_POINTING_HAND = 2**
当用户将鼠标在节点悬停时,显示系统的手形鼠标光标。
- **CURSOR_CROSS = 3**
当用户将鼠标在节点悬停时,显示系统的交叉鼠标光标。
- **CURSOR_WAIT = 4**
当用户将鼠标悬停在节点上时,显示系统的等待鼠标光标,通常是一个沙漏。
- **CURSOR_BUSY = 5**
当用户将鼠标在节点悬停时,显示系统的繁忙鼠标光标。通常是沙漏。
- **CURSOR_DRAG = 6**
当用户将鼠标悬停在节点上时,显示系统的鼠标光标,通常是闭合的拳头或叉形符号。它告诉用户他们当前正在拖动项目,例如Scene面板中的节点。
- **CURSOR_CAN_DROP = 7**
当用户将鼠标在节点悬停时,显示系统的鼠标光标,它可以是张开的手。它告诉用户他们可以放下当前正在抓取的对象,例如Scene面板中的节点。
- **CURSOR_FORBIDDEN = 8**
当用户将鼠标在节点悬停时,显示系统禁止的鼠标光标。通常是一个交叉的圆圈。
- **CURSOR_VSIZE = 9**
当用户将鼠标在节点悬停时,显示系统的垂直调整大小的鼠标光标,形状为双向垂直箭头。它告诉用户他们可以垂直调整窗口或面板的大小。
- **CURSOR_HSIZE = 10**
当用户将鼠标在节点悬停时,显示系统的水平调整大小的鼠标光标,形状为双向水平箭头。它告诉用户他们可以水平调整窗口或面板的大小。
- **CURSOR_BDIAGSIZE = 11**
当用户将鼠标在节点悬停时,显示系统窗口调整大小的鼠标光标,光标是从左下角到右上角的双向箭头。它告诉用户可以水平和垂直调整窗口或面板的大小。
- **CURSOR_FDIAGSIZE = 12**
当用户将鼠标在节点悬停时,显示系统窗口调整大小的鼠标光标。光标是一个双向箭头,从左上角到右下角,与CURSOR_BDIAGSIZE相反。它告诉用户可以水平和垂直调整窗口或面板的大小。
- **CURSOR_MOVE = 13**
当用户将鼠标在节点悬停时,显示系统的移动鼠标光标。它以90度角显示2个双向箭头。它告诉用户他们可以自由移动UI元素。
- **CURSOR_VSPLIT = 14**
当用户将鼠标在节点悬停时,显示系统的垂直拆分鼠标光标。在Windows上,它与CURSOR_VSIZE相同。
- **CURSOR_HSPLIT = 15**
当用户将鼠标在节点悬停时,显示系统的水平拆分鼠标光标。在Windows上,它与CURSOR_HSIZE相同。
- **CURSOR_HELP = 16**
当用户将鼠标悬停在一个节点上时,显示系统的帮助鼠标光标,即一个问号。
enum LayoutPreset:
- **PRESET_TOP_LEFT = 0**
将所有4个定位点对齐到父控件边界的左上角。与set_anchors_preset一起使用。
- **PRESET_TOP_RIGHT = 1**
将所有4个定位点对齐到父控件边界的右上角。与set_anchors_preset一起使用。
- **PRESET_BOTTOM_LEFT = 2**
将所有4个定位点对齐到父控件边界的左下角。与set_anchors_preset一起使用。
- **PRESET_BOTTOM_RIGHT = 3**
将所有4个定位点对齐到父控件边界的右下角。与set_anchors_preset一起使用。
- **PRESET_CENTER_LEFT = 4**
将所有4个定位点对齐到父控件边界的左边缘的中心。与set_anchors_preset一起使用。
- **PRESET_CENTER_TOP = 5**
将所有4个定位点对齐到父控件边界的上边缘的中心。与set_anchors_preset一起使用。
- **PRESET_CENTER_RIGHT = 6**
将所有4个定位点对齐到父控件边界右边缘的中心。与set_anchors_preset一起使用。
- **PRESET_CENTER_BOTTOM = 7**
将所有4个定位点对齐到父控件边界的底部边缘的中心。与set_anchors_preset一起使用。
- **PRESET_CENTER = 8**
将所有4个定位点对齐到父控件边界的中心。与set_anchors_preset一起使用。
- **PRESET_LEFT_WIDE = 9**
将所有4个定位点对齐到父控件的左边缘。左边距相对于节点父节点的左边缘,而上边距相对于节点父节点的左上角。与set_anchors_preset一起使用。
- **PRESET_TOP_WIDE = 10**
将所有4个定位点对齐到父控件的顶部边缘。左侧边距相对于节点父节点的左上角,顶部边距相对于顶部的边缘,右侧边距相对于节点的父节点的右上角。与set_anchors_preset一起使用。
- **PRESET_RIGHT_WIDE = 11**
将所有4个定位点对齐到父控件的右边缘。右侧边距相对于节点父节点的右边缘而顶部边距相对于节点的父节点的右上角。与set_anchors_preset一起使用。
- **PRESET_BOTTOM_WIDE = 12**
将所有4个定位点对齐到父控件的底部边缘。左侧边距相对于节点父节点的左下角,底部边距相对于底部的边缘,右侧边距相对于节点的父节点的右下角。与set_anchors_preset一起使用。
- **PRESET_VCENTER_WIDE = 13**
将所有4个锚点对齐到一条垂直线,该垂直线将父控件切成两半。与set_anchors_preset一起使用。
- **PRESET_HCENTER_WIDE = 14**
将所有4个锚点对齐到一条水平线,该水平线将父控件切成两半。与set_anchors_preset一起使用。
- **PRESET_WIDE = 15**
将所有4个定位点对齐到父控件的各个角。应用此预设后,将所有4个边距设置为0,Control将适合其上级控件。这等效于编辑器中的“全角”布局选项。与set_anchors_preset一起使用。
enum LayoutPresetMode:
- **PRESET_MODE_MINSIZE = 0**
控件将被调整为最小尺寸。
- **PRESET_MODE_KEEP_WIDTH = 1**
控件的宽度不会改变。
- **PRESET_MODE_KEEP_HEIGHT = 2**
控件的高度不会改变。
- **PRESET_MODE_KEEP_SIZE = 3**
控件的大小不会改变。
enum SizeFlags:
- **SIZE_FILL = 1**
告诉父级Container]扩展此节点的边界以填充所有可用空间,而无需推动任何其他节点。与size_flags_horizontal和size_flags_vertical一起使用。
- **SIZE_EXPAND = 2**
告诉父级Container让该节点占用您标记的轴上的所有可用空间。如果将多个相邻节点设置为扩展,它们将根据其拉伸比共享空间。参见size_flags_stretch_ratio。与size_flags_horizontal和size_flags_vertical一起使用。
- **SIZE_EXPAND_FILL = 3**
将节点的大小标志设置为同时填充和扩展。有关更多信息,请参见上面的2个常量。
- **SIZE_SHRINK_CENTER = 4**
告诉父级Container使节点本身居中。它基于控件的边界框居中,因此它不适用于fill或expand尺寸标志。与size_flags_horizontal和size_flags_vertical一起使用。
- **SIZE_SHRINK_END = 8**
告诉父级Container将节点与其末端(底部或右侧)对齐。它不适用于fill或expand标志。与size_flags_horizontal和size_flags_vertical一起使用。
enum MouseFilter:
- **MOUSE_FILTER_STOP = 0**
如果单击,控件将通过_gui_input接收鼠标按钮输入事件。并且控件将接收mouse_entered和mouse_exited信号。这些事件将自动标记为已处理,并且不会进一步传播到其他控件。这也会导致其他控件中的信号阻塞。
- **MOUSE_FILTER_PASS = 1**
如果单击,控件将通过_gui_input接收鼠标按钮输入事件。并且控件将接收mouse_entered和mouse_exited信号。如果此控件不处理事件,则将考虑父控件(如果有),依此类推,直到不再有可能处理它的父控件为止。这也允许信号在其他控件中触发,即使根本没有控件处理过该事件,该事件仍将自动处理,因此不会触发未处理的输入。
- **MOUSE_FILTER_IGNORE = 2**
控件将不会通过_gui_input接收鼠标按钮输入事件。该控件也不会接收到mouse_entered或mouse_exited信号。这不会阻止其他控件接收这些事件或触发信号。忽略的事件将不会自动处理。
enum GrowDirection:
- **GROW_DIRECTION_BEGIN = 0**
如果控件的最小尺寸更改为大于相应轴上的当前尺寸,则控件将向左或顶部增大以进行组合。
- **GROW_DIRECTION_END = 1**
如果控件的最小尺寸更改为大于相应轴上的当前尺寸,则控件将向右或向下增大以进行补偿。
- **GROW_DIRECTION_BOTH = 2**
如果控件的最小大小更改为大于当前大小,则控件将在两个方向上均等地增长以组成该控件。
enum Anchor:
- **ANCHOR_BEGIN = 0**
将4个锚点的一侧之一对齐到节点的Rect
的左上角。将其与anchor_*
成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset。
- **ANCHOR_END = 1**
将4个锚点的一侧之一对齐到节点的Rect
的右下角。将其与anchor_*
成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset。
常量
- **NOTIFICATION_RESIZED = 40**
当节点更改大小时发送。使用rect_size获取新大小。
- **NOTIFICATION_MOUSE_ENTER = 41**
当鼠标指针进入节点时发送。
- **NOTIFICATION_MOUSE_EXIT = 42**
当鼠标指针退出节点时发送。
- **NOTIFICATION_FOCUS_ENTER = 43**
当节点获得焦点时发送。
- **NOTIFICATION_FOCUS_EXIT = 44**
当节点失去焦点时发送。
- **NOTIFICATION_THEME_CHANGED = 45**
在节点的theme更改时发送,就在IdeaXR重画控件之前。调用add_*_override
方法时发生。
- **NOTIFICATION_MODAL_CLOSE = 46**
当打开的模态对话框关闭时发送。参见show_modal。
- **NOTIFICATION_SCROLL_BEGIN = 47**
当此节点在已开始滚动的ScrollContainer内部时发送。
- **NOTIFICATION_SCROLL_END = 48**
当此节点位于已停止滚动的ScrollContainer内部时发送。
成员说明
- float anchor_bottom
Default | 0.0 |
---|---|
setter | _set_anchor(value) |
getter | get_anchor |
- float anchor_left
Default | 0.0 |
---|---|
setter | _set_anchor(value) |
getter | get_anchor |
- float anchor_right
Default | 0.0 |
---|---|
setter | _set_anchor(value) |
getter | get_anchor |
- float anchor_top
Default | 0.0 |
---|---|
setter | _set_anchor(value) |
getter | get_anchor |
- int focus_mode
Default | 0 |
---|---|
setter | set_focus_mode(value) |
getter | get_focus_mode |
- NodePath focus_neighbour_bottom
Default | NodePath("") |
---|---|
setter | set_focus_neighbour(value) |
getter | get_focus_neighbour |
- NodePath focus_neighbour_left
Default | NodePath("") |
---|---|
setter | set_focus_neighbour(value) |
getter | get_focus_neighbour |
- NodePath focus_neighbour_right
Default | NodePath("") |
---|---|
setter | set_focus_neighbour(value) |
getter | get_focus_neighbour |
- NodePath focus_neighbour_top
Default | NodePath("") |
---|---|
setter | set_focus_neighbour(value) |
getter | get_focus_neighbour |
- NodePath focus_next
Default | NodePath("") |
---|---|
setter | set_focus_next(value) |
getter | get_focus_next |
- NodePath focus_previous
Default | NodePath("") |
---|---|
setter | set_focus_previous(value) |
getter | get_focus_previous |
- int grow_horizontal
Default | 1 |
---|---|
setter | set_h_grow_direction(value) |
getter | get_h_grow_direction |
- int grow_vertical
Default | 1 |
---|---|
setter | set_v_grow_direction(value) |
getter | get_v_grow_direction |
- String hint_tooltip
Default | "" |
---|---|
setter | set_tooltip(value) |
getter | _get_tooltip |
- float margin_bottom
Default | 0.0 |
---|---|
setter | set_margin(value) |
getter | get_margin |
- float margin_left
Default | 0.0 |
---|---|
setter | set_margin(value) |
getter | get_margin |
- float margin_right
Default | 0.0 |
---|---|
setter | set_margin(value) |
getter | get_margin |
- float margin_top
Default | 0.0 |
---|---|
setter | set_margin(value) |
getter | get_margin |
- int mouse_default_cursor_shape
Default | 0 |
---|---|
setter | set_default_cursor_shape(value) |
getter | get_default_cursor_shape |
- int mouse_filter
Default | 0 |
---|---|
setter | set_mouse_filter(value) |
getter | get_mouse_filter |
- bool rect_clip_content
Default | false |
---|---|
setter | set_clip_contents(value) |
getter | is_clipping_contents |
- Vector2 rect_global_position
setter | _set_global_position(value) |
---|---|
getter | get_global_position |
- Vector2 rect_min_size
Default | Vector2( 0, 0 ) |
---|---|
setter | set_custom_minimum_size(value) |
getter | get_custom_minimum_size |
- Vector2 rect_pivot_offset
Default | Vector2( 0, 0 ) |
---|---|
setter | set_pivot_offset(value) |
getter | get_pivot_offset |
- Vector2 rect_position
Default | Vector2( 0, 0 ) |
---|---|
setter | _set_position(value) |
getter | get_position |
- float rect_rotation
Default | 0.0 |
---|---|
setter | set_rotation_degrees(value) |
getter | get_rotation_degrees |
- Vector2 rect_scale
Default | Vector2( 1, 1 ) |
---|---|
setter | set_scale(value) |
getter | get_scale |
- Vector2 rect_size
Default | Vector2( 0, 0 ) |
---|---|
setter | _set_size(value) |
getter | get_size |
- int size_flags_horizontal
Default | 1 |
---|---|
setter | set_h_size_flags(value) |
getter | get_h_size_flags |
- float size_flags_stretch_ratio
Default | 1.0 |
---|---|
setter | set_stretch_ratio(value) |
getter | get_stretch_ratio |
- int size_flags_vertical
Default | 1 |
---|---|
setter | set_v_size_flags(value) |
getter | get_v_size_flags |
- Theme theme
setter | set_theme(value) |
---|---|
getter | get_theme |
方法说明
- _clips_input _clips_input() virtual
用户要实现的虚方法。返回是否应为该控件矩形之外的子控件调用_gui_input。输入将被裁剪到此Control的Rect的范围内。与rect_clip_content相似,但不影响可见性。
如果用户没有实现,则默认为false
。
- _get_minimum_size _get_minimum_size() virtual
用户要实现的虚方法。返回此控件的最小大小。rect_min_size的替代方法,用于通过代码控制最小大小。实际的最小尺寸将是这两者的最大值(分别在每个轴上)。
如果用户没有实现,则默认为Vector2.ZERO。
- _gui_input _gui_input(event: InputEvent) virtual
用户要实现的虚方法。使用此方法来处理和接受UI元素上的输入。参见accept_event。
示例:单击一个控件。
func _gui_input(event):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT and event.pressed:
print("我被点到了:D")
在以下情况下,该事件不会触发:
*在控件外部单击(请参阅has_point);
*控件的mouse_filter设置为MOUSE_FILTER_IGNORE;
*控件被其顶部的另一个Control阻塞,该控件没有将mouse_filter设置为MOUSE_FILTER_IGNORE;
*控件的父节点已将mouse_filter设置为MOUSE_FILTER_STOP或已接收该事件;
*它发生在父级矩形的外部,并且父级启用了rect_clip_content或_clips_input。
- _make_custom_tooltip _make_custom_tooltip(for_text: String) virtual
用户要实现的虚方法。返回一个Control节点,该节点用作工具提示,而不是默认提示。使用for_text
参数确定工具提示应包含的文本(可能是hint_tooltip的内容)。
返回的节点必须是Control类型或继承自Control的类型。它可以具有任何类型的子节点。当工具提示消失时,它会被释放,因此请确保您始终提供一个新实例,而不是场景中的节点。当返回null
或非Control节点时,将使用默认的工具提示。
注意:工具提示会缩小到最小尺寸。如果要确保它是完全可见的,则可能需要将其rect_min_size设置为某个非零值。
自定义节点实例的用法示例:
func _make_custom_tooltip(for_text):
var label = Label.new()
label.text = for_text
return label
自定义场景实例的用法示例:
func _make_custom_tooltip(for_text):
var tooltip = preload("SomeTooltipScene.tscn").instance()
tooltip.get_node("Label").text = for_text
return tooltip
- accept_event accept_event()
将输入事件标记为已处理。一旦接收输入事件,它就会停止传播,包括正在侦听Node._unhandled_input或Node._unhandled_key_input的节点。
- add_color_override add_color_override(name: String, color: Color)
覆盖在控件使用的theme资源中给定name
的Color。如果color
为空或无效,则清除覆盖并使用当前Theme中的颜色。
- add_constant_override add_constant_override(name: String, constant: int)
覆盖在控件使用的theme资源中给定name
的整数常量。如果constant
为空或无效,则清除覆盖并使用当前Theme中的常量。
- add_font_override add_font_override(name: String, font: Font)
覆盖在控件使用的theme资源中给定name
的字体。如果font
为空或无效,则清除覆盖并使用当前Theme中的字体。
- add_icon_override add_icon_override(name: String, texture: Texture)
覆盖在控件使用的theme资源中给定name
的图标。如果icon
为空或无效,则清除覆盖并使用当前Theme中的图标。
- add_shader_override add_shader_override(name: String, shader: Shader)
覆盖在控件使用的theme资源中给定name
的Shader。如果shader
为空或无效,则清除覆盖并使用当前Theme中的着色器。
- add_stylebox_override add_stylebox_override(name: String, stylebox: StyleBox)
覆盖在控件使用的theme资源中给定name
的StyleBox。如果stylebox
为空或无效,则清除覆盖并使用当前Theme中的StyleBox。
- can_drop_data can_drop_data(position: Vector2, data: Variant) virtual
IdeaXR调用此方法来测试是否可以将控件的get_drag_data返回的data
放在position
处。position
在此控件的局部空间中。
此方法仅应用于测试数据。处理数据用drop_data。
func can_drop_data(position, data):
# 检查位置是否与此控件相关
# 否则,检查数据
return typeof(data) == TYPE_DICTIONARY and data.has("expected")
- drop_data drop_data(position: Vector2, data: Variant) virtual
IdeaXR调用此方法以将控件的get_drag_data返回的data
传递给您。IdeaXR首先调用can_drop_data以测试是否允许将data
放置在此控件的position
处。
func can_drop_data(position, data):
return typeof(data) == TYPE_DICTIONARY and data.has("color")
func drop_data(position, data):
color = data["color"]
- force_drag force_drag(data: Variant, preview: Control)
通过传递data
和preview
强制拖动并绕过get_drag_data和set_drag_preview。即使鼠标既不在该控件上,也未在该控件上按下,都将开始拖动。
方法can_drop_data和drop_data必须在接收拖拽数据的控件上实现。
- get_anchor get_anchor(margin: int) const
返回由margin
指定的锚,margin
取值为Margin枚举。这是anchor_bottom、anchor_left、anchor_right和anchor_top的getter方法。
- get_begin get_begin() const
返回margin_left和margin_top。另请参见rect_position。
- get_color get_color(name: String, type: String = "") const
返回具有给定name
并与给定type
的Control关联的当前Theme的颜色。
func _ready():
modulate = get_color("font_color", "Button") # 获取为按钮字体定义的颜色
- get_combined_minimum_size get_combined_minimum_size() const
返回rect_min_size和get_minimum_size组合的最小大小。
- get_constant get_constant(name: String, type: String = "") const
返回具有给定name
并与给定type
的Control关联的当前Theme的一个常数。
- get_cursor_shape get_cursor_shape(position: Vector2 = Vector2( 0, 0 )) const
返回控件在鼠标悬停时显示的鼠标光标形状。参见CursorShape。
- get_drag_data get_drag_data(position: Vector2) virtual
IdeaXR调用此方法以获取可以拖放到控件上的数据。如果没有要拖动的数据,则返回null
。想要接收数据的控件应实现can_drop_data和drop_data。position
在此控件的局部空间中。可以使用force_drag强制拖动。
可以使用set_drag_preview设置跟随鼠标的预览。
func get_drag_data(position):
var mydata = make_data()
set_drag_preview(make_preview(mydata))
return mydata
- get_end get_end() const
- get_focus_neighbour get_focus_neighbour(margin: int) const
返回由取值为Margin的margin
指定的焦点邻居。这是focus_neighbour_bottom、focus_neighbour_left、focus_neighbour_right和focus_neighbour_top的getter方法。
- get_focus_owner get_focus_owner() const
返回具有键盘焦点的控件,如果没有则返回null
。
- get_font get_font(name: String, type: String = "") const
返回具有给定name
并与给定type
的Control关联的当前Theme的字体。
- get_global_rect get_global_rect() const
返回控件相对于屏幕左上角的位置和大小。请参阅rect_position和rect_size。
- get_icon get_icon(name: String, type: String = "") const
返回具有给定name
并与给定type
的Control关联的当前Theme的一个图标。
- get_margin get_margin(margin: int) const
返回由取值为Margin的margin
指定的边界距离。这是margin_bottom、margin_left、margin_right和margin_top的getter方法。
- get_minimum_size get_minimum_size() const
返回此控件的最小大小。参见rect_min_size。
- get_parent_area_size get_parent_area_size() const
返回父控件中占用的宽度/高度。
- get_parent_control get_parent_control() const
返回父控件节点。
- get_rect get_rect() const
返回相对于父控件左上角的控件的位置和大小。请参阅rect_position和rect_size。
- get_rotation get_rotation() const
返回旋转角(以弧度为单位)。
- get_stylebox get_stylebox(name: String, type: String = "") const
返回具有给定name
并与给定type
的Control关联的当前Theme的StyleBox。
- get_tooltip get_tooltip(at_position: Vector2 = Vector2( 0, 0 )) const
返回工具提示,当光标停留在该控件上时将显示该工具提示。请参阅hint_tooltip。
- grab_click_focus grab_click_focus()
创建一个尝试单击该控件的InputEventMouseButton。如果接收到事件,则控件获取焦点。
func _process(delta):
grab_click_focus() # 单击另一个控件节点时,将改为单击此节点
- grab_focus grab_focus()
获取焦点,并成为焦点控件(请参阅focus_mode)。
- has_color has_color(name: String, type: String = "") const
如果在当前Theme中存在具有给定name
且与给定type
的Control关联的Color,则返回true
。
- has_color_override has_color_override(name: String) const
如果具有给定name
的Color在此Control节点中有覆盖,则返回true
。
- has_constant has_constant(name: String, type: String = "") const
如果在当前Theme中存在具有给定name
且与给定type
的Control关联的常量,则返回true
。
- has_constant_override has_constant_override(name: String) const
如果具有给定name
的常量在此Control节点中有覆盖,则返回true
。
- has_focus has_focus() const
如果这是当前的焦点控件,则返回true
。参见focus_mode。
- has_font has_font(name: String, type: String = "") const
如果当前Theme中存在具有给定name
且与给定type
的Control关联的字体,则返回true
。
- has_font_override has_font_override(name: String) const
如果具有给定name
的字体在此Control节点中有覆盖,则返回true
。
- has_icon has_icon(name: String, type: String = "") const
如果在当前Theme中存在具有给定name
并与给定type
的Control关联的图标,则返回true
。
- has_icon_override has_icon_override(name: String) const
如果具有给定name
的图标在此Control节点中有覆盖,则返回true
。
- has_point has_point(point: Vector2) virtual
用户要实现的虚方法。返回给定的point
是否在此控件内。
如果用户未实现,则默认行为是检查该点是否在控件的Rect之内。
注意:如果要检查控件中是否有点,可以使用get_rect().has_point(point)
。
- has_shader_override has_shader_override(name: String) const
如果具有给定name
的Shader在此Control节点中有覆盖,则返回true
。
- has_stylebox has_stylebox(name: String, type: String = "") const
如果在当前Theme中存在具有给定name
并与给定type
的Control关联的StyleBox,则返回true
。
- has_stylebox_override has_stylebox_override(name: String) const
如果具有给定name
的StyleBox在此Control节点中有覆盖,则返回true
。
- minimum_size_changed minimum_size_changed()
使此节点和父节点(直至最高级别)中的大小缓存无效。当返回值改变时与get_minimum_size一起使用。设置rect_min_size会自动调用此方法。
- release_focus release_focus()
放弃焦点。其他控件将无法接收键盘输入。
- set_anchor set_anchor(margin: int, anchor: float, keep_margin: bool = false, push_opposite_anchor: bool = true)
将由取值为Margin的margin
指定的锚点设置为anchor
。这是anchor_bottom、anchor_left、anchor_right和anchor_top的setter方法。
如果keep_margin
为true
,则在执行此操作后不会更新边距。
如果push_opposite_anchor
为true
,并且相反的锚点与该锚点重叠,则相反的锚点将覆盖其值。例如,当将左锚点设置为1且右锚点的值为0.5时,右锚点的值也将为1。如果push_opposite_anchor
为false
,则左锚点将取值0.5。
- set_anchor_and_margin set_anchor_and_margin(margin: int, anchor: float, offset: float, push_opposite_anchor: bool = false)
与set_anchor的工作原理相同,但不同于keep_margin
参数和边距的自动更新,它允许您自己设置边距偏移量(请参阅set_margin)。
- set_anchors_and_margins_preset set_anchors_and_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)
设置锚定预设和边距预设。请参见set_anchors_preset和set_margins_preset。
- set_anchors_preset set_anchors_preset(preset: int, keep_margins: bool = false)
将锚设置为取值为Control.LayoutPreset枚举的preset
。这等效于在2D编辑器中使用“布局”菜单。
如果keep_margins
为true
,则控件的位置也会被更新。
- set_begin set_begin(position: Vector2)
同时设置margin_left和margin_top。等效于更改rect_position。
- set_drag_forwarding set_drag_forwarding(target: Control)
将此控件的拖拽处理转发到target
控件。
可以在目标控件中实现转发,类似于方法get_drag_data、can_drop_data和drop_data,但有两个区别:
1.函数名称必须有_fw后缀
2.该函数必须接受一个额外的参数,即正在执行转发的控件
# ThisControl.gd
extends Control
func _ready():
set_drag_forwarding(target_control)
# TargetControl.gd
extends Control
func can_drop_data_fw(position, data, from_control):
return true
func drop_data_fw(position, data, from_control):
my_handle_data(data)
func get_drag_data_fw(position, from_control):
set_drag_preview(my_preview)
return my_data()
- set_drag_preview set_drag_preview(control: Control)
在鼠标指针处显示给定的控件。调用此方法最好在get_drag_data中。给定的控件一定不能在场景树中。
export (Color, RGBA) var color = Color(1, 0, 0, 1)
func get_drag_data(position):
# 使用不在场景树中的控件
var cpb = ColorPickerButton.new()
cpb.color = color
cpb.rect_size = Vector2(50, 50)
set_drag_preview(cpb)
return color
- set_end set_end(position: Vector2)
同时设置margin_right和margin_bottom。
- set_focus_neighbour set_focus_neighbour(margin: int, neighbour: NodePath)
将由margin
指定的焦点邻居设置为neighbor
指定的Control。这是focus_neighbour_bottom、focus_neighbour_left、focus_neighbour_right和focus_neighbour_top的setter方法。
- set_global_position set_global_position(position: Vector2, keep_margins: bool = false)
将rect_global_position设置为position
。
如果keep_margins
为true
,则控件的锚点将被更新,而不是边距。
- set_margin set_margin(margin: int, offset: float)
将由margin
指定的边距设置为offset
。这是margin_bottom、margin_left、margin_right和margin_top的setter方法。
- set_margins_preset set_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)
将边距设置为取值为Control.LayoutPreset的preset
。这等效于在2D编辑器中使用“布局”菜单。
使用取值为Control.LayoutPresetMode的参数resize_mode
,可以更好地确定Control的大小。如果将常量值与更改大小的预设一起使用,则其会被忽略,例如PRESET_LEFT_WIDE
。
使用参数margin
确定Control和边缘之间的间隙。
- set_position set_position(position: Vector2, keep_margins: bool = false)
将rect_position设置为position
。
如果keep_margins
为true
,则控件的锚点将被更新,而不是边距。
- set_rotation set_rotation(radians: float)
设置旋转角(以弧度为单位)。
- set_size set_size(size: Vector2, keep_margins: bool = false)
设置大小(请参阅rect_size)。
如果keep_margins
为true
,则控件的锚点将被更新,而不是边距。
- show_modal show_modal(exclusive: bool = false)
将控件显示为模态。控件必须是一个子窗口。模态控件会捕获输入信号,直到关闭或访问它们外面的区域为止。当模态控件失去焦点或按ESC键时,它们会自动隐藏。模态控件广泛用于弹出对话框和菜单。
如果exclusive
为true
,则其他控件将不会收到输入,并且在此控件外部单击不会关闭它。
- warp_mouse warp_mouse(to_position: Vector2)
将鼠标光标移动到to_position
,该Control的rect_position的相对位置。