2024-02-25 14:46:47 +00:00
# pragma once
2023-06-20 04:33:09 +00:00
# include "StarApplicationController.hpp"
# include "StarTextPainter.hpp"
# include "StarDrawablePainter.hpp"
# include "StarAssetTextureGroup.hpp"
# include "StarInputEvent.hpp"
# include "StarDrawable.hpp"
# include "StarThread.hpp"
# include "StarGuiTypes.hpp"
# include "StarRenderer.hpp"
# include "StarKeyBindings.hpp"
# include "StarMixer.hpp"
namespace Star {
STAR_EXCEPTION ( GuiContextException , StarException ) ;
class GuiContext {
public :
// Get pointer to the singleton root instance, if it exists. Otherwise,
// returns nullptr.
static GuiContext * singletonPtr ( ) ;
// Gets reference to GuiContext singleton, throws GuiContextException if root
// is not initialized.
static GuiContext & singleton ( ) ;
GuiContext ( MixerPtr mixer , ApplicationControllerPtr appController ) ;
~ GuiContext ( ) ;
GuiContext ( GuiContext const & ) = delete ;
GuiContext & operator = ( GuiContext const & ) = delete ;
void renderInit ( RendererPtr renderer ) ;
MixerPtr const & mixer ( ) const ;
ApplicationControllerPtr const & applicationController ( ) const ;
RendererPtr const & renderer ( ) const ;
AssetTextureGroupPtr const & assetTextureGroup ( ) const ;
TextPainterPtr const & textPainter ( ) const ;
unsigned windowWidth ( ) const ;
unsigned windowHeight ( ) const ;
Vec2U windowSize ( ) const ;
Vec2U windowInterfaceSize ( ) const ;
int interfaceScale ( ) const ;
void setInterfaceScale ( int interfaceScale ) ;
2023-07-17 12:20:39 +00:00
Maybe < Vec2I > mousePosition ( InputEvent const & event , int pixelRatio ) const ;
2023-06-20 04:33:09 +00:00
Maybe < Vec2I > mousePosition ( InputEvent const & event ) const ;
Set < InterfaceAction > actions ( InputEvent const & event ) const ;
// used to cancel chorded inputs on KeyUp
Set < InterfaceAction > actionsForKey ( Key key ) const ;
void refreshKeybindings ( ) ;
// Drawing wrappers to internal renderers. Automatically loads textures before drawing.
void setInterfaceScissorRect ( RectI const & scissor ) ;
void resetInterfaceScissorRect ( ) ;
2023-06-24 15:16:40 +00:00
Vec2U textureSize ( AssetPath const & texName ) ;
2023-06-20 04:33:09 +00:00
void drawQuad ( RectF const & screenCoords , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-24 15:16:40 +00:00
void drawQuad ( AssetPath const & texName , RectF const & screenCoords , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-07-05 11:33:15 +00:00
void drawQuad ( AssetPath const & texName , Vec2F const & screenPos , float pixelRatio , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-24 15:16:40 +00:00
void drawQuad ( AssetPath const & texName , RectF const & texCoords , RectF const & screenCoords , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-20 04:33:09 +00:00
2023-07-05 11:33:15 +00:00
void drawDrawable ( Drawable drawable , Vec2F const & screenPos , float pixelRatio , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-20 04:33:09 +00:00
void drawLine ( Vec2F const & begin , Vec2F const end , Vec4B const & color , float lineWidth = 1 ) ;
void drawPolyLines ( PolyF const & poly , Vec4B const & color , float lineWidth = 1 ) ;
void drawTriangles ( List < tuple < Vec2F , Vec2F , Vec2F > > const & triangles , Vec4B const & color ) ;
void drawInterfaceDrawable ( Drawable drawable , Vec2F const & screenPos , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
void drawInterfaceLine ( Vec2F const & begin , Vec2F const end , Vec4B const & color , float lineWidth = 1 ) ;
void drawInterfacePolyLines ( PolyF poly , Vec4B const & color , float lineWidth = 1 ) ;
void drawInterfaceTriangles ( List < tuple < Vec2F , Vec2F , Vec2F > > const & triangles , Vec4B const & color ) ;
void drawInterfaceQuad ( RectF const & screenCoords , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-24 15:16:40 +00:00
void drawInterfaceQuad ( AssetPath const & texName , Vec2F const & screenPos , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
void drawInterfaceQuad ( AssetPath const & texName , Vec2F const & screenPos , float scale , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
void drawInterfaceQuad ( AssetPath const & texName , RectF const & texCoords , RectF const & screenCoords , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-20 04:33:09 +00:00
void drawImageStretchSet ( ImageStretchSet const & imageSet , RectF const & screenPos , GuiDirection direction = GuiDirection : : Horizontal , Vec4B const & color = Vec4B : : filled ( 255 ) ) ;
2023-06-23 08:13:26 +00:00
// Returns true if the hardware cursor was successfully set to the drawable. Generally fails if the Drawable isn't an image part or the image is too big.
bool trySetCursor ( Drawable const & drawable , Vec2I const & offset , int pixelRatio ) ;
2023-06-20 04:33:09 +00:00
RectF renderText ( String const & s , TextPositioning const & positioning ) ;
RectF renderInterfaceText ( String const & s , TextPositioning const & positioning ) ;
RectF determineTextSize ( String const & s , TextPositioning const & positioning ) ;
RectF determineInterfaceTextSize ( String const & s , TextPositioning const & positioning ) ;
void setFontSize ( unsigned size ) ;
void setFontSize ( unsigned size , int pixelRatio ) ;
void setFontColor ( Vec4B const & color ) ;
void setFontMode ( FontMode mode ) ;
void setFontProcessingDirectives ( String const & directives ) ;
2023-06-21 12:29:40 +00:00
void setFont ( String const & font ) ;
void setDefaultFont ( ) ;
2023-06-20 04:33:09 +00:00
void setLineSpacing ( float lineSpacing ) ;
void setDefaultLineSpacing ( ) ;
int stringWidth ( String const & s ) ;
int stringInterfaceWidth ( String const & s ) ;
StringList wrapText ( String const & s , Maybe < unsigned > wrapWidth ) ;
StringList wrapInterfaceText ( String const & s , Maybe < unsigned > wrapWidth ) ;
void playAudio ( AudioInstancePtr audioInstance ) ;
2023-08-18 13:14:53 +00:00
void playAudio ( String const & audioAsset , int loops = 0 , float volume = 1.0f , float pitch = 1.0f ) ;
2023-06-20 04:33:09 +00:00
bool shiftHeld ( ) const ;
void setShiftHeld ( bool held ) ;
String getClipboard ( ) const ;
void setClipboard ( String text ) ;
void cleanup ( ) ;
private :
static GuiContext * s_singleton ;
MixerPtr m_mixer ;
ApplicationControllerPtr m_applicationController ;
RendererPtr m_renderer ;
AssetTextureGroupPtr m_textureCollection ;
TextPainterPtr m_textPainter ;
DrawablePainterPtr m_drawablePainter ;
KeyBindings m_keyBindings ;
int m_interfaceScale ;
bool m_shiftHeld ;
} ;
}