CrabUI
Loading...
Searching...
No Matches
CrabUI.CUICanvas Class Reference

Allows you to manipulate pixel data of its texture. More...

Inheritance diagram for CrabUI.CUICanvas:
CrabUI.CUIComponent CrabUI.ICUIComponent CrabUI.ISimpleProps CrabUI.IListProps CrabUI.ISerializationProps CrabUI.CUIMagnifyingGlass CrabUI.CUIWater

Public Member Functions

void Clear (Color? color=null)
 
Color GetPixel (int x, int y)
 
void SetPixel (int x, int y, Color cl)
 
void SetData ()
 Call this method to transfer values from Data array into texture.
 
void Render (Action< SpriteBatch > renderFunc)
 Uses renderFunc to render stuff directy onto Canvas.Texture You can for example use GUI "Draw" methods with provided spriteBatch

 
 CUICanvas (int x, int y)
 
override void CleanUp ()
 
- Public Member Functions inherited from CrabUI.CUIComponent
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 Draw (SpriteBatch spriteBatch)
 Here component should be drawn.
 
virtual partial void DrawFront (SpriteBatch spriteBatch)
 Method for drawing something that should always be on top, e.g. resize handles.
 
virtual partial void Draw (SpriteBatch spriteBatch)
 
virtual partial void DrawFront (SpriteBatch spriteBatch)
 
 CUIComponent (float? x=null, float? y=null, float? w=null, float? h=null)
 
void Dispose ()
 
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.
 
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

Color[] Data
 
RenderTarget2D Texture
 
SpriteBatch spriteBatch
 
- Public Attributes inherited from CrabUI.CUIComponent
Indexer< string, CUIAnimationAnimations
 
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

virtual Point Size [get, set]
 Size of the internal texture Will automatically resize the texture and data array of set.
 
