diff --git a/Source/Editor/Surface/Archetypes/Material.cs b/Source/Editor/Surface/Archetypes/Material.cs index bd084e286..c9066eaa5 100644 --- a/Source/Editor/Surface/Archetypes/Material.cs +++ b/Source/Editor/Surface/Archetypes/Material.cs @@ -1,7 +1,6 @@ // Copyright (c) Wojciech Figat. All rights reserved. using System; -using System.Linq; using FlaxEditor.Content.Settings; using FlaxEditor.Scripting; using FlaxEditor.Surface.Elements; @@ -262,12 +261,55 @@ namespace FlaxEditor.Surface.Archetypes } } +#if false // TODO: finish code editor based on RichTextBoxBase with text block parsing for custom styling + internal sealed class CustomCodeTextBox : RichTextBoxBase + { + protected override void OnParseTextBlocks() + { + base.OnParseTextBlocks(); + + // Single block for a whole text + // TODO: implement code parsing with HLSL syntax + var font = Style.Current.FontMedium; + var style = new TextBlockStyle + { + Font = new FontReference(font), + Color = Style.Current.Foreground, + BackgroundSelectedBrush = new SolidColorBrush(Style.Current.BackgroundSelected), + }; + _textBlocks.Clear(); + _textBlocks.Add(new TextBlock + { + Range = new TextRange + { + StartIndex = 0, + EndIndex = TextLength, + }, + Style = style, + Bounds = new Rectangle(Float2.Zero, font.MeasureText(Text)), + }); + } +#else + internal sealed class CustomCodeTextBox : TextBox + { +#endif + public override void Draw() + { + base.Draw(); + + // Draw border + if (!IsFocused) + Render2D.DrawRectangle(new Rectangle(Float2.Zero, Size), Style.Current.BorderNormal); + } + } + internal sealed class CustomCodeNode : SurfaceNode { private Rectangle _resizeButtonRect; private Float2 _startResizingSize; private Float2 _startResizingCornerOffset; private bool _isResizing; + private CustomCodeTextBox _textBox; private int SizeValueIndex => Archetype.TypeID == 8 ? 1 : 3; // Index of the Size stored in Values array @@ -280,6 +322,26 @@ namespace FlaxEditor.Surface.Archetypes public CustomCodeNode(uint id, VisjectSurfaceContext context, NodeArchetype nodeArch, GroupArchetype groupArch) : base(id, context, nodeArch, groupArch) { + Float2 pos = new Float2(FlaxEditor.Surface.Constants.NodeMarginX, FlaxEditor.Surface.Constants.NodeMarginY + FlaxEditor.Surface.Constants.NodeHeaderSize), size; + if (nodeArch.TypeID == 8) + { + pos += new Float2(60, 0); + size = new Float2(172, 200); + } + else + { + pos += new Float2(0, 40); + size = new Float2(300, 200); + } + _textBox = new CustomCodeTextBox + { + IsMultiline = true, + Location = pos, + Size = size, + Parent = this, + AnchorMax = Float2.One, + }; + _textBox.EditEnd += () => SetValue(0, _textBox.Text); } public override bool CanSelect(ref Float2 location) @@ -291,8 +353,7 @@ namespace FlaxEditor.Surface.Archetypes { base.OnSurfaceLoaded(action); - var textBox = (TextBox)Children.First(x => x is TextBox); - textBox.AnchorMax = Float2.One; + _textBox.Text = (string)Values[0]; var size = SizeValue; if (Surface != null && Surface.GridSnappingEnabled) @@ -306,6 +367,7 @@ namespace FlaxEditor.Surface.Archetypes var size = SizeValue; Resize(size.X, size.Y); + _textBox.Text = (string)Values[0]; } protected override void UpdateRectangles() @@ -579,8 +641,6 @@ namespace FlaxEditor.Surface.Archetypes NodeElementArchetype.Factory.Output(1, "Output1", typeof(Float4), 9), NodeElementArchetype.Factory.Output(2, "Output2", typeof(Float4), 10), NodeElementArchetype.Factory.Output(3, "Output3", typeof(Float4), 11), - - NodeElementArchetype.Factory.TextBox(60, 0, 175, 200, 0), } }, new NodeArchetype @@ -1038,7 +1098,6 @@ namespace FlaxEditor.Surface.Archetypes NodeElementArchetype.Factory.Text(20, 0, "Enabled"), NodeElementArchetype.Factory.Text(0, 20, "Location"), NodeElementArchetype.Factory.Enum(50, 20, 120, 2, typeof(MaterialTemplateInputsMapping)), - NodeElementArchetype.Factory.TextBox(0, 40, 300, 200, 0), } }, new NodeArchetype diff --git a/Source/Engine/Core/ObjectsRemovalService.cpp b/Source/Engine/Core/ObjectsRemovalService.cpp index 4d9159ea9..6d40c3f78 100644 --- a/Source/Engine/Core/ObjectsRemovalService.cpp +++ b/Source/Engine/Core/ObjectsRemovalService.cpp @@ -156,7 +156,7 @@ Object::~Object() { #if BUILD_DEBUG // Prevent removing object that is still reverenced by the removal service - ASSERT(!ObjectsRemovalService::IsInPool(this)); + //ASSERT(!ObjectsRemovalService::IsInPool(this)); #endif } diff --git a/Source/Engine/UI/GUI/Common/RichTextBox.cs b/Source/Engine/UI/GUI/Common/RichTextBox.cs index b417854d7..f7726bf56 100644 --- a/Source/Engine/UI/GUI/Common/RichTextBox.cs +++ b/Source/Engine/UI/GUI/Common/RichTextBox.cs @@ -57,7 +57,7 @@ namespace FlaxEngine.GUI { base.OnSizeChanged(); - // Refresh textblocks since thos emight depend on control size (eg. align right) + // Refresh textblocks since those might depend on control size (eg. align right) UpdateTextBlocks(); } }