mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-03 05:48:42 +03:00
c sharp samples for custom GUI controls
This commit is contained in:
@@ -42,7 +42,8 @@ indicate that this is the currently focused control. To check for this
|
||||
status, the :ref:`Control.has_focus() <class_Control_has_focus>` method
|
||||
exists. Example
|
||||
|
||||
::
|
||||
.. tabs::
|
||||
.. code-tab:: gdscript GDScript
|
||||
|
||||
func _draw():
|
||||
if has_focus():
|
||||
@@ -50,6 +51,20 @@ exists. Example
|
||||
else:
|
||||
draw_normal()
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
public override void _Draw()
|
||||
{
|
||||
if(HasFocus())
|
||||
{
|
||||
DrawSelected()
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawNormal();
|
||||
}
|
||||
}
|
||||
|
||||
Sizing
|
||||
------
|
||||
|
||||
@@ -65,18 +80,34 @@ To provide this callback, just override
|
||||
:ref:`Control.get_minimum_size() <class_Control_get_minimum_size>`,
|
||||
for example:
|
||||
|
||||
::
|
||||
.. tabs::
|
||||
.. code-tab:: gdscript GDScript
|
||||
|
||||
func get_minimum_size():
|
||||
return Vector2(30, 30)
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
public override Vector2 _GetMinimumSize()
|
||||
{
|
||||
return new Vector2(20, 20);
|
||||
}
|
||||
|
||||
Or alternatively, set it via function:
|
||||
|
||||
::
|
||||
.. tabs::
|
||||
.. code-tab:: gdscript GDScript
|
||||
|
||||
func _ready():
|
||||
set_custom_minimum_size(Vector2(30, 30))
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
SetCustomMinimumSize(new Vector2(20, 20));
|
||||
}
|
||||
|
||||
Input
|
||||
-----
|
||||
|
||||
@@ -100,7 +131,8 @@ This function is
|
||||
:ref:`Control._gui_input() <class_Control__gui_input>`.
|
||||
Simply override it in your control. No processing needs to be set.
|
||||
|
||||
::
|
||||
.. tabs::
|
||||
.. code-tab:: gdscript GDScript
|
||||
|
||||
extends Control
|
||||
|
||||
@@ -108,6 +140,30 @@ Simply override it in your control. No processing needs to be set.
|
||||
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and event.pressed:
|
||||
print("Left mouse button was pressed!")
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
public override void _GuiInput(InputEvent @event)
|
||||
{
|
||||
var mouseButtonEvent = @event as InputEventMouseButton;
|
||||
if (mouseButtonEvent != null)
|
||||
{
|
||||
if (mouseButtonEvent.ButtonIndex == (int)ButtonList.Left && mouseButtonEvent.Pressed)
|
||||
{
|
||||
GD.Print("Left mouse button was pressed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// or alternatively when using C# 7 or greater we can use pattern matching
|
||||
public override void _GuiInput(InputEvent @event)
|
||||
{
|
||||
if (@event is InputEventMouseButton mbe && mbe.ButtonIndex == (int)ButtonList.Left && mbe.Pressed)
|
||||
{
|
||||
GD.Print("Left mouse button was pressed!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
For more information about events themselves, check the :ref:`doc_inputevent`
|
||||
tutorial.
|
||||
|
||||
@@ -117,7 +173,8 @@ Notifications
|
||||
Controls also have many useful notifications for which no callback
|
||||
exists, but can be checked with the _notification callback:
|
||||
|
||||
::
|
||||
.. tabs::
|
||||
.. code-tab:: gdscript GDScript
|
||||
|
||||
func _notification(what):
|
||||
match what:
|
||||
@@ -141,3 +198,45 @@ exists, but can be checked with the _notification callback:
|
||||
NOTIFICATION_MODAL_CLOSED):
|
||||
pass # for modal popups, notification
|
||||
# that the popup was closed
|
||||
|
||||
.. code-tab:: csharp
|
||||
|
||||
public override void _Notification(int what)
|
||||
{
|
||||
switch(what)
|
||||
{
|
||||
case NotificationMouseEnter:
|
||||
// mouse entered the area of this control
|
||||
break;
|
||||
|
||||
case NotificationMouseExit:
|
||||
// mouse exited the area of this control
|
||||
break;
|
||||
|
||||
case NotificationFocusEnter:
|
||||
// control gained focus
|
||||
break;
|
||||
|
||||
case NotificationFocusExit:
|
||||
// control lost focus
|
||||
break;
|
||||
|
||||
case NotificationThemeChanged:
|
||||
// theme used to draw the control changed
|
||||
// update and redraw is recommended if using a theme
|
||||
break;
|
||||
|
||||
case NotificationVisibilityChanged:
|
||||
// control became visible/invisible
|
||||
// check new status with is_visible()
|
||||
break;
|
||||
|
||||
case NotificationResized:
|
||||
// control changed size, check new size with get_size()
|
||||
break;
|
||||
|
||||
case NotificationModalClose:
|
||||
// for modal popups, notification that the popup was closed
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user