private void UpdateColorList(List <Color32> colors) { UIPanel[] colorPickers = m_colorFieldTemplateListColors.SetItemCount(colors.Count); for (int i = 0; i < colors.Count; i++) { UIColorField colorField = colorPickers[i].GetComponentInChildren <UIColorField>(); if (canEdit && colorField.objectUserData == null) { colorField.colorPicker = KlyteMonoUtils.GetDefaultPicker(); colorField.eventSelectedColorReleased += (x, y) => { if (GetPaletteName(out string paletteName)) { var palette = TLMAutoColorPaletteContainer.GetPalette(paletteName); var selColor = ((UIColorField)x).selectedColor; palette[x.parent.zOrder] = selColor; if (selColor == default) { ((UIColorField)x).isVisible = false; ((UIColorField)x).OnDisable(); } StartCoroutine(SavePalette(paletteName)); } }; colorField.eventColorPickerOpen += KlyteMonoUtils.DefaultColorPickerHandler; colorField.objectUserData = true; } (colorField.triggerButton as UILabel).text = $"{i.ToString("0")}"; (colorField.triggerButton as UILabel).textColor = KlyteMonoUtils.ContrastColor(colors[i]); (colorField.triggerButton as UILabel).disabledTextColor = KlyteMonoUtils.ContrastColor(colors[i]); colorField.selectedColor = colors[i]; colorField.isVisible = true; } if (canEdit) { m_addColor.zOrder = 99999999; } }
public static void RenderSpriteLine(DynamicFontRenderer renderer, UIMarkupToken token, Vector3 position, UIRenderData destination) { string[] args = token.GetAttribute(0)?.m_Value?.value?.Split(new char[] { ',' }, 3); if (args == null || args.Length != 3) { LogUtils.DoErrorLog($"INVALID ARGUMENT: {token.GetAttribute(0)?.m_Value?.value ?? "<NULL>"}"); return; } UITextureAtlas.SpriteInfo spriteInfo = renderer.spriteAtlas[args[0]]; if (spriteInfo == null) { CODebugBase <InternalLogChannel> .Warn(InternalLogChannel.UI, "Missing sprite " + args[0] + " in " + renderer.spriteAtlas.name); } else { var midLine = new Vector3(position.x, position.y - (((UIDynamicFont)renderer.font).baseline * renderer.textScale / 2)); Texture2D texture = renderer.spriteAtlas.texture; float calcHeight = ((UIDynamicFont)renderer.font).baseline * renderer.textScale * 2f; float calcProportion = spriteInfo.region.width * texture.width / (spriteInfo.region.height * texture.height); float calcWidth = Mathf.CeilToInt(calcHeight * calcProportion); int height = Mathf.CeilToInt(calcHeight); int width = Mathf.CeilToInt(calcWidth); Color32 bgColor = ColorExtensions.FromRGB(args[1]); Color32 color2 = ApplyOpacity(renderer, bgColor); var size = new Vector3(width, height); Vector2 textDimensions = MeasureTextWidth(renderer, args[2], renderer.textScale, out Vector2 yBounds); float imageProportions = width / spriteInfo.width; float borderWidth = renderer.textScale * 2; float textBoundHeight = height - (spriteInfo.border.vertical * imageProportions) - borderWidth; float textBoundWidth = width - (spriteInfo.border.horizontal * imageProportions) - borderWidth; var textAreaSize = new Vector4((spriteInfo.border.left * imageProportions) + (borderWidth / 2), (-spriteInfo.border.top + spriteInfo.border.bottom) * imageProportions / 2, textBoundWidth, textBoundHeight); float textScale = renderer.textScale; float multipler = Mathf.Min(Mathf.Min(3.5f, textAreaSize.z / textDimensions.x), Mathf.Min(3.5f, textAreaSize.w / textDimensions.y)); if (multipler > 1) { textScale *= 1 + ((multipler - 1) / 2.1f); multipler = 1; textDimensions = MeasureTextWidth(renderer, args[2], textScale, out yBounds); } float midLineOffset = (((UIDynamicFont)renderer.font).baseline / 2 * renderer.textScale); Color contrastColor = KlyteMonoUtils.ContrastColor(bgColor); RenderSprite(renderer.spriteBuffer, new RenderOptions { atlas = renderer.spriteAtlas, color = contrastColor, fillAmount = 1f, flip = UISpriteFlip.None, offset = position - new Vector3(0, -(height / 2) + midLineOffset), pixelsToUnits = renderer.pixelRatio, size = size, spriteInfo = spriteInfo }); RenderSprite(renderer.spriteBuffer, new RenderOptions { atlas = renderer.spriteAtlas, color = color2, fillAmount = 1f, flip = UISpriteFlip.None, offset = position - new Vector3(0, -(height / 2) + midLineOffset) + (new Vector3(borderWidth, -borderWidth) / 2), pixelsToUnits = renderer.pixelRatio, size = size - new Vector3(borderWidth, borderWidth), spriteInfo = spriteInfo }); midLineOffset = ((UIDynamicFont)renderer.font).baseline * textScale; Vector3 targetTextPos = midLine + VectorUtils.XY_(textAreaSize) + (new Vector3(textAreaSize.z - (textDimensions.x * multipler), -textDimensions.y) / 2); RenderText(renderer, args[2], targetTextPos, multipler, destination, textScale, contrastColor, bgColor); } }