Example #1
0
        /// <summary>
        /// Updates the cache that contains the result of laying out the label's text.
        /// </summary>
        /// <param name="availableSize">The size of the space that is available for laying out text.</param>
        private void UpdateTextLayoutResult(Size2D availableSize)
        {
            textLayoutCommands.Clear();

            if (textParserResult.Count > 0 && Font.IsLoaded)
            {
                var unconstrainedWidth  = Double.IsPositiveInfinity(availableSize.Width) && HorizontalAlignment != HorizontalAlignment.Stretch;
                var unconstrainedHeight = Double.IsPositiveInfinity(availableSize.Height) && VerticalAlignment != VerticalAlignment.Stretch;

                var constraintX = unconstrainedWidth ? null : (Int32?)Math.Ceiling(Display.DipsToPixels(availableSize.Width));
                var constraintY = unconstrainedHeight ? null : (Int32?)Math.Ceiling(Display.DipsToPixels(availableSize.Height));

                var cursorpos = textLayoutCommands.CursorPosition;

                var textRenderingMode = TextOptions.GetTextRenderingMode(this);
                var textScript        = TextOptions.GetTextScript(this);
                var textLanguage      = TextOptions.GetTextLanguage(this);
                var textDirection     = FlowDirection == FlowDirection.RightToLeft ? TextDirection.RightToLeft : TextDirection.LeftToRight;

                var options  = (textRenderingMode == TextRenderingMode.Shaped) ? TextLayoutOptions.Shape : TextLayoutOptions.None;
                var flags    = LayoutUtil.ConvertAlignmentsToTextFlags(HorizontalContentAlignment, VerticalContentAlignment);
                var settings = new TextLayoutSettings(Font, constraintX, constraintY, flags, options, textDirection, textScript, FontStyle, null, textLanguage);

                View.Resources.TextRenderer.CalculateLayout(textParserResult, textLayoutCommands, settings);
                View.Resources.TextRenderer.UpdateCursor(textLayoutCommands, cursorpos);
            }
        }
Example #2
0
        /// <summary>
        /// Updates the cache which contains the element's laid-out text.
        /// </summary>
        /// <param name="availableSize">The amount of space in which the element's text can be laid out.</param>
        private void UpdateTextLayoutCache(Size2D availableSize)
        {
            if (textLayoutCommands != null)
            {
                textLayoutCommands.Clear();
            }

            if (View == null)
            {
                return;
            }

            var content = Content;

            var contentElement = content as UIElement;

            if (contentElement == null)
            {
                if (textLayoutCommands == null)
                {
                    textLayoutCommands = new TextLayoutCommandStream();
                }

                var font      = GetValue <SourcedResource <UltravioletFont> >(TextElement.FontProperty);
                var fontStyle = GetValue <UltravioletFontStyle>(TextElement.FontStyleProperty);
                if (font.IsLoaded)
                {
                    var availableSizeInPixels = Display.DipsToPixels(availableSize);

                    var cursorpos = textLayoutCommands.CursorPosition;

                    var textRenderingMode = TextOptions.GetTextRenderingMode(this);
                    var textScript        = TextOptions.GetTextScript(this);
                    var textLanguage      = TextOptions.GetTextLanguage(this);
                    var textDirection     = FlowDirection == FlowDirection.RightToLeft ? TextDirection.RightToLeft : TextDirection.LeftToRight;

                    var options  = (textRenderingMode == TextRenderingMode.Shaped) ? TextLayoutOptions.Shape : TextLayoutOptions.None;
                    var flags    = LayoutUtil.ConvertAlignmentsToTextFlags(HorizontalAlignment, VerticalAlignment);
                    var settings = new TextLayoutSettings(font,
                                                          (Int32)Math.Ceiling(availableSizeInPixels.Width),
                                                          (Int32)Math.Ceiling(availableSizeInPixels.Height), flags, options, textDirection, textScript, fontStyle, null, textLanguage);

                    View.Resources.TextRenderer.CalculateLayout(textParserResult, textLayoutCommands, settings);
                    View.Resources.TextRenderer.UpdateCursor(textLayoutCommands, cursorpos);
                }
            }
        }