public static void AvoidLabelOverlap(Serie serie, ComponentTheme theme) { if (!serie.avoidLabelOverlap) { return; } var lastCheckPos = Vector3.zero; var lastX = 0f; var data = serie.data; var splitCount = 0; for (int n = 0; n < data.Count; n++) { var serieData = data[n]; if (serieData.context.labelPosition.x != 0 && serieData.context.labelPosition.x < serie.context.center.x) { splitCount = n; break; } } for (int n = 0; n < splitCount; n++) { CheckSerieDataLabel(serie, data[n], splitCount, false, theme, ref lastCheckPos, ref lastX); } lastCheckPos = Vector3.zero; for (int n = data.Count - 1; n >= splitCount; n--) { CheckSerieDataLabel(serie, data[n], data.Count - splitCount, true, theme, ref lastCheckPos, ref lastX); } }
public virtual void Copy(ComponentTheme theme) { m_Font = theme.font; m_FontSize = theme.fontSize; m_TextColor = theme.textColor; m_TextBackgroundColor = theme.textBackgroundColor; #if dUI_TextMeshPro m_TMPFont = theme.tmpFont; #endif }
public int GetFontSize(ComponentTheme defaultTheme) { if (fontSize == 0) { return(defaultTheme.fontSize); } else { return(fontSize); } }
public static ChartLabel AddChartLabel(string name, Transform parent, LabelStyle labelStyle, ComponentTheme theme, string content, Color autoColor, TextAnchor autoAlignment = TextAnchor.MiddleCenter) { Vector2 anchorMin, anchorMax, pivot; var sizeDelta = new Vector2(labelStyle.width, labelStyle.height); var textStyle = labelStyle.textStyle; var alignment = textStyle.GetAlignment(autoAlignment); UpdateAnchorAndPivotByTextAlignment(alignment, out anchorMin, out anchorMax, out pivot); var labelObj = AddObject(name, parent, anchorMin, anchorMax, pivot, sizeDelta); // TODO: 为了兼容旧版本,这里后面版本可以去掉 #region temp code var oldText = labelObj.GetComponent <Text>(); if (oldText != null) { GameObject.DestroyImmediate(oldText); } var oldImage = labelObj.GetComponent <Image>(); if (oldImage != null) { GameObject.DestroyImmediate(oldImage); } #endregion var label = GetOrAddComponent <ChartLabel>(labelObj); label.text = AddTextObject("Text", label.gameObject.transform, anchorMin, anchorMax, pivot, sizeDelta, textStyle, theme, autoColor, autoAlignment, label.text); label.icon = ChartHelper.AddIcon("Icon", label.gameObject.transform, labelStyle.icon); label.SetSize(labelStyle.width, labelStyle.height); label.SetTextPadding(labelStyle.textPadding); label.SetText(content); label.UpdateIcon(labelStyle.icon); if (labelStyle.background.show) { label.color = (!labelStyle.background.autoColor || autoColor == Color.clear) ? labelStyle.background.color : autoColor; label.sprite = labelStyle.background.sprite; label.type = labelStyle.background.type; } else { label.color = Color.clear; label.sprite = null; } label.transform.localEulerAngles = new Vector3(0, 0, labelStyle.rotate); label.transform.localPosition = labelStyle.offset; return(label); }
public void SetFontAndSizeAndStyle(TextStyle textStyle, ComponentTheme theme) { #if dUI_TextMeshPro if (m_TMPText == null) { return; } m_TMPText.font = textStyle.tmpFont == null ? theme.tmpFont : textStyle.tmpFont; m_TMPText.fontSize = textStyle.fontSize == 0 ? theme.fontSize : textStyle.fontSize; m_TMPText.fontStyle = textStyle.tmpFontStyle; #else if (m_Text != null) { m_Text.font = textStyle.font == null ? theme.font : textStyle.font; m_Text.fontSize = textStyle.fontSize == 0 ? theme.fontSize : textStyle.fontSize; m_Text.fontStyle = textStyle.fontStyle; } #endif }
public static ChartLabel AddAxisLabelObject(int total, int index, string name, Transform parent, Vector2 sizeDelta, Axis axis, ComponentTheme theme, string content, Color autoColor, TextAnchor autoAlignment = TextAnchor.MiddleCenter) { var textStyle = axis.axisLabel.textStyle; var label = AddChartLabel(name, parent, axis.axisLabel, theme, content, autoColor, autoAlignment); var labelShow = axis.axisLabel.show && (axis.axisLabel.interval == 0 || index % (axis.axisLabel.interval + 1) == 0); if (labelShow) { if (!axis.axisLabel.showStartLabel && index == 0) { labelShow = false; } else if (!axis.axisLabel.showEndLabel && index == total - 1) { labelShow = false; } } label.UpdateIcon(axis.axisLabel.icon, axis.GetIcon(index)); label.text.SetActive(labelShow); return(label); }
public virtual void Reset(ComponentTheme defaultTheme) { Copy(defaultTheme); }
private static void CheckSerieDataLabel(Serie serie, SerieData serieData, int total, bool isLeft, ComponentTheme theme, ref Vector3 lastCheckPos, ref float lastX) { if (!serieData.context.canShowLabel) { serieData.SetLabelActive(false); return; } if (!serieData.show) { return; } var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var isOutside = serieLabel.position == LabelStyle.Position.Outside || serieLabel.position == LabelStyle.Position.Default; if (!serieLabel.show) { return; } if (!isOutside) { return; } var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); var fontSize = serieData.labelObject.GetHeight(); if (lastCheckPos == Vector3.zero) { lastCheckPos = serieData.context.labelPosition; } else if (serieData.context.labelPosition.x != 0) { if (lastCheckPos.y - serieData.context.labelPosition.y < fontSize) { var labelRadius = serie.context.outsideRadius + labelLine.lineLength1; var y1 = lastCheckPos.y - fontSize; var cy = serie.context.center.y; var diff = Mathf.Abs(y1 - cy); var diffX = labelRadius * labelRadius - diff * diff; diffX = diffX <= 0 ? 0 : diffX; var x1 = serie.context.center.x + Mathf.Sqrt(diffX) * (isLeft ? -1 : 1); var newPos = new Vector3(x1, y1); serieData.context.labelPosition = newPos; var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center); if (angle >= 180 && angle <= 270) { serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else if (angle < 180 && angle >= 90) { serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else { lastX = x1; } } else { lastX = serieData.context.labelPosition.x; } lastCheckPos = serieData.context.labelPosition; serieData.labelObject.SetPosition(SerieLabelHelper.GetRealLabelPosition(serie, serieData, serieLabel, labelLine)); } }
public static ChartText AddTextObject(string objectName, Transform parent, Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, TextStyle textStyle, ComponentTheme theme, Color autoColor, TextAnchor autoAlignment, ChartText chartText = null) { GameObject txtObj = AddObject(objectName, parent, anchorMin, anchorMax, pivot, sizeDelta); txtObj.transform.localEulerAngles = new Vector3(0, 0, textStyle.rotate); if (chartText == null) { chartText = new ChartText(); } #if dUI_TextMeshPro RemoveComponent <Text>(txtObj); chartText.tmpText = GetOrAddComponent <TextMeshProUGUI>(txtObj); chartText.tmpText.font = textStyle.tmpFont == null ? theme.tmpFont : textStyle.tmpFont; chartText.tmpText.fontStyle = textStyle.tmpFontStyle; chartText.tmpText.richText = true; chartText.tmpText.raycastTarget = false; chartText.tmpText.enableWordWrapping = textStyle.autoWrap; #else chartText.text = GetOrAddComponent <Text>(txtObj); chartText.text.font = textStyle.font == null ? theme.font : textStyle.font; chartText.text.fontStyle = textStyle.fontStyle; chartText.text.horizontalOverflow = textStyle.autoWrap ? HorizontalWrapMode.Wrap : HorizontalWrapMode.Overflow; chartText.text.verticalOverflow = VerticalWrapMode.Overflow; chartText.text.supportRichText = true; chartText.text.raycastTarget = false; #endif if (textStyle.autoColor && autoColor != Color.clear) { chartText.SetColor(autoColor); } else { chartText.SetColor(textStyle.GetColor(theme.textColor)); } chartText.SetAlignment(textStyle.autoAlign ? autoAlignment : textStyle.alignment); chartText.SetFontSize(textStyle.GetFontSize(theme)); chartText.SetText("Text"); chartText.SetLineSpacing(textStyle.lineSpacing); chartText.SetActive(textStyle.show); RectTransform rect = GetOrAddComponent <RectTransform>(txtObj); rect.localPosition = Vector3.zero; rect.sizeDelta = sizeDelta; rect.anchorMin = anchorMin; rect.anchorMax = anchorMax; rect.pivot = pivot; return(chartText); }
private static ChartLabel CreateViewItemColumn(int i, Transform parent, Tooltip tooltip, ComponentTheme theme) { var labelStyle = tooltip.GetContentLabelStyle(i); var label = ChartHelper.AddChartLabel("column" + i, parent, labelStyle, theme, "", Color.clear, TextAnchor.MiddleLeft); return(label); }
private static TooltipViewItem CreateViewItem(int i, Transform parent, Tooltip tooltip, ComponentTheme theme) { GameObject item1 = ChartHelper.AddObject("item" + i, parent, anchorMin, anchorMax, v2_0_05, Vector3.zero); var item = new TooltipViewItem(); item.gameObject = item1; item.columns.Add(CreateViewItemColumn(0, item1.transform, tooltip, theme)); item.columns.Add(CreateViewItemColumn(1, item1.transform, tooltip, theme)); item.columns.Add(CreateViewItemColumn(2, item1.transform, tooltip, theme)); return(item); }