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);
             }
         }
     }
 }