public SizeF MeasureString(string text, Alignment alignment, int maxWidth = int.MaxValue) { //todo: support alignment var key = new TextMeasureKey(text, InnerFont, maxWidth); return(_measurements.GetOrAdd(key, k => { using (NSMutableAttributedString str = new NSMutableAttributedString(text)) { NSRange range = new NSRange(0, k.Text.Length); str.SetAttributes(new CTStringAttributes { Font = k.Font, }, range); using (CTFramesetter frameSetter = new CTFramesetter(str)) { NSRange fitRange; CGSize size = frameSetter.SuggestFrameSize(range, null, new CGSize(k.MaxWidth, float.MaxValue), out fitRange); return new SizeF((float)size.Width, (float)size.Height); } } })); }
//http://egoco.de/post/19077604048/calculating-the-height-of-text-in-android //http://stackoverflow.com/questions/16082359/how-to-auto-adjust-text-size-on-a-multi-line-textview-according-to-the-view-max public SizeF MeasureString(string text, int maxWidth = 2147483647) { var key = new TextMeasureKey(text, InnerFont, SizeInPoints, maxWidth); return(_measurements.GetOrAdd(key, k => { TextPaint paint = AndroidBrush.CreateTextPaint(); paint.TextSize = k.SizeInPoints; paint.SetTypeface(k.Font); AndroidTextLayout layout = new AndroidTextLayout(paint); return layout.MeasureString(k.Text, k.MaxWidth); })); }
public static System.Drawing.SizeF Measure(this string text, Font font, int maxWidth = int.MaxValue) { var key = new TextMeasureKey(text, font, maxWidth); var size = _measurements.GetOrAdd(key, k => { lock (DesktopBitmapTextDraw.GraphicsLocker) { return(_graphics.Value.MeasureString(k.Text, k.Font, k.MaxWidth, StringFormat.GenericTypographic)); } }); return(size); }
public static System.Drawing.SizeF Measure(this string text, Font font, API.Alignment alignment, int maxWidth = int.MaxValue) { try { var key = new TextMeasureKey(text, font, maxWidth, alignment); var size = _measurements.GetOrAdd(key, k => { var format = alignment.GetFormat(maxWidth != int.MaxValue); lock (DesktopBitmapTextDraw.GraphicsLocker) { return(_graphics.Value.MeasureString(k.Text, k.Font, k.MaxWidth, format)); } }); return(size); } catch (ObjectDisposedException) { return(SizeF.Empty); } }