public static TooltipView CreateView(Tooltip tooltip, ThemeStyle theme, Transform parent) { var view = new TooltipView(); view.tooltip = tooltip; view.theme = theme.tooltip; view.gameObject = ChartHelper.AddObject("view", parent, anchorMin, anchorMax, pivot, Vector3.zero); view.gameObject.transform.localPosition = Vector3.zero; view.transform = view.gameObject.transform; view.background = ChartHelper.GetOrAddComponent <Image>(view.gameObject); view.background.sprite = tooltip.backgroundImage; view.background.type = tooltip.backgroundType; view.background.color = ChartHelper.IsClearColor(tooltip.backgroundColor) ? Color.white : tooltip.backgroundColor; view.border = ChartHelper.GetOrAddComponent <Outline>(view.gameObject); view.border.enabled = tooltip.borderWidth > 0; view.border.useGraphicAlpha = false; view.border.effectColor = tooltip.borderColor; view.border.effectDistance = new Vector2(tooltip.borderWidth, -tooltip.borderWidth); view.layout = ChartHelper.GetOrAddComponent <VerticalLayoutGroup>(view.gameObject); view.layout.childControlHeight = false; view.layout.childControlWidth = false; view.layout.childForceExpandHeight = false; view.layout.childForceExpandWidth = false; view.layout.padding = new RectOffset(tooltip.paddingLeftRight, tooltip.paddingLeftRight, tooltip.paddingTopBottom, tooltip.paddingTopBottom); view.title = ChartHelper.AddChartLabel("title", view.gameObject.transform, tooltip.titleLabelStyle, theme.tooltip, "", Color.clear, TextAnchor.MiddleLeft); var item = CreateViewItem(0, view.gameObject.transform, tooltip, theme.tooltip); view.m_Items.Add(item); view.Refresh(); return(view); }
public static Color32 GetItemStyleGradientColor(ItemStyle itemStyle, Vector3 pos, BaseChart chart, Axis axis, Color32 defaultColor) { var min = axis.context.minValue; var max = axis.context.maxValue; var grid = chart.GetChartComponent <GridCoord>(axis.gridIndex); var value = min + (pos.x - grid.context.x) / grid.context.width * (max - min); var rate = (value - min) / (max - min); var color = itemStyle.GetGradientColor((float)rate, defaultColor); if (ChartHelper.IsClearColor(color)) { return(defaultColor); } else { return(color); } }
public static Color GetContentColor(BaseChart chart, int legendIndex, string legendName, Legend legend, ThemeStyle theme, bool active) { var textStyle = legend.labelStyle.textStyle; if (active) { if (legend.labelStyle.textStyle.autoColor) { return(SeriesHelper.GetNameColor(chart, legendIndex, legendName)); } else { return(!ChartHelper.IsClearColor(textStyle.color) ? textStyle.color : theme.legend.textColor); } } else { return(theme.legend.unableColor); } }
public static Color32 GetItemBackgroundColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool useDefault = true) { var color = ChartConst.clearColor32; if (highlight) { var itemStyleEmphasis = GetItemStyleEmphasis(serie, serieData); if (itemStyleEmphasis != null && !ChartHelper.IsClearColor(itemStyleEmphasis.backgroundColor)) { color = itemStyleEmphasis.backgroundColor; ChartHelper.SetColorOpacity(ref color, itemStyleEmphasis.opacity); return(color); } } var itemStyle = GetItemStyle(serie, serieData); if (!ChartHelper.IsClearColor(itemStyle.backgroundColor)) { color = itemStyle.backgroundColor; if (highlight) { color = ChartHelper.GetHighlightColor(color); } ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); return(color); } else if (useDefault) { color = theme.GetColor(index); if (highlight) { color = ChartHelper.GetHighlightColor(color); } color.a = 50; return(color); } return(color); }
public static Color32 GetItemToColor(Serie serie, SerieData serieData, ThemeStyle theme, int index, bool highlight, bool opacity = true) { if (serie == null) { return(ChartConst.clearColor32); } ItemStyle itemStyle = null; if (highlight) { itemStyle = GetItemStyleEmphasis(serie, serieData); } if (itemStyle == null) { itemStyle = GetItemStyle(serie, serieData); } var color = itemStyle.toColor; if (ChartHelper.IsClearColor(color)) { color = ChartHelper.IsClearColor(itemStyle.color) ? theme.GetColor(index) : itemStyle.color; } if (highlight) { color = ChartHelper.GetHighlightColor(color); } if (opacity) { ChartHelper.SetColorOpacity(ref color, itemStyle.opacity); } return(color); }
private void DrawCoord(VertexHelper vh, GridCoord grid) { if (!grid.show) { return; } if (!ChartHelper.IsClearColor(grid.backgroundColor)) { var p1 = new Vector2(grid.context.x, grid.context.y); var p2 = new Vector2(grid.context.x, grid.context.y + grid.context.height); var p3 = new Vector2(grid.context.x + grid.context.width, grid.context.y + grid.context.height); var p4 = new Vector2(grid.context.x + grid.context.width, grid.context.y); UGL.DrawQuadrilateral(vh, p1, p2, p3, p4, grid.backgroundColor); } if (grid.showBorder) { var borderWidth = grid.borderWidth == 0 ? chart.theme.axis.lineWidth * 2 : grid.borderWidth; var borderColor = ChartHelper.IsClearColor(grid.borderColor) ? chart.theme.axis.lineColor : grid.borderColor; UGL.DrawBorder(vh, grid.context.center, grid.context.width - borderWidth, grid.context.height - borderWidth, borderWidth, borderColor); } }
public bool IsNeedGradient() { return(!ChartHelper.IsClearColor(m_ToColor) || !ChartHelper.IsClearColor(m_ToColor2)); }
/// <summary> /// 是否需要显示边框。 /// </summary> public bool NeedShowBorder() { return(borderWidth != 0 && !ChartHelper.IsClearColor(borderColor)); }
private static bool IsColorAlphaZero(Color color) { return(!ChartHelper.IsClearColor(color) && color.a == 0); }
private void DrawPieLabelLine(VertexHelper vh, Serie serie, SerieData serieData, Color color) { var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var labelLine = SerieHelper.GetSerieLabelLine(serie, serieData); if (serieLabel != null && serieLabel.show && labelLine != null && labelLine.show && (serieLabel.IsDefaultPosition(LabelStyle.Position.Outside))) { var insideRadius = serieData.context.insideRadius; var outSideRadius = serieData.context.outsideRadius; var center = serie.context.center; var currAngle = serieData.context.halfAngle; if (!ChartHelper.IsClearColor(labelLine.lineColor)) { color = labelLine.lineColor; } else if (labelLine.lineType == LabelLine.LineType.HorizontalLine) { color *= color; } float currSin = Mathf.Sin(currAngle * Mathf.Deg2Rad); float currCos = Mathf.Cos(currAngle * Mathf.Deg2Rad); var radius1 = labelLine.lineType == LabelLine.LineType.HorizontalLine ? serie.context.outsideRadius : outSideRadius; var radius3 = insideRadius + (outSideRadius - insideRadius) / 2; if (radius1 < serie.context.insideRadius) { radius1 = serie.context.insideRadius; } radius1 -= 0.1f; var pos0 = new Vector3(center.x + radius3 * currSin, center.y + radius3 * currCos); var pos1 = new Vector3(center.x + radius1 * currSin, center.y + radius1 * currCos); var pos2 = serieData.context.labelPosition; Vector3 pos4, pos6; var horizontalLineCircleRadius = labelLine.lineWidth * 4f; var lineCircleDiff = horizontalLineCircleRadius - 0.3f; var startAngle = serie.context.startAngle; if (currAngle < 90) { var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3; r4 += labelLine.lineLength1 - lineCircleDiff; pos6 = pos0 + Vector3.right * lineCircleDiff; pos4 = pos6 + Vector3.right * r4; } else if (currAngle < 180) { var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos * radius3, 2)) - currSin * radius3; r4 += labelLine.lineLength1 - lineCircleDiff; pos6 = pos0 + Vector3.right * lineCircleDiff; pos4 = pos6 + Vector3.right * r4; } else if (currAngle < 270) { var currSin1 = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad); var currCos1 = Mathf.Cos((360 - currAngle) * Mathf.Deg2Rad); var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos1 * radius3, 2)) - currSin1 * radius3; r4 += labelLine.lineLength1 - lineCircleDiff; pos6 = pos0 + Vector3.left * lineCircleDiff; pos4 = pos6 + Vector3.left * r4; } else { var currSin1 = Mathf.Sin((360 - currAngle) * Mathf.Deg2Rad); var currCos1 = Mathf.Cos((360 - currAngle) * Mathf.Deg2Rad); var r4 = Mathf.Sqrt(radius1 * radius1 - Mathf.Pow(currCos1 * radius3, 2)) - currSin1 * radius3; r4 += labelLine.lineLength1 - lineCircleDiff; pos6 = pos0 + Vector3.left * lineCircleDiff; pos4 = pos6 + Vector3.left * r4; } var pos5X = (currAngle - startAngle) % 360 > 180 ? pos2.x - labelLine.lineLength2 : pos2.x + labelLine.lineLength2; var pos5 = new Vector3(pos5X, pos2.y); var angle = Vector3.Angle(pos1 - center, pos2 - pos1); if (angle > 15) { UGL.DrawLine(vh, pos1, pos5, labelLine.lineWidth, color); } else { switch (labelLine.lineType) { case LabelLine.LineType.BrokenLine: UGL.DrawLine(vh, pos1, pos2, pos5, labelLine.lineWidth, color); break; case LabelLine.LineType.Curves: UGL.DrawCurves(vh, pos1, pos5, pos1, pos2, labelLine.lineWidth, color, chart.settings.lineSmoothness); break; case LabelLine.LineType.HorizontalLine: UGL.DrawCricle(vh, pos0, horizontalLineCircleRadius, color); UGL.DrawLine(vh, pos6, pos4, labelLine.lineWidth, color); break; } } } }
private void DrawHeatmapSerie(VertexHelper vh, Heatmap serie) { if (serie.animation.HasFadeOut()) { return; } XAxis xAxis; YAxis yAxis; if (!chart.TryGetChartComponent <XAxis>(out xAxis, serie.xAxisIndex)) { return; } if (!chart.TryGetChartComponent <YAxis>(out yAxis, serie.yAxisIndex)) { return; } m_SerieGrid = chart.GetChartComponent <GridCoord>(xAxis.gridIndex); xAxis.boundaryGap = true; yAxis.boundaryGap = true; var visualMap = chart.GetVisualMapOfSerie(serie); var emphasisItemStyle = serie.emphasisItemStyle; var xCount = xAxis.data.Count; var yCount = yAxis.data.Count; var xWidth = m_SerieGrid.context.width / xCount; var yWidth = m_SerieGrid.context.height / yCount; var zeroX = m_SerieGrid.context.x; var zeroY = m_SerieGrid.context.y; var rangeMin = visualMap.rangeMin; var rangeMax = visualMap.rangeMax; var color = chart.theme.GetColor(serie.index); var borderWidth = serie.itemStyle.show ? serie.itemStyle.borderWidth : 0; var rectWid = xWidth - 2 * borderWidth; var rectHig = yWidth - 2 * borderWidth; var borderColor = serie.itemStyle.opacity > 0 ? serie.itemStyle.borderColor : ChartConst.clearColor32; borderColor.a = (byte)(borderColor.a * serie.itemStyle.opacity); var borderToColor = serie.itemStyle.opacity > 0 ? serie.itemStyle.borderToColor : ChartConst.clearColor32; borderToColor.a = (byte)(borderToColor.a * serie.itemStyle.opacity); serie.context.dataPoints.Clear(); serie.animation.InitProgress(0, xCount); var animationIndex = serie.animation.GetCurrIndex(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChanging = false; serie.containerIndex = m_SerieGrid.index; serie.containterInstanceId = m_SerieGrid.instanceId; for (int n = 0; n < serie.dataCount; n++) { var serieData = serie.data[n]; serieData.index = n; var i = (int)serieData.GetData(0); var j = (int)serieData.GetData(1); var dimension = VisualMapHelper.GetDimension(visualMap, serieData.data.Count); if (serie.IsIgnoreValue(serieData, dimension)) { serie.context.dataPoints.Add(Vector3.zero); continue; } var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse, yAxis.context.minValue, yAxis.context.maxValue); if (serieData.IsDataChanged()) { dataChanging = true; } var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth, zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth); serie.context.dataPoints.Add(pos); serieData.context.position = pos; serieData.context.canShowLabel = false; serieData.context.rect = new Rect(pos.x - rectWid / 2, pos.y - rectHig / 2, rectWid, rectHig); if (value == 0) { continue; } if ((value < rangeMin && rangeMin != visualMap.min) || (value > rangeMax && rangeMax != visualMap.max)) { continue; } if (!visualMap.IsInSelectedValue(value)) { continue; } if (animationIndex >= 0 && i > animationIndex) { continue; } color = visualMap.GetColor(value); if (serieData.context.highlight) { color = ChartHelper.GetHighlightColor(color); } serieData.context.canShowLabel = true; serieData.context.color = color; var highlight = (serieData.context.highlight) || visualMap.context.pointerIndex > 0; //UGL.DrawRectangle(vh, pos, rectWid / 2, rectHig / 2, color); UGL.DrawRectangle(vh, serieData.context.rect, color); if (borderWidth > 0 && !ChartHelper.IsClearColor(borderColor)) { UGL.DrawBorder(vh, pos, rectWid, rectHig, borderWidth, borderColor, borderToColor); } if (visualMap.hoverLink && highlight && emphasisItemStyle != null && emphasisItemStyle.borderWidth > 0) { var emphasisBorderWidth = emphasisItemStyle.borderWidth; var emphasisBorderColor = emphasisItemStyle.opacity > 0 ? emphasisItemStyle.borderColor : ChartConst.clearColor32; var emphasisBorderToColor = emphasisItemStyle.opacity > 0 ? emphasisItemStyle.borderToColor : ChartConst.clearColor32; UGL.DrawBorder(vh, pos, rectWid, rectHig, emphasisBorderWidth, emphasisBorderColor, emphasisBorderToColor); } } if (!serie.animation.IsFinish()) { serie.animation.CheckProgress(xCount); chart.RefreshPainter(serie); } if (dataChanging) { chart.RefreshPainter(serie); } }
public Color32 GetColor(Color32 defaultColor) { return(ChartHelper.IsClearColor(m_Color) ? defaultColor : m_Color); }