Skip to content

Commit ef7eb6c

Browse files
committed
Improvements to SplitContainer including a drag bar background StyleBox.
1 parent ed4a207 commit ef7eb6c

4 files changed

Lines changed: 247 additions & 88 deletions

File tree

doc/classes/SplitContainer.xml

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,39 @@
1616
Clamps the [member split_offset] value to not go outside the currently possible minimal and maximum values.
1717
</description>
1818
</method>
19+
<method name="get_drag_area_control">
20+
<return type="Control" />
21+
<description>
22+
Returns the drag area [Control]. For example, you can move a pre-configured button into the drag area [Control] so that it rides along with the split bar. Try setting the [Button] anchors to [code]center[/code] prior to the [code]reparent()[/code] call.
23+
[codeblock]
24+
$BarnacleButton.reparent($SplitContainer.get_drag_area_control())
25+
[/codeblock]
26+
[b]Note:[/b] The drag area [Control] is drawn over the [SplitContainer]'s children, so [CanvasItem] draw objects called from the [Control] and children added to the [Control] will also appear over the [SplitContainer]'s children. Try setting [member Control.mouse_filter] of custom children to [constant Control.MOUSE_FILTER_IGNORE] to prevent blocking the mouse from dragging if desired.
27+
[b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash.
28+
</description>
29+
</method>
1930
</methods>
2031
<members>
2132
<member name="collapsed" type="bool" setter="set_collapsed" getter="is_collapsed" default="false">
2233
If [code]true[/code], the area of the first [Control] will be collapsed and the dragger will be disabled.
2334
</member>
35+
<member name="drag_area_highlight_in_editor" type="bool" setter="set_drag_area_highlight_in_editor" getter="is_drag_area_highlight_in_editor_enabled" default="false">
36+
Highlights the drag area [Rect2] so you can see where it is during development. The drag area is gold if [member dragging_enabled] is [code]true[/code], and red if [code]false[/code].
37+
</member>
38+
<member name="drag_area_margin_begin" type="int" setter="set_drag_area_margin_begin" getter="get_drag_area_margin_begin" default="0">
39+
Reduces the size of the drag area and split bar [theme_item split_bar_background] at the beginning of the container.
40+
</member>
41+
<member name="drag_area_margin_end" type="int" setter="set_drag_area_margin_end" getter="get_drag_area_margin_end" default="0">
42+
Reduces the size of the drag area and split bar [theme_item split_bar_background] at the end of the container.
43+
</member>
44+
<member name="drag_area_offset" type="int" setter="set_drag_area_offset" getter="get_drag_area_offset" default="0">
45+
Shifts the drag area in the axis of the container to prevent the drag area from overlapping the [ScrollBar] or other selectable [Control] of a child node.
46+
</member>
2447
<member name="dragger_visibility" type="int" setter="set_dragger_visibility" getter="get_dragger_visibility" enum="SplitContainer.DraggerVisibility" default="0">
25-
Determines the dragger's visibility. See [enum DraggerVisibility] for details.
48+
Determines the dragger's visibility. See [enum DraggerVisibility] for details. This property does not determine whether dragging is enabled or not. Use [member dragging_enabled] for that.
49+
</member>
50+
<member name="dragging_enabled" type="bool" setter="set_dragging_enabled" getter="is_dragging_enabled" default="true">
51+
Enables or disables split dragging.
2652
</member>
2753
<member name="split_offset" type="int" setter="set_split_offset" getter="get_split_offset" default="0">
2854
The initial offset of the splitting between the two [Control]s, with [code]0[/code] being at the end of the first [Control].
@@ -33,6 +59,16 @@
3359
</member>
3460
</members>
3561
<signals>
62+
<signal name="drag_ended">
63+
<description>
64+
Emitted when the user ends dragging.
65+
</description>
66+
</signal>
67+
<signal name="drag_started">
68+
<description>
69+
Emitted when the user starts dragging.
70+
</description>
71+
</signal>
3672
<signal name="dragged">
3773
<param index="0" name="offset" type="int" />
3874
<description>
@@ -42,24 +78,28 @@
4278
</signals>
4379
<constants>
4480
<constant name="DRAGGER_VISIBLE" value="0" enum="DraggerVisibility">
45-
The split dragger is visible when the cursor hovers it.
81+
The split dragger icon is always visible when [theme_item autohide] is [code]false[/code], otherwise visible only when the cursor hovers it.
82+
The size of the grabber icon determines the minimum [theme_item separation].
83+
The dragger icon is automatically hidden if the length of the grabber icon is longer than the split bar.
4684
</constant>
4785
<constant name="DRAGGER_HIDDEN" value="1" enum="DraggerVisibility">
48-
The split dragger is never visible.
86+
The split dragger icon is never visible regardless of the value of [theme_item autohide].
87+
The size of the grabber icon determines the minimum [theme_item separation].
4988
</constant>
5089
<constant name="DRAGGER_HIDDEN_COLLAPSED" value="2" enum="DraggerVisibility">
51-
The split dragger is never visible and its space collapsed.
90+
The split dragger icon is not visible, and the split bar is collapsed to zero thickness.
5291
</constant>
5392
</constants>
5493
<theme_items>
5594
<theme_item name="autohide" data_type="constant" type="int" default="1">
56-
Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If 0 ([code]false[/code]), it's always visible.
95+
Boolean value. If [code]1[/code] ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If [code]0[/code] ([code]false[/code]), it's always visible. The [member dragger_visibility] must be [constant DRAGGER_VISIBLE].
5796
</theme_item>
5897
<theme_item name="minimum_grab_thickness" data_type="constant" type="int" default="6">
59-
The minimum thickness of the area users can click on to grab the splitting line. If [theme_item separation] or [theme_item h_grabber] / [theme_item v_grabber]'s thickness are too small, this ensure that the splitting line can still be dragged.
98+
The minimum thickness of the area users can click on to grab the split bar. This ensures that the split bar can still be dragged if [theme_item separation] or [theme_item h_grabber] / [theme_item v_grabber]'s size is too narrow to easily select.
6099
</theme_item>
61100
<theme_item name="separation" data_type="constant" type="int" default="12">
62-
The space between sides of the container.
101+
The split bar thickness, i.e., the gap between the two children of the container. This is overridden by the size of the grabber icon if [member dragger_visibility] is set to [constant DRAGGER_VISIBLE], or [constant DRAGGER_HIDDEN], and [theme_item separation] is smaller than the size of the grabber icon in the same axis.
102+
[b]Note:[/b] To obtain [theme_item separation] values less than the size of the grabber icon, for example a [code]1 px[/code] hairline, set [theme_item h_grabber] or [theme_item v_grabber] to a new [ImageTexture], which effectively sets the grabber icon size to [code]0 px[/code].
63103
</theme_item>
64104
<theme_item name="grabber" data_type="icon" type="Texture2D">
65105
The icon used for the grabber drawn in the middle area.
@@ -70,5 +110,8 @@
70110
<theme_item name="v_grabber" data_type="icon" type="Texture2D">
71111
The icon used for the grabber drawn in the middle area when [member vertical] is [code]true[/code].
72112
</theme_item>
113+
<theme_item name="split_bar_background" data_type="style" type="StyleBox">
114+
Determines the background of the split bar if its thickness is greater than zero.
115+
</theme_item>
73116
</theme_items>
74117
</class>

0 commit comments

Comments
 (0)