Esempio n. 1
0
        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);
        }