Slate, How to Make Fancy Custom SButtons - Epic Wiki
# Slate, How to Make Fancy Custom SButtons
# Contents
# Overview
In this tutorial I show you how to make some fancy custom buttons!
I show you how to use images as button background, or as the entire button!
I also show you how to use custom color and font text!
I also give you the code for how to make custom Tool Tips
Lastly I show how to make text highlight when it is hovered over 😃
Enjoy!
# Video
Here's a video demoing what I am showing you in this tutorial!
# .H
//Buttons TSharedPtr<SButton> RefreshButton; TSharedPtr<STextBlock> RefreshButtonText; TSharedPtr<SButton> ClearTileButton;
# .CPP
# FButtonStyle
Both of my example buttons use a special Slate Core Style.
.ButtonStyle( FCoreStyle::Get(), "NoBorder" )
# Rainbow Background Button
//The button! SAssignNew( RefreshButton, SButton ) .ButtonStyle( FCoreStyle::Get(), "NoBorder" ) .OnClicked( this, &SDDFileTree::RefreshButtonPressed ) .HAlign( HAlign_Center ) .VAlign( VAlign_Center ) .ForegroundColor( FSlateColor::UseForeground() ) [ //Colored Background SNew(SBorder) .Padding(FMargin(3)) //~~~ Rainbow Image for Button!!! ~~~ .BorderImage( FCoreStyle::Get().GetBrush("ColorSpectrum.Spectrum") ) [ //Button Text!! AssignNew so can change color later SAssignNew(RefreshButtonText , STextBlock) .Text( FString("Refresh (F5) ") ) .Font(FSlateFontInfo(FPaths::EngineContentDir() / TEXT("Slate/Fonts/Roboto-Bold.ttf"), 16)) .ColorAndOpacity(FLinearColor(1,0,1,1)) .HighlightColor(FLinearColor(1,1,0,1)) .ShadowColorAndOpacity(FLinearColor::Black) .ShadowOffset(FIntPoint(1, -1)) ] ]
# Trash Can Button
//Resizes the image SNew(SBox) .WidthOverride(64) .HeightOverride(64) [ //~~~ Clear Button / Trash Can ~~~ SAssignNew( ClearTileButton, SButton ) .ButtonStyle( FCoreStyle::Get(), "NoBorder" ) .OnClicked( this, &SDDFileTree::ClearButtonPressed ) .HAlign( HAlign_Center ) .VAlign( VAlign_Center ) .ForegroundColor( FSlateColor::UseForeground() ) [ //Button Content Image TSharedRef<SWidget>( SNew( SImage ) .Image( FCoreStyle::Get().GetBrush("TrashCan") )) ] ]
# Setting The Cursors
//Set Cursors ClearTileButton->SetCursor(EMouseCursor::SlashedCircle); RefreshButton->SetCursor(EMouseCursor::Hand);
# Setting the Custom Tooltips
ClearTileButton->SetToolTip( SNew(SToolTip) [ SNew(STextBlock) .Text(NSLOCTEXT("FileTree", "Clear", "Clear any currently Loaded Preview Tile! -Rama")) .Font(FSlateFontInfo(FPaths::EngineContentDir() / TEXT("Slate/Fonts/Roboto-Bold.ttf"), 12)) .ColorAndOpacity(FLinearColor(1,0,1,1)) .HighlightColor(FLinearColor(1,1,0,1)) .ShadowColorAndOpacity(FLinearColor::Black) .ShadowOffset(FIntPoint(-2, 2)) ] ); RefreshButton->SetToolTip( SNew(SToolTip) [ SNew(STextBlock) .Text( NSLOCTEXT("FileTree", "Refresh", "Refresh Directory and File Listing, updating to hard drive contents! -Rama") ) .Font(FSlateFontInfo(FPaths::EngineContentDir() / TEXT("Slate/Fonts/Roboto-Bold.ttf"), 12)) .ColorAndOpacity(FLinearColor(1,0,1,1)) .HighlightColor(FLinearColor(1,1,0,1)) .ShadowColorAndOpacity(FLinearColor::Black) .ShadowOffset(FIntPoint(-2, 2)) ] );
# Updating the Text When Highlighted
void SDDFileTree::Tick( const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime ) { // Call parent implementation SCompoundWidget::Tick( AllottedGeometry, InCurrentTime, InDeltaTime ); //~~~~~~~~~~~~ // Button Hovering //~~~~~~~~~~~~ if(RefreshButtonText->IsHovered()) { SetRainbowGlowColor(); RefreshButtonText->SetForegroundColor( RainbowGlowingColor ); } else { RefreshButtonText->SetForegroundColor( FLinearColor(1,0,1,1) ); } }
# Summary
Enjoy!
Retrieved from "https://wiki.unrealengine.com/index.php?title=Slate,_How_to_Make_Fancy_Custom_SButtons&oldid=4671"