public MyScreenCanvas GetCanvasPage(int hPageNum, int vPageNum) { int j = cachePages.Count; for (int i = j - 1; i > -1; i--) { MyScreenCanvas page = cachePages[i]; if (page.IsPageNumber(hPageNum, vPageNum)) { cachePages.RemoveAt(i); if (page.DimensionInvalid) { page.Reset(hPageNum, vPageNum, eachPageWidth, eachPageHeight); page.IsUnused = false; } return(page); } } if (j >= numOfCachePages) { MyScreenCanvas page = cachePages[0]; cachePages.RemoveAt(0); page.IsUnused = false; if (page.DimensionInvalid) { page.Reset(hPageNum, vPageNum, eachPageWidth, eachPageHeight); } else { page.Reuse(hPageNum, vPageNum); } Rectangle rect = page.Rect; page.Invalidate(rect); return(page); } else { return(new MyScreenCanvas(gfxPlatform, hPageNum, vPageNum, hPageNum * eachPageWidth, eachPageHeight * vPageNum, eachPageWidth, eachPageHeight)); } }
public void CanvasInvalidate(Rectangle rect) { Rectangle r = rect; if (pageA != null && pageA.IntersectsWith(r)) { pageA.Invalidate(r); } if (pageB != null && pageB.IntersectsWith(r)) { pageB.Invalidate(r); } if (pageC != null && pageC.IntersectsWith(r)) { pageC.Invalidate(r); } if (pageD != null && pageD.IntersectsWith(r)) { pageD.Invalidate(r); } }