diff --git a/Source/Engine/UI/GUI/Common/IconButton.cs b/Source/Engine/UI/GUI/Common/IconButton.cs
new file mode 100644
index 000000000..e2652cd9f
--- /dev/null
+++ b/Source/Engine/UI/GUI/Common/IconButton.cs
@@ -0,0 +1,74 @@
+// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
+
+using System;
+
+namespace FlaxEngine.GUI
+{
+ ///
+ /// Button with an icon.
+ ///
+ public class IconButton : Button
+ {
+ ///
+ /// The sprite rendered on the button.
+ ///
+ public SpriteHandle ButtonSprite { get; set; }
+
+ ///
+ /// Whether or not to hide the border of the button.
+ ///
+ public bool HideBorder = true;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The sprite used by the button.
+ public IconButton(SpriteHandle buttonSprite)
+ : this(0, 0, buttonSprite)
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Position X coordinate
+ /// Position Y coordinate
+ /// The sprite used by the button.
+ /// Width
+ /// Height
+ /// Whether or not to hide the border.
+ public IconButton(float x, float y, SpriteHandle buttonSprite, float width = 120, float height = DefaultHeight, bool hideBorder = true)
+ : base(x, y, width, height)
+ {
+ ButtonSprite = buttonSprite;
+ BackgroundBrush = new SpriteBrush(ButtonSprite);
+ HideBorder = hideBorder;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Position
+ /// Size
+ /// The sprite used by the button.
+ public IconButton(Float2 location, Float2 size, SpriteHandle buttonSprite)
+ : this(location.X, location.Y, buttonSprite, size.X, size.Y)
+ {
+ }
+
+ ///
+ /// Sets the colors of the button, taking into account the field.>
+ ///
+ /// The color to use.
+ public override void SetColors(Color color)
+ {
+ BackgroundColor = color;
+ BackgroundColorSelected = color.RGBMultiplied(0.8f);
+ BackgroundColorHighlighted = color.RGBMultiplied(1.2f);
+
+ BorderColor = HideBorder ? Color.Transparent : color.RGBMultiplied(0.5f);
+ BorderColorSelected = BorderColor;
+ BorderColorHighlighted = BorderColor;
+ }
+ }
+}