本文整理汇总了C#中AssembledStyles.WithRightToLeft方法的典型用法代码示例。如果您正苦于以下问题:C# AssembledStyles.WithRightToLeft方法的具体用法?C# AssembledStyles.WithRightToLeft怎么用?C# AssembledStyles.WithRightToLeft使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AssembledStyles
的用法示例。
在下文中一共展示了AssembledStyles.WithRightToLeft方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BidiLayout
public void BidiLayout()
{
string content1 = "This is the ";
string contentRtl = "day ";
string content3 = "that ";
// Two writing systems
int wsLtr = 5;
int wsRtl = 6;
// Two corresponding renderers
var factory = new FakeRendererFactory();
var engineLtr = new FakeRenderEngine() { Ws = wsLtr, SegmentHeight = 13 };
factory.SetRenderer(wsLtr, engineLtr);
var engineRtl = new FakeRenderEngine() {Ws = wsRtl, SegmentHeight = 13 };
engineRtl.RightToLeft = true;
factory.SetRenderer(wsRtl, engineRtl);
// Two corresponding styles (and a vanilla one)
var styles = new AssembledStyles();
var stylesLtr = new AssembledStyles().WithWs(wsLtr);
var stylesRtl = new AssembledStyles().WithWs(wsRtl);
var clientRuns = new List<IClientRun>();
var run1 = new StringClientRun(content1, stylesLtr);
clientRuns.Add(run1);
var runRtl = new StringClientRun(contentRtl, stylesRtl);
clientRuns.Add(runRtl);
var run3 = new StringClientRun(content3, stylesLtr);
clientRuns.Add(run3);
var root = new RootBoxFdo(styles);
var source = new TextSource(clientRuns, null);
var para = new ParaBox(styles, source);
root.AddBox(para);
var stylesParaRtl = styles.WithRightToLeft(true);
var sourceRtl = new TextSource(clientRuns, null);
var paraRtl = new ParaBox(stylesParaRtl, sourceRtl);
root.AddBox(paraRtl);
var layoutArgs = MakeLayoutInfo(Int32.MaxValue / 2, m_gm.VwGraphics, factory);
root.Layout(layoutArgs);
// "day " being upstream should make two distinct boxes.
// We should get something like
// "This is the yad that ", where the space between "yad" and "that" is the one that
// follows the 'y' in "day".
var box1 = para.FirstBox as StringBox;
var box2 = box1.Next as StringBox;
var box3 = box2.Next as StringBox;
var box4 = box3.Next as StringBox;
Assert.That(box4, Is.Not.Null);
Assert.That(box1.Segment.get_Lim(box1.IchMin) == content1.Length);
Assert.That(box2.Segment.get_Lim(box2.IchMin) == contentRtl.Length - 1);
Assert.That(box3.Segment.get_Lim(box3.IchMin) == 1);
Assert.That(box4.Segment.get_Lim(box4.IchMin) == content3.Length);
Assert.That(box1.Left, Is.LessThan(box2.Left));
Assert.That(box2.Left, Is.LessThan(box3.Left));
Assert.That(box3.Left, Is.LessThan(box4.Left));
// In the second paragraph, the two LRT runs are upstream. We should get boxes
// "This is the", " ", "day ", "that" and " " (but the final space will have zero width at end of line)
// The effect should be something like
// that yad This is the", where the space between "yad" and "This" is the one following "the",
// and the one between "that" and "yad" is the one following "day", and the space following "that"
// is invisible at the end of the line to the left of 'that'.
var boxR1 = paraRtl.FirstBox as StringBox;
var boxR2 = boxR1.Next as StringBox;
var boxR3 = boxR2.Next as StringBox;
var boxR4 = boxR3.Next as StringBox;
var boxR5 = boxR4.Next as StringBox;
Assert.That(boxR5, Is.Not.Null);
Assert.That(boxR1.Segment.get_Lim(boxR1.IchMin) == content1.Length - 1);
Assert.That(boxR2.Segment.get_Lim(boxR2.IchMin) == 1);
Assert.That(boxR3.Segment.get_Lim(boxR3.IchMin) == contentRtl.Length);
Assert.That(boxR4.Segment.get_Lim(boxR4.IchMin) == content3.Length - 1);
Assert.That(boxR5.Segment.get_Lim(boxR5.IchMin) == 1);
}