File Widget.c

FileList > engine > src > gameframework > layers > UI > widgets > Widget.c

Go to the source code of this file

  • #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"

Public Types

Type Name
typedef float(* GetWorHFn

Public Functions

Type Name
struct UIWidget * FindResolveableDimensionAncestor (struct UIWidget * pWidgetParent, WidgetDimGetterFn getter)
float GetWidgetH (struct UIWidget * pW)
struct WidgetDim * GetWidgetHeightDim (struct UIWidget * pWidget)
float GetWidgetW (struct UIWidget * pW)
struct WidgetDim * GetWidgetWidthDim (struct UIWidget * pWidget)
OBJECT_POOL (struct UIWidget)
void UI_AddChild (HWidget hParent, HWidget hChild)
void UI_AddFloatPropertyBinding (struct UIWidget * pWidget, char * inBoundPropertyName, char * inBindingExpression, float * pOutData, int viewmodelTableIndex)
void UI_AddIntPropertyBinding (struct UIWidget * pWidget, char * inBoundPropertyName, char * inBindingExpression, int * pOutData, int viewmodelTableIndex)
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.
size_t UI_CountWidgetChildren (HWidget hWidget)
size_t UI_CountWidgetChildrenPtr (struct UIWidget * pWidget)
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_DefaultOnChildrenChanged (struct UIWidget * outWidget)
void UI_DestroyWidget (HWidget widget)
struct WidgetPropertyBinding * UI_FindBinding (struct UIWidget * pWidget, const char * bindingName)
struct UIWidget * UI_FirstChild (HWidget hWidget)
void UI_GetHitBox (GeomRect outRect, HWidget hWidget)
Get the AABB of the widget, excluding padding.
HWidget UI_GetScratchWiget ()
struct UIWidget * UI_GetWidget (HWidget hWidget)
void UI_GetWidgetPadding (HWidget hWidget, float * pOutPaddingTop, float * pOutPaddingBottom, float * pOutPaddingLeft, float * pOutPaddingRight)
void UI_GetWidgetSize (HWidget hWidget, float * pOutW, float * pOutH)
void UI_GetWidgetTopLeft (HWidget hWidget, float * pOutLeft, float * pOutTop)
get top left BEFORE padding is applied (the raw top left)
void UI_Helper_OnLayoutChildren (struct UIWidget * pWidget, struct UIWidget * pParent)
void * UI_Helper_OnOutputVerts (struct UIWidget * pWidget, VECTOR(WidgetVertex) pOutVerts)
void UI_Init ()
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)
HWidget UI_NewBlankWidget ()
void UI_ParseHorizontalAlignementAttribute (const char * contents, enum WidgetHorizontalAlignment * outAlignment)
void UI_ParseVerticalAlignementAttribute (const char * contents, enum WidgetVerticalAlignment * outAlignment)
void UI_ParseWidgetDimsAttribute (const char * attributeContent, struct WidgetDim * outWidgetDims)
bool UI_ParseWidgetDockPoint (struct DataNode * pInNode, struct UIWidget * outWidget)
void UI_ParseWidgetPaddingAttributes (struct DataNode * pInNode, struct WidgetPadding * outWidgetPadding)
float UI_ResolveHeightDimPxls (struct UIWidget * pWidget, const struct WidgetDim * dim)
float UI_ResolveWidthDimPxls (struct UIWidget * pWidget, const struct WidgetDim * dim)
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_WidgetCommonInit (struct DataNode * pInNode, struct UIWidget * outWidget)
Init common attributes that all widgets can have.

Public Static Functions

Type Name
const char * GetDockingPointName (WidgetDockPoint dockingPoint)
void GetTotalAmountAmongChildren (struct UIWidget * pWidgetParent, float * outV, GetWorHFn getWorH, WidgetDimGetterFn dimgetter)
void GetTotalFractionAmongChildren (struct UIWidget * pWidgetParent, float * outV, WidgetDimGetterFn getter)
helper that finds all child widgets with width type WD_ParentFraction and returns the total of their "*" values
void ParseLuaCallbacks (struct DataNode * pInNode, struct UIWidget * outWidget)
void ParseWidgetAlignments (struct DataNode * pInNode, struct UIWidget * outWidget)
void ParseWidgetDims (struct DataNode * pInNode, struct UIWidget * outWidget)
void ParseWidgetOffsets (struct DataNode * pInNode, struct UIWidget * outWidget)
char * PopulateBinding (struct WidgetPropertyBinding * pBinding, char * inBindingExpression, char * inBoundPropertyName)

Macros

Type Name
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)

Public Types Documentation

typedef GetWorHFn

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

Public Functions Documentation

function FindResolveableDimensionAncestor

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

function GetWidgetH

float GetWidgetH (
    struct UIWidget * pW
) 

function GetWidgetHeightDim

struct WidgetDim * GetWidgetHeightDim (
    struct UIWidget * pWidget
) 

function GetWidgetW

float GetWidgetW (
    struct UIWidget * pW
) 

function GetWidgetWidthDim

struct WidgetDim * GetWidgetWidthDim (
    struct UIWidget * pWidget
) 

function OBJECT_POOL

OBJECT_POOL (
    struct UIWidget
) 

function UI_AddChild

void UI_AddChild (
    HWidget hParent,
    HWidget hChild
) 

function UI_AddFloatPropertyBinding

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

function UI_AddIntPropertyBinding

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

function UI_AddStringPropertyBinding

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

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

Parameters:

  • pWidget theWidget 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
  • inBoundPropertyName bound property name - as it appears in the viewmodel lua table
  • inBindingExpression the incoming binding expression, i.e. {spritename}
  • pOutData the value returned from calling the lua string getter - allocates a string setting the pointer. user must deallocate
  • viewmodelTableIndex the index in the lua registry that contains the lua table containing the function to call

function UI_CountWidgetChildren

size_t UI_CountWidgetChildren (
    HWidget hWidget
) 

function UI_CountWidgetChildrenPtr

size_t UI_CountWidgetChildrenPtr (
    struct UIWidget * pWidget
) 

function UI_DebugPrintCommonWidgetInfo

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_DebugPrintCommonWidgetInfo (
    const struct UIWidget * inWidget,
    PrintfFn pPrintfFn
) 

Parameters:

  • inWidget
  • pPrintfFn

function UI_DefaultOnChildrenChanged

void UI_DefaultOnChildrenChanged (
    struct UIWidget * outWidget
) 

function UI_DestroyWidget

void UI_DestroyWidget (
    HWidget widget
) 

function UI_FindBinding

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

function UI_FirstChild

struct UIWidget * UI_FirstChild (
    HWidget hWidget
) 

function UI_GetHitBox

Get the AABB of the widget, excluding padding.

void UI_GetHitBox (
    GeomRect outRect,
    HWidget hWidget
) 

Parameters:

  • outRect
  • hWidget

function UI_GetScratchWiget

HWidget UI_GetScratchWiget () 

function UI_GetWidget

struct UIWidget * UI_GetWidget (
    HWidget hWidget
) 

function UI_GetWidgetPadding

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

function UI_GetWidgetSize

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

function UI_GetWidgetTopLeft

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

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

Parameters:

  • hWidget
  • pOutLeft
  • pOutTop

function UI_Helper_OnLayoutChildren

void UI_Helper_OnLayoutChildren (
    struct UIWidget * pWidget,
    struct UIWidget * pParent
) 

function UI_Helper_OnOutputVerts

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

function UI_Init

void UI_Init () 

function 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 "}"


function UI_MakeBindingGetterFunctionName

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

char * UI_MakeBindingGetterFunctionName (
    const char * inBindingName
) 

Parameters:

  • inBindingName

Returns:


function UI_MakeBindingSetterFunctionName

char * UI_MakeBindingSetterFunctionName (
    const char * inBindingName
) 

function UI_NewBlankWidget

HWidget UI_NewBlankWidget () 

function UI_ParseHorizontalAlignementAttribute

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

function UI_ParseVerticalAlignementAttribute

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

function UI_ParseWidgetDimsAttribute

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

function UI_ParseWidgetDockPoint

bool UI_ParseWidgetDockPoint (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 

function UI_ParseWidgetPaddingAttributes

void UI_ParseWidgetPaddingAttributes (
    struct DataNode * pInNode,
    struct WidgetPadding * outWidgetPadding
) 

function UI_ResolveHeightDimPxls

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

function UI_ResolveWidthDimPxls

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

function UI_SendWidgetMouseEvent

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_SendWidgetMouseEvent (
    struct UIWidget * pWidget,
    enum WidgetCallbackTypes type,
    struct WidgetMouseInfo * pMouseInfo
) 

Parameters:

  • pWidget
  • <br>
  • pMouseInfo data about the event

function UI_WidgetCommonInit

Init common attributes that all widgets can have.

void UI_WidgetCommonInit (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 
  • "the base class constructor"

Parameters:

  • pInNode
  • outWidget

Public Static Functions Documentation

function GetDockingPointName

static const char * GetDockingPointName (
    WidgetDockPoint dockingPoint
) 

function GetTotalAmountAmongChildren

static void GetTotalAmountAmongChildren (
    struct UIWidget * pWidgetParent,
    float * outV,
    GetWorHFn getWorH,
    WidgetDimGetterFn dimgetter
) 

function GetTotalFractionAmongChildren

helper that finds all child widgets with width type WD_ParentFraction and returns the total of their "*" values

static void GetTotalFractionAmongChildren (
    struct UIWidget * pWidgetParent,
    float * outV,
    WidgetDimGetterFn getter
) 

Parameters:

  • pWidgetParent

Returns:


function ParseLuaCallbacks

static void ParseLuaCallbacks (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 

function ParseWidgetAlignments

static void ParseWidgetAlignments (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 

function ParseWidgetDims

static void ParseWidgetDims (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 

function ParseWidgetOffsets

static void ParseWidgetOffsets (
    struct DataNode * pInNode,
    struct UIWidget * outWidget
) 

function PopulateBinding

static char * PopulateBinding (
    struct WidgetPropertyBinding * pBinding,
    char * inBindingExpression,
    char * inBoundPropertyName
) 

Macro Definition Documentation

define WIDGET_POOL_BOUNDS_CHECK

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

define WIDGET_POOL_BOUNDS_CHECK_NO_RETURN

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


The documentation for this class was generated from the following file /home/runner/work/2DFarmingRPG/2DFarmingRPG/Stardew/engine/src/gameframework/layers/UI/widgets/Widget.c