本文整理汇总了C#中Xwt.Drawing.TextLayout.GetSize方法的典型用法代码示例。如果您正苦于以下问题:C# TextLayout.GetSize方法的具体用法?C# TextLayout.GetSize怎么用?C# TextLayout.GetSize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Xwt.Drawing.TextLayout
的用法示例。
在下文中一共展示了TextLayout.GetSize方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OptionsChanged
internal protected override void OptionsChanged ()
{
var layout = new TextLayout (Editor);
layout.Font = Editor.Options.Font;
layout.Text = ".";
// int height;
charWidth = layout.GetSize ().Width;
layout.Dispose ();
}
示例2: OptionsChanged
internal protected override void OptionsChanged ()
{
var layout = new TextLayout (Editor);
layout.Font = Editor.Options.Font;
layout.Text = string.Format ("0{0:X}", Data.Length) + "_";
// int height;
width = layout.GetSize ().Width;
layout.Dispose ();
}
示例3: LogLevelChooser
public LogLevelChooser(LogLevel selectedLogLevel)
{
SelectedLogLevel = selectedLogLevel;
// prerender
string[] logNames = Enum.GetNames(typeof(LogLevel));
int length = logNames.Length;
renderedImage = new Image[length];
using (TextLayout text = new TextLayout()) {
for (int i = 0; i < length; i++) {
text.Text = logNames[i];
Size size = text.GetSize();
using (ImageBuilder ib = new ImageBuilder(size.Width + size.Height*2 + 3, size.Height)) {
Color color = Color.FromName(Log.LevelToColorString((LogLevel) i));
Draw(ib.Context, (LogLevel) i, color);
renderedImage[i] = ib.ToBitmap();
Button button = new Button { Image = renderedImage[i], ImagePosition = ContentPosition.Left };
button.HorizontalPlacement = WidgetPlacement.Start;
button.Margin = 0;
button.ExpandHorizontal = true;
button.Style = ButtonStyle.Flat;
buttons.PackStart(button, true, true);
button.CanGetFocus = false;
button.Tag = i;
button.Clicked += OnLogChange;
windowHeight += size.Height * 2;
}
}
}
// hide window on lost fokus
buttons.CanGetFocus = true;
buttons.LostFocus += delegate {
if (menuHide != null) {
menuHide(this, EventArgs.Empty);
}
popupWindow.Hide();
};
buttons.ButtonPressed += delegate {
// do nothing
// workaround to propagate event to each button
};
buttons.Spacing = 0;
popupWindow.Padding = 0;
popupWindow.ShowInTaskbar = false;
popupWindow.Decorated = false;
popupWindow.Content = buttons;
}
示例4: OptionsChanged
internal protected override void OptionsChanged ()
{
var layout = new TextLayout (Editor);
layout.Font = Editor.Options.Font;
layout.Text = "!";
// int tmp;
this.marginWidth = layout.GetSize ().Height;
marginWidth *= 12;
marginWidth /= 10;
layout.Dispose ();
}
示例5: OptionsChanged
internal protected override void OptionsChanged ()
{
var layout = new TextLayout (Editor);
layout.Font = Editor.Options.Font;
string groupString = new string ('0', Editor.Options.GroupBytes * 2);
layout.Text = groupString + " ";
double lineHeight;
var sz = layout.GetSize ();
groupWidth = sz.Width;
lineHeight = sz.Height;
Data.LineHeight = lineHeight;
layout.Text = "00";
byteWidth = layout.GetSize ().Width;
layout.Dispose ();
// tabArray = new Pango.TabArray (1, true);
// tabArray.SetTab (0, Pango.TabAlign.Left, groupWidth);
}
示例6: OnDraw
protected override void OnDraw (Context ctx, Rectangle cellArea)
{
PackageViewModel packageViewModel = GetValue (PackageField);
if (packageViewModel == null) {
return;
}
FillCellBackground (ctx);
UpdateTextColor (ctx);
DrawCheckBox (ctx, packageViewModel, cellArea);
DrawPackageImage (ctx, cellArea);
double packageIdWidth = cellArea.Width - packageDescriptionPadding.HorizontalSpacing - packageDescriptionLeftOffset;
// Package download count.
if (packageViewModel.HasDownloadCount) {
var downloadCountTextLayout = new TextLayout ();
downloadCountTextLayout.Text = packageViewModel.GetDownloadCountOrVersionDisplayText ();
Size size = downloadCountTextLayout.GetSize ();
Point location = new Point (cellArea.Right - packageDescriptionPadding.Right, cellArea.Top + packageDescriptionPadding.Top);
Point downloadLocation = location.Offset (-size.Width, 0);
ctx.DrawTextLayout (downloadCountTextLayout, downloadLocation);
packageIdWidth = downloadLocation.X - cellArea.Left - packageIdRightHandPaddingWidth - packageDescriptionPadding.HorizontalSpacing - packageDescriptionLeftOffset;
}
// Package Id.
var packageIdTextLayout = new TextLayout ();
packageIdTextLayout.Font = packageIdTextLayout.Font.WithSize (12);
packageIdTextLayout.Markup = packageViewModel.GetNameMarkup ();
packageIdTextLayout.Trimming = TextTrimming.WordElipsis;
Size packageIdTextSize = packageIdTextLayout.GetSize ();
packageIdTextLayout.Width = packageIdWidth;
ctx.DrawTextLayout (
packageIdTextLayout,
cellArea.Left + packageDescriptionPadding.Left + packageDescriptionLeftOffset,
cellArea.Top + packageDescriptionPadding.Top);
// Package description.
var descriptionTextLayout = new TextLayout ();
descriptionTextLayout.Font = descriptionTextLayout.Font.WithSize (11);
descriptionTextLayout.Width = cellArea.Width - packageDescriptionPadding.HorizontalSpacing - packageDescriptionLeftOffset;
descriptionTextLayout.Height = cellArea.Height - packageIdTextSize.Height - packageDescriptionPadding.VerticalSpacing;
descriptionTextLayout.Text = packageViewModel.Summary;
descriptionTextLayout.Trimming = TextTrimming.Word;
ctx.DrawTextLayout (
descriptionTextLayout,
cellArea.Left + packageDescriptionPadding.Left + packageDescriptionLeftOffset,
cellArea.Top + packageIdTextSize.Height + packageDescriptionPaddingHeight + packageDescriptionPadding.Top);
}
示例7: OnDraw
protected override void OnDraw(Context ctx, Rectangle dirtyRect)
{
base.OnDraw(ctx, dirtyRect);
ctx.SetColor(Colors.Gray);
ctx.SetLineWidth(1);
ctx.RoundRectangle(0, Padding.Top / 2 - .5, Width - 4.5, Height - Padding.Bottom * 1.5, 3);
ctx.Stroke();
var tl = new TextLayout(this) { Text = title, Width = Width - Padding.Left - Padding.Right / 2 };
ctx.SetColor(Colors.White);
ctx.Rectangle(Padding.Left, 0, tl.GetSize().Width, Padding.Top);
ctx.Fill();
ctx.SetColor(Colors.Black);
ctx.DrawTextLayout(tl, Padding.Left, 0);
}
示例8: OnSelectionChanged
protected override void OnSelectionChanged(EventArgs e)
{
if (SelectedRow == null)
return;
object value = store.GetNavigatorAt(SelectedRow).GetValue(nameCol);
if (value is BaseAlgorithm) {
TextLayout text = new TextLayout();
text.Text = value.ToString();
Size textSize = text.GetSize();
var ib = new ImageBuilder(textSize.Width, textSize.Height);
ib.Context.DrawTextLayout(text, 0, 0);
var d = CreateDragOperation();
d.Data.AddValue(value.GetType().AssemblyQualifiedName);
d.SetDragImage(ib.ToVectorImage(), -6, -4);
d.AllowedActions = DragDropAction.Link;
d.Start();
d.Finished += (object sender, DragFinishedEventArgs e2) => this.UnselectAll();
text.Dispose();
ib.Dispose();
} else {
this.UnselectRow(SelectedRow);
}
}
示例9: DrawTextLayout
public void DrawTextLayout(object backend, TextLayout layout, double x, double y)
{
var c = (DrawingContext)backend;
Size measure = layout.GetSize ();
float h = layout.Height > 0 ? (float)layout.Height : (float)measure.Height;
System.Drawing.StringFormat stringFormat = TextLayoutContext.StringFormat;
StringTrimming trimming = layout.Trimming.ToDrawingStringTrimming ();
if (layout.Height > 0 && stringFormat.Trimming != trimming) {
stringFormat = (System.Drawing.StringFormat)stringFormat.Clone ();
stringFormat.Trimming = trimming;
}
c.Graphics.DrawString (layout.Text, layout.Font.ToDrawingFont (), c.Brush,
new RectangleF ((float)x, (float)y, (float)measure.Width, h),
stringFormat);
}
示例10: DrawCursorLabel
void DrawCursorLabel (Context ctx, ChartCursor cursor)
{
ctx.SetColor (cursor.Color);
int x, y;
GetPoint (cursor.Value, cursor.Value, out x, out y);
if (cursor.Dimension == AxisDimension.X) {
string text;
if (cursor.LabelAxis != null) {
double minStep = GetMinTickStep (cursor.Dimension);
TickEnumerator tenum = cursor.LabelAxis.GetTickEnumerator (minStep);
tenum.Init (cursor.Value);
text = tenum.CurrentLabel;
} else {
text = GetValueLabel (cursor.Dimension, cursor.Value);
}
if (text != null && text.Length > 0) {
TextLayout layout = new TextLayout ();
layout.Font = chartFont;
layout.Text = text;
Size ts = layout.GetSize ();
double tl = x - ts.Width/2;
double tt = top + 4;
if (tl + ts.Width + 2 >= left + width) tl = left + width - ts.Width - 1;
if (tl < left + 1) tl = left + 1;
ctx.SetColor (Colors.White);
ctx.Rectangle (tl - 1, tt - 1, ts.Width + 2, ts.Height + 2);
ctx.Fill ();
ctx.Rectangle (tl - 2, tt - 2, ts.Width + 3, ts.Height + 3);
ctx.SetColor (Colors.Black);
ctx.DrawTextLayout (layout, tl, tt);
}
} else {
throw new NotSupportedException ();
}
}
示例11: MeasureTicksSize
double MeasureTicksSize (Context ctx, TickEnumerator e, AxisDimension ad)
{
double max = 0;
TextLayout layout = new TextLayout ();
layout.Font = chartFont;
double start = GetStart (ad);
double end = GetEnd (ad);
e.Init (GetOrigin (ad));
while (e.CurrentValue > start)
e.MovePrevious ();
for ( ; e.CurrentValue <= end; e.MoveNext ())
{
layout.Text = e.CurrentLabel;
Size ts = layout.GetSize ();
if (ad == AxisDimension.X) {
if (ts.Height > max)
max = ts.Height;
} else {
if (ts.Width > max)
max = ts.Width;
}
}
return max;
}
示例12: DrawPopover
void DrawPopover(Context ctx)
{
lock (trackerLock)
{
if (actualTrackerHitResult != null)
{
var trackerSettings = DefaultTrackerSettings;
if (actualTrackerHitResult.Series != null && !string.IsNullOrEmpty(actualTrackerHitResult.Series.TrackerKey))
trackerSettings = trackerDefinitions[actualTrackerHitResult.Series.TrackerKey];
if (trackerSettings.Enabled)
{
var extents = actualTrackerHitResult.LineExtents;
if (Math.Abs(extents.Width) < double.Epsilon)
{
extents = new OxyRect(actualTrackerHitResult.XAxis.ScreenMin.X, extents.Top, actualTrackerHitResult.XAxis.ScreenMax.X - actualTrackerHitResult.XAxis.ScreenMin.X, extents.Height);
}
if (Math.Abs(extents.Height) < double.Epsilon)
{
extents = new OxyRect(extents.Left, actualTrackerHitResult.YAxis.ScreenMin.Y, extents.Width, actualTrackerHitResult.YAxis.ScreenMax.Y - actualTrackerHitResult.YAxis.ScreenMin.Y);
}
var pos = actualTrackerHitResult.Position;
if (trackerSettings.HorizontalLineVisible)
{
renderContext.DrawLine(
new[] { new ScreenPoint(extents.Left, pos.Y), new ScreenPoint(extents.Right, pos.Y) },
trackerSettings.HorizontalLineColor,
trackerSettings.HorizontalLineWidth,
trackerSettings.HorizontalLineActualDashArray,
LineJoin.Miter,
true);
}
if (trackerSettings.VerticalLineVisible)
{
renderContext.DrawLine(
new[] { new ScreenPoint(pos.X, extents.Top), new ScreenPoint(pos.X, extents.Bottom) },
trackerSettings.VerticalLineColor,
trackerSettings.VerticalLineWidth,
trackerSettings.VerticalLineActualDashArray,
LineJoin.Miter,
true);
}
TextLayout text = new TextLayout();
text.Font = trackerSettings.Font;
text.Text = actualTrackerHitResult.Text;
var arrowTop = actualTrackerHitResult.Position.Y <= Bounds.Height / 2;
const int arrowPadding = 10;
var textSize = text.GetSize();
var outerSize = new Size(textSize.Width + (trackerSettings.Padding * 2),
textSize.Height + (trackerSettings.Padding * 2) + arrowPadding);
var trackerBounds = new Rectangle(pos.X - (outerSize.Width / 2),
0,
outerSize.Width,
outerSize.Height - arrowPadding);
if (arrowTop)
trackerBounds.Y = pos.Y + arrowPadding + trackerSettings.BorderWidth;
else
trackerBounds.Y = pos.Y - outerSize.Height - trackerSettings.BorderWidth;
var borderColor = trackerSettings.BorderColor.ToXwtColor();
ctx.RoundRectangle(trackerBounds, 6);
ctx.SetLineWidth(trackerSettings.BorderWidth);
ctx.SetColor(borderColor);
ctx.StrokePreserve();
ctx.SetColor(trackerSettings.Background.ToXwtColor());
ctx.Fill();
ctx.Save();
var arrowX = trackerBounds.Center.X;
var arrowY = arrowTop ? trackerBounds.Top : trackerBounds.Bottom;
ctx.NewPath();
ctx.MoveTo(arrowX, arrowY);
var triangleSide = 2 * arrowPadding / Math.Sqrt(3);
var halfSide = triangleSide / 2;
var verticalModifier = arrowTop ? -1 : 1;
ctx.RelMoveTo(-halfSide, 0);
ctx.RelLineTo(halfSide, verticalModifier * arrowPadding);
ctx.RelLineTo(halfSide, verticalModifier * -arrowPadding);
ctx.SetColor(borderColor);
ctx.StrokePreserve();
ctx.ClosePath();
ctx.SetColor(trackerSettings.Background.ToXwtColor());
ctx.Fill();
ctx.Restore();
ctx.SetColor(trackerSettings.TextColor.ToXwtColor());
ctx.DrawTextLayout(text,
trackerBounds.Left + trackerSettings.Padding,
trackerBounds.Top + trackerSettings.Padding);
}
}
}
//.........这里部分代码省略.........
示例13: Texts
public virtual void Texts(Xwt.Drawing.Context ctx, double x, double y)
{
ctx.Save ();
ctx.Translate (x, y);
ctx.SetColor (Colors.Black);
var col1 = new Rectangle ();
var col2 = new Rectangle ();
var text = new TextLayout ();
text.Font = this.Font.WithSize (24);
Console.WriteLine (text.Font.Size);
// first text
text.Text = "Lorem ipsum dolor sit amet,";
var size1 = text.GetSize ();
col1.Width = size1.Width;
col1.Height += size1.Height + 10;
ctx.DrawTextLayout (text, 0, 0);
// proofing width; test should align with text above
ctx.SetColor (Colors.DarkMagenta);
text.Text = "consetetur sadipscing elitr, sed diam nonumy";
text.Width = col1.Width;
var size2 = text.GetSize ();
ctx.DrawTextLayout (text, 0, col1.Bottom);
col1.Height += size2.Height + 10;
ctx.SetColor (Colors.Black);
// proofing scale, on second col
ctx.Save ();
ctx.SetColor (Colors.Red);
col2.Left = col1.Right + 10;
text.Text = "eirmod tempor invidunt ut.";
var scale = 1.2;
text.Width = text.Width / scale;
var size3 = text.GetSize ();
col2.Height = size3.Height * scale;
col2.Width = size3.Width * scale + 5;
ctx.Scale (scale, scale);
ctx.DrawTextLayout (text, col2.Left / scale, col2.Top / scale);
ctx.Restore ();
// proofing heigth, on second col
ctx.Save ();
ctx.SetColor (Colors.DarkCyan);
text.Text = "Praesent ac lacus nec dolor pulvinar feugiat a id elit.";
var size4 = text.GetSize ();
text.Height = size4.Height / 2;
text.Trimming=TextTrimming.WordElipsis;
ctx.DrawTextLayout (text, col2.Left, col2.Bottom + 5);
ctx.SetLineWidth (1);
ctx.SetColor (Colors.Blue);
ctx.Rectangle (new Rectangle (col2.Left, col2.Bottom + 5, text.Width, text.Height));
ctx.Stroke();
ctx.Restore ();
// drawing col line
ctx.SetLineWidth (1);
ctx.SetColor (Colors.Black.WithAlpha (.5));
ctx.MoveTo (col1.Right + 5, col1.Top);
ctx.LineTo (col1.Right + 5, col1.Bottom);
ctx.Stroke ();
ctx.MoveTo (col2.Right + 5, col2.Top);
ctx.LineTo (col2.Right + 5, col2.Bottom);
ctx.Stroke ();
ctx.SetColor (Colors.Black);
// proofing rotate, and printing size to see the values
ctx.Save ();
text.Font = this.Font.WithSize (10);
text.Text = string.Format ("Size 1 {0}\r\nSize 2 {1}\r\nSize 3 {2} Scale {3}",
size1, size2, size3, scale);
text.Width = -1; // this clears textsize
text.Height = -1;
ctx.Rotate (5);
// maybe someone knows a formula with angle and textsize to calculyte ty
var ty = 30;
ctx.DrawTextLayout (text, ty, col1.Bottom + 10);
ctx.Restore ();
// scale example here:
ctx.Restore ();
TextLayout tl0 = new TextLayout (this);
tl0.Font = this.Font.WithSize (10);
tl0.Text = "This text contains attributes.";
tl0.SetUnderline ( 0, "This".Length);
//.........这里部分代码省略.........
示例14: DrawTick
/// <summary>
/// Draw a tick on the axis.
/// </summary>
/// <param name="ctx">The Drawing Context with on which to draw.</param>
/// <param name="w">The tick position in world coordinates.</param>
/// <param name="size">The size of the tick (in pixels)</param>
/// <param name="text">The text associated with the tick</param>
/// <param name="textOffset">The Offset to draw from the auto calculated position</param>
/// <param name="axisPhysMin">The minimum physical extent of the axis</param>
/// <param name="axisPhysMax">The maximum physical extent of the axis</param>
/// <param name="boundingBox">out: The bounding rectangle for the tick and tickLabel drawn</param>
/// <param name="labelOffset">out: offset from the axies required for axis label</param>
public virtual void DrawTick(
Context ctx,
double w,
double size,
string text,
Point textOffset,
Point axisPhysMin,
Point axisPhysMax,
out Point labelOffset,
out Rectangle boundingBox )
{
// determine physical location where tick touches axis.
Point tickStart = WorldToPhysical (w, axisPhysMin, axisPhysMax, true);
// determine offset from start point.
Point axisDir = Utils.UnitVector (axisPhysMin, axisPhysMax);
// rotate axisDir anti-clockwise by TicksAngle radians to get tick direction. Note that because
// the physical (pixel) origin is at the top left, a RotationTransform by a positive angle will
// be clockwise. Consequently, for anti-clockwise rotations, use cos(A-B), sin(A-B) formulae
double x1 = Math.Cos (TicksAngle) * axisDir.X + Math.Sin (TicksAngle) * axisDir.Y;
double y1 = Math.Cos (TicksAngle) * axisDir.Y - Math.Sin (TicksAngle) * axisDir.X;
// now get the scaled tick vector.
Point tickVector = new Point (TickScale * size * x1, TickScale * size * y1);
if (TicksCrossAxis) {
tickStart.X -= tickVector.X / 2;
tickStart.Y -= tickVector.Y / 2;
}
// and the end point [point off axis] of tick mark.
Point tickEnd = new Point (tickStart.X + tickVector.X, tickStart.Y + tickVector.Y);
// and draw it
ctx.SetLineWidth (1);
ctx.SetColor (LineColor);
ctx.MoveTo (tickStart.X+0.5, tickStart.Y+0.5);
ctx.LineTo (tickEnd.X+0.5, tickEnd.Y+0.5);
ctx.Stroke ();
// calculate bounds of tick.
double minX = Math.Min (tickStart.X, tickEnd.X);
double minY = Math.Min (tickStart.Y, tickEnd.Y);
double maxX = Math.Max (tickStart.X, tickEnd.X);
double maxY = Math.Max (tickStart.Y, tickEnd.Y);
boundingBox = new Rectangle (minX, minY, maxX-minX, maxY-minY);
// by default, label offset from axis is 0. TODO: revise this.
labelOffset = new Point (-tickVector.X, -tickVector.Y);
// ------------------------
// now draw associated text.
// **** TODO ****
// The following code needs revising. A few things are hard coded when
// they should not be. Also, angled tick text currently just works for
// the bottom x-axis. Also, it's a bit hacky.
if (text != "" && !HideTickText) {
TextLayout layout = new TextLayout ();
layout.Font = tickTextFontScaled;
layout.Text = text;
Size textSize = layout.GetSize ();
// determine the center point of the tick text.
double textCenterX;
double textCenterY;
// if text is at pointy end of tick.
if (!TickTextNextToAxis) {
// offset due to tick.
textCenterX = tickStart.X + tickVector.X*1.2;
textCenterY = tickStart.Y + tickVector.Y*1.2;
// offset due to text box size.
textCenterX += 0.5 * x1 * textSize.Width;
textCenterY += 0.5 * y1 * textSize.Height;
}
// else it's next to the axis.
else {
// start location.
textCenterX = tickStart.X;
textCenterY = tickStart.Y;
// offset due to text box size.
textCenterX -= 0.5 * x1 * textSize.Width;
//.........这里部分代码省略.........
示例15: Draw
/// <summary>
/// Draw The legend
/// </summary>
/// <param name="ctx">The Drawing Context with on which to draw</param>
/// <param name="position">The position of the top left of the axis.</param>
/// <param name="plots">Array of plot objects to appear in the legend.</param>
/// <param name="scale">if the legend is set to scale, the amount to scale by.</param>
/// <returns>bounding box</returns>
public Rectangle Draw(Context ctx, Point position, ArrayList plots, double scale )
{
// first of all determine the Font to use in the legend.
Font textFont;
if (AutoScaleText) {
textFont = font_.WithScaledSize (scale);
}
else {
textFont = font_;
}
ctx.Save ();
// determine max width and max height of label strings and
// count the labels.
int labelCount = 0;
int unnamedCount = 0;
double maxHt = 0;
double maxWd = 0;
TextLayout layout = new TextLayout ();
layout.Font = textFont;
for (int i=0; i<plots.Count; ++i) {
if (!(plots[i] is IPlot)) {
continue;
}
IPlot p = (IPlot)plots[i];
if (!p.ShowInLegend) {
continue;
}
string label = p.Label;
if (label == "") {
unnamedCount += 1;
label = "Series " + unnamedCount.ToString();
}
layout.Text = label;
Size labelSize = layout.GetSize ();
if (labelSize.Height > maxHt) {
maxHt = labelSize.Height;
}
if (labelSize.Width > maxWd) {
maxWd = labelSize.Width;
}
++labelCount;
}
bool extendingHorizontally = numberItemsHorizontally_ == -1;
bool extendingVertically = numberItemsVertically_ == -1;
// determine width in legend items count units.
int widthInItemCount = 0;
if (extendingVertically) {
if (labelCount >= numberItemsHorizontally_) {
widthInItemCount = numberItemsHorizontally_;
}
else {
widthInItemCount = labelCount;
}
}
else if (extendingHorizontally) {
widthInItemCount = labelCount / numberItemsVertically_;
if (labelCount % numberItemsVertically_ != 0)
widthInItemCount += 1;
}
else {
throw new NPlotException( "logic error in legend base" );
}
// determine height of legend in items count units.
int heightInItemCount = 0;
if (extendingHorizontally) {
if (labelCount >= numberItemsVertically_) {
heightInItemCount = numberItemsVertically_;
}
else {
heightInItemCount = labelCount;
}
}
else { // extendingVertically
heightInItemCount = labelCount / numberItemsHorizontally_;
if (labelCount % numberItemsHorizontally_ != 0)
heightInItemCount += 1;
}
double lineLength = 20;
double hSpacing = (int)(5.0f * scale);
double vSpacing = (int)(3.0f * scale);
double boxWidth = (int) ((float)widthInItemCount * (lineLength + maxWd + hSpacing * 2.0f ) + hSpacing);
double boxHeight = (int)((float)heightInItemCount * (maxHt + vSpacing) + vSpacing);
//.........这里部分代码省略.........