123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- using System.Drawing;
- using System.Windows.Forms;
- using Microsoft.Drawing;
- namespace Microsoft.Windows.Forms.Layout
- {
- /// <summary>
- /// 布局数据
- /// </summary>
- public sealed class LayoutData : DisposableMini
- {
- /// <summary>
- /// 测试用绘图对象
- /// </summary>
- public Graphics Graphics;
- /// <summary>
- /// 区域
- /// </summary>
- public Rectangle ClientRectangle;
- /// <summary>
- /// 边距
- /// </summary>
- public Padding Padding;
- /// <summary>
- /// 文本图片相对位置
- /// </summary>
- public TextImageRelation TextImageRelation;
- /// <summary>
- /// 左右反转样式
- /// </summary>
- public RightToLeft RightToLeft;
- /// <summary>
- /// 图片大小
- /// </summary>
- public Size ImageSize;
- /// <summary>
- /// 图片对齐方式
- /// </summary>
- public ContentAlignment ImageAlign;
- /// <summary>
- /// 图片偏移量
- /// </summary>
- public Point ImageOffset;
- /// <summary>
- /// 文本
- /// </summary>
- public string Text;
- /// <summary>
- /// 字体
- /// </summary>
- public Font Font;
- /// <summary>
- /// 文本对齐方式
- /// </summary>
- public ContentAlignment TextAlign;
- /// <summary>
- /// 文本偏移量
- /// </summary>
- public Point TextOffset;
- /// <summary>
- /// 输出-图片区域(必须先调用Layout()方法)
- /// </summary>
- public Rectangle OutImageBounds;//[OUT]
- /// <summary>
- /// 输出-文本区域(必须先调用Layout()方法)
- /// </summary>
- public Rectangle OutTextBounds;//[OUT]
- //==================
- private bool m_IsLayouted;
- /// <summary>
- /// 是否执行过布局操作
- /// </summary>
- public bool IsLayouted
- {
- get
- {
- return this.m_IsLayouted;
- }
- }
- private Rectangle? m_CurrentClientRectangle;
- /// <summary>
- /// 当前区域,已减去边距
- /// </summary>
- public Rectangle CurrentClientRectangle
- {
- get
- {
- if (this.m_CurrentClientRectangle == null)
- this.m_CurrentClientRectangle = RectangleEx.Subtract(this.ClientRectangle, this.Padding);
- return this.m_CurrentClientRectangle.Value;
- }
- }
- private TextImageRelation? m_CurrentTextImageRelation;
- /// <summary>
- /// 当前文本图片相对位置,已通过左右反转样式翻译
- /// </summary>
- public TextImageRelation CurrentTextImageRelation
- {
- get
- {
- if (this.m_CurrentTextImageRelation == null)
- this.m_CurrentTextImageRelation = LayoutOptions.RtlTranslateRelation(this.TextImageRelation, this.RightToLeft);
- return this.m_CurrentTextImageRelation.Value;
- }
- }
- private StringFormat m_CurrentStringFormat;
- /// <summary>
- /// 当前文本格式,渲染文本时使用
- /// </summary>
- public StringFormat CurrentStringFormat
- {
- get
- {
- if (this.m_CurrentStringFormat == null)
- this.m_CurrentStringFormat = LayoutOptions.GetStringFormat(this.TextAlign, this.RightToLeft);
- return this.m_CurrentStringFormat;
- }
- }
- private ContentAlignment? m_CurrentImageAlign;
- /// <summary>
- /// 当前图片对齐方式,已通过左右反转样式翻译
- /// </summary>
- public ContentAlignment CurrentImageAlign
- {
- get
- {
- if (this.m_CurrentImageAlign == null)
- this.m_CurrentImageAlign = LayoutOptions.RtlTranslateAlignment(this.ImageAlign, this.RightToLeft);
- return this.m_CurrentImageAlign.Value;
- }
- }
- private ContentAlignment? m_CurrentTextAlign;
- /// <summary>
- /// 当前文本对齐方式,已通过左右反转样式翻译
- /// </summary>
- public ContentAlignment CurrentTextAlign
- {
- get
- {
- if (this.m_CurrentTextAlign == null)
- this.m_CurrentTextAlign = LayoutOptions.RtlTranslateAlignment(this.TextAlign, this.RightToLeft);
- return this.m_CurrentTextAlign.Value;
- }
- }
- /// <summary>
- /// 构造函数
- /// </summary>
- public LayoutData()
- {
- }
- /// <summary>
- /// 布局文本和图片.该方法可被调用多次,但再生命周期内布局操作只会被执行一次.
- /// </summary>
- public void DoLayout()
- {
- if (this.m_IsLayouted)
- return;
- this.m_IsLayouted = true;
- LayoutOptions.LayoutTextAndImage(this);
- }
- /// <summary>
- /// 释放资源
- /// </summary>
- /// <param name="disposing">释放托管资源为true,否则为false</param>
- protected override void Dispose(bool disposing)
- {
- if (this.m_CurrentStringFormat != null)
- {
- this.m_CurrentStringFormat.Dispose();
- this.m_CurrentStringFormat = null;
- }
- }
- }
- }
|