public System.Drawing.Rectangle DrawCached(Aurigma.GraphicsMill.Drawing.Graphics g, float zoom, System.Drawing.Rectangle viewport, System.Drawing.Rectangle renderingRegion) { if (!HasActualData(zoom, renderingRegion)) { return(System.Drawing.Rectangle.Empty); } System.Drawing.Rectangle intersection = System.Drawing.Rectangle.Intersect(renderingRegion, _viewport), dstRect = intersection, srcRect = intersection; srcRect.Offset(-_viewport.X, -_viewport.Y); dstRect.Offset(-viewport.X, -viewport.Y); g.DrawImage(_image, dstRect, srcRect, Aurigma.GraphicsMill.Transforms.CombineMode.Copy, 1.0f, Aurigma.GraphicsMill.Transforms.ResizeInterpolationMode.Low); return(intersection); }
private void DrawViewportBackground(Aurigma.GraphicsMill.Bitmap canvas, System.Drawing.Rectangle viewport, System.Drawing.Rectangle renderingRegion) { using (Aurigma.GraphicsMill.Drawing.Graphics g = canvas.GetGraphics()) { System.Drawing.Rectangle screenRect = renderingRegion; screenRect.X -= viewport.X; screenRect.Y -= viewport.Y; if (_workspaceBackgroundStyle == Aurigma.GraphicsMill.WinControls.WorkspaceBackgroundStyle.Grid) { int gridPatternSize = 2 * bgGridCellSize; int patternOffsetX = renderingRegion.X % gridPatternSize, patternOffsetY = renderingRegion.Y % gridPatternSize; CreateBackgroundGridTemplate(renderingRegion.Width + gridPatternSize); System.Drawing.Rectangle srcRect = new System.Drawing.Rectangle(0, 0, _bgGridTemplate.Width, _bgGridTemplate.Height), dstRect = new System.Drawing.Rectangle(renderingRegion.Location, srcRect.Size); dstRect.Offset(-viewport.X, -viewport.Y); dstRect.Offset(-patternOffsetX, -patternOffsetY); g.SetClip(new System.Drawing.Rectangle(renderingRegion.X - viewport.X, renderingRegion.Y - viewport.Y, renderingRegion.Width, renderingRegion.Height)); try { int templateRepeats = (int)System.Math.Ceiling((float)(renderingRegion.Height + patternOffsetY) / _bgGridTemplate.Height); for (int j = 0; j < templateRepeats; j++) { g.DrawImage(_bgGridTemplate, dstRect, /*srcRect,*/ Aurigma.GraphicsMill.Transforms.CombineMode.Copy, 1.0f, Aurigma.GraphicsMill.Transforms.ResizeInterpolationMode.NearestNeighbour); dstRect.Offset(0, _bgGridTemplate.Height); } } finally { g.ResetClip(); } } else if (_workspaceBackgroundStyle == Aurigma.GraphicsMill.WinControls.WorkspaceBackgroundStyle.Solid) { g.FillRectangle(new Aurigma.GraphicsMill.Drawing.SolidBrush(_workspaceBackColor1), screenRect); } else { g.FillRectangle(new Aurigma.GraphicsMill.Drawing.SolidBrush(_backColor), screenRect); } } }