Skip to content

Commit 35358de

Browse files
committed
add feature 'ui effect'
1 parent 6ed9542 commit 35358de

40 files changed

+2324
-1448
lines changed

Editor/SDFQuadEditor.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,42 +14,42 @@ namespace TLab.UI.SDF.Editor
1414
[CanEditMultipleObjects]
1515
public class SDFQuadEditor : SDFUIEditor
1616
{
17-
private SDFQuad m_sdfQued;
17+
private SDFQuad m_sdfQuad;
1818

1919
protected override void OnEnable()
2020
{
2121
base.OnEnable();
2222

23-
m_sdfQued = target as SDFQuad;
23+
m_sdfQuad = target as SDFQuad;
2424
}
2525

2626
protected override void DrawShapeProp()
2727
{
28-
serializedObject.TryDrawProperty("m_" + nameof(m_sdfQued.independent), "Independent Corner");
28+
serializedObject.TryDrawProperty("m_" + nameof(m_sdfQuad.independent), "Independent Corner");
2929
EditorGUI.indentLevel++;
30-
if (m_sdfQued.independent)
30+
if (m_sdfQuad.independent)
3131
{
3232
EditorGUILayout.BeginHorizontal();
3333
{
3434
EditorGUILayout.LabelField("Corners");
3535
EditorGUILayout.BeginVertical();
3636
{
37-
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQued.radiusZ));
38-
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQued.radiusW));
37+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusZ));
38+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusW));
3939
}
4040
EditorGUILayout.EndVertical();
4141
EditorGUILayout.BeginVertical();
4242
{
43-
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQued.radiusX));
44-
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQued.radiusY));
43+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusX));
44+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_sdfQuad.radiusY));
4545
}
4646
EditorGUILayout.EndVertical();
4747
}
4848
EditorGUILayout.EndHorizontal();
4949
}
5050
else
5151
{
52-
serializedObject.TryDrawProperty("m_" + nameof(m_sdfQued.radius), "Corner");
52+
serializedObject.TryDrawProperty("m_" + nameof(m_sdfQuad.radius), "Corner");
5353
}
5454
EditorGUI.indentLevel--;
5555
}

Editor/SDFTexPainter/BezierPainter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ public override void Edit()
631631

632632
public void GenSDFTexture(in NativeArray<byte> pixelBuffer, Vector2Int size, Vector2Int texSize, RasterizeOptions options)
633633
{
634-
Debug.Log(THIS_NAME + "Start generate sdf from bezier shape");
634+
Debug.Log(THIS_NAME + $"{nameof(GenSDFTexture)}:Start");
635635

636636
var halfSize = 0.5f * new Vector2(size.x, size.y);
637637

@@ -687,7 +687,7 @@ public void GenSDFTexture(in NativeArray<byte> pixelBuffer, Vector2Int size, Vec
687687
splinesN.Dispose();
688688
beziersN.Dispose();
689689

690-
Debug.Log(THIS_NAME + "Finish generate sdf from bezier shape");
690+
Debug.Log(THIS_NAME + $"{nameof(GenSDFTexture)}:Finish");
691691
}
692692
}
693693
}

Editor/SDFTexPainter/SDFTexPainterEditor.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,8 @@ public override void OnInspectorGUI()
8080
{
8181
GenSDFTexture();
8282
});
83-
8483
if (GUILayout.Button("Save"))
8584
Save();
86-
8785
if (GUILayout.Button("Save as"))
8886
SaveAs();
8987
EditorGUILayout.EndHorizontal();
@@ -97,11 +95,24 @@ private void Save()
9795
serializedObject.TryGetObject(nameof(m_instance.sdfTex), out Texture2D sdfTex))
9896
{
9997
if (AssetUtil.DirectoryExists(savePath))
98+
{
10099
AssetUtil.SaveTexture(savePath, ref sdfTex);
100+
101+
serializedObject.Call(() =>
102+
{
103+
AssetUtil.SaveTexture(savePath, ref sdfTex);
104+
});
105+
}
101106
else if (AssetUtil.SelectSavePath(savePath, out savePath))
107+
{
102108
AssetUtil.SaveTexture(savePath, ref sdfTex);
103109

104-
serializedObject.TrySetValue(nameof(m_instance.savePath), savePath);
110+
serializedObject.Call(() =>
111+
{
112+
m_instance.savePath = savePath;
113+
EditorUtility.SetDirty(m_instance);
114+
});
115+
}
105116
}
106117
}
107118

@@ -111,9 +122,15 @@ private void SaveAs()
111122
serializedObject.TryGetObject(nameof(m_instance.sdfTex), out Texture2D sdfTex))
112123
{
113124
if (AssetUtil.SelectSavePath(savePath, out savePath))
125+
{
114126
AssetUtil.SaveTexture(savePath, ref sdfTex);
115127

116-
serializedObject.TrySetValue(nameof(m_instance.savePath), savePath);
128+
serializedObject.Call(() =>
129+
{
130+
m_instance.savePath = savePath;
131+
EditorUtility.SetDirty(m_instance);
132+
});
133+
}
117134
}
118135
}
119136

Editor/SDFUIEditor.cs

Lines changed: 74 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -132,21 +132,47 @@ protected virtual void DrawProp()
132132
}
133133
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.fillColor), "FillColor");
134134

135-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicPatternType), "Pattern");
135+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectType), "Effect");
136136
EditorGUI.indentLevel++;
137-
var patternType = m_baseInstance.graphicPatternType;
138-
switch (patternType)
137+
var effectType = m_baseInstance.graphicEffectType;
138+
switch (effectType)
139139
{
140-
case SDFUI.PatternType.None:
140+
case SDFUI.EffectType.None:
141141
break;
142-
case SDFUI.PatternType.Shiny:
143-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicPatternColor), "Color");
144-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicShinyWidth), "Width");
145-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicShinyAngle), "Angle");
146-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicShinyBlur), "Blur");
147-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicPatternOffset), "Offset");
142+
case SDFUI.EffectType.Shiny:
143+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectColor), "Color");
144+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectAngle), "Angle");
145+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectShinyWidth), "Width");
146+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectShinyBlur), "Blur");
147+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectOffset), "Offset");
148148
break;
149-
case SDFUI.PatternType.Texture:
149+
case SDFUI.EffectType.Pattern:
150+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectColor), "Color");
151+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectAngle), "Angle");
152+
153+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectPatternTexture), "Texture");
154+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectPatternRow), "Row");
155+
156+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectOffset), "Offset");
157+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.graphicEffectPatternScale), "Scale");
158+
159+
EditorGUILayout.BeginHorizontal();
160+
{
161+
EditorGUILayout.LabelField("Params");
162+
EditorGUILayout.BeginVertical();
163+
{
164+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.graphicEffectPatternParamsX));
165+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.graphicEffectPatternParamsZ));
166+
}
167+
EditorGUILayout.EndVertical();
168+
EditorGUILayout.BeginVertical();
169+
{
170+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.graphicEffectPatternParamsY));
171+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.graphicEffectPatternParamsW));
172+
}
173+
EditorGUILayout.EndVertical();
174+
}
175+
EditorGUILayout.EndHorizontal();
150176
break;
151177
}
152178
EditorGUI.indentLevel--;
@@ -170,27 +196,48 @@ protected virtual void DrawOutlineProp()
170196
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineInnerSoftness), "InnerSoftness");
171197
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineType), "Type");
172198

173-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternType), "Pattern");
199+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectType), "Effect");
174200

175201
EditorGUI.indentLevel++;
176-
var patternType = m_baseInstance.outlinePatternType;
177-
switch (patternType)
202+
var effectType = m_baseInstance.outlineEffectType;
203+
switch (effectType)
178204
{
179-
case SDFUI.PatternType.None:
205+
case SDFUI.EffectType.None:
180206
break;
181-
case SDFUI.PatternType.Shiny:
182-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternColor), "Color");
183-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineShinyWidth), "Width");
184-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineShinyAngle), "Angle");
185-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineShinyBlur), "Blur");
186-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternOffset), "Offset");
207+
case SDFUI.EffectType.Shiny:
208+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectColor), "Color");
209+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectAngle), "Angle");
210+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectShinyWidth), "Width");
211+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectShinyBlur), "Blur");
212+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectOffset), "Offset");
187213
break;
188-
case SDFUI.PatternType.Texture:
189-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternColor), "Color");
190-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternTexture), "Texture");
191-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternTextureRow), "Row");
192-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternTextureScale), "Scale");
193-
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlinePatternOffset), "Offset");
214+
case SDFUI.EffectType.Pattern:
215+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectColor), "Color");
216+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectAngle), "Angle");
217+
218+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectPatternTexture), "Texture");
219+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectPatternRow), "Row");
220+
221+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectOffset), "Offset");
222+
serializedObject.TryDrawProperty("m_" + nameof(m_baseInstance.outlineEffectPatternScale), "Scale");
223+
224+
EditorGUILayout.BeginHorizontal();
225+
{
226+
EditorGUILayout.LabelField("Params");
227+
EditorGUILayout.BeginVertical();
228+
{
229+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.outlineEffectPatternParamsX));
230+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.outlineEffectPatternParamsZ));
231+
}
232+
EditorGUILayout.EndVertical();
233+
EditorGUILayout.BeginVertical();
234+
{
235+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.outlineEffectPatternParamsY));
236+
serializedObject.TryDrawPropertyNoLabel("m_" + nameof(m_baseInstance.outlineEffectPatternParamsW));
237+
}
238+
EditorGUILayout.EndVertical();
239+
}
240+
EditorGUILayout.EndHorizontal();
194241
break;
195242
}
196243
}

Editor/Util/AssetUtil.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,33 @@ public static string GetFileName(string path, bool ignore)
1313
{
1414
string[] split = fileName.Split('.');
1515
if (split.Length > 1 && !split[split.Length - 1].Contains('\\') && !split[split.Length - 1].Contains('/'))
16-
{
1716
return split[split.Length - 2];
18-
}
1917
}
2018
return fileName;
2119
}
2220

2321
public static void SaveTexture(string savePath, ref Texture2D texture)
2422
{
2523
if (Path.GetExtension(savePath) != ".asset")
26-
{
2724
savePath += ".asset";
28-
}
2925

30-
Texture2D asset = AssetDatabase.LoadAssetAtPath<Texture2D>(savePath);
26+
var asset = AssetDatabase.LoadAssetAtPath<Texture2D>(savePath);
3127

3228
texture.name = GetFileName(savePath, true);
29+
texture.wrapMode = TextureWrapMode.Clamp;
3330

3431
if (asset != null)
3532
{
3633
asset.name = texture.name;
3734
EditorUtility.CopySerialized(texture, asset);
3835
}
3936
else
40-
{
4137
AssetDatabase.CreateAsset(texture, savePath);
42-
}
4338

4439
AssetDatabase.SaveAssets();
4540
AssetDatabase.Refresh();
4641

47-
Debug.Log("Save texture: " + savePath);
42+
Debug.Log($"{nameof(SaveTexture)}: " + savePath);
4843
}
4944

5045
public static string GetDiskPath(string assetPath)

Editor/Util/SerializeUtil.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ public static bool TryGetValueList<T>(this SerializedObject serializedObject, st
130130
return false;
131131
}
132132

133+
/// <summary>
134+
/// This function seems to need to call EditorUtility.SetDirty after calling this one to save the property change (But not sure, it is possible I missed something somewhere ...).
135+
/// In most cases, I prefer to replace it with serializeObject.Call(() => {@object.value = value; EditorUtility.SetDirty(@object)});
136+
/// </summary>
137+
/// <returns></returns>
133138
public static bool TrySetValue<T>(this SerializedObject serializedObject, string name, T value) where T : class
134139
{
135140
try
@@ -220,14 +225,8 @@ public static void Call(this SerializedObject serializedObject, UnityAction acti
220225
}
221226

222227
//
223-
// For Custom Class
224228
// link: https://gist.github.com/douduck08/6d3e323b538a741466de00c30aa4b61f
225229
//
226-
// I found that assigning a value to the setter
227-
// of prop.objectReferenceValue returns only null
228-
// from the getter. is prop.objectReferenceValue a
229-
// property for objects with asset references ?
230-
//
231230

232231
private static readonly Regex rgx = new Regex(@"\[\d+\]", RegexOptions.Compiled);
233232

@@ -240,6 +239,7 @@ public static void QuickApply(this SerializedObject serializedObject)
240239
public static T GetValue<T>(this SerializedProperty property) where T : class
241240
{
242241
property.serializedObject.QuickApply();
242+
243243
var obj = (object)property.serializedObject.targetObject;
244244
var path = property.propertyPath.Replace(".Array.data", "");
245245
var fieldStructure = path.Split('.');

Media/demo.0.gif

-2.5 MB
Loading

Media/demo.1.gif

-3.77 MB
Loading

Media/demo.2.gif

-1.45 MB
Loading

Media/demo.3.gif

-1.56 MB
Loading

0 commit comments

Comments
 (0)