Stardew Engine
Loading...
Searching...
No Matches
Widget.c File Reference
#include "Widget.h"
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include "Scripting.h"
#include "AssertLib.h"
#include "DataNode.h"
#include "DrawContext.h"
#include "Log.h"
Include dependency graph for Widget.c:

Macros

#define WIDGET_POOL_BOUNDS_CHECK(handle, rVal)   OBJ_POOL_BOUNDS_CHECK(handle, rVal, gWidgetPool)
 
#define WIDGET_POOL_BOUNDS_CHECK_NO_RETURN(handle)   OBJ_POOL_BOUNDS_CHECK_NO_RETURN(handle, gWidgetPool)
 

Typedefs

typedef float(* GetWorHFn) (struct UIWidget *pW)
 

Functions

 OBJECT_POOL (struct UIWidget)
 
HWidget UI_NewBlankWidget ()
 
size_t UI_CountWidgetChildrenPtr (struct UIWidget *pWidget)
 
size_t UI_CountWidgetChildren (HWidget hWidget)
 
struct UIWidgetUI_GetWidget (HWidget hWidget)
 
struct UIWidgetUI_FirstChild (HWidget hWidget)
 
void UI_AddChild (HWidget hParent, HWidget hChild)
 
void UI_Init ()
 
HWidget UI_GetScratchWiget ()
 
void UI_DestroyWidget (HWidget widget)
 
void UI_ParseWidgetDimsAttribute (const char *attributeContent, struct WidgetDim *outWidgetDims)
 
void UI_ParseWidgetPaddingAttributes (struct DataNode *pInNode, struct WidgetPadding *outWidgetPadding)
 
void UI_ParseHorizontalAlignementAttribute (const char *contents, enum WidgetHorizontalAlignment *outAlignment)
 
void UI_ParseVerticalAlignementAttribute (const char *contents, enum WidgetVerticalAlignment *outAlignment)
 
struct WidgetDimGetWidgetWidthDim (struct UIWidget *pWidget)
 
struct WidgetDimGetWidgetHeightDim (struct UIWidget *pWidget)
 
float GetWidgetW (struct UIWidget *pW)
 
float GetWidgetH (struct UIWidget *pW)
 
struct UIWidgetFindResolveableDimensionAncestor (struct UIWidget *pWidgetParent, WidgetDimGetterFn getter)
 
float UI_ResolveWidthDimPxls (struct UIWidget *pWidget, const struct WidgetDim *dim)
 
float UI_ResolveHeightDimPxls (struct UIWidget *pWidget, const struct WidgetDim *dim)
 
bool UI_ParseWidgetDockPoint (struct DataNode *pInNode, struct UIWidget *outWidget)
 
void UI_DefaultOnChildrenChanged (struct UIWidget *outWidget)
 
void UI_WidgetCommonInit (struct DataNode *pInNode, struct UIWidget *outWidget)
 Init common attributes that all widgets can have.
 
void UI_DebugPrintCommonWidgetInfo (const struct UIWidget *inWidget, PrintfFn pPrintfFn)
 print a text representation of the widget tree. Falls appart if a widget fails to implement its debug print hook correctly. Shit. DON'T USE
 
void * UI_Helper_OnOutputVerts (struct UIWidget *pWidget, VECTOR(WidgetVertex) pOutVerts)
 
void UI_Helper_OnLayoutChildren (struct UIWidget *pWidget, struct UIWidget *pParent)
 
void UI_SendWidgetMouseEvent (struct UIWidget *pWidget, enum WidgetCallbackTypes type, struct WidgetMouseInfo *pMouseInfo)
 send a mouse event to the widget that will be handled either by either or both a lua function and a c function. If both the C function is called first
 
void UI_GetWidgetSize (HWidget hWidget, float *pOutW, float *pOutH)
 
void UI_GetWidgetPadding (HWidget hWidget, float *pOutPaddingTop, float *pOutPaddingBottom, float *pOutPaddingLeft, float *pOutPaddingRight)
 
void UI_GetWidgetTopLeft (HWidget hWidget, float *pOutLeft, float *pOutTop)
 get top left BEFORE padding is applied (the raw top left)
 
void UI_GetHitBox (GeomRect outRect, HWidget hWidget)
 Get the AABB of the widget, excluding padding.
 
bool UI_IsAttributeStringABindingExpression (const char *attributeValue)
 
char * UI_MakeBindingGetterFunctionName (const char *inBindingName)
 USER MUST FREE RETURNED PTR append Get_ to the start of the string.
 
