修复Font无法自定义问题,优化代码

This commit is contained in:
monitor1394
2019-07-24 23:38:23 +08:00
parent 78123b74ae
commit a54415059e
10 changed files with 53 additions and 43 deletions

View File

@@ -113,7 +113,7 @@ namespace XCharts
{ {
drawRect.width = EditorGUIUtility.labelWidth + 10; drawRect.width = EditorGUIUtility.labelWidth + 10;
m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data"); m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data");
ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop); ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop, pos.width);
drawRect.width = pos.width; drawRect.width = pos.width;
if (m_DataFoldout[index]) if (m_DataFoldout[index])
{ {

View File

@@ -44,7 +44,7 @@ namespace XCharts
drawRect.y += EditorGUI.GetPropertyHeight(location); drawRect.y += EditorGUI.GetPropertyHeight(location);
drawRect.width = EditorGUIUtility.labelWidth + 10; drawRect.width = EditorGUIUtility.labelWidth + 10;
m_DataFoldout = EditorGUI.Foldout(drawRect, m_DataFoldout, "Data"); m_DataFoldout = EditorGUI.Foldout(drawRect, m_DataFoldout, "Data");
ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop); ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop,pos.width);
drawRect.width = pos.width; drawRect.width = pos.width;
if (m_DataFoldout) if (m_DataFoldout)
{ {

View File

@@ -72,14 +72,14 @@ namespace XCharts
switch ((Location.Align)align.enumValueIndex) switch ((Location.Align)align.enumValueIndex)
{ {
case Location.Align.Center: case Location.Align.Center:
return 1 * EditorGUIUtility.singleLineHeight + 0 * EditorGUIUtility.standardVerticalSpacing; return 1 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing;
case Location.Align.TopCenter: case Location.Align.TopCenter:
case Location.Align.BottomCenter: case Location.Align.BottomCenter:
case Location.Align.CenterLeft: case Location.Align.CenterLeft:
case Location.Align.CenterRight: case Location.Align.CenterRight:
return 2 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing; return 2 * EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing;
default: default:
return 3 * EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing; return 3 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing;
} }
} }
} }

View File

@@ -112,7 +112,7 @@ namespace XCharts
} }
drawRect.width = EditorGUIUtility.labelWidth + 10; drawRect.width = EditorGUIUtility.labelWidth + 10;
m_IndicatorToggle = EditorGUI.Foldout(drawRect, m_IndicatorToggle, "Indicators"); m_IndicatorToggle = EditorGUI.Foldout(drawRect, m_IndicatorToggle, "Indicators");
ChartEditorHelper.MakeJsonData(ref drawRect, ref m_IndicatorJsonAreaToggle, ref m_IndicatorJsonAreaText, prop); ChartEditorHelper.MakeJsonData(ref drawRect, ref m_IndicatorJsonAreaToggle, ref m_IndicatorJsonAreaText, prop,pos.width);
drawRect.width = pos.width; drawRect.width = pos.width;
if (m_IndicatorToggle) if (m_IndicatorToggle)
{ {

View File

@@ -51,17 +51,22 @@ namespace XCharts
EditorGUI.PropertyField(drawRect, m_Symbol); EditorGUI.PropertyField(drawRect, m_Symbol);
drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol); drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol);
} }
drawRect.width = EditorGUIUtility.labelWidth + 10; drawRect.width = EditorGUIUtility.labelWidth + 10;
m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data"); m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data");
ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop); ChartEditorHelper.MakeJsonData(ref drawRect, ref m_ShowJsonDataArea, ref m_JsonDataAreaText, prop, pos.width);
drawRect.width = pos.width; drawRect.width = pos.width;
if (m_DataFoldout[index]) if (m_DataFoldout[index])
{ {
EditorGUI.indentLevel++; EditorGUI.indentLevel++;
EditorGUI.PropertyField(drawRect, m_ShowDataName);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; float nameWid = 76;
EditorGUI.PropertyField(drawRect, m_DataDimension); EditorGUI.PropertyField(new Rect(drawRect.x, drawRect.y, pos.width - nameWid - 2, pos.height), m_DataDimension);
var nameRect = new Rect(pos.width - nameWid + 14, drawRect.y, nameWid, pos.height);
var btnName = m_ShowDataName.boolValue ? "Hide Name" : "Show Name";
if (GUI.Button(nameRect, new GUIContent(btnName)))
{
m_ShowDataName.boolValue = !m_ShowDataName.boolValue;
}
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
var listSize = m_Datas.arraySize; var listSize = m_Datas.arraySize;
@@ -84,20 +89,20 @@ namespace XCharts
int num = listSize > 10 ? 10 : listSize; int num = listSize > 10 ? 10 : listSize;
for (int i = 0; i < num; i++) for (int i = 0; i < num; i++)
{ {
DrawDataElement(ref drawRect, dimension, m_Datas, showName, i); DrawDataElement(ref drawRect, dimension, m_Datas, showName, i, pos.width);
} }
if (num >= 10) if (num >= 10)
{ {
EditorGUI.LabelField(drawRect, "..."); EditorGUI.LabelField(drawRect, "...");
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
DrawDataElement(ref drawRect, dimension, m_Datas, showName, listSize - 1); DrawDataElement(ref drawRect, dimension, m_Datas, showName, listSize - 1, pos.width);
} }
} }
else else
{ {
for (int i = 0; i < m_Datas.arraySize; i++) for (int i = 0; i < m_Datas.arraySize; i++)
{ {
DrawDataElement(ref drawRect, dimension, m_Datas, showName, i); DrawDataElement(ref drawRect, dimension, m_Datas, showName, i, pos.width);
} }
} }
EditorGUI.indentLevel--; EditorGUI.indentLevel--;
@@ -106,7 +111,7 @@ namespace XCharts
} }
} }
private void DrawDataElement(ref Rect drawRect, int dimension, SerializedProperty m_Datas, bool showName, int index) private void DrawDataElement(ref Rect drawRect, int dimension, SerializedProperty m_Datas, bool showName, int index, float currentWidth)
{ {
var lastX = drawRect.x; var lastX = drawRect.x;
var lastWid = drawRect.width; var lastWid = drawRect.width;
@@ -128,8 +133,8 @@ namespace XCharts
else else
{ {
EditorGUI.LabelField(drawRect, "Element " + index); EditorGUI.LabelField(drawRect, "Element " + index);
var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15 - 1; var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * 15;
var dataWidTotal = (EditorGUIUtility.currentViewWidth - (startX + EditorGUI.indentLevel * 15 + 1) - 5); var dataWidTotal = (currentWidth - (startX + 20.5f + 1));
var dataWid = dataWidTotal / fieldCount; var dataWid = dataWidTotal / fieldCount;
var xWid = dataWid - 4; var xWid = dataWid - 4;
for (int i = 0; i < dimension; i++) for (int i = 0; i < dimension; i++)
@@ -171,7 +176,7 @@ namespace XCharts
{ {
height += 6 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing; height += 6 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing;
SerializedProperty type = prop.FindPropertyRelative("m_Type"); SerializedProperty type = prop.FindPropertyRelative("m_Type");
if (type.enumValueIndex == (int)SerieType.Line if (type.enumValueIndex == (int)SerieType.Line
|| type.enumValueIndex == (int)SerieType.Scatter || type.enumValueIndex == (int)SerieType.Scatter
|| type.enumValueIndex == (int)SerieType.EffectScatter) || type.enumValueIndex == (int)SerieType.EffectScatter)
{ {
@@ -181,7 +186,7 @@ namespace XCharts
if (m_DataFoldout[index]) if (m_DataFoldout[index])
{ {
SerializedProperty m_Data = prop.FindPropertyRelative("m_Data"); SerializedProperty m_Data = prop.FindPropertyRelative("m_Data");
int num = m_Data.arraySize + 3; int num = m_Data.arraySize + 2;
if (num > 30) num = 13; if (num > 30) num = 13;
height += num * EditorGUIUtility.singleLineHeight + (num - 1) * EditorGUIUtility.standardVerticalSpacing; height += num * EditorGUIUtility.singleLineHeight + (num - 1) * EditorGUIUtility.standardVerticalSpacing;
} }

View File

@@ -62,13 +62,13 @@ namespace XCharts
switch (sizeType) switch (sizeType)
{ {
case SerieSymbolSizeType.Custom: case SerieSymbolSizeType.Custom:
return 4 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing; return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.FromData: case SerieSymbolSizeType.FromData:
return 5 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing; return 5 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing;
case SerieSymbolSizeType.Callback: case SerieSymbolSizeType.Callback:
return 4 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing; return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
} }
return 4 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing; return 4 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing;
} }
} }
} }

View File

@@ -58,11 +58,11 @@ namespace XCharts
ChartEditorHelper.MakeFoldout(ref drawRect, ref m_ThemeModuleToggle, "Theme"); ChartEditorHelper.MakeFoldout(ref drawRect, ref m_ThemeModuleToggle, "Theme");
drawRect.x = EditorGUIUtility.labelWidth - (EditorGUI.indentLevel - 1) * 15 - 2; drawRect.x = EditorGUIUtility.labelWidth - (EditorGUI.indentLevel - 1) * 15 - 2;
drawRect.width = EditorGUIUtility.currentViewWidth - EditorGUIUtility.labelWidth - (m_ThemeModuleToggle ? 80 : 18); drawRect.width = defaultWidth - EditorGUIUtility.labelWidth - (m_ThemeModuleToggle ? 45 : 0);
EditorGUI.PropertyField(drawRect, m_Theme, GUIContent.none); EditorGUI.PropertyField(drawRect, m_Theme, GUIContent.none);
if (m_ThemeModuleToggle) if (m_ThemeModuleToggle)
{ {
drawRect.x = EditorGUIUtility.currentViewWidth - 65; drawRect.x = defaultWidth - 30;
drawRect.width = 45; drawRect.width = 45;
if (GUI.Button(drawRect, new GUIContent("Reset", "Reset to theme default color"))) if (GUI.Button(drawRect, new GUIContent("Reset", "Reset to theme default color")))
{ {
@@ -123,11 +123,12 @@ namespace XCharts
drawRect.width = defaultWidth; drawRect.width = defaultWidth;
++EditorGUI.indentLevel; ++EditorGUI.indentLevel;
var font = m_Font.objectReferenceValue as Font; EditorGUI.BeginChangeCheck();
EditorGUI.PropertyField(drawRect, m_Font); var font =m_CustomFont.objectReferenceValue != null?m_CustomFont: m_Font;
if (font != m_Font.objectReferenceValue) EditorGUI.PropertyField(drawRect, font);
if (EditorGUI.EndChangeCheck())
{ {
m_CustomFont.objectReferenceValue = m_Font.objectReferenceValue; m_CustomFont.objectReferenceValue = font.objectReferenceValue;
} }
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;

View File

@@ -19,13 +19,13 @@ public class ChartEditorHelper
} }
public static void MakeJsonData(ref Rect drawRect, ref bool showTextArea, ref string inputString, public static void MakeJsonData(ref Rect drawRect, ref bool showTextArea, ref string inputString,
SerializedProperty prop) SerializedProperty prop,float currentWidth)
{ {
SerializedProperty stringDataProp = prop.FindPropertyRelative("m_JsonData"); SerializedProperty stringDataProp = prop.FindPropertyRelative("m_JsonData");
SerializedProperty needParseProp = prop.FindPropertyRelative("m_DataFromJson"); SerializedProperty needParseProp = prop.FindPropertyRelative("m_DataFromJson");
float defalutX = drawRect.x; float defalutX = drawRect.x;
drawRect.x = EditorGUIUtility.labelWidth + 15; drawRect.x = EditorGUIUtility.labelWidth + 14;
drawRect.width = EditorGUIUtility.currentViewWidth - EditorGUIUtility.labelWidth - 35; drawRect.width = currentWidth - EditorGUIUtility.labelWidth;
if (GUI.Button(drawRect, new GUIContent("Parse JsonData", "Parse data from input json"))) if (GUI.Button(drawRect, new GUIContent("Parse JsonData", "Parse data from input json")))
{ {
showTextArea = !showTextArea; showTextArea = !showTextArea;
@@ -40,10 +40,10 @@ public class ChartEditorHelper
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
if (showTextArea) if (showTextArea)
{ {
drawRect.width = EditorGUIUtility.currentViewWidth - drawRect.x - 20; drawRect.width = currentWidth;
drawRect.height = EditorGUIUtility.singleLineHeight * 3; drawRect.height = EditorGUIUtility.singleLineHeight * 4;
inputString = EditorGUI.TextArea(drawRect, inputString); inputString = EditorGUI.TextArea(drawRect, inputString);
drawRect.y += EditorGUIUtility.singleLineHeight * 3 + EditorGUIUtility.standardVerticalSpacing; drawRect.y += EditorGUIUtility.singleLineHeight * 4 + EditorGUIUtility.standardVerticalSpacing;
drawRect.height = EditorGUIUtility.singleLineHeight; drawRect.height = EditorGUIUtility.singleLineHeight;
} }
} }

View File

@@ -82,13 +82,13 @@ namespace XCharts
public SymbolSizeCallback sizeCallback { get { return m_SizeCallback; } set { m_SizeCallback = value; } } public SymbolSizeCallback sizeCallback { get { return m_SizeCallback; } set { m_SizeCallback = value; } }
public SymbolSizeCallback selectedSizeCallback { get { return m_SelectedSizeCallback; } set { m_SelectedSizeCallback = value; } } public SymbolSizeCallback selectedSizeCallback { get { return m_SelectedSizeCallback; } set { m_SelectedSizeCallback = value; } }
private List<float> m_AnimationSize = new List<float>(){0,5,10}; private List<float> m_AnimationSize = new List<float>() { 0, 5, 10 };
public List<float> animationSize { get{return m_AnimationSize;}} public List<float> animationSize { get { return m_AnimationSize; } }
public Color animationColor { get; set; } public Color animationColor { get; set; }
public float GetSize(List<float> data) public float GetSize(List<float> data)
{ {
if(data == null) return size; if (data == null) return size;
switch (m_SizeType) switch (m_SizeType)
{ {
case SerieSymbolSizeType.Custom: case SerieSymbolSizeType.Custom:
@@ -111,7 +111,7 @@ namespace XCharts
public float GetSelectedSize(List<float> data) public float GetSelectedSize(List<float> data)
{ {
if(data == null) return selectedSize; if (data == null) return selectedSize;
switch (m_SizeType) switch (m_SizeType)
{ {
case SerieSymbolSizeType.Custom: case SerieSymbolSizeType.Custom:
@@ -311,7 +311,8 @@ namespace XCharts
return 0; return 0;
} }
public SerieData GetSerieData(int index,DataZoom dataZoom = null){ public SerieData GetSerieData(int index, DataZoom dataZoom = null)
{
var data = GetDataList(dataZoom); var data = GetDataList(dataZoom);
if (index >= 0 && index <= data.Count - 1) if (index >= 0 && index <= data.Count - 1)
{ {
@@ -387,7 +388,7 @@ namespace XCharts
} }
} }
public void UpdateFilterData(DataZoom dataZoom) public void UpdateFilterData(DataZoom dataZoom)
{ {
@@ -457,12 +458,16 @@ namespace XCharts
public override void ParseJsonData(string jsonData) public override void ParseJsonData(string jsonData)
{ {
if (string.IsNullOrEmpty(jsonData) || !m_DataFromJson) return; if (string.IsNullOrEmpty(jsonData) || !m_DataFromJson) return;
ClearData();
jsonData = jsonData.Replace("\r\n", ""); jsonData = jsonData.Replace("\r\n", "");
jsonData = jsonData.Replace(" ", ""); jsonData = jsonData.Replace(" ", "");
jsonData = jsonData.Replace("\n", ""); jsonData = jsonData.Replace("\n", "");
int startIndex = jsonData.IndexOf("["); int startIndex = jsonData.IndexOf("[");
int endIndex = jsonData.LastIndexOf("]"); int endIndex = jsonData.LastIndexOf("]");
if (startIndex == -1 || endIndex == -1){
Debug.LogError("json data need include in [ ]");
return;
}
ClearData();
string temp = jsonData.Substring(startIndex + 1, endIndex - startIndex - 1); string temp = jsonData.Substring(startIndex + 1, endIndex - startIndex - 1);
if (temp.IndexOf("],") > -1 || temp.IndexOf("] ,") > -1) if (temp.IndexOf("],") > -1 || temp.IndexOf("] ,") > -1)
{ {

View File

@@ -110,7 +110,6 @@ namespace XCharts
txt.horizontalOverflow = HorizontalWrapMode.Overflow; txt.horizontalOverflow = HorizontalWrapMode.Overflow;
txt.verticalOverflow = VerticalWrapMode.Overflow; txt.verticalOverflow = VerticalWrapMode.Overflow;
txt.color = color; txt.color = color;
txt.fontStyle = fontStyle;
if (rotate > 0) if (rotate > 0)
{ {
txtObj.transform.localEulerAngles = new Vector3(0, 0, rotate); txtObj.transform.localEulerAngles = new Vector3(0, 0, rotate);