private void OnItemSelectedCommandExecute(object parameter)
 {
     if ((parameter as ItemSelectedEventArgs).Item is INode)
     {
         NodeViewModel node = (parameter as ItemSelectedEventArgs).Item as NodeViewModel;
         foreach (IAnnotation annotation in node.Annotations as ObservableCollection <IAnnotation> )
         {
             this.FontFamilyValue   = (annotation as TextAnnotationViewModel).FontFamily;
             this.FontColor         = (annotation as TextAnnotationViewModel).Foreground;
             this.TextSize          = (annotation as TextAnnotationViewModel).FontSize;
             this.TextWrapValue     = (annotation as TextAnnotationViewModel).TextWrapping;
             this.TextTrimmingValue = (annotation as TextAnnotationViewModel).TextTrimming;
         }
     }
     else if ((parameter as ItemSelectedEventArgs).Item is IConnector)
     {
         ConnectorViewModel connector = (parameter as ItemSelectedEventArgs).Item as ConnectorViewModel;
         foreach (IAnnotation annotation in connector.Annotations as ObservableCollection <IAnnotation> )
         {
             this.FontFamilyValue   = (annotation as TextAnnotationViewModel).FontFamily;
             this.FontColor         = (annotation as TextAnnotationViewModel).Foreground;
             this.TextSize          = (annotation as TextAnnotationViewModel).FontSize;
             this.TextWrapValue     = (annotation as TextAnnotationViewModel).TextWrapping;
             this.TextTrimmingValue = (annotation as TextAnnotationViewModel).TextTrimming;
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextLayout" /> class.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <param name="typeface">The typeface.</param>
        /// <param name="fontSize">Size of the font.</param>
        /// <param name="foreground">The foreground.</param>
        /// <param name="textAlignment">The text alignment.</param>
        /// <param name="textWrapping">The text wrapping.</param>
        /// <param name="textTrimming">The text trimming.</param>
        /// <param name="textDecorations">The text decorations.</param>
        /// <param name="maxWidth">The maximum width.</param>
        /// <param name="maxHeight">The maximum height.</param>
        /// <param name="lineHeight">The height of each line of text.</param>
        /// <param name="maxLines">The maximum number of text lines.</param>
        /// <param name="textStyleOverrides">The text style overrides.</param>
        public TextLayout(
            string text,
            Typeface typeface,
            double fontSize,
            IBrush foreground,
            TextAlignment textAlignment = TextAlignment.Left,
            TextWrapping textWrapping   = TextWrapping.NoWrap,
            TextTrimming textTrimming   = TextTrimming.None,
            TextDecorationCollection textDecorations = null,
            double maxWidth   = double.PositiveInfinity,
            double maxHeight  = double.PositiveInfinity,
            double lineHeight = double.NaN,
            int maxLines      = 0,
            IReadOnlyList <ValueSpan <TextRunProperties> > textStyleOverrides = null)
        {
            _text = string.IsNullOrEmpty(text) ?
                    new ReadOnlySlice <char>() :
                    new ReadOnlySlice <char>(text.AsMemory());

            _paragraphProperties =
                CreateTextParagraphProperties(typeface, fontSize, foreground, textAlignment, textWrapping, textTrimming,
                                              textDecorations, lineHeight);

            _textStyleOverrides = textStyleOverrides;

            LineHeight = lineHeight;

            MaxWidth = maxWidth;

            MaxHeight = maxHeight;

            MaxLines = maxLines;

            UpdateLayout();
        }
Ejemplo n.º 3
0
        public override void Deserialize(XElement itemXML, double OffsetX, double OffsetY)
        {
            base.Deserialize(itemXML, OffsetX, OffsetY);

            try
            {
                this.Text = itemXML.Attribute("Text").Value as string;
            }
            catch { }
            try
            {
                this.LineHeight = Double.Parse(itemXML.Attribute("LineHeight").Value, CultureInfo.InvariantCulture);
                this.FontFamily = new FontFamily(itemXML.Attribute("FontFamily").Value);
                this.FontSize   = Double.Parse(itemXML.Attribute("FontSize").Value, CultureInfo.InvariantCulture);
            }
            catch { }
            try
            {
                this.HorizontalContentAlignment = (HorizontalAlignment)(Enum.Parse(typeof(HorizontalAlignment), itemXML.Attribute("HorizontalContentAlignment").Value, true));
                this.VerticalContentAlignment   = (VerticalAlignment)(Enum.Parse(typeof(VerticalAlignment), itemXML.Attribute("VerticalContentAlignment").Value, true));
                this.TextAlignment = (TextAlignment)(Enum.Parse(typeof(TextAlignment), itemXML.Attribute("TextAlignment").Value, true));
                this.TextWrapping  = (TextWrapping)(Enum.Parse(typeof(TextWrapping), itemXML.Attribute("TextWrapping").Value, true));
                this.TextTrimming  = (TextTrimming)(Enum.Parse(typeof(TextTrimming), itemXML.Attribute("TextTrimming").Value, true));
            }
            catch { }
            try
            {
                this.Foreground = itemXML.Attribute("Foreground").Value != "" ? XamlReader.Parse(itemXML.Attribute("Foreground").Value) as Brush : null;
                this.FontWeight = (FontWeight)(new FontWeightConverter().ConvertFromString(itemXML.Attribute("FontWeight").Value));
                this.FontStyle  = (FontStyle)(new FontStyleConverter().ConvertFromString(itemXML.Attribute("FontStyle").Value));
            }
            catch { }
        }
Ejemplo n.º 4
0
        static TextElementFlags GetTextFlags(object ownerControl)
        {
            TextTrimming textTrimming = TextTrimming.None;
            TextWrapping textWrapping = TextWrapping.NoWrap;

            if (ownerControl is TextControl textControl)
            {
                textTrimming = textControl.TextTrimming;
                textWrapping = textControl.TextWrapping;
            }

            TextElementFlags flags = 0;

            switch (textTrimming)
            {
            case TextTrimming.None: flags |= TextElementFlags.NoTrimming; break;

            case TextTrimming.CharacterEllipsis: flags |= TextElementFlags.CharacterEllipsis; break;

            case TextTrimming.WordEllipsis: flags |= TextElementFlags.WordEllipsis; break;

            default: Debug.Fail($"Unknown trimming: {textTrimming}"); break;
            }
            switch (textWrapping)
            {
            case TextWrapping.WrapWithOverflow: flags |= TextElementFlags.WrapWithOverflow; break;

            case TextWrapping.NoWrap: flags |= TextElementFlags.NoWrap; break;

            case TextWrapping.Wrap: flags |= TextElementFlags.Wrap; break;

            default: Debug.Fail($"Unknown wrapping: {textWrapping}"); break;
            }
            return(flags);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextLayout" /> class.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <param name="typeface">The typeface.</param>
        /// <param name="fontSize">Size of the font.</param>
        /// <param name="foreground">The foreground.</param>
        /// <param name="textAlignment">The text alignment.</param>
        /// <param name="textWrapping">The text wrapping.</param>
        /// <param name="textTrimming">The text trimming.</param>
        /// <param name="textDecorations">The text decorations.</param>
        /// <param name="flowDirection">The text flow direction.</param>
        /// <param name="maxWidth">The maximum width.</param>
        /// <param name="maxHeight">The maximum height.</param>
        /// <param name="lineHeight">The height of each line of text.</param>
        /// <param name="maxLines">The maximum number of text lines.</param>
        /// <param name="textStyleOverrides">The text style overrides.</param>
        public TextLayout(
            string?text,
            Typeface typeface,
            double fontSize,
            IBrush?foreground,
            TextAlignment textAlignment = TextAlignment.Left,
            TextWrapping textWrapping   = TextWrapping.NoWrap,
            TextTrimming?textTrimming   = null,
            TextDecorationCollection?textDecorations = null,
            FlowDirection flowDirection = FlowDirection.LeftToRight,
            double maxWidth             = double.PositiveInfinity,
            double maxHeight            = double.PositiveInfinity,
            double lineHeight           = double.NaN,
            int maxLines = 0,
            IReadOnlyList <ValueSpan <TextRunProperties> >?textStyleOverrides = null)
        {
            _paragraphProperties =
                CreateTextParagraphProperties(typeface, fontSize, foreground, textAlignment, textWrapping,
                                              textDecorations, flowDirection, lineHeight);

            _textSource = new FormattedTextSource(text.AsMemory(), _paragraphProperties.DefaultTextRunProperties, textStyleOverrides);

            _textTrimming = textTrimming ?? TextTrimming.None;

            LineHeight = lineHeight;

            MaxWidth = maxWidth;

            MaxHeight = maxHeight;

            MaxLines = maxLines;

            TextLines = CreateTextLines();
        }
 private void NotifyCellCharacterEllipsisChanged(TextTrimming newvalue)
 {
     if (tb.IsNotNull())
     {
         tb.TextTrimming = newvalue;
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextLayout" /> class.
        /// </summary>
        /// <param name="textSource">The text source.</param>
        /// <param name="paragraphProperties">The default text paragraph properties.</param>
        /// <param name="textTrimming">The text trimming.</param>
        /// <param name="maxWidth">The maximum width.</param>
        /// <param name="maxHeight">The maximum height.</param>
        /// <param name="lineHeight">The height of each line of text.</param>
        /// <param name="maxLines">The maximum number of text lines.</param>
        public TextLayout(
            ITextSource textSource,
            TextParagraphProperties paragraphProperties,
            TextTrimming?textTrimming = null,
            double maxWidth           = double.PositiveInfinity,
            double maxHeight          = double.PositiveInfinity,
            double lineHeight         = double.NaN,
            int maxLines = 0)
        {
            _textSource = textSource;

            _paragraphProperties = paragraphProperties;

            _textTrimming = textTrimming ?? TextTrimming.None;

            LineHeight = lineHeight;

            MaxWidth = maxWidth;

            MaxHeight = maxHeight;

            MaxLines = maxLines;

            TextLines = CreateTextLines();
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Method to change the text trimming value of the annotation.
        /// </summary>
        /// <param name="value"></param>
        private void OnTextTrimmingChanged(TextTrimming value)
        {
            foreach (NodeViewModel node in (this.SelectedItems as SelectorViewModel).Nodes as IEnumerable <object> )
            {
                foreach (IAnnotation annotation in node.Annotations as ObservableCollection <IAnnotation> )
                {
                    (annotation as TextAnnotationViewModel).TextTrimming = value;

                    if (value != TextTrimming.None && (annotation as TextAnnotationViewModel).TextWrapping == TextWrapping.NoWrap)
                    {
                        annotation.UnitWidth = 100;
                    }
                    else
                    {
                        annotation.UnitWidth = double.NaN;
                    }
                }
            }
            foreach (ConnectorViewModel conn in (this.SelectedItems as SelectorViewModel).Connectors as IEnumerable <object> )
            {
                foreach (IAnnotation annotation in conn.Annotations as ObservableCollection <IAnnotation> )
                {
                    (annotation as TextAnnotationViewModel).TextTrimming = value;
                    if (value != TextTrimming.None && (annotation as TextAnnotationViewModel).TextWrapping == TextWrapping.NoWrap)
                    {
                        annotation.UnitWidth = 100;
                    }
                    else
                    {
                        annotation.UnitWidth = double.NaN;
                    }
                }
            }
        }
Ejemplo n.º 9
0
 public WpfTextStringFormat(FlowDirection direction, TextTrimming trimming,
                            WpfTextAnchor anchor)
 {
     this.Direction = direction;
     this.Trimming  = trimming;
     this.Anchor    = anchor;
 }
Ejemplo n.º 10
0
        public void When_DefaultTextBlock_Clip(TextTrimming trimmingMode)
        {
            var SUT = new TextBlockMeasureCache();

            var tb = new TextBlock {
                Text = "42", TextTrimming = trimmingMode
            };                                                                               // Used as key, never measured

            SUT.CacheMeasure(tb, new Size(200, 100), new Size(125, 25));
            SUT.CacheMeasure(tb, new Size(100, 100), new Size(100, 50));
            SUT.CacheMeasure(tb, new Size(75, 100), new Size(75, 100));
            SUT.CacheMeasure(tb, new Size(50, 100), new Size(50, 100));

            Assert.AreEqual(
                new Size(125, 25),
                SUT.FindMeasuredSize(tb, new Size(125, 100))
                );

            Assert.AreEqual(
                new Size(50, 100),
                SUT.FindMeasuredSize(tb, new Size(50, 70))
                );

            Assert.AreEqual(
                null,
                SUT.FindMeasuredSize(tb, new Size(52, 70))
                );

            Assert.AreEqual(
                null,
                SUT.FindMeasuredSize(tb, new Size(500, 500))
                );
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Allocates or re-alocates this resource.
        /// </summary>
        /// <param name="boxWidth"></param>
        /// <param name="wrap"></param>
        public void Allocate(float boxWidth, float boxHeight, bool wrap, TextTrimming textTrimming)
        {
            if (String.IsNullOrEmpty(_text))
            {
                DisposeBuffer();
                return;
            }
            if (_font == null)
            {
                return;
            }

            // Get text quads
            string[] lines = GetLines(boxWidth, boxHeight, wrap, textTrimming);
            PositionColoredTextured[] verts = _font.CreateText(lines, _fontSize, true, out _lastTextSize, out _textLines);

            // Re-use existing buffer if necessary
            _buffer.Set(ref verts, PrimitiveType.TriangleList);

            // Preserve state
            _lastTextBoxWidth = boxWidth;
            _lastWrap         = wrap;
            _lastTextTrimming = textTrimming;
            _textChanged      = false;
        }
Ejemplo n.º 12
0
 public WpfTextStringFormat(FlowDirection direction, TextTrimming trimming,
     WpfTextAnchor anchor)
 {
     this.Direction = direction;
     this.Trimming = trimming;
     this.Anchor = anchor;
 }
Ejemplo n.º 13
0
        public TextRenderHelper()
        {
            List <char> list = new List <char>();

            list.Add(',');
            list.Add('.');
            list.Add('。');
            list.Add('、');
            this.delimiters = list;
//			base..ctor(); //FIXME:???
            this.Font = UISystem.DefaultFont;
            this.horizontalAlignment = HorizontalAlignment.Center;
            this.verticalAlignment   = VerticalAlignment.Middle;
            this.horizontalOffset    = 0f;
            this.verticalOffset      = 0f;
            this.lineBreak           = LineBreak.Character;
            this.textTrimming        = TextTrimming.None;
            this.lineGap             = 0f;
            Dictionary <LineBreak, TextRenderHelper.ReflectLineBreak> dictionary = new Dictionary <LineBreak, TextRenderHelper.ReflectLineBreak>();

            dictionary.Add(LineBreak.Character, new TextRenderHelper.ReflectLineBreak(this.ReflectLineBreakCharacter));
            dictionary.Add(LineBreak.Word, new TextRenderHelper.ReflectLineBreak(this.ReflectLineBreakWord));
            dictionary.Add(LineBreak.Hyphenation, new TextRenderHelper.ReflectLineBreak(this.ReflectLineBreakHyphenation));
            dictionary.Add(LineBreak.AtCode, new TextRenderHelper.ReflectLineBreak(this.ReflectLineBreakAtCode));
            this.ReflectLineBreakFuncs = dictionary;
            Dictionary <TextTrimming, TextRenderHelper.ReflectTextTrimming> dictionary2 = new Dictionary <TextTrimming, TextRenderHelper.ReflectTextTrimming>();

            dictionary2.Add(TextTrimming.None, new TextRenderHelper.ReflectTextTrimming(this.ReflectTextTrimmingNone));
            dictionary2.Add(TextTrimming.Character, new TextRenderHelper.ReflectTextTrimming(this.ReflectTextTrimmingCharacter));
            dictionary2.Add(TextTrimming.Word, new TextRenderHelper.ReflectTextTrimming(this.ReflectTextTrimmingWord));
            dictionary2.Add(TextTrimming.EllipsisCharacter, new TextRenderHelper.ReflectTextTrimming(this.ReflectTextTrimmingEllipsisCharacter));
            dictionary2.Add(TextTrimming.EllipsisWord, new TextRenderHelper.ReflectTextTrimming(this.ReflectTextTrimmingEllipsisWord));
            this.ReflectTextTrimmingFuncs = dictionary2;
        }
Ejemplo n.º 14
0
 public Text(System.Drawing.Font font, string content)
 {
     this._trimming  = TextTrimming.WordEllipsis;
     this._text      = content;
     this._font      = font;
     this._foreColor = Colors.Black;
 }
Ejemplo n.º 15
0
        public static string ProcessTrimming(Control control, string text, double availableWidth)
        {
            TextTrimming   trimming       = GetTextTrimming(control);
            TrimmingSource source         = GetTrimmingSource(control);
            string         wordSeparators = GetWordSeparators(control);

            return(ProcessTrimming(control, text, availableWidth, trimming, source, wordSeparators));
        }
Ejemplo n.º 16
0
 public string[] GetLines(float maxWidth, float maxHeight, bool wrap, TextTrimming textTrimming)
 {
     string[] lines = wrap ? WrapText(maxWidth) : _text.Split(Environment.NewLine.ToCharArray());
     if (textTrimming != TextTrimming.None)
     {
         lines = TrimText(lines, textTrimming, maxWidth, maxHeight);
     }
     return(lines);
 }
Ejemplo n.º 17
0
 public static void SetTextTrimming(this HtmlStyleDictionary style, TextTrimming textTrimming)
 {
     if (textTrimming == TextTrimming.None)
     {
         style.ClearValue("text-overflow");
     }
     else
     {
         style.SetValue("text-overflow", "ellipsis");
     }
 }
 private void ApplyNativeTextTrimming(TextTrimming textTrimming)
 {
     if (textTrimming == TextTrimming.WordEllipsis)
     {
         ((Android.Widget.TextView) this.NativeUIElement).Ellipsize = TextUtils.TruncateAt.End;
     }
     else
     {
         ((Android.Widget.TextView) this.NativeUIElement).Ellipsize = null;
     }
 }
Ejemplo n.º 19
0
        public wpf::System.Windows.TextTrimming Convert(TextTrimming textTrimming)
        {
            switch (textTrimming)
            {
            case TextTrimming.None: return(wpf::System.Windows.TextTrimming.None);

            case TextTrimming.CharacterEllipsis: return(wpf::System.Windows.TextTrimming.CharacterEllipsis);
            }

            throw new Granular.Exception("Unexpected TextTrimming value \"{0}\"", textTrimming);
        }
Ejemplo n.º 20
0
 public static void SetHtmlTextTrimming(this HtmlElement element, TextTrimming textTrimming)
 {
     if (textTrimming == TextTrimming.None)
     {
         element.ClearHtmlStyleProperty("text-overflow");
     }
     else
     {
         element.SetHtmlStyleProperty("text-overflow", "ellipsis");
     }
 }
Ejemplo n.º 21
0
        internal static string ToCssString(this TextTrimming value)
        {
            switch (value)
            {
            case TextTrimming.CharacterEllipsis:
                return("ellipsis");

            default:
                return("clip");
            }
        }
Ejemplo n.º 22
0
 public TextParagraphProperties(
     TextStyle defaultTextStyle,
     TextAlignment textAlignment = TextAlignment.Left,
     TextWrapping textWrapping   = TextWrapping.NoWrap,
     TextTrimming textTrimming   = TextTrimming.None)
 {
     DefaultTextStyle = defaultTextStyle;
     TextAlignment    = textAlignment;
     TextWrapping     = textWrapping;
     TextTrimming     = textTrimming;
 }
Ejemplo n.º 23
0
 public void SetTrimming(object backend, TextTrimming textTrimming)
 {
     Pango.Layout tl = (Pango.Layout)backend;
     if (textTrimming == TextTrimming.WordElipsis)
     {
         tl.Ellipsize = Pango.EllipsizeMode.End;
     }
     if (textTrimming == TextTrimming.Word)
     {
         tl.Ellipsize = Pango.EllipsizeMode.None;
     }
 }
Ejemplo n.º 24
0
        public Size Measure(TextAlignment alignment, TextWrapping wrapping, TextTrimming trimming, float maxWidth, float maxHeight, float lineHeight, LineStackingStrategy lineStacking)
        {
            IntPtr ret = NoesisGUI_PINVOKE.FormattedText_Measure(swigCPtr, (int)alignment, (int)wrapping, (int)trimming, maxWidth, maxHeight, lineHeight, (int)lineStacking);

            if (ret != IntPtr.Zero)
            {
                return(Marshal.PtrToStructure <Size>(ret));
            }
            else
            {
                return(new Size());
            }
        }
Ejemplo n.º 25
0
        public static StringTrimming ToGdi(this TextTrimming value)
        {
            if (value == TextTrimming.Word)
            {
                return(StringTrimming.Word);
            }
            if (value == TextTrimming.WordElipsis)
            {
                return(StringTrimming.EllipsisWord);
            }

            return(StringTrimming.Word);
        }
Ejemplo n.º 26
0
        public override void SetTrimming(object backend, TextTrimming textTrimming)
        {
            var tl = (PangoBackend)backend;

            if (textTrimming == TextTrimming.WordElipsis)
            {
                tl.Layout.Ellipsize = Pango.EllipsizeMode.End;
            }
            if (textTrimming == TextTrimming.Word)
            {
                tl.Layout.Ellipsize = Pango.EllipsizeMode.None;
            }
        }
Ejemplo n.º 27
0
        public GenericTextParagraphProperties(
            TextRunProperties defaultTextRunProperties,
            TextAlignment textAlignment = TextAlignment.Left,
            TextWrapping textWrapping   = TextWrapping.WrapWithOverflow,
            TextTrimming textTrimming   = TextTrimming.None,
            double lineHeight           = 0)
        {
            DefaultTextRunProperties = defaultTextRunProperties;

            _textAlignment = textAlignment;

            _textWrapping = textWrapping;

            _textTrimming = textTrimming;

            _lineHeight = lineHeight;
        }
Ejemplo n.º 28
0
        public static System.Windows.TextTrimming ToNativeTextTrimming(this TextTrimming textTrimming)
        {
            switch (textTrimming)
            {
            case TextTrimming.None:
                return(System.Windows.TextTrimming.None);

            case TextTrimming.CharacterEllipsis:
                return(System.Windows.TextTrimming.CharacterEllipsis);

            case TextTrimming.WordEllipsis:
                return(System.Windows.TextTrimming.WordEllipsis);

            default:
                throw new ArgumentException();
            }
        }
 /// <summary>
 /// Method to change the stroke color of the nodes
 /// </summary>
 /// <param name="fillcolor"></param>
 private void OnTextTrimmingChanged(TextTrimming value)
 {
     foreach (NodeViewModel node in (this.SelectedItems as SelectorViewModel).Nodes as IEnumerable <object> )
     {
         foreach (IAnnotation annotation in node.Annotations as ObservableCollection <IAnnotation> )
         {
             (annotation as TextAnnotationViewModel).TextTrimming = value;
         }
     }
     foreach (ConnectorViewModel conn in (this.SelectedItems as SelectorViewModel).Connectors as IEnumerable <object> )
     {
         foreach (IAnnotation annotation in conn.Annotations as ObservableCollection <IAnnotation> )
         {
             (annotation as TextAnnotationViewModel).TextTrimming = value;
         }
     }
 }
Ejemplo n.º 30
0
        public bool DrawText(ref string text, Font font, Color color, int x, int y, int width, int height,
                             TextAlignment alignment, TextTrimming trimming)
        {
            VerifyAccess();

            uint flags = Bitmap.DT_WordWrap;

            // Text alignment
            switch (alignment)
            {
            case TextAlignment.Left:
                //flags |= Bitmap.DT_AlignmentLeft;
                break;

            case TextAlignment.Center:
                flags |= Bitmap.DT_AlignmentCenter;
                break;

            case TextAlignment.Right:
                flags |= Bitmap.DT_AlignmentRight;
                break;

            default:
                throw new NotSupportedException();
            }

            // Trimming
            switch (trimming)
            {
            case TextTrimming.CharacterEllipsis:
                flags |= Bitmap.DT_TrimmingCharacterEllipsis;
                break;

            case TextTrimming.WordEllipsis:
                flags |= Bitmap.DT_TrimmingWordEllipsis;
                break;
            }

            int xRelStart = 0;
            int yRelStart = 0;

            return(_bitmap.DrawTextInRect(ref text, ref xRelStart, ref yRelStart, _x + x, _y + y,
                                          width, height, flags, color, font));
        }
Ejemplo n.º 31
0
        public static Gdi.StringTrimming ToGdi(this TextTrimming trimming)
        {
            switch (trimming)
            {
            case TextTrimming.None:
                return(Gdi.StringTrimming.None);

            case TextTrimming.Character:
                return(Gdi.StringTrimming.EllipsisCharacter);

            case TextTrimming.Word:
                return(Gdi.StringTrimming.EllipsisWord);

            default:
                break;
            }

            throw new NotImplementedException($"Text trimming {trimming} is not implemented");
        }
Ejemplo n.º 32
0
 public override void SetTrimming(object backend, TextTrimming textTrimming)
 {
     LayoutBackend la = (LayoutBackend) backend;
     la.TextTrimming = textTrimming;
 }
Ejemplo n.º 33
0
 /// <summary>
 /// Sets the value of the <see cref="TextTrimming"/> dependency property attached to the given <see cref="DependencyObject"/>.
 /// </summary>
 /// <param name="target">The target <see cref="DependencyObject"/>.</param>
 /// <param name="value">The value to set.</param>
 public static void SetTextTrimming(DependencyObject target, TextTrimming value)
 {
     target.SetValue(TextTrimmingProperty, value);
 }
Ejemplo n.º 34
0
 private void ApplyNativeTextTrimming(TextTrimming textTrimming)
 {
     if (textTrimming == TextTrimming.WordEllipsis)
     {
         ((Android.Widget.TextView)this.NativeUIElement).Ellipsize = TextUtils.TruncateAt.End;
     }
     else
     {
         ((Android.Widget.TextView)this.NativeUIElement).Ellipsize = null;
     }
 }
Ejemplo n.º 35
0
 public static void SetTextTrimming(this HtmlStyleDictionary style, TextTrimming textTrimming)
 {
     if (textTrimming == TextTrimming.None)
     {
         style.ClearValue("text-overflow");
     }
     else
     {
         style.SetValue("text-overflow", "ellipsis");
     }
 }
Ejemplo n.º 36
0
        public bool DrawText(ref string text, Font font, Color color, int x, int y, int width, int height, TextAlignment alignment, TextTrimming trimming, bool wordWrap)
        {
            if (font != null)
            {
                uint flags = 0;// Bitmap.DT_IgnoreHeight;

                if (wordWrap)
                    flags |= Bitmap.DT_WordWrap;

                // Text alignment
                switch (alignment)
                {
                    case TextAlignment.Left: flags |= Bitmap.DT_AlignmentLeft; break;
                    case TextAlignment.Center: flags |= Bitmap.DT_AlignmentCenter; break;
                    case TextAlignment.Right: flags |= Bitmap.DT_AlignmentRight; break;
                    default: throw new NotSupportedException();
                }

                // Trimming
                switch (trimming)
                {
                    case TextTrimming.CharacterEllipsis: flags |= Bitmap.DT_TrimmingCharacterEllipsis; break;
                    case TextTrimming.WordEllipsis: flags |= Bitmap.DT_TrimmingWordEllipsis; break;
                }

                int xRelStart = 0;
                int yRelStart = 0;
                return bitmap.DrawTextInRect(ref text, ref xRelStart, ref yRelStart, translationX + x, translationY + y, width, height, flags, (MSMedia.Color)color, font);
            }

            return false;
        }
Ejemplo n.º 37
0
        public bool DrawText(ref string text, Font font, Color color, int x, int y, int width, int height,
                             TextAlignment alignment, TextTrimming trimming)
        {
            VerifyAccess();

            uint flags = Bitmap.DT_WordWrap;

            // Text alignment
            switch (alignment)
            {
                case TextAlignment.Left:
                    //flags |= Bitmap.DT_AlignmentLeft;
                    break;
                case TextAlignment.Center:
                    flags |= Bitmap.DT_AlignmentCenter;
                    break;
                case TextAlignment.Right:
                    flags |= Bitmap.DT_AlignmentRight;
                    break;
                default:
                    throw new NotSupportedException();
            }

            // Trimming
            switch (trimming)
            {
                case TextTrimming.CharacterEllipsis:
                    flags |= Bitmap.DT_TrimmingCharacterEllipsis;
                    break;
                case TextTrimming.WordEllipsis:
                    flags |= Bitmap.DT_TrimmingWordEllipsis;
                    break;
            }

            int xRelStart = 0;
            int yRelStart = 0;
            return _bitmap.DrawTextInRect(ref text, ref xRelStart, ref yRelStart, _x + x, _y + y,
                                           width, height, flags, color, font);
        }
Ejemplo n.º 38
0
 public override void SetTrimming(object backend, TextTrimming textTrimming)
 {
     ((TextLayoutContext) backend).StringTrimming = textTrimming.ToDrawingStringTrimming();
 }
Ejemplo n.º 39
0
 private static double GetTextWidth(Control control, string text, TextTrimming trimming)
 {
     double[] dummy;
     return GetTextWidth(control, text, trimming, out dummy);
 }
Ejemplo n.º 40
0
        public wpf::System.Windows.TextTrimming Convert(TextTrimming textTrimming)
        {
            switch (textTrimming)
            {
                case TextTrimming.None: return wpf::System.Windows.TextTrimming.None;
                case TextTrimming.CharacterEllipsis: return wpf::System.Windows.TextTrimming.CharacterEllipsis;
            }

            throw new Granular.Exception("Unexpected TextTrimming value \"{0}\"", textTrimming);
        }
Ejemplo n.º 41
0
 public abstract void SetTrimming(object backend, TextTrimming textTrimming);
 public void SetTrimming(object backend, TextTrimming textTrimming)
 {
     Pango.Layout tl = (Pango.Layout)backend;
     if (textTrimming == TextTrimming.WordElipsis)
         tl.Ellipsize = Pango.EllipsizeMode.End;
     if (textTrimming == TextTrimming.Word)
         tl.Ellipsize = Pango.EllipsizeMode.None;
 }
Ejemplo n.º 43
0
 /// <summary>
 /// 设置裁剪文本
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="value"></param>
 public static void SetYTextTrimming(DependencyObject obj, TextTrimming value)
 {
     obj.SetValue(YTextTrimmingProperty, value);
 }
Ejemplo n.º 44
0
 public override void SetTrimming(object backend, TextTrimming textTrimming)
 {
     var tl = (PangoBackend)backend;
     if (textTrimming == TextTrimming.WordElipsis)
         tl.Layout.Ellipsize = Pango.EllipsizeMode.End;
     if (textTrimming == TextTrimming.Word)
         tl.Layout.Ellipsize = Pango.EllipsizeMode.None;
 }
Ejemplo n.º 45
0
        private static double GetTextWidth(Control control, string text, TextTrimming trimming, out double[] sizes)
        {
            var wordSeparators = GetWordSeparators(control);

            var typeface = new Typeface(control.FontFamily, control.FontStyle, control.FontWeight, control.FontStretch);
            var totalWidth = 0.0;
            // We use a period to ensure space characters will have their actual size used.
            var period = new FormattedText(".", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, control.FontSize, Brushes.Black);
            double periodWidth = period.Width;

            switch (trimming)
            {
                case TextTrimming.CharacterEllipsis:
                    sizes = new double[text.Length];
                    for (var i = 0; i < text.Length; i++)
                    {
                        string token = text[i].ToString(CultureInfo.CurrentUICulture) + ".";
                        var formattedText = new FormattedText(token, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, control.FontSize, Brushes.Black);
                        double width = formattedText.Width - periodWidth;
                        sizes[i] = width;
                        totalWidth += width;
                    }
                    return totalWidth;
                case TextTrimming.WordEllipsis:
                    var words = SplitWords(text, wordSeparators);
                    sizes = new double[words.Count];
                    for (var i = 0; i < words.Count; i++)
                    {
                        string token = words[i] + ".";
                        var formattedText = new FormattedText(token, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, control.FontSize, Brushes.Black);
                        double width = formattedText.Width - periodWidth;
                        sizes[i] = width;
                        totalWidth += width;
                    }
                    return totalWidth;
                default:
                    throw new ArgumentOutOfRangeException("trimming");
            }
        }
Ejemplo n.º 46
0
		public override void SetTrimming (object backend, TextTrimming value)
		{
			LayoutInfo li = (LayoutInfo)backend;
			li.TextTrimming = value;
		}
Ejemplo n.º 47
0
        private static string ProcessTrimming(Control control, string text, double availableWidth, TextTrimming trimming, TrimmingSource source, string wordSeparators)
        {
            if (trimming == TextTrimming.None)
            {
                return text;
            }

            double[] sizes;
            var textWidth = GetTextWidth(control, text, trimming, out sizes);
            if (availableWidth >= textWidth)
            {
                return text;
            }
            if (sizes.Length == 0)
            {
                return text;
            }

            List<string> words;

            switch (trimming)
            {
                case TextTrimming.CharacterEllipsis:
                    words = text.ToCharArray().Select(c => c.ToString(CultureInfo.InvariantCulture)).ToList();
                    break;
                case TextTrimming.WordEllipsis:
                    words = SplitWords(text, wordSeparators);
                    break;
                default:
                    throw new ArgumentException("Invalid 'TextTrimming' argument.");
            }

            bool firstWord = true;
            
            switch (source)
            {
                case TrimmingSource.Begin:
                {
                    var currentWidth = GetTextWidth(control, Ellipsis, trimming);

                    var ending = new StringBuilder();
                    for (int i = words.Count - 1; i >= 0; --i)
                    {
                        var test = currentWidth + sizes[i];

                        if (test > availableWidth)
                        {
                            // If there's not enough room for a single word, fall back on character trimming from the beginning
                            if (trimming == TextTrimming.WordEllipsis && firstWord)
                            {
                                return ProcessTrimming(control, words[i], availableWidth, TextTrimming.CharacterEllipsis, TrimmingSource.Begin, wordSeparators);
                            }
                            break;
                        }
                        ending.Insert(0, words[i]);
                        currentWidth = test;
                        firstWord = false;
                    }

                    return string.Format("{0}{1}", Ellipsis, ending);
                }
                case TrimmingSource.Middle:
                {
                    var currentWidth = GetTextWidth(control, Ellipsis, trimming);

                    var begin = new StringBuilder();
                    var ending = new StringBuilder();
                    for (int i = 0, j = words.Count - 1; i <= j; ++i, --j)
                    {
                        var test = currentWidth + sizes[i] + (i != j ? sizes[j] : 0);

                        if (test > availableWidth)
                        {
                            // If there's not enough room for a single word, fall back on character trimming from the end
                            if (trimming == TextTrimming.WordEllipsis && firstWord)
                            {
                                return ProcessTrimming(control, words[j], availableWidth, TextTrimming.CharacterEllipsis, TrimmingSource.End, wordSeparators);
                            }
                            break;
                        }
                        begin.Append(words[i]);
                        if (i != j)
                            ending.Insert(0, words[j]);

                        currentWidth = test;
                        firstWord = false;
                    }

                    return string.Format("{0}{2}{1}", begin, ending, Ellipsis);
                }
                case TrimmingSource.End:
                {
                    var currentWidth = GetTextWidth(control, Ellipsis, trimming);

                    var begin = new StringBuilder();
                    for (int i = 0; i < words.Count; ++i)
                    {
                        var test = currentWidth + sizes[i];

                        if (test > availableWidth)
                        {
                            // If there's not enough room for a single word, fall back on character trimming from the end
                            if (trimming == TextTrimming.WordEllipsis && firstWord)
                            {
                                return ProcessTrimming(control, words[i], availableWidth, TextTrimming.CharacterEllipsis, TrimmingSource.Begin, wordSeparators);
                            }
                            break;
                        }

                        begin.Append(words[i]);
                        currentWidth = test;
                        firstWord = false;
                    }

                    return string.Format("{0}{1}", begin, Ellipsis);
                }
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }