public bool Draw(WallpaperRenderer renderer, IntPtr hdc, IntPtr memDc) { if (!BrowserManager.Browser.ShouldDraw) { return(false); } BrowserManager.Browser.ShouldDraw = false; Size wallpaperSize = renderer.ScreenManager.WallpaperSize; if (!BrowserManager.Browser.Size.Equals(wallpaperSize)) { BrowserManager.Browser.Size = wallpaperSize; } Bitmap bitmap = BrowserManager.Browser.GetRenderData(); if (bitmap == null) { if (lastRenderData != null) { bitmap = lastRenderData; } else { return(false); } } else { lastRenderData?.Dispose(); } IntPtr hBitmap = bitmap.GetHbitmap(); NativeWin32.SelectObject(memDc, hBitmap); Point offset = renderer.ScreenManager.WallpaperOffset; bool flag = NativeWin32.BitBlt(hdc, offset.X, offset.Y, wallpaperSize.Width, wallpaperSize.Height, memDc, 0, 0, NativeWin32.TernaryRasterOperations.SRCCOPY); NativeWin32.DeleteObject(hBitmap); lastRenderData = bitmap; return(flag); }