├── Editor.meta ├── Editor ├── Attribute.meta ├── Attribute │ ├── MinMaxRangeDrawer.cs │ └── MinMaxRangeDrawer.cs.meta ├── JobSystem.meta ├── JobSystem │ ├── SDFBezierJob.cs │ └── SDFBezierJob.cs.meta ├── SDFApproxSquircleEditor.cs ├── SDFApproxSquircleEditor.cs.meta ├── SDFArcEditor.cs ├── SDFArcEditor.cs.meta ├── SDFCircleEditor.cs ├── SDFCircleEditor.cs.meta ├── SDFCutDiskEditor.cs ├── SDFCutDiskEditor.cs.meta ├── SDFParallelogramEditor.cs ├── SDFParallelogramEditor.cs.meta ├── SDFPiEditor.cs ├── SDFPiEditor.cs.meta ├── SDFQuadEditor.cs ├── SDFQuadEditor.cs.meta ├── SDFSplineEditor.cs ├── SDFSplineEditor.cs.meta ├── SDFSquircleEditor.cs ├── SDFSquircleEditor.cs.meta ├── SDFTexEditor.cs ├── SDFTexEditor.cs.meta ├── SDFTexPainter.meta ├── SDFTexPainter │ ├── BezierPainter.cs │ ├── BezierPainter.cs.meta │ ├── Primitive.cs │ ├── Primitive.cs.meta │ ├── RasterizeOptions.cs │ ├── RasterizeOptions.cs.meta │ ├── SDFTexPainter.cs │ ├── SDFTexPainter.cs.meta │ ├── SDFTexPainterEditor.cs │ ├── SDFTexPainterEditor.cs.meta │ ├── Shape.cs │ ├── Shape.cs.meta │ ├── ShapePainter.cs │ └── ShapePainter.cs.meta ├── SDFTriangleEditor.cs ├── SDFTriangleEditor.cs.meta ├── SDFUIEditor.cs ├── SDFUIEditor.cs.meta ├── Settings Editor.meta ├── Settings Editor │ ├── SDFUISettingsEditor.cs │ ├── SDFUISettingsEditor.cs.meta │ ├── SDFUISettingsEditor.uss │ ├── SDFUISettingsEditor.uss.meta │ ├── SDFUISettingsEditor.uxml │ └── SDFUISettingsEditor.uxml.meta ├── TLab.SDF-UI-Toolkit.Editor.asmdef ├── TLab.SDF-UI-Toolkit.Editor.asmdef.meta ├── Util.meta └── Util │ ├── AssetUtil.cs │ ├── AssetUtil.cs.meta │ ├── CaptureUtil.cs │ ├── CaptureUtil.cs.meta │ ├── EditorUtil.cs │ ├── EditorUtil.cs.meta │ ├── Extension.cs │ ├── Extension.cs.meta │ ├── LeftToggleDrawer.cs │ ├── LeftToggleDrawer.cs.meta │ ├── PixelFormatUtil.cs │ ├── PixelFormatUtil.cs.meta │ ├── SerializeUtil.cs │ ├── SerializeUtil.cs.meta │ ├── SpriteDrawUtility.cs │ └── SpriteDrawUtility.cs.meta ├── LICENSE.md ├── LICENSE.md.meta ├── Media.meta ├── Media ├── demo.0.gif ├── demo.0.gif.meta ├── demo.1.gif ├── demo.1.gif.meta ├── demo.10.gif ├── demo.10.gif.meta ├── demo.11.gif ├── demo.11.gif.meta ├── demo.12.jpg ├── demo.12.jpg.meta ├── demo.13.jpg ├── demo.13.jpg.meta ├── demo.14.jpg ├── demo.14.jpg.meta ├── demo.15.jpg ├── demo.15.jpg.meta ├── demo.16.jpg ├── demo.16.jpg.meta ├── demo.17.jpg ├── demo.17.jpg.meta ├── demo.2.gif ├── demo.2.gif.meta ├── demo.3.gif ├── demo.3.gif.meta ├── demo.4.gif ├── demo.4.gif.meta ├── demo.5.gif ├── demo.5.gif.meta ├── demo.6.gif ├── demo.6.gif.meta ├── demo.7.gif ├── demo.7.gif.meta ├── demo.8.png ├── demo.8.png.meta ├── demo.9.png ├── demo.9.png.meta ├── header.png ├── header.png.meta ├── overview.png ├── overview.png.meta ├── sdf-tex-painter-bezier-prop.png ├── sdf-tex-painter-bezier-prop.png.meta ├── sdf-tex-painter-path-view.png ├── sdf-tex-painter-path-view.png.meta ├── sdf-tex-painter-sdf-view.png ├── sdf-tex-painter-sdf-view.png.meta ├── settings-ui.0.png ├── settings-ui.0.png.meta ├── settings-ui.1.png └── settings-ui.1.png.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── Attribute.meta ├── Attribute │ ├── MinMaxRangeAttribute.cs │ └── MinMaxRangeAttribute.cs.meta ├── Experiment.meta ├── Experiment │ ├── SDFSpline.cs │ └── SDFSpline.cs.meta ├── Registry.meta ├── Registry │ ├── MaterialKeyword.cs │ ├── MaterialKeyword.cs.meta │ ├── MaterialProperty.cs │ ├── MaterialProperty.cs.meta │ ├── MaterialRecord.cs │ ├── MaterialRecord.cs.meta │ ├── MaterialRegistry.cs │ ├── MaterialRegistry.cs.meta │ ├── SDFUIGraphicsRegistry.cs │ └── SDFUIGraphicsRegistry.cs.meta ├── Resources.meta ├── Resources │ ├── Shaders.meta │ └── Shaders │ │ ├── SDF-UI.meta │ │ └── SDF-UI │ │ ├── ApproxSquircle-Distance.hlsl │ │ ├── ApproxSquircle-Distance.hlsl.meta │ │ ├── ApproxSquircle-Properties.hlsl │ │ ├── ApproxSquircle-Properties.hlsl.meta │ │ ├── ApproxSquircle.shader │ │ ├── ApproxSquircle.shader.meta │ │ ├── Arc-Distance.hlsl │ │ ├── Arc-Distance.hlsl.meta │ │ ├── Arc-Properties.hlsl │ │ ├── Arc-Properties.hlsl.meta │ │ ├── Arc.shader │ │ ├── Arc.shader.meta │ │ ├── Circle-Distance.hlsl │ │ ├── Circle-Distance.hlsl.meta │ │ ├── Circle-Properties.hlsl │ │ ├── Circle-Properties.hlsl.meta │ │ ├── Circle.shader │ │ ├── Circle.shader.meta │ │ ├── ClipByDistance.hlsl │ │ ├── ClipByDistance.hlsl.meta │ │ ├── Common-Properties.hlsl │ │ ├── Common-Properties.hlsl.meta │ │ ├── CutDisk-Distance.hlsl │ │ ├── CutDisk-Distance.hlsl.meta │ │ ├── CutDisk-Properties.hlsl │ │ ├── CutDisk-Properties.hlsl.meta │ │ ├── CutDisk.shader │ │ ├── CutDisk.shader.meta │ │ ├── FragmentOutput.hlsl │ │ ├── FragmentOutput.hlsl.meta │ │ ├── FragmentSetup.hlsl │ │ ├── FragmentSetup.hlsl.meta │ │ ├── Parallelogram-Distance.hlsl │ │ ├── Parallelogram-Distance.hlsl.meta │ │ ├── Parallelogram-Properties.hlsl │ │ ├── Parallelogram-Properties.hlsl.meta │ │ ├── Parallelogram.shader │ │ ├── Parallelogram.shader.meta │ │ ├── Pattern-Distance.hlsl │ │ ├── Pattern-Distance.hlsl.meta │ │ ├── Pie-Distance.hlsl │ │ ├── Pie-Distance.hlsl.meta │ │ ├── Pie-Properties.hlsl │ │ ├── Pie-Properties.hlsl.meta │ │ ├── Pie.shader │ │ ├── Pie.shader.meta │ │ ├── Quad-Distance.hlsl │ │ ├── Quad-Distance.hlsl.meta │ │ ├── Quad-Properties.hlsl │ │ ├── Quad-Properties.hlsl.meta │ │ ├── Quad.shader │ │ ├── Quad.shader.meta │ │ ├── SDFUtils.cginc │ │ ├── SDFUtils.cginc.meta │ │ ├── SamplingPosition.hlsl │ │ ├── SamplingPosition.hlsl.meta │ │ ├── ShaderSetup.hlsl │ │ ├── ShaderSetup.hlsl.meta │ │ ├── Spline-Distance.hlsl │ │ ├── Spline-Distance.hlsl.meta │ │ ├── Spline-Properties.hlsl │ │ ├── Spline-Properties.hlsl.meta │ │ ├── Spline-ShaderSetup.hlsl │ │ ├── Spline-ShaderSetup.hlsl.meta │ │ ├── Spline.shader │ │ ├── Spline.shader.meta │ │ ├── Squircle-Distance.hlsl │ │ ├── Squircle-Distance.hlsl.meta │ │ ├── Squircle-Properties.hlsl │ │ ├── Squircle-Properties.hlsl.meta │ │ ├── Squircle.shader │ │ ├── Squircle.shader.meta │ │ ├── Tex-Distance.hlsl │ │ ├── Tex-Distance.hlsl.meta │ │ ├── Tex-Properties.hlsl │ │ ├── Tex-Properties.hlsl.meta │ │ ├── Tex.shader │ │ ├── Tex.shader.meta │ │ ├── Triangle-Distance.hlsl │ │ ├── Triangle-Distance.hlsl.meta │ │ ├── Triangle-Properties.hlsl │ │ ├── Triangle-Properties.hlsl.meta │ │ ├── Triangle.shader │ │ └── Triangle.shader.meta ├── SDFApproxSquircle.cs ├── SDFApproxSquircle.cs.meta ├── SDFArc.cs ├── SDFArc.cs.meta ├── SDFCircle.cs ├── SDFCircle.cs.meta ├── SDFCircleBased.cs ├── SDFCircleBased.cs.meta ├── SDFCutDisk.cs ├── SDFCutDisk.cs.meta ├── SDFParallelogram.cs ├── SDFParallelogram.cs.meta ├── SDFPie.cs ├── SDFPie.cs.meta ├── SDFQuad.cs ├── SDFQuad.cs.meta ├── SDFSquircle.cs ├── SDFSquircle.cs.meta ├── SDFSquircleBased.cs ├── SDFSquircleBased.cs.meta ├── SDFTex.cs ├── SDFTex.cs.meta ├── SDFTriangle.cs ├── SDFTriangle.cs.meta ├── SDFUI.cs ├── SDFUI.cs.meta ├── SDFUISettings.cs ├── SDFUISettings.cs.meta ├── TLab.SDF-UI-Toolkit.Runtime.asmdef ├── TLab.SDF-UI-Toolkit.Runtime.asmdef.meta ├── Util.meta └── Util │ ├── LeftToggleAttribute.cs │ ├── LeftToggleAttribute.cs.meta │ ├── MathUtils.cs │ ├── MathUtils.cs.meta │ ├── MeshUtils.cs │ ├── MeshUtils.cs.meta │ ├── RenderPipelineUtil.cs │ └── RenderPipelineUtil.cs.meta ├── Samples.meta ├── Samples ├── SDF-UI-Toolkit-Sample.meta └── SDF-UI-Toolkit-Sample │ ├── Animation.meta │ ├── Animation │ ├── Rotate SDF Quad Anim.anim │ ├── Rotate SDF Quad Anim.anim.meta │ ├── SDF Quad Anim Controller.controller │ └── SDF Quad Anim Controller.controller.meta │ ├── New SDF Tex Painter 0.asset │ ├── New SDF Tex Painter 0.asset.meta │ ├── New SDF Tex Painter 1.asset │ ├── New SDF Tex Painter 1.asset.meta │ ├── SDF UI Toolkit Overview.prefab │ ├── SDF UI Toolkit Overview.prefab.meta │ ├── SDFUI Sample.unity │ ├── SDFUI Sample.unity.meta │ ├── SpriteAtlas.meta │ ├── SpriteAtlas │ ├── Sample Sprite Atlas.spriteatlasv2 │ ├── Sample Sprite Atlas.spriteatlasv2.meta │ ├── Sprites.meta │ └── Sprites │ │ ├── Girl.jpg │ │ ├── Girl.jpg.meta │ │ ├── Lenna.jpg │ │ ├── Lenna.jpg.meta │ │ ├── Mandrill.jpg │ │ ├── Mandrill.jpg.meta │ │ ├── Parrots.jpg │ │ └── Parrots.jpg.meta │ ├── sdf-ui-toolkit-pattern.asset │ ├── sdf-ui-toolkit-pattern.asset.meta │ ├── sdf-ui-toolkit-sample.asset │ └── sdf-ui-toolkit-sample.asset.meta ├── Test.meta ├── Test ├── BUILD_TEST.unity ├── BUILD_TEST.unity.meta ├── BuildTest.cs └── BuildTest.cs.meta ├── package.json └── package.json.meta /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b215de599ebb00d479bf19d048fd78ff 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Attribute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a10375c0142ba784c82fb33f8897344b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Attribute/MinMaxRangeDrawer.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | 4 | namespace TLab.UI.SDF.Editor 5 | { 6 | [CustomPropertyDrawer(typeof(MinMaxRangeAttribute))] 7 | public class MinMaxRangeDrawer : PropertyDrawer 8 | { 9 | const float kPrefixPaddingRight = 2; 10 | const float kSpacing = 5; 11 | 12 | public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) 13 | { 14 | label = EditorGUI.BeginProperty(position, label, property); 15 | 16 | EditorGUI.BeginChangeCheck(); 17 | 18 | var range = attribute as MinMaxRangeAttribute; 19 | float minValue = property.vector2Value.x; 20 | float maxValue = property.vector2Value.y; 21 | 22 | Rect labelPosition = new Rect(position.x, position.y, EditorGUIUtility.labelWidth, position.height); 23 | EditorGUI.LabelField(labelPosition, label); 24 | 25 | var lastIndentLevel = EditorGUI.indentLevel; 26 | EditorGUI.indentLevel = 0; 27 | 28 | Rect sliderPosition = new Rect( 29 | position.x + EditorGUIUtility.labelWidth + kPrefixPaddingRight + EditorGUIUtility.fieldWidth + kSpacing, 30 | position.y, 31 | position.width - EditorGUIUtility.labelWidth - 2 * (EditorGUIUtility.fieldWidth + kSpacing) - kPrefixPaddingRight, 32 | position.height 33 | ); 34 | EditorGUI.MinMaxSlider(sliderPosition, ref minValue, ref maxValue, range.min, range.max); 35 | 36 | Rect minPosition = new Rect(position.x + EditorGUIUtility.labelWidth + kPrefixPaddingRight, position.y, EditorGUIUtility.fieldWidth, position.height); 37 | minValue = EditorGUI.FloatField(minPosition, minValue); 38 | 39 | Rect maxPosition = new Rect(position.xMax - EditorGUIUtility.fieldWidth, position.y, EditorGUIUtility.fieldWidth, position.height); 40 | maxValue = EditorGUI.FloatField(maxPosition, maxValue); 41 | 42 | EditorGUI.indentLevel = lastIndentLevel; 43 | 44 | if (EditorGUI.EndChangeCheck()) 45 | property.vector2Value = new Vector2(minValue, maxValue); 46 | 47 | EditorGUI.EndProperty(); 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /Editor/Attribute/MinMaxRangeDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be98f427e27d070498f99ba34b92d8ca -------------------------------------------------------------------------------- /Editor/JobSystem.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4dd58a74175e8414780a3dcb7781452a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/JobSystem/SDFBezierJob.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15ea715822760da4b873578b78855a46 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFApproxSquircleEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFApproxSquircle), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFApproxSquircleEditor : SDFUIEditor 8 | { 9 | private SDFApproxSquircle m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFApproxSquircle; 16 | } 17 | 18 | 19 | protected override void DrawShapeProp() 20 | { 21 | base.DrawShapeProp(); 22 | EditorGUI.indentLevel++; 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.roundness), "Roundness"); 24 | EditorGUI.indentLevel--; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Editor/SDFApproxSquircleEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68e42cf4e0cc9804aa134884aa6f2b4a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFArcEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFArc), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFArcEditor : SDFUIEditor 8 | { 9 | private SDFArc m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFArc; 16 | } 17 | 18 | protected override void DrawShapeProp() 19 | { 20 | base.DrawShapeProp(); 21 | EditorGUI.indentLevel++; 22 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.fillAmount), "FillAmount"); 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.ratio), "Ratio"); 24 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.startAngle), "StartAngle"); 25 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.cornersRounding), "CornersRounding"); 26 | EditorGUI.indentLevel--; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Editor/SDFArcEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6def5483bbc2f9449c5cb9887d1fe58 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFCircleEditor.cs: -------------------------------------------------------------------------------- 1 | /*** 2 | * This code is adapted and modified from 3 | * https://github.com/kirevdokimov/Unity-UI-Rounded-Corners/blob/master/UiRoundedCorners/ImageWithRoundedCorners.cs 4 | * https://github.com/kirevdokimov/Unity-UI-Rounded-Corners/blob/master/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs 5 | **/ 6 | 7 | using UnityEditor; 8 | 9 | namespace TLab.UI.SDF.Editor 10 | { 11 | [CustomEditor(typeof(SDFCircle), true)] 12 | [CanEditMultipleObjects] 13 | public class SDFCircleEditor : SDFUIEditor 14 | { 15 | private SDFCircle m_instance; 16 | 17 | protected override void OnEnable() 18 | { 19 | base.OnEnable(); 20 | 21 | m_instance = target as SDFCircle; 22 | } 23 | 24 | protected override void DrawShapeProp() 25 | { 26 | 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Editor/SDFCircleEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 28307c1aa01e46947bdd6d0b68980fa1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFCutDiskEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFCutDisk), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFCutDiskEditor : SDFUIEditor 8 | { 9 | private SDFCutDisk m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFCutDisk; 16 | } 17 | 18 | protected override void DrawShapeProp() 19 | { 20 | base.DrawShapeProp(); 21 | EditorGUI.indentLevel++; 22 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.fillAmount), "FillAmount"); 23 | EditorGUI.indentLevel--; 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /Editor/SDFCutDiskEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 81d92bbd30ba8624a93b29f8b757cefe 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFParallelogramEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFParallelogram), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFParallelogramEditor : SDFUIEditor 8 | { 9 | private SDFParallelogram m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFParallelogram; 16 | } 17 | 18 | protected override void DrawShapeProp() 19 | { 20 | base.DrawShapeProp(); 21 | EditorGUI.indentLevel++; 22 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.slide), "Slide"); 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.roundness), "Roundness"); 24 | EditorGUI.indentLevel--; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Editor/SDFParallelogramEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ed9938a1275d84047b40feb0d3a89ea7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFPiEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFPie), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFPieEditor : SDFUIEditor 8 | { 9 | private SDFPie m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFPie; 16 | } 17 | 18 | protected override void DrawShapeProp() 19 | { 20 | base.DrawShapeProp(); 21 | EditorGUI.indentLevel++; 22 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.fillAmount), "FillAmount"); 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.roundness), "Roundness"); 24 | EditorGUI.indentLevel--; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Editor/SDFPiEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b4142fd63fb5be54cace0670fa7906d7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFQuadEditor.cs: -------------------------------------------------------------------------------- 1 | /*** 2 | * This code is adapted and modified from 3 | * https://github.com/kirevdokimov/Unity-UI-Rounded-Corners/blob/master/UiRoundedCorners/ImageWithRoundedCorners.cs 4 | * https://github.com/kirevdokimov/Unity-UI-Rounded-Corners/blob/master/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs 5 | **/ 6 | 7 | #if UNITY_EDITOR 8 | using UnityEditor; 9 | #endif 10 | 11 | namespace TLab.UI.SDF.Editor 12 | { 13 | [CustomEditor(typeof(SDFQuad), true)] 14 | [CanEditMultipleObjects] 15 | public class SDFQuadEditor : SDFUIEditor 16 | { 17 | private SDFQuad m_sdfQuad; 18 | 19 | protected override void OnEnable() 20 | { 21 | base.OnEnable(); 22 | 23 | m_sdfQuad = target as SDFQuad; 24 | } 25 | 26 | protected override void DrawShapeProp() 27 | { 28 | serializedObject.TryDrawProperty("m_" + nameof(m_sdfQuad.independent), "Independent Corner"); 29 | EditorGUI.indentLevel++; 30 | if (m_sdfQuad.independent) 31 | { 32 | EditorGUILayout.BeginHorizontal(); 33 | { 34 | EditorGUILayout.LabelField("Corners"); 35 | EditorGUILayout.BeginVertical(); 36 | { 37 | serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusZ)); 38 | serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusW)); 39 | } 40 | EditorGUILayout.EndVertical(); 41 | EditorGUILayout.BeginVertical(); 42 | { 43 | serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusX)); 44 | serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusY)); 45 | } 46 | EditorGUILayout.EndVertical(); 47 | } 48 | EditorGUILayout.EndHorizontal(); 49 | } 50 | else 51 | { 52 | serializedObject.TryDrawProperty("m_" + nameof(m_sdfQuad.radius), "Corner"); 53 | } 54 | EditorGUI.indentLevel--; 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Editor/SDFQuadEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 115ecc7dc0c07fd499deb3c710ace15f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFSplineEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | 4 | namespace TLab.UI.SDF.Editor 5 | { 6 | [CustomEditor(typeof(SDFSpline), true)] 7 | [CanEditMultipleObjects] 8 | public class SDFSplineEditor : SDFUIEditor 9 | { 10 | private SDFSpline m_instance; 11 | 12 | protected override void OnEnable() 13 | { 14 | base.OnEnable(); 15 | 16 | m_instance = target as SDFSpline; 17 | } 18 | 19 | protected override void DrawShapeProp() 20 | { 21 | base.DrawShapeProp(); 22 | EditorGUI.indentLevel++; 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.width), "Width"); 24 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.fill), "Fill"); 25 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.splines), "Splines"); 26 | EditorGUI.indentLevel--; 27 | } 28 | 29 | protected void MoveHandleGUI(in SDFSpline.QuadraticBezier bezier, int i, int index) 30 | { 31 | EditorGUI.BeginChangeCheck(); 32 | var controls = m_instance.GetControls(i, true); 33 | controls[index] = Handles.PositionHandle(controls[index], Quaternion.identity); 34 | if (EditorGUI.EndChangeCheck()) 35 | { 36 | Undo.RecordObject(m_instance, $"[{nameof(SDFSpline)}] Edit"); 37 | m_instance.SetControls(i, controls, true); 38 | } 39 | } 40 | 41 | protected void MoveLastHandleGUI(in SDFSpline.QuadraticBezier bezier, int i) 42 | { 43 | EditorGUI.BeginChangeCheck(); 44 | var controls = m_instance.GetControls(i, true); 45 | controls[controls.Length - 1] = Handles.PositionHandle(controls[controls.Length - 1], Quaternion.identity); 46 | if (EditorGUI.EndChangeCheck()) 47 | { 48 | Undo.RecordObject(m_instance, $"[{nameof(SDFSpline)}] Edit"); 49 | m_instance.SetControls(i, controls, true); 50 | } 51 | } 52 | 53 | protected unsafe void MoveHandleGUI(in SDFSpline.QuadraticBezier bezier, int i, int startIndex, int offset) 54 | { 55 | EditorGUI.BeginChangeCheck(); 56 | var controls = m_instance.GetControls(i, true); 57 | fixed (Vector2* start = controls) 58 | for (Vector2* current = (start + startIndex); current < (start + controls.Length); current += offset) 59 | *current = Handles.PositionHandle(*current, Quaternion.identity); 60 | if (EditorGUI.EndChangeCheck()) 61 | { 62 | Undo.RecordObject(m_instance, $"[{nameof(SDFSpline)}] Edit"); 63 | m_instance.SetControls(i, controls, true); 64 | } 65 | } 66 | 67 | public void MoveHandleGUILoop() 68 | { 69 | var count = m_instance.splines.Length; 70 | 71 | for (var i = 0; i < count; i++) 72 | { 73 | var bezier = m_instance[i]; 74 | if (!bezier.active || (bezier.controls.Length == 0)) 75 | continue; 76 | 77 | switch (bezier.curveMode) 78 | { 79 | case SDFSpline.QuadraticBezier.CurveMode.Free: 80 | case SDFSpline.QuadraticBezier.CurveMode.Line: 81 | MoveHandleGUI(bezier, i, 0, 1); 82 | break; 83 | default: // SDFSpline.QuadraticBezier.CurveMode.Auto 84 | MoveHandleGUI(bezier, i, 0); 85 | MoveHandleGUI(bezier, i, 1, 2); 86 | 87 | var num = bezier.controls.Length; 88 | if (num % 2 == 1) 89 | MoveLastHandleGUI(bezier, i); 90 | else if (num > 1) 91 | MoveHandleGUI(bezier, i, num - 2); 92 | break; 93 | } 94 | } 95 | } 96 | 97 | protected unsafe void OnSceneGUI() => MoveHandleGUILoop(); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /Editor/SDFSplineEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8d03f836ed9717d4ab1876774d59a338 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFSquircleEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFSquircle), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFSquircleEditor : SDFUIEditor 8 | { 9 | private SDFSquircle m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFSquircle; 16 | } 17 | 18 | 19 | protected override void DrawShapeProp() 20 | { 21 | base.DrawShapeProp(); 22 | EditorGUI.indentLevel++; 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.roundness), "Roundness"); 24 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.iteration), "Iteration"); 25 | EditorGUI.indentLevel--; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Editor/SDFSquircleEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 79a9e3f8cfa0ae2468868b6785180852 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [CustomEditor(typeof(SDFTex), true)] 6 | [CanEditMultipleObjects] 7 | public class SDFTexEditor : SDFUIEditor 8 | { 9 | private SDFTex m_instance; 10 | 11 | protected override void OnEnable() 12 | { 13 | base.OnEnable(); 14 | 15 | m_instance = target as SDFTex; 16 | } 17 | 18 | protected override void DrawShapeProp() 19 | { 20 | base.DrawShapeProp(); 21 | EditorGUI.indentLevel++; 22 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.radius), "Radius"); 23 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.maxDist), "MaxDist"); 24 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.sdfTexture), "SDFTexture"); 25 | EditorGUI.indentLevel--; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Editor/SDFTexEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bc747d9919fdb704b96f91f4162edd94 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d8e604c35e3eae4fbc92df37ed29b0f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/BezierPainter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 062bb2b96b8cb2c4bad032e4ceee8e1a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/Primitive.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | 4 | namespace TLab.UI.SDF.Editor 5 | { 6 | public static class Primitive 7 | { 8 | public enum PrimitiveType 9 | { 10 | Circle, 11 | Polygon, 12 | }; 13 | 14 | public static Bezier.Handle[] Circle(int numPoints, float size, Vector2 offset) 15 | { 16 | size *= 0.5f; // radius 17 | var handles = new List(); 18 | var controlSize = Mathf.Tan(Mathf.PI / (2 * numPoints)) * 4 / 3 * size; 19 | var angleOffset = Mathf.PI / 2 + ((numPoints % 2 == 0) ? Mathf.PI / numPoints : 0); 20 | for (var i = 0; i < numPoints; i++) 21 | { 22 | var theta = Mathf.PI * 2 * i / numPoints + angleOffset; 23 | var cos = Mathf.Cos(theta); 24 | var sin = Mathf.Sin(theta); 25 | var handle = new Bezier.Handle(new Bezier.Handle(new Vector2(cos, sin) * -size + offset)); 26 | handle.controlB = new Vector2(sin, -cos) * -controlSize; 27 | handle.controlA = new Vector2(sin, -cos) * controlSize; 28 | handles.Add(handle); 29 | } 30 | return handles.ToArray(); 31 | } 32 | 33 | public static Bezier.Handle[] Polygon(int numPoints, float size, Vector2 offset) 34 | { 35 | size *= 0.5f; // radius 36 | var handles = new List(); 37 | var angleOffset = Mathf.PI / 2 + ((numPoints % 2 == 0) ? Mathf.PI / numPoints : 0); 38 | for (var i = 0; i < numPoints; i++) 39 | { 40 | var theta = Mathf.PI * 2 * i / numPoints + angleOffset; 41 | handles.Add(new Bezier.Handle(new Vector2(Mathf.Cos(theta), Mathf.Sin(theta)) * -size + offset)); 42 | } 43 | return handles.ToArray(); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/Primitive.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b26e8eea9bb6ec439632365c9a17579 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/RasterizeOptions.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | [System.Serializable] 6 | public class RasterizeOptions 7 | { 8 | [Min(0f)] public float maxDist = 50.0f; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/RasterizeOptions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e990fb40b723a974a8180db79cc47b32 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/SDFTexPainter.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace TLab.UI.SDF.Editor 4 | { 5 | public enum PreviewMode 6 | { 7 | Path, 8 | SDF 9 | }; 10 | 11 | [CreateAssetMenu(fileName = "SDF Tex Painter", menuName = "TLab/UI/SDF/SDF Tex Painter")] 12 | public class SDFTexPainter : ScriptableObject 13 | { 14 | [Min(0f)] public Vector2Int size = new Vector2Int(512, 512); 15 | [Min(0f)] public int texScale = 100; 16 | public Color areaBorderCol = Color.gray; 17 | public Vector2Int areaPos; 18 | [Min(0f)] public float areaScale = 1.0f; 19 | public RasterizeOptions rasterizeOptions; 20 | public PreviewMode previewMode = PreviewMode.Path; 21 | public BezierPainter bezierPainter; 22 | public Texture2D sdfTex; 23 | public string savePath = ""; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/SDFTexPainter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 222c946049b965d4b917c69e3cfde75e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/SDFTexPainterEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be16f594fbb8f924188c4a5ac4db8a5b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/Shape.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 81555197df8f1244681a47182695d459 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTexPainter/ShapePainter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d94a85b7fc28298448fe83891bcdea90 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFTriangleEditor.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | 4 | namespace TLab.UI.SDF.Editor 5 | { 6 | [CustomEditor(typeof(SDFTriangle), true)] 7 | [CanEditMultipleObjects] 8 | public class SDFTriangleEditor : SDFUIEditor 9 | { 10 | private SDFTriangle m_instance; 11 | 12 | protected override void OnEnable() 13 | { 14 | base.OnEnable(); 15 | 16 | m_instance = target as SDFTriangle; 17 | } 18 | 19 | protected Vector2[] Edit() 20 | { 21 | var corners = new Vector2[3]; 22 | for (int i = 0; i < 3; i++) 23 | { 24 | var oldPos = m_instance.GetCorner(i, true); 25 | var newPos = Handles.PositionHandle(oldPos, Quaternion.identity); 26 | 27 | corners[i] = newPos; 28 | } 29 | return corners; 30 | } 31 | 32 | protected override void DrawShapeProp() 33 | { 34 | base.DrawShapeProp(); 35 | EditorGUI.indentLevel++; 36 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.roundness), "Roundness"); 37 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.corner0), "Corner0"); 38 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.corner1), "Corner1"); 39 | serializedObject.TryDrawProperty("m_" + nameof(m_instance.corner2), "Corner2"); 40 | EditorGUI.indentLevel--; 41 | } 42 | 43 | protected void OnSceneGUI() 44 | { 45 | EditorGUI.BeginChangeCheck(); 46 | 47 | var corners = Edit(); 48 | 49 | if (EditorGUI.EndChangeCheck()) 50 | { 51 | Undo.RecordObject(m_instance, $"[{nameof(SDFTriangle)}] Edit"); 52 | 53 | for (int i = 0; i < corners.Length; i++) 54 | m_instance.SetCorner(i, corners[i], true); 55 | } 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /Editor/SDFTriangleEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a790a2c55de87141b855ece6d7ce681 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/SDFUIEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38b3d6f57eb964649ac39a092c15929c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/Settings Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e153679a07911ef46b37d936407ca906 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Settings Editor/SDFUISettingsEditor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Newtonsoft.Json.Linq; 5 | using UnityEditor; 6 | using UnityEngine; 7 | using UnityEditor.UIElements; 8 | using UnityEngine.UIElements; 9 | using static TLab.UI.SDF.SDFUI; 10 | 11 | namespace TLab.UI.SDF.Editor 12 | { 13 | public class SDFUISettingsEditor : EditorWindow 14 | { 15 | [SerializeField] private VisualTreeAsset visualTree; 16 | [SerializeField] private TextAsset package; 17 | private SDFUISettings settings; 18 | private SerializedObject serializedObject; 19 | 20 | private const string PACKAGE_NAME = "com.tlabaltoh.sdf-ui-toolkit"; 21 | 22 | // Asset path is used in development phase (if this package is not installed by upm) 23 | private static string PACKAGE_PATH => IsThisPackage() ? $"Packages/{PACKAGE_NAME}" : "Assets/TLab/Unity-SDF-UI-Toolkit"; 24 | 25 | [MenuItem("TLab/UI/SDF/Settings")] 26 | public static void Create() 27 | { 28 | SDFUISettingsEditor wnd = GetWindow(true, "SDFUISettings"); 29 | } 30 | 31 | public static bool IsPackageInstalled(string package) 32 | { 33 | string jsonText = System.IO.File.ReadAllText("Packages/manifest.json"); 34 | 35 | JToken json = JToken.Parse(jsonText); 36 | 37 | var dependencies = json["dependencies"]; 38 | return dependencies[package] != null; 39 | } 40 | 41 | public static bool IsThisPackage() 42 | { 43 | return IsPackageInstalled(PACKAGE_NAME); 44 | } 45 | 46 | public void CreateGUI() 47 | { 48 | settings = SDFUISettings.Instance; 49 | serializedObject = new SerializedObject(settings); 50 | 51 | VisualElement root = rootVisualElement; 52 | 53 | // Import UXML 54 | if (visualTree == null) 55 | visualTree = AssetDatabase.LoadAssetAtPath($"{PACKAGE_PATH}/Editor/Settings Editor/SDFUISettingsEditor.uxml"); 56 | VisualElement uxml = visualTree.Instantiate(); 57 | root.Add(uxml); 58 | 59 | DropdownField aa = root.Query("aa-algorithm"); 60 | SerializedProperty aaProperty = serializedObject.FindProperty("_defaultAA"); 61 | 62 | InitDropDown(aa, aaProperty, AntialiasingType.Default, x => (AntialiasingType)x, x => (int)x); 63 | 64 | FloatField outlineWidth = root.Query("outline-width"); 65 | outlineWidth.RegisterValueChangedCallback(x => outlineWidth.value = (outlineWidth.value < 0) ? 0 : outlineWidth.value); 66 | 67 | Label name = root.Query