/** * layout -> materialize. * if parsedTagTree was changed, materialize dirty flagged content only. */ private IEnumerator Load(TagTree tree, Vector2 viewRect, float offsetY, GameObject eventReceiverGameObj = null) { var usingIds = TagTree.CorrectTrees(tree); IEnumerator materialize = null; var layout = layoutMachine.Layout( tree, viewRect, layoutedTree => { // update layouted tree. this.layoutedTree = layoutedTree; var newIds = TagTree.CollectTreeIds(this.layoutedTree); UpdateParentViewSizeIfExist(); resLoader.BackGameObjects(usingIds); materialize = materializeMachine.Materialize( view.GetGameObject(), this, this.layoutedTree, viewRect, offsetY, () => { StartCalculateProgress(newIds); } ); } ); { while (layout.MoveNext()) { yield return(null); } } { while (materialize.MoveNext()) { yield return(null); } } }
private IEnumerator CreateLayoutedTree(string sampleHtml, Action <TagTree> onLayouted, float width = 100) { ParsedTree parsedRoot = null; var cor = parser.ParseRoot( sampleHtml, parsed => { parsedRoot = parsed; } ); view.Core.Internal_CoroutineExecutor(cor); yield return(WaitUntil( () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1 )); if (parsedRoot.errors.Any()) { foreach (var error in parsedRoot.errors) { Debug.LogError("error:" + error.code + " reason:" + error.reason); } throw new Exception("failed to create layouted tree."); } TagTree layouted = null; var layoutMachine = new LayoutMachine(core.resLoader, new TMProPlugin()); var cor2 = layoutMachine.Layout( parsedRoot, new Vector2(width, 100), layoutedTree => { layouted = layoutedTree; } ); view.Core.Internal_CoroutineExecutor(cor2); yield return(WaitUntil( () => layouted != null, () => { throw new TimeoutException("too late."); }, 5 )); onLayouted(layouted); }
private IEnumerator CreateTagTree(string sampleHtml, Action <TagTree> onParsed, float width = 100) { ParsedTree parsedRoot = null; TagTree layoutedRoot = null; var cor = parser.ParseRoot( sampleHtml, parsed => { parsedRoot = parsed; } ); executor.Core.CoroutineExecutor(cor); yield return(WaitUntil( () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1 )); if (parsedRoot.errors.Any()) { throw new Exception("failed to parse. error:" + parsedRoot.errors[0].reason); } var layoutMachine = new LayoutMachine( loader, new TMProPlugin() ); var loaderCor = layoutMachine.Layout( parsedRoot, new Vector2(width, 100), layoutedTree => { layoutedRoot = layoutedTree; } ); executor.Core.CoroutineExecutor(loaderCor); yield return(WaitUntil( () => layoutedRoot != null, () => { throw new TimeoutException("too late."); }, 5 )); onParsed(layoutedRoot); }
public IEnumerator RevertLayoutHTMLWithSmallImageAndSmallTextAndBr() { var sample = @" <body><img src='https://dummyimage.com/10.png/09f/fff'/>over 100px string should be multi lined text with good separation. <br>need some length.</body>"; ParsedTree parsedRoot = null; { var cor = parser.ParseRoot( sample, parsed => { parsedRoot = parsed; } ); executor.Core.CoroutineExecutor(cor); yield return(WaitUntil( () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1 )); } { var done = false; LayoutMachine layoutMachine = null; layoutMachine = new LayoutMachine( loader, new TMProPlugin() ); var cor = layoutMachine.Layout( parsedRoot, new Vector2(100, 100), layoutedTree => { done = true; True(layoutedTree.viewHeight == 112, "not match. layoutedTree.viewHeight:" + layoutedTree.viewHeight); } ); executor.Core.CoroutineExecutor(cor); yield return(WaitUntil( () => done, () => { throw new TimeoutException("too late."); }, 5 )); TagTree.CorrectTrees(parsedRoot); /* * revert-layout. */ var done2 = false; var cor2 = layoutMachine.Layout( parsedRoot, new Vector2(100, 100), layoutedTree => { done2 = true; True(layoutedTree.viewHeight == 112, "not match. actual:" + layoutedTree.viewHeight); } ); executor.Core.CoroutineExecutor(cor2); yield return(WaitUntil( () => done2, () => { throw new TimeoutException("too late."); }, 5 )); } }