Exemplo n.º 1
0
 public void ResizeIfNeeded(PixelSize size)
 {
     using (_syncContext.EnsureLocked())
     {
         if (_size != size)
         {
             _surfaceInterop.Resize(new UnmanagedMethods.POINT {
                 X = size.Width, Y = size.Height
             });
             _contentVisual.SetSize(new Vector2(size.Width, size.Height));
             _size = size;
         }
     }
 }
        public WinUICompositedWindow CreateWindow(IntPtr hWnd)
        {
            using var sc            = _syncContext.EnsureLocked();
            using var desktopTarget = _compositorDesktopInterop.CreateDesktopWindowTarget(hWnd, 0);
            using var target        = desktopTarget.QueryInterface <ICompositionTarget>();

            using var drawingSurface = _device.CreateDrawingSurface(new UnmanagedMethods.SIZE(), DirectXPixelFormat.B8G8R8A8UIntNormalized,
                                                                    DirectXAlphaMode.Premultiplied);
            using var surface        = drawingSurface.QueryInterface <ICompositionSurface>();
            using var surfaceInterop = drawingSurface.QueryInterface <ICompositionDrawingSurfaceInterop>();

            using var surfaceBrush = _compositor.CreateSurfaceBrushWithSurface(surface);
            using var brush        = surfaceBrush.QueryInterface <ICompositionBrush>();

            using var spriteVisual = _compositor.CreateSpriteVisual();
            spriteVisual.SetBrush(brush);
            using var visual           = spriteVisual.QueryInterface <IVisual>();
            using var visual2          = spriteVisual.QueryInterface <IVisual2>();
            using var container        = _compositor.CreateContainerVisual();
            using var containerVisual  = container.QueryInterface <IVisual>();
            using var containerVisual2 = container.QueryInterface <IVisual2>();
            containerVisual2.SetRelativeSizeAdjustment(new Vector2(1, 1));
            using var containerChildren = container.Children;

            target.SetRoot(containerVisual);

            using var blur = CreateBlurVisual();

            containerChildren.InsertAtTop(blur);
            containerChildren.InsertAtTop(visual);

            return(new WinUICompositedWindow(_syncContext, _compositor, _pumpLock, target, surfaceInterop, visual, blur));
        }