char * UI_MakeBindingSetterFunctionName (const char *inBindingName)
 
struct WidgetPropertyBindingUI_FindBinding (struct UIWidget *pWidget, const char *bindingName)
 
void UI_AddStringPropertyBinding (struct UIWidget *pWidget, char *inBoundPropertyName, char *inBindingExpression, char **pOutData, int viewmodelTableIndex)
 Add a bound string property entry to the widget and initialise a value by calling the binding getter function.
 
void UI_AddIntPropertyBinding (struct UIWidget *pWidget, char *inBoundPropertyName, char *inBindingExpression, int *pOutData, int viewmodelTableIndex)
 
void UI_AddFloatPropertyBinding (struct UIWidget *pWidget, char *inBoundPropertyName, char *inBindingExpression, float *pOutData, int viewmodelTableIndex)
 

Macro Definition Documentation

◆ WIDGET_POOL_BOUNDS_CHECK

#define WIDGET_POOL_BOUNDS_CHECK (   handle,
  rVal 
)    OBJ_POOL_BOUNDS_CHECK(handle, rVal, gWidgetPool)

◆ WIDGET_POOL_BOUNDS_CHECK_NO_RETURN

#define WIDGET_POOL_BOUNDS_CHECK_NO_RETURN (   handle)    OBJ_POOL_BOUNDS_CHECK_NO_RETURN(handle, gWidgetPool)

Typedef Documentation

◆ GetWorHFn

typedef float(* GetWorHFn) (struct UIWidget *pW)

Function Documentation

◆ FindResolveableDimensionAncestor()

struct UIWidget * FindResolveableDimensionAncestor ( struct UIWidget pWidgetParent,
WidgetDimGetterFn  getter 
)

◆ GetWidgetH()

float GetWidgetH ( struct UIWidget pW)

◆ GetWidgetHeightDim()

struct WidgetDim * GetWidgetHeightDim ( struct UIWidget pWidget)

◆ GetWidgetW()

float GetWidgetW ( struct UIWidget pW)

◆ GetWidgetWidthDim()

struct WidgetDim * GetWidgetWidthDim ( struct UIWidget pWidget)

◆ OBJECT_POOL()

OBJECT_POOL ( struct UIWidget  )

◆ UI_AddChild()

void UI_AddChild ( HWidget  hParent,
HWidget  hChild 
)

◆ UI_AddFloatPropertyBinding()

void UI_AddFloatPropertyBinding ( struct UIWidget pWidget,
char *  inBoundPropertyName,
char *  inBindingExpression,
float *  pOutData,
int  viewmodelTableIndex 
)

◆ UI_AddIntPropertyBinding()

void UI_AddIntPropertyBinding ( struct UIWidget pWidget,
char *  inBoundPropertyName,
char *  inBindingExpression,
int *  pOutData,
int  viewmodelTableIndex 
)

◆ UI_AddStringPropertyBinding()

void UI_AddStringPropertyBinding ( struct UIWidget pWidget,
char *  inBoundPropertyName,
char *  inBindingExpression,
char **  pOutData,
int  viewmodelTableIndex 
)

Add a bound string property entry to the widget and initialise a value by calling the binding getter function.

Parameters
pWidgettheWidget to add the property binding. When the value changes the property of the widget will change when OnPropertyChanged is called. 2 way bindings will also be introduced for sliders, text entry fields, ect
inBoundPropertyNamebound property name - as it appears in the viewmodel lua table
inBindingExpressionthe incoming binding expression, i.e. {spritename}
pOutDatathe value returned from calling the lua string getter - allocates a string setting the pointer. user must deallocate
viewmodelTableIndexthe index in the lua registry that contains the lua table containing the function to call

◆ UI_CountWidgetChildren()

size_t UI_CountWidgetChildren ( HWidget  hWidget)

◆ UI_CountWidgetChildrenPtr()

size_t UI_CountWidgetChildrenPtr ( struct UIWidget pWidget)

◆ UI_DebugPrintCommonWidgetInfo()

void UI_DebugPrintCommonWidgetInfo ( const struct UIWidget inWidget,
PrintfFn  pPrintfFn 
)

print a text representation of the widget tree. Falls appart if a widget fails to implement its debug print hook correctly. Shit. DON'T USE

Parameters
inWidget
pPrintfFn

◆ UI_DefaultOnChildrenChanged()

void UI_DefaultOnChildrenChanged ( struct UIWidget outWidget)

◆ UI_DestroyWidget()

void UI_DestroyWidget ( HWidget  widget)

◆ UI_FindBinding()

struct WidgetPropertyBinding * UI_FindBinding ( struct UIWidget pWidget,
const char *  bindingName 
)

◆ UI_FirstChild()

struct UIWidget * UI_FirstChild ( HWidget  hWidget)

◆ UI_GetHitBox()

void UI_GetHitBox ( GeomRect  outRect,
HWidget  hWidget 
)

Get the AABB of the widget, excluding padding.

Parameters
outRect
hWidget

◆ UI_GetScratchWiget()

HWidget UI_GetScratchWiget ( )

◆ UI_GetWidget()

struct UIWidget * UI_GetWidget ( HWidget  hWidget)

◆ UI_GetWidgetPadding()

void UI_GetWidgetPadding ( HWidget  hWidget,
float *  pOutPaddingTop,
float *  pOutPaddingBottom,
float *  pOutPaddingLeft,
float *  pOutPaddingRight 
)

◆ UI_GetWidgetSize()

void UI_GetWidgetSize ( HWidget  hWidget,
float *  pOutW,
float *  pOutH 
)

◆ UI_GetWidgetTopLeft()

void UI_GetWidgetTopLeft ( HWidget  hWidget,
float *  pOutLeft,
float *  pOutTop 
)

get top left BEFORE padding is applied (the raw top left)

Parameters
hWidget
pOutLeft
pOutTop

◆ UI_Helper_OnLayoutChildren()

void UI_Helper_OnLayoutChildren ( struct UIWidget pWidget,
struct UIWidget pParent 
)

◆ UI_Helper_OnOutputVerts()

void * UI_Helper_OnOutputVerts ( struct UIWidget pWidget,
VECTOR(WidgetVertex pOutVerts 
)

◆ UI_Init()

void UI_Init ( )

◆ UI_IsAttributeStringABindingExpression()

bool UI_IsAttributeStringABindingExpression ( const char *  attributeValue)
Parameters
attributeValue
Returns
is the value of an xml attribute property an absolute value (return false) or is it deferrred to a getter on the lua viewmodel (return true). Special syntax for this is to surround the name of a view model property with "{" and "}"

◆ UI_MakeBindingGetterFunctionName()

char * UI_MakeBindingGetterFunctionName ( const char *  inBindingName)

USER MUST FREE RETURNED PTR append Get_ to the start of the string.

Parameters
inBindingName
Returns

◆ UI_MakeBindingSetterFunctionName()

char * UI_MakeBindingSetterFunctionName ( const char *  inBindingName)

◆ UI_NewBlankWidget()

HWidget UI_NewBlankWidget ( )

◆ UI_ParseHorizontalAlignementAttribute()

void UI_ParseHorizontalAlignementAttribute ( const char *  contents,
enum WidgetHorizontalAlignment outAlignment 
)

◆ UI_ParseVerticalAlignementAttribute()

void UI_ParseVerticalAlignementAttribute ( const char *  contents,
enum WidgetVerticalAlignment outAlignment 
)

◆ UI_ParseWidgetDimsAttribute()

void UI_ParseWidgetDimsAttribute ( const char *  attributeContent,
struct WidgetDim outWidgetDims 
)

◆ UI_ParseWidgetDockPoint()

bool UI_ParseWidgetDockPoint ( struct DataNode pInNode,
struct UIWidget outWidget 
)

◆ UI_ParseWidgetPaddingAttributes()

void UI_ParseWidgetPaddingAttributes ( struct DataNode pInNode,
struct WidgetPadding outWidgetPadding 
)

◆ UI_ResolveHeightDimPxls()

float UI_ResolveHeightDimPxls ( struct UIWidget pWidget,
const struct WidgetDim dim 
)

◆ UI_ResolveWidthDimPxls()

float UI_ResolveWidthDimPxls ( struct UIWidget pWidget,
const struct WidgetDim dim 
)

◆ UI_SendWidgetMouseEvent()

void UI_SendWidgetMouseEvent ( struct UIWidget pWidget,
enum WidgetCallbackTypes  type,
struct WidgetMouseInfo pMouseInfo 
)

send a mouse event to the widget that will be handled either by either or both a lua function and a c function. If both the C function is called first

Parameters
pWidget
<br>
pMouseInfodata about the event

◆ UI_WidgetCommonInit()

void UI_WidgetCommonInit ( struct DataNode pInNode,
struct UIWidget outWidget 
)

Init common attributes that all widgets can have.

  • "the base class constructor"
    Parameters
    pInNode
    outWidget