//
// This code is part of Document Solutions for Imaging demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Imaging;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsImagingWeb.Demos
{
// This sample demonstrates how to display ellipsis
// if a string does not fit in the allocated space.
public class TextTrimming
{
public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi);
var Inch = dpi;
const float fontSize = 12;
using (var g = bmp.CreateGraphics(Color.White))
{
var str = "This is a long line of text which does not fit in the allocated space.";
var wid = Inch * 4;
var dy = 0.3f;
var rc = Common.Util.AddNote(
"TextLayout allows displaying ellipsis (or other character) " +
"at the end of a text line that did not fit in the allocated space.\n" +
"To use trimming, set TrimmingGranularity to Character or Word " +
"(the default is None). Trimming will kick in if WrapMode is NoWrap, " +
"and the text is too long. Wrapped text may also display trimming if " +
"the layout width is too narrow to fit a single word.\n" +
"Below are examples of text untrimmed, trimmed to character and to word. " +
"The next line demonstrates a different trimming character (tilde in this case). " +
"Finally, the last line shows how to trim text (respecting TrimmingGranularity) " +
"without adding any trimming character.",
g);
var top = rc.Bottom + 36;
var ip = new PointF(rc.Left, top);
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf"));
tl.DefaultFormat.FontSize = fontSize;
tl.MaxWidth = wid;
tl.WrapMode = WrapMode.NoWrap;
// TrimmingGranularity is None by default:
tl.Append(str);
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
ip.Y += tl.ContentHeight + dy;
// Character trimming:
tl.TrimmingGranularity = TrimmingGranularity.Character;
// NOTE that the recalculateGlyphsBeforeLayout parameter to PerformLayout
// may be false after the first call, as the text/font has not changed:
tl.PerformLayout(false);
g.DrawTextLayout(tl, ip);
ip.Y += tl.ContentHeight + dy;
// Word trimming:
tl.TrimmingGranularity = TrimmingGranularity.Word;
tl.PerformLayout(false);
g.DrawTextLayout(tl, ip);
ip.Y += tl.ContentHeight + dy;
// tl.EllipsisCharCode is HorizontalEllipsis (0x2026) by default.
// Change it to a tilde:
tl.EllipsisCharCode = 0x007E;
tl.PerformLayout(false);
g.DrawTextLayout(tl, ip);
ip.Y += tl.ContentHeight + dy;
// Finally, we may set tl.EllipsisCharCode to 0 to trim text
// without rendering any trimming character:
tl.EllipsisCharCode = 0;
tl.PerformLayout(false);
g.DrawTextLayout(tl, ip);
ip.Y += tl.ContentHeight + dy;
g.DrawRectangle(new RectangleF(rc.Left, top, wid, ip.Y - top), Color.OrangeRed);
// Draw border around the whole image:
g.DrawRectangle(new RectangleF(0, 0, bmp.Width, bmp.Height), Color.DarkSlateBlue, 4);
}
// Done:
return bmp;
}
}
}