c sharp samples for custom GUI controls

This commit is contained in:
Kelly thomas
2018-04-21 01:30:59 +08:00
parent 959f4b4324
commit 941df8099f

View File

@@ -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;
}
}