BackgroundHandler.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. using XUGL;
  5. namespace XCharts.Runtime
  6. {
  7. [UnityEngine.Scripting.Preserve]
  8. internal sealed class BackgroundHandler : MainComponentHandler<Background>
  9. {
  10. private readonly string s_BackgroundObjectName = "background";
  11. public override void InitComponent()
  12. {
  13. component.painter = chart.painter;
  14. component.refreshComponent = delegate ()
  15. {
  16. var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, chart.transform, chart.chartMinAnchor,
  17. chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
  18. component.gameObject = backgroundObj;
  19. backgroundObj.hideFlags = chart.chartHideFlags;
  20. var backgroundImage = ChartHelper.EnsureComponent<Image>(backgroundObj);
  21. ChartHelper.UpdateRectTransform(backgroundObj, chart.chartMinAnchor,
  22. chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
  23. backgroundImage.sprite = component.image;
  24. backgroundImage.type = component.imageType;
  25. backgroundImage.color = chart.theme.GetBackgroundColor(component);
  26. backgroundObj.transform.SetSiblingIndex(0);
  27. backgroundObj.SetActive(component.show && component.image != null);
  28. };
  29. component.refreshComponent();
  30. }
  31. public override void Update()
  32. {
  33. if (component.gameObject != null && component.gameObject.transform.GetSiblingIndex() != 0)
  34. component.gameObject.transform.SetSiblingIndex(0);
  35. }
  36. public override void DrawBase(VertexHelper vh)
  37. {
  38. if (!component.show)
  39. return;
  40. if (component.image != null)
  41. return;
  42. var backgroundColor = chart.theme.GetBackgroundColor(component);
  43. var borderWidth = component.borderStyle.GetRuntimeBorderWidth();
  44. var borderColor = component.borderStyle.GetRuntimeBorderColor();
  45. var cornerRadius = component.borderStyle.GetRuntimeCornerRadius();
  46. UGL.DrawRoundRectangleWithBorder(vh, chart.chartRect, backgroundColor, backgroundColor, cornerRadius,
  47. borderWidth, borderColor);
  48. }
  49. }
  50. }