Exemplo n.º 1
0
    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;
                }
            }
        }
    }