private bool IsBroken(LogicalMainTrack result, LogicalMainTrack current) { if (result.IsEof || current.IsEof) { return(true); } if (result.IsContainer) { if (IsVirtualized(result.ContainerOrdinal)) { return(true); } return(IsBrokenToContainer(current)); } else if (result.IsHead) { return(IsBrokenToHead(current)); } else { Debug.Assert(result.IsTail); return(IsBrokenToTail(current)); } }
private int GetPageTailContainerOrdinal(bool enforceCurrent) { if (ContainerViewList.Count == 0) { return(-1); } var containerOrdinal = ContainerViewList.Last.ContainerOrdinal; var endTrack = GridTracksMain.GetGridSpan(Template.ContainerRange).EndTrack; var endGridExtent = new LogicalMainTrack(endTrack, ContainerViewList.Last).EndGridExtent; var isClipped = IsTailClippedMain(endGridExtent); if (PreviousContainerAsPageTail(containerOrdinal, isClipped, enforceCurrent)) { containerOrdinal--; endGridExtent -= ContainerTracksCountMain; isClipped = false; } if (enforceCurrent && isClipped) { ScrollToMain(endGridExtent - 1, 1, GridPlacement.Tail, false); } return(containerOrdinal); }
private int GetPageHeadContainerOrdinal(bool enforceCurrent) { if (ContainerViewList.Count == 0) { return(-1); } var containerOrdinal = ContainerViewList.First.ContainerOrdinal; var startTrack = GridTracksMain.GetGridSpan(Template.ContainerRange).StartTrack; var startGridExtent = new LogicalMainTrack(startTrack, ContainerViewList.First).StartGridExtent; var isClipped = IsHeadClippedMain(startGridExtent); if (NextContainerAsPageHeader(containerOrdinal, isClipped, enforceCurrent)) { containerOrdinal++; startGridExtent += ContainerTracksCountMain; isClipped = false; } if (enforceCurrent && isClipped) { ScrollToMain(startGridExtent, 0, GridPlacement.Head, false); } return(containerOrdinal); }
private double GetRelativePositionMain(ContainerView containerView, GridTrack gridTrack, double fraction) { Debug.Assert(gridTrack.IsContainer); Debug.Assert(fraction >= 0 && fraction <= 1); var result = GetRelativePositionMain(containerView, gridTrack); if (fraction > 0) { result += new LogicalMainTrack(gridTrack, containerView).Length *fraction; } return(result); }
private bool IsBrokenToHead(LogicalMainTrack track) { Debug.Assert(!track.IsEof); if (track.IsHead) { return(false); } else if (track.IsContainer) { return(IsFirstRowVirtualized); } else { Debug.Assert(track.IsTail); return(ContainerViewList.Count > 0); } }
private bool IsBrokenToContainer(LogicalMainTrack track) { Debug.Assert(!track.IsEof); if (track.IsContainer) { return(IsVirtualized(track.ContainerOrdinal)); } else if (track.IsHead) { return(IsFirstRowVirtualized); } else { Debug.Assert(track.IsTail); return(!IsLastRowVirtualized); } }