public void BeforeRender(RectFloat clipRect) { if ((!this.afterRenderCalled || this.beforeRenderCalled) || this.renderCalled) { throw new PaintDotNet.InternalErrorException(); } this.afterRenderCalled = false; this.beforeRenderCalled = true; base.VerifyAccess(); double scaleRatio = this.canvasView.ScaleRatio; bool flag = scaleRatio == ((int)scaleRatio); int index = (int)DoubleUtil.Clamp(this.ConvertScaleRatioToMipLevel(scaleRatio), 0.0, (double)(this.MipLevelCount - 1)); DocumentCanvasLayerViewMipLayer item = this.mipLayers[index]; if (this.mipLayerZOrder.IndexOf(item) != 0) { this.mipLayerZOrder.Remove(item); this.mipLayerZOrder.Insert(0, item); item.IsVisible = true; item.IsActive = true; this.canvasView.Invalidate(); } this.tileCaches[this.mipLayerZOrder[0].MipLevel].ProcessTileRenderedQueue(); this.mipLayerZOrder[0].BeforeRender(clipRect); for (int i = this.mipLayerZOrder.Count - 1; i >= 1; i--) { this.mipLayerZOrder[i].BeforeRender(clipRect); this.mipLayerZOrder[i].IsActive = false; } }
public void Render(IDrawingContext dc, RectFloat clipRect) { if ((!this.beforeRenderCalled || this.renderCalled) || this.afterRenderCalled) { throw new PaintDotNet.InternalErrorException(); } this.renderCalled = true; using (dc.UseAntialiasMode(AntialiasMode.Aliased)) { double scaleRatio = this.canvasView.ScaleRatio; double d = this.ConvertScaleRatioToMipLevel(scaleRatio); int num3 = (int)Math.Floor(d); bool flag = Math.Abs((double)(d - Math.Round(d, MidpointRounding.AwayFromZero))) < 0.01; bool isHighQualityScalingEnabled = DocumentCanvasLayer.GetIsHighQualityScalingEnabled(this.canvasView); for (int i = this.mipLayerZOrder.Count - 1; i >= 0; i--) { DocumentCanvasLayerViewMipLayer layer = this.mipLayerZOrder[i]; if (layer.MipLevel == 0) { if (flag) { layer.Render(dc, clipRect, 1f, BitmapInterpolationMode.NearestNeighbor); } else if (scaleRatio < 1.0) { layer.Render(dc, clipRect, 1f, isHighQualityScalingEnabled ? BitmapInterpolationMode.Linear : BitmapInterpolationMode.NearestNeighbor); } else { layer.Render(dc, clipRect, 1f, BitmapInterpolationMode.NearestNeighbor); if ((scaleRatio < 2.0) & isHighQualityScalingEnabled) { double num5 = d - num3; double num6 = 1.0 - (((1.0 - num5) * (1.0 - num5)) * (1.0 - num5)); double num7 = DoubleUtil.Clamp(num6, 0.0, 1.0); layer.Render(dc, clipRect, (float)num7, BitmapInterpolationMode.Linear); } } } else { layer.Render(dc, clipRect, 1f, isHighQualityScalingEnabled ? BitmapInterpolationMode.Linear : BitmapInterpolationMode.NearestNeighbor); } } } }