CrabUI
|
Orchestrating drawing and updating of it's children
Also a CUIComponent, but it's draw and update methods Attached directly to games life cycle.
More...
Classes | |
class | CUIGlobalEvents |
Wrapper for global events. More... | |
Public Member Functions | |
record | DrawEvent (CUIComponent Target, bool front=false) |
void | Step () |
Forses 1 layout update step, even when Frozen. | |
void | Update (double totalTime, bool force=false, bool noInput=false) |
new void | Draw (SpriteBatch spriteBatch) |
Here component should be drawn. | |
void | OnDragEnd (CUIDragHandle h) |
void | OnResizeEnd (CUIResizeHandle h) |
void | OnSwipeEnd (CUISwipeHandle h) |
void | Load (Action< CUIMainComponent > initFunc) |
Obsolete function Will run generator func with this. | |
void | PrintRecalLimitWarning () |
![]() | |
void | AddAnimation (string name, CUIAnimation animation) |
void | BlockChildrenAnimations () |
void | AttachTo (Item item, Action< Item, CUIComponent > callback=null) |
void | AddCommand (string name, Action< object > action) |
Manually adds command. | |
void | RemoveCommand (string name) |
void | DispatchUp (CUICommand command) |
Dispathes command up the component tree until someone consumes it. | |
void | DispatchDown (CUIData data) |
Dispathes command down the component tree until someone consumes it. | |
void | Execute (CUICommand command) |
Will execute action corresponding to this command. | |
virtual partial void | DrawFront (SpriteBatch spriteBatch) |
Method for drawing something that should always be on top, e.g. resize handles. | |
virtual partial void | DrawFront (SpriteBatch spriteBatch) |
CUIComponent (float? x=null, float? y=null, float? w=null, float? h=null) | |
void | Dispose () |
virtual void | CleanUp () |
override string | ToString () |
void | PrintTree (string offset="") |
void | Info (object msg, [CallerFilePath] string source="", [CallerLineNumber] int lineNumber=0) |
Prints component and then message. | |
CUIComponent | Remember (CUIComponent c, string name) |
CUIComponent | Remember (CUIComponent c) |
If it already has AKA. | |
CUIComponent | Forget (string name) |
CUIComponent | Forget (CUIComponent c) |
If it already has AKA. | |
virtual CUIComponent | Get (string name) |
Returns memorized component by name. | |
T | Get< T > (string name) |
void | CascadeRefresh () |
virtual bool | IsPointOnTransparentPixel (Vector2 point) |
virtual bool | ShouldInvoke (CUIInput e) |
void | InvokeOnLayoutUpdated () |
record | CompareResult (bool equal, string firstMismatch="") |
CUIComponent | Clone () |
void | SaveStateAs (string name) |
void | LoadState (string name) |
void | ForgetState (string name) |
void | ApplyState (CUIComponent state) |
virtual XElement | ToXML (CUIAttribute propAttribute=CUIAttribute.CUISerializable) |
virtual void | FromXML (XElement element, string baseFolder=null) |
string | Serialize (CUIAttribute propAttribute=CUIAttribute.CUISerializable) |
void | LoadSelfFromFile (string path, bool searchForSpritesInTheSameFolder=true, bool saveAfterLoad=false) |
void | LoadFromTheSameFile () |
void | SaveToTheSamePath () |
void | SaveToFile (string path, CUIAttribute propAttribute=CUIAttribute.CUISerializable) |
virtual void | Hydrate () |
Experimental method Here you can add data/ callbacks/ save stuff to variables after loading a xml skeletom. | |
virtual CUIComponent | Append (CUIComponent child, string name=null, [CallerMemberName] string memberName="") |
Adds children to the end of the list. | |
virtual CUIComponent | Prepend (CUIComponent child, string name=null, [CallerMemberName] string memberName="") |
Adds children to the begining of the list. | |
virtual CUIComponent | Insert (CUIComponent child, int index, string name=null, [CallerMemberName] string memberName="") |
void | RemoveSelf () |
CUIComponent | RemoveChild (CUIComponent child, [CallerMemberName] string memberName="") |
void | RemoveAllChildren ([CallerMemberName] string memberName="") |
void | MoveToFront () |
Moves component to front in Parent.Children which makes it render after other childs. | |
Public Attributes | |
double | UpdateInterval = 1.0 / 300.0 |
bool | CalculateUntilResolved = true |
If true will update layout until it settles to prevent blinking. | |
int | MaxLayoutRecalcLoopsPerUpdate = 10 |
If your GUI needs more than this steps of layout update you will get a warning. | |
CUIDragHandle | GrabbedDragHandle |
CUIResizeHandle | GrabbedResizeHandle |
CUISwipeHandle | GrabbedSwipeHandle |
CUIComponent | MouseOn |
CUIGlobalEvents | Global = new CUIGlobalEvents() |
Container for true global events CUIMainComponent itself can react to events and you can listen for those, but e.g. mouse events may be consumed before they reach Main. | |
![]() | |
Indexer< string, CUIAnimation > | Animations |
Dictionary< string, List< CUIComponent > > | DataTargets = new() |
Consumers of emmited data, updates on tree change. | |
bool | Disposed |
bool | ignoreDebug |
For debug frame itself. | |
CUIResizeHandle | LeftResizeHandle = new CUIResizeHandle(new Vector2(0, 1), new CUIBool2(false, false)) |
CUIResizeHandle | RightResizeHandle = new CUIResizeHandle(new Vector2(1, 1), new CUIBool2(true, false)) |
Properties | |
bool | Frozen [get, set] |
Frozen window doesn't update. | |
Action | AddOnTreeChanged [set] |
CUIComponent | FocusedComponent [get, set] |
![]() | |
AttachedItemHandle | AttachedItemHandle [get, set] |
string | Command [get, set] |
This command will be dispatched up when some component specific event happens. | |
string | Consumes [get, set] |
Will consume data with this name. | |
bool | ReflectCommands [get, set] |
bool | RetranslateCommands [get, set] |
ObservableCollection< string > | Emits [get, set] |
Optimization to data flow If not empty component will search for consumers of the data and pass it directly to them instead of broadcasting it. | |
Dictionary< string, Action< object > > | Commands = new() [get, set] |
All commands. | |
static IEnumerable< CUIComponent > | AllComponents [get] |
bool | Debug [get, set] |
bool | IgnoreDebug [get, set] |
string | AKA [get, set] |
Parent can memorize it's children by their names, AKA. | |
Dictionary< string, CUIComponent > | NamedComponents = new() [get, set] |
All memorized components. | |
CUIComponent | this[string name] [get, set] |
You can access NamedComponents with this indexer. | |
bool | ConsumeMouseClicks [get, set] |
bool | ConsumeDragAndDrop [get, set] |
bool | ConsumeSwipe [get, set] |
bool | ConsumeMouseScroll [get, set] |
Action< double > | AddOnUpdate [set] |
Action< CUIInput > | AddOnMouseLeave [set] |
Action< CUIInput > | AddOnMouseEnter [set] |
Action< CUIInput > | AddOnMouseDown [set] |
Action< CUIInput > | AddOnMouseUp [set] |
Action< CUIInput > | AddOnMouseMove [set] |
Action< CUIInput > | AddOnMouseOn [set] |
Action< CUIInput > | AddOnMouseOff [set] |
Action< CUIInput > | AddOnClick [set] |
Action< CUIInput > | AddOnDClick [set] |
Action< CUIInput > | AddOnScroll [set] |
Action< float, float > | AddOnDrag [set] |
Action< float, float > | AddOnSwipe [set] |
Action< CUIInput > | AddOnKeyDown [set] |
Action< CUIInput > | AddOnKeyUp [set] |
Action< CUIInput > | AddOnTextInput [set] |
Action | AddOnFocus [set] |
Action | AddOnFocusLost [set] |
bool | Draggable [get, set] |
bool | Focusable [get, set] |
bool | Resizible [get, set] |
bool | ResizibleLeft [get, set] |
bool | ResizibleRight [get, set] |
CUIBool2 | ResizeDirection [get, set] |
bool | Swipeable [get, set] |
virtual CUILayout | Layout [get, set] |
Dictionary< string, CUIComponent > | States = new() [get, set] |
State is just a clone component with copies of all props. | |
string | SavePath [get, set] |
int | ID [get, set] |
Global ID, unique for component. | |
CUIMainComponent | MainComponent [get, set] |
Link to CUIMainComponent, passed to children. | |
bool | Focused [get, set] |
bool | BackgroundVisible [get, set] |
BackgroundColor != Color.Transparent. | |
bool | OutlineVisible [get, set] |
bool | MouseOver [get, set] |
bool | MousePressed [get, set] |
CUINullVector2 | ForcedMinSize [get, set] |
This is used by text to prevent resizing beyond that and works as AbsoluteMin. | |
float | Scale [get, set] |
This is set by ChildrenOffset when zooming, and iirc consumed by text to adjust text scale. | |
CUIRect | BorderBox [get, set] |
Calculated Prop, Real + BorderThickness. | |
CUIRect | OutlineBox [get, set] |
CUIRect | Real [get, set] |
Calculated prop, position on real screen in pixels Should be fully calculated after CUIMainComponent.Update. | |
CUIStyle | Style [get, set] |
Allows you to assing parsable string or link to CUIPalette to any prop It's indexable, so you can access it like this: component.Style["BackgroundColor"] = "cyan" if value starts with "CUIPalette." it will extract the value from palette e.g. component.Style["BackgroundColor"] = "CUIPalette.DarkBlue.Secondary.On" | |
CUIStyle | ResolvedStyle [get, set] |
List< CUIComponent > | Children = new() [get, set] |
CUIComponent? | Parent [get, set] |
IEnumerable< CUIComponent > | AddChildren [set] |
Allows you to add array of children. | |
CUIComponentProps | CUIProps = new() [get, set] |
Just a wrapper for CUIProps idk how to separate them better. | |
Vector2 | Padding [get, set] |
Used for text, should be in CUITextBlock really. | |
CUISprite | BorderSprite = CUISprite.Default [get, set] |
Should be one texture, not sprite sheet Or there would be no way to wrap it Top side will always point outwards. | |
CUIBorder | Border = new CUIBorder() [get, set] |
Container for Color and Thickness Border is drawn inside the component and will eat space from content If "by side" border prop != null then it'll take presidence. | |
CUIBorder | TopBorder [get, set] |
CUIBorder | RigthBorder [get, set] |
CUIBorder | BottomBorder [get, set] |
CUIBorder | LeftBorder [get, set] |
float | OutlineThickness = 1f [get, set] |
Color | OutlineColor [get, set] |
Outline is like a border, but on the outside of the component. | |
CUISprite | BackgroundSprite [get, set] |
Will be drawn in background with BackgroundColor Default is solid white 1x1 texture. | |
bool | IgnoreTransparent [get, set] |
If true, mouse events on transparent pixels will be ignored Note: this will buffer texture data and potentially consume a lot of memory so use wisely. | |
Color | BackgroundColor [get, set] |
Color of BackgroundSprite, default is black If you're using custom sprite and don't see it make sure this color is not black. | |
float | Transparency [get, set] |
PaletteOrder | Palette [get, set] |
This palette will be used to resolve palette styles Primary, Secondary, Tertiary, Quaternary. | |
PaletteOrder | DeepPalette [set] |
Color | ResizeHandleColor = Color.White [get, set] |
Had to expose resize handle props, because it's not a real component and can't really use styles. | |
Color | ResizeHandleGrabbedColor = Color.Cyan [get, set] |
SamplerState | SamplerState [get, set] |
don't | |
bool | HideChildrenOutsideFrame [get, set] |
Should children be cut off by scissor rect, this is just visual, it's not the same as culling. | |
bool | CullChildren [get, set] |
if child rect doesn't intersect with parent it won't be drawn and won't consume fps It also sets HideChildrenOutsideFrame | |
bool | UnCullable [get, set] |
It shouldn't be culled off even outside of parent bounds and even if parent demands so. | |
CUI3DOffset | ChildrenOffset [get, set] |
Will shift all children by this much, e.g. this is how scroll works It's also 3D. | |
Func< CUIRect, CUIBoundaries > | ChildrenBoundaries [get, set] |
Limits to children positions. | |
bool | Fixed [get, set] |
Should it ignore child offset? | |
Vector2 | Anchor [get, set] |
this point of this component | |
Vector2? | ParentAnchor [get, set] |
will be attached to this point of parent | |
CUIBool2 | Ghost [get, set] |
Ghost components don't affect layout. | |
int? | ZIndex [get, set] |
Components are drawn in order of their ZIndex Normally it's derived from component position in the tree, but this will override it. | |
bool | ResizeToSprite [get, set] |
If true component will set it's Absolute size to sprite texture size. | |
CUIBool2 | FillEmptySpace [get, set] |
Will be resized to fill empty space in list components. | |
CUIBool2 | FitContent [get, set] |
Will resize itself to fit components with absolute size, e.g. text. | |
CUINullRect | Absolute [get, set] |
Absolute size and position in pixels. | |
CUINullRect | AbsoluteMin [get, set] |
CUINullRect | AbsoluteMax [get, set] |
CUINullRect | Relative [get, set] |
Relative to parent size and position, [0..1]. | |
CUINullRect | RelativeMin [get, set] |
CUINullRect | RelativeMax [get, set] |
CUINullRect | CrossRelative [get, set] |
It's like Relative, but to the opposite dimension E.g. Real.Width = CrossRelative.Width * Parent.Real.Height Handy for creating square things. | |
string | GridTemplateRows [get, set] |
Used in Grid, space separated Row sizes, either in pixels (123) or in % (123%) | |
string | GridTemplateColumns [get, set] |
Used in Grid, space separated Columns sizes, either in pixels (123) or in % (123%) | |
Point? | GridStartCell [get, set] |
Component will be placed in this cell in the grid component. | |
Point? | GridEndCell [get, set] |
And resized to fit cells from GridStartCell to GridEndCell. | |
Point? | GridCell [get, set] |
Sets both GridStartCell and GridEndCell at once. | |
object | Data [get, set] |
Arbitrary data. | |
virtual bool | Disabled [get, set] |
Usually means - non interactable, e.g. unclickable gray button. | |
bool | ShouldPassPropsToChildren = true [get, set] |
Some props (like visible) are autopassed to all new childs see PassPropsToChild. | |
bool | IgnoreParentVisibility [get, set] |
Don't inherit parent Visibility. | |
bool | IgnoreParentEventIgnorance [get, set] |
Don't inherit parent IgnoreEvents. | |
bool | IgnoreParentZIndex [get, set] |
Don't inherit parent ZIndex. | |
bool | IgnoreParentTransparency [get, set] |
bool | Visible [get, set] |
Invisible components are not drawn, but still can be interacted with. | |
bool | IgnoreEvents [get, set] |
Won't react to mouse events. | |
bool | Revealed [get, set] |
Visible + !IgnoreEvents. | |
bool | Serializable = true [get, set] |
If false then this component and its children won't be serialized. | |
bool | SerializeChildren = true [get, set] |
Is this a serialization cutoff point Parent will serialize children down to this component and stop. | |
bool | MergeSerialization = false [get, set] |
If true it won't be deserialized, Instead its children will be detached and attached to the component with matching AKA on the parent. | |
bool | ReplaceSerialization = false [get, set] |
If true, deserialized component will replace existing component with the same AKA instead of creating a duplicate. | |
static bool | ForceSaveAllProps = false [get, set] |
![]() | |
![]() | |
![]() |
Events | |
Action | OnTreeChanged |
![]() | |
Action< CUICommand > | OnAnyCommand |
this will be executed on any command | |
Action< CUIData > | OnAnyData |
Will be executed when receiving any data. | |
Action< Object > | OnConsume |
Happens when appropriate data is received. | |
Action | OnTreeChanged |
Action< double > | OnUpdate |
Action< CUIInput > | OnMouseLeave |
Action< CUIInput > | OnMouseEnter |
Action< CUIInput > | OnMouseDown |
Action< CUIInput > | OnMouseUp |
Action< CUIInput > | OnMouseMove |
Action< CUIInput > | OnMouseOn |
Action< CUIInput > | OnMouseOff |
Action< CUIInput > | OnClick |
Action< CUIInput > | OnDClick |
Action< CUIInput > | OnScroll |
Action< float, float > | OnDrag |
Action< float, float > | OnSwipe |
Action< CUIInput > | OnKeyDown |
Action< CUIInput > | OnKeyUp |
Action< CUIInput > | OnTextInput |
Action | OnFocus |
Action | OnFocusLost |
Action | OnLayoutUpdated |
Action | OnStyleApplied |
Use it to e.g. update component color. | |
Action< CUIComponent > | OnChildAdded |
Action< CUIComponent > | OnChildRemoved |
Additional Inherited Members | |
![]() | |
static void | RunRecursiveOn (CUIComponent component, Action< CUIComponent > action) |
designed to be versatile, in fact never used | |
static void | ForEach (Action< CUIComponent > action) |
static IEnumerable< Type > | GetClassHierarchy (Type type) |
static IEnumerable< Type > | GetReverseClassHierarchy (Type type) |
static bool | DeepCompareVerbose (CUIComponent a, CUIComponent b) |
static CompareResult | DeepCompare (CUIComponent a, CUIComponent b) |
static CUIComponent | Deserialize (string raw, string baseFolder=null) |
static CUIComponent | Deserialize (XElement e, string baseFolder=null) |
static CUIComponent | LoadFromFile (string path, bool searchForSpritesInTheSameFolder=true, bool saveAfterLoad=false) |
static T | LoadFromFile< T > (string path, bool searchForSpritesInTheSameFolder=true, bool saveAfterLoad=false) |
![]() | |
static Dictionary< int, WeakReference< CUIComponent > > | ComponentsById = new() |
static WeakCatalog< Type, CUIComponent > | ComponentsByType = new() |
static GUIButton | dummyComponent |
This is used to trick vanilla GUI into believing that mouse is hovering some component and block clicks. | |
![]() | |
void | ExtractProps (XElement element, string baseFolder=null) |
void | PackProps (XElement element, CUIAttribute propAttribute=CUIAttribute.CUISerializable) |
virtual void | PassPropsToChild (CUIComponent child) |
Pass props like ZIndex, Visible to a new child. | |
![]() | |
CUILayout | layout |
CUINullVector2 | forsedSize |
float | scale = 1f |
Color[] | TextureData |
Buffer for texture data, for IgnoreTransparent checks. | |
bool | disabled |
![]() | |
![]() | |
![]() | |
![]() |
Orchestrating drawing and updating of it's children
Also a CUIComponent, but it's draw and update methods Attached directly to games life cycle.
Definition at line 21 of file CUIMainComponent.cs.
CrabUI.CUIMainComponent.CUIMainComponent | ( | ) |
Definition at line 509 of file CUIMainComponent.cs.
|
virtual |
Here component should be drawn.
spriteBatch |
Reimplemented from CrabUI.CUIComponent.
Definition at line 239 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.Load | ( | Action< CUIMainComponent > | initFunc | ) |
Obsolete function
Will run generator func with this.
initFunc | Generator function that adds components to passed Main |
Definition at line 503 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.OnDragEnd | ( | CUIDragHandle | h | ) |
Definition at line 278 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.OnResizeEnd | ( | CUIResizeHandle | h | ) |
Definition at line 279 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.OnSwipeEnd | ( | CUISwipeHandle | h | ) |
Definition at line 280 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.PrintRecalLimitWarning | ( | ) |
Definition at line 522 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.Step | ( | ) |
Forses 1 layout update step, even when Frozen.
Definition at line 145 of file CUIMainComponent.cs.
void CrabUI.CUIMainComponent.Update | ( | double | totalTime, |
bool | force = false, | ||
bool | noInput = false ) |
Definition at line 149 of file CUIMainComponent.cs.
bool CrabUI.CUIMainComponent.CalculateUntilResolved = true |
If true will update layout until it settles to prevent blinking.
Definition at line 46 of file CUIMainComponent.cs.
CUIGlobalEvents CrabUI.CUIMainComponent.Global = new CUIGlobalEvents() |
Container for true global events CUIMainComponent itself can react to events and you can listen for those, but e.g. mouse events may be consumed before they reach Main.
Definition at line 69 of file CUIMainComponent.cs.
CUIDragHandle CrabUI.CUIMainComponent.GrabbedDragHandle |
Definition at line 55 of file CUIMainComponent.cs.
CUIResizeHandle CrabUI.CUIMainComponent.GrabbedResizeHandle |
Definition at line 56 of file CUIMainComponent.cs.
CUISwipeHandle CrabUI.CUIMainComponent.GrabbedSwipeHandle |
Definition at line 57 of file CUIMainComponent.cs.
int CrabUI.CUIMainComponent.MaxLayoutRecalcLoopsPerUpdate = 10 |
If your GUI needs more than this steps of layout update you will get a warning.
Definition at line 51 of file CUIMainComponent.cs.
CUIComponent CrabUI.CUIMainComponent.MouseOn |
Definition at line 58 of file CUIMainComponent.cs.
double CrabUI.CUIMainComponent.UpdateInterval = 1.0 / 300.0 |
Definition at line 42 of file CUIMainComponent.cs.
|
set |
Definition at line 53 of file CUIMainComponent.cs.
|
getset |
Definition at line 59 of file CUIMainComponent.cs.
|
getset |
Action CrabUI.CUIMainComponent.OnTreeChanged |
Definition at line 52 of file CUIMainComponent.cs.