private void renderText(dfRenderData buffer) { if (selectedIndex < 0 || selectedIndex >= items.Length) { return; } var selectedItem = items[selectedIndex]; var p2u = PixelsToUnits(); var maxSize = new Vector2(size.x - textFieldPadding.horizontal, this.size.y - textFieldPadding.vertical); var pivotOffset = pivot.TransformToUpperLeft(Size); var origin = new Vector3( pivotOffset.x + textFieldPadding.left, pivotOffset.y - textFieldPadding.top, 0 ) * p2u; var renderColor = IsEnabled ? TextColor : DisabledTextColor; using (var textRenderer = font.ObtainRenderer()) { textRenderer.WordWrap = false; textRenderer.MaxSize = maxSize; textRenderer.PixelRatio = p2u; textRenderer.TextScale = TextScale; textRenderer.VectorOffset = origin; textRenderer.MultiLine = false; textRenderer.TextAlign = TextAlignment.Left; textRenderer.ProcessMarkup = true; textRenderer.DefaultColor = renderColor; textRenderer.OverrideMarkupColors = false; textRenderer.Opacity = this.CalculateOpacity(); textRenderer.Shadow = this.Shadow; textRenderer.ShadowColor = this.ShadowColor; textRenderer.ShadowOffset = this.ShadowOffset; var dynamicFontRenderer = textRenderer as dfDynamicFont.DynamicFontRenderer; if (dynamicFontRenderer != null) { dynamicFontRenderer.SpriteAtlas = this.Atlas; dynamicFontRenderer.SpriteBuffer = buffer; } textRenderer.Render(selectedItem, buffer); } }
private void renderItems(dfRenderData buffer) { if (font == null || items == null || items.Length == 0) { return; } var p2u = PixelsToUnits(); var maxSize = new Vector2(this.size.x - itemPadding.horizontal - listPadding.horizontal, itemHeight - itemPadding.vertical); var pivotOffset = pivot.TransformToUpperLeft(Size); var origin = new Vector3( pivotOffset.x + itemPadding.left + listPadding.left, pivotOffset.y - itemPadding.top - listPadding.top, 0 ) * p2u; origin.y += scrollPosition * p2u; var renderColor = IsEnabled ? ItemTextColor : DisabledColor; // TODO: Figure out why the text renderer cannot be re-used for each list item var top = pivotOffset.y * p2u; var bottom = top - size.y * p2u; for (int i = 0; i < items.Length; i++) { using (var textRenderer = font.ObtainRenderer()) { textRenderer.WordWrap = false; textRenderer.MaxSize = maxSize; textRenderer.PixelRatio = p2u; textRenderer.TextScale = ItemTextScale * getTextScaleMultiplier(); textRenderer.VectorOffset = origin; textRenderer.MultiLine = false; textRenderer.TextAlign = this.ItemAlignment; textRenderer.ProcessMarkup = true; textRenderer.DefaultColor = renderColor; textRenderer.OverrideMarkupColors = false; textRenderer.Opacity = this.CalculateOpacity(); textRenderer.Shadow = this.Shadow; textRenderer.ShadowColor = this.ShadowColor; textRenderer.ShadowOffset = this.ShadowOffset; var dynamicFontRenderer = textRenderer as dfDynamicFont.DynamicFontRenderer; if (dynamicFontRenderer != null) { dynamicFontRenderer.SpriteAtlas = this.Atlas; dynamicFontRenderer.SpriteBuffer = renderData; } if (origin.y - itemHeight * p2u <= top) { textRenderer.Render(items[i], buffer); } origin.y -= itemHeight * p2u; textRenderer.VectorOffset = origin; if (origin.y < bottom) { break; } } } }