- Properties inherited from CrabUI.CUIComponent
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< CUIComponentAllComponents [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, CUIComponentNamedComponents = 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< CUIInputAddOnMouseLeave [set]
 
Action< CUIInputAddOnMouseEnter [set]
 
Action< CUIInputAddOnMouseDown [set]
 
Action< CUIInputAddOnMouseUp [set]
 
Action< CUIInputAddOnMouseMove [set]
 
Action< CUIInputAddOnMouseOn [set]
 
Action< CUIInputAddOnMouseOff [set]
 
Action< CUIInputAddOnClick [set]
 
Action< CUIInputAddOnDClick [set]
 
Action< CUIInputAddOnScroll [set]
 
Action< float, float > AddOnDrag [set]
 
Action< float, float > AddOnSwipe [set]
 
Action< CUIInputAddOnKeyDown [set]
 
Action< CUIInputAddOnKeyUp [set]
 
Action< CUIInputAddOnTextInput [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, CUIComponentStates = 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< CUIComponentChildren = new() [get, set]
 
CUIComponentParent [get, set]
 
IEnumerable< CUIComponentAddChildren [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, CUIBoundariesChildrenBoundaries [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]
 
- Properties inherited from CrabUI.ISimpleProps
- Properties inherited from CrabUI.IListProps
- Properties inherited from CrabUI.ISerializationProps

Additional Inherited Members

- Static Public Member Functions inherited from CrabUI.CUIComponent
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 Public Attributes inherited from CrabUI.CUIComponent
static Dictionary< int, WeakReference< CUIComponent > > ComponentsById = new()
 
static WeakCatalog< Type, CUIComponentComponentsByType = new()
 
static GUIButton dummyComponent
 This is used to trick vanilla GUI into believing that mouse is hovering some component and block clicks.
 
- Protected Member Functions inherited from CrabUI.CUIComponent
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.
 
- Protected Attributes inherited from CrabUI.CUIComponent
CUILayout layout
 
CUINullVector2 forsedSize
 
float scale = 1f
 
Color[] TextureData
 Buffer for texture data, for IgnoreTransparent checks.
 
bool disabled
 
- Package Functions inherited from CrabUI.CUIComponent
- Static Package Functions inherited from CrabUI.CUIComponent
- Package Attributes inherited from CrabUI.CUIComponent
- Static Package Attributes inherited from CrabUI.CUIComponent
- Events inherited from CrabUI.CUIComponent
Action< CUICommandOnAnyCommand
 this will be executed on any command
 
Action< CUIDataOnAnyData
 Will be executed when receiving any data.
 
Action< Object > OnConsume
 Happens when appropriate data is received.
 
Action OnTreeChanged
 
Action< double > OnUpdate
 
Action< CUIInputOnMouseLeave
 
Action< CUIInputOnMouseEnter
 
Action< CUIInputOnMouseDown
 
Action< CUIInputOnMouseUp
 
Action< CUIInputOnMouseMove
 
Action< CUIInputOnMouseOn
 
Action< CUIInputOnMouseOff
 
Action< CUIInputOnClick
 
Action< CUIInputOnDClick
 
Action< CUIInputOnScroll
 
Action< float, float > OnDrag
 
Action< float, float > OnSwipe
 
Action< CUIInputOnKeyDown
 
Action< CUIInputOnKeyUp
 
Action< CUIInputOnTextInput
 
Action OnFocus
 
Action OnFocusLost
 
Action OnLayoutUpdated
 
Action OnStyleApplied
 Use it to e.g. update component color.
 
Action< CUIComponentOnChildAdded
 
Action< CUIComponentOnChildRemoved
 

Detailed Description

Allows you to manipulate pixel data of its texture.

Definition at line 16 of file CUICanvas.cs.

Constructor & Destructor Documentation

◆ CUICanvas() [1/2]

CrabUI.CUICanvas.CUICanvas ( int x,
int y )

Definition at line 92 of file CUICanvas.cs.

92 : base()
93 {
94 Size = new Point(x, y);
95 spriteBatch = new SpriteBatch(GameMain.Instance.GraphicsDevice);
96 }
virtual Point Size
Size of the internal texture Will automatically resize the texture and data array of set.
Definition CUICanvas.cs:28

◆ CUICanvas() [2/2]

CrabUI.CUICanvas.CUICanvas ( )

Definition at line 98 of file CUICanvas.cs.

98: this(100, 100) { }

Member Function Documentation

◆ CleanUp()

override void CrabUI.CUICanvas.CleanUp ( )
virtual

Reimplemented from CrabUI.CUIComponent.

Definition at line 100 of file CUICanvas.cs.

101 {
102 Texture?.Dispose();
103 }

◆ Clear()

void CrabUI.CUICanvas.Clear ( Color? color = null)

Definition at line 42 of file CUICanvas.cs.

43 {
44 Color cl = color ?? Color.Transparent;
45 for (int i = 0; i < Data.Length; i++)
46 {
47 Data[i] = cl;
48 }
49
50 SetData();
51 }
void SetData()
Call this method to transfer values from Data array into texture.
Definition CUICanvas.cs:66

◆ GetPixel()

Color CrabUI.CUICanvas.GetPixel ( int x,
int y )

Definition at line 53 of file CUICanvas.cs.

54 {
55 return Data[y * Texture.Width + x];
56 }

◆ Render()

void CrabUI.CUICanvas.Render ( Action< SpriteBatch > renderFunc)

Uses renderFunc to render stuff directy onto Canvas.Texture You can for example use GUI "Draw" methods with provided spriteBatch

Parameters
renderFuncAction<SpriteBatch> where you can draw whatever you want

Definition at line 76 of file CUICanvas.cs.

77 {
78 GameMain.Instance.GraphicsDevice.SetRenderTarget(Texture);
79
80 //TODO save and restore scissor rect
81 spriteBatch.Begin(SpriteSortMode.Deferred, null, GUI.SamplerState, null, GameMain.ScissorTestEnable);
82
83 renderFunc(spriteBatch);
84
85 spriteBatch.End();
86
87 GameMain.Instance.GraphicsDevice.SetRenderTarget(null);
88 }

◆ SetData()

void CrabUI.CUICanvas.SetData ( )

Call this method to transfer values from Data array into texture.

Definition at line 66 of file CUICanvas.cs.

67 {
68 Texture.SetData<Color>(Data);
69 }

◆ SetPixel()

void CrabUI.CUICanvas.SetPixel ( int x,
int y,
Color cl )

Definition at line 58 of file CUICanvas.cs.

59 {
60 Data[y * Texture.Width + x] = cl;
61 }

Member Data Documentation

◆ Data

Color [] CrabUI.CUICanvas.Data

Definition at line 18 of file CUICanvas.cs.

◆ spriteBatch

SpriteBatch CrabUI.CUICanvas.spriteBatch

Definition at line 90 of file CUICanvas.cs.

◆ Texture

RenderTarget2D CrabUI.CUICanvas.Texture

Definition at line 20 of file CUICanvas.cs.

Property Documentation

◆ Size

virtual Point CrabUI.CUICanvas.Size
getset

Size of the internal texture Will automatically resize the texture and data array of set.

Definition at line 27 of file CUICanvas.cs.

28 {
29 get => new Point(Texture.Width, Texture.Height);
30 set
31 {
32 if (value.X == Texture?.Width && value.Y == Texture?.Height) return;
33
34 RenderTarget2D oldTexture = Texture;
35 Texture = new RenderTarget2D(GameMain.Instance.GraphicsDevice, value.X, value.Y);
36 Data = new Color[Texture.Width * Texture.Height];
37 BackgroundSprite = new CUISprite(Texture);
38 oldTexture?.Dispose();
39 }
40 }
CUISprite BackgroundSprite
Will be drawn in background with BackgroundColor Default is solid white 1x1 texture.

The documentation for this class was generated from the following file: