Ejemplo n.º 1
0
        void createChildInNewThread(WrapPanel container, ref RenderElement render)

        {
            HostVisual hostVisual = new HostVisual();

            UIElement content = new VisualHost(hostVisual);

            container.Children.Add(content);

            Thread thread = new Thread(new ThreadStart(() =>
            {
                VisualTarget visualTarget = new VisualTarget(hostVisual);

                var control = new RenderElement();
                if (imageD3D == null)
                {
                    imageD3D = control;
                }
                else
                {
                    imageD3D1 = control;
                }

                control.Arrange(new Rect(new Point(), content.RenderSize));
                control.SetupSurface(RenderType.D3D, rec.Width, rec.Height, FrameFormat.RGB32);
                visualTarget.RootVisual = control;
                device.Start();
                System.Windows.Threading.Dispatcher.Run();
            }));

            thread.SetApartmentState(ApartmentState.STA);
            thread.IsBackground = true;
            thread.Start();
        }
Ejemplo n.º 2
0
        /// <inheritdoc />
        public DispatcherContainer()
        {
            var thread = new Thread(() =>
            {
                _visualTarget = new VisualTarget(_hostVisual);
                DrawingVisual drawingVisual = new DrawingVisual();
                var drawing = drawingVisual.RenderOpen();
                using (drawing)
                {
                    var text = new FormattedText("欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客",
                                                 CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                                 new Typeface(new FontFamily("微软雅黑"), new FontStyle(), FontWeight.FromOpenTypeWeight(1),
                                                              FontStretch.FromOpenTypeStretch(1)), 20, Brushes.DarkSlateBlue);

                    drawing.DrawText(text, new Point(100, 100));
                }

                var containerVisual = new ContainerVisual();

                containerVisual.Children.Add(drawingVisual);

                _visualTarget.RootVisual = containerVisual;

                System.Windows.Threading.Dispatcher.Run();
            });

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
Ejemplo n.º 3
0
        private void Run()
        {
            try
            {
                _VisualTarget       = new VisualTarget(_HostVisual);
                _VisualTargetSource = new VisualTargetPresentationSource(_VisualTarget);

                lock (_Thread)
                {
                    CreateMediaPlayer();
                }

                _VisualTargetSource.RootVisual = _MediaElement;

                Dispatcher.Run();
            }
            finally
            {
                if (_VisualTarget != null)
                {
                    _VisualTarget.Dispose();
                }

                lock (_Thread)
                {
                    DestroyMediaPlayer();
                }

                _CanPlay = false;
            }
        }
Ejemplo n.º 4
0
        public void Init()
        {
            if (this._isInit)
            {
                throw new InvalidOperationException("已经初始化不能再次调用此函数");
            }
            this._isInit = true;
            this.DynamicRendererThreadManager.StartUp();
            base.AddVisualChild(this._hostVisual);
            this.RunInTouchDispatcher(delegate()
            {
                this._visualTarget = new VisualTarget(this._hostVisual);
                ContainerVisual containerVisual  = new ContainerVisual();
                this.InkFromTouchContainerVisual = containerVisual;
                this._visualTarget.RootVisual    = containerVisual;
            });
            this.InkFromMouseContainerVisual = new ContainerVisual();
            base.AddVisualChild(this.InkFromMouseContainerVisual);
            if (this.DynamicRenderer == null)
            {
                this.DynamicRenderer = new MouseRender(this);
            }
            this.Start();
            EventHandler inited = this.inited;

            if (inited == null)
            {
                return;
            }
            inited(this, null);
        }
    public DummyControl()
    {
        var visualTarget = new VisualTarget(hostVisual);

        visualTarget.RootVisual = drawingVisual;
        AddVisualChild(hostVisual);
    }
Ejemplo n.º 6
0
 public VisualTargetPresentationSource(HostVisual hostVisual)
 {
     if (hostVisual == null)
     {
         throw new ArgumentNullException(nameof(hostVisual));
     }
     _visualTarget = new VisualTarget(hostVisual);
 }
Ejemplo n.º 7
0
        public void PreDrawingLinesOnCanvas(object hostVisual)
        {
            VisualTarget  visualTarget  = new VisualTarget((HostVisual)hostVisual);
            DrawingCanvas drawingCanvas = new DrawingCanvas();

            drawingCanvas.Arrange(new Rect(0, 0, CanvasWidth, CanvasHeight));
            visualTarget.RootVisual = drawingCanvas;
            DrawingLinesOnCanvas(drawingCanvas);
            System.Windows.Threading.Dispatcher.Run();
        }
Ejemplo n.º 8
0
 protected virtual void Dispose(bool disposing)
 {
     if (!disposing)
     {
         return;
     }
     using (_visualTarget)
     {
         _visualTarget = null;
     }
 }
Ejemplo n.º 9
0
 public void Dispose()
 {
     this.RunInTouchDispatcher(delegate()
     {
         VisualTarget visualTarget = this._visualTarget;
         if (visualTarget == null)
         {
             return;
         }
         visualTarget.Dispose();
     });
     this.Close();
 }
Ejemplo n.º 10
0
        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            HostVisual hostVisual = new HostVisual();

            _visualTarget = new VisualTarget(hostVisual);
            _hostVisual   = hostVisual;

            var visualWrapper = new VisualWrapper(hostVisual);

            HostCanvas.Children.Add(visualWrapper);

            Task.Run(() =>
            {
                DrawingVisual drawingVisual = new DrawingVisual();
                using (var dc = drawingVisual.RenderOpen())
                {
                    dc.DrawRectangle(Brushes.Black, null, new Rect(0, 0, 100, 100));
                }

                _hostVisual.Children.Add(drawingVisual);
            });
        }
 public VisualTargetPresentationSource(HostVisual hostVisual)
 {
     _visualTarget = new VisualTarget(hostVisual);
     AddSource();
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HostedPresentationSource"/> class.
 /// </summary>
 /// <param name="host">The host.</param>
 public HostedPresentationSource(HostVisual host)
 {
     HostConnector = new VisualTarget(host);
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="VisualSource"/> class.</summary>
        /// <param name="hostVisual">
        /// The <see cref="HostVisual"/> that is the target of the presentation.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="hostVisual"/> is a null reference.</exception>
        /// <remarks>
        /// The specified <paramref name="hostVisual"/> may reside on a different thread than the
        /// <see cref="VisualSource"/> and its <see cref="RootVisual"/>. The necessary cross-thread
        /// marshalling is performed by the <see cref="VisualTarget"/> that is returned by <see
        /// cref="GetCompositionTargetCore"/>.</remarks>

        public VisualSource(HostVisual hostVisual)
        {
            // VisualTarget constructor performs null check
            _visualTarget = new VisualTarget(hostVisual);
        }
 public VisualTargetPresentationSource(HostVisual theHostVisual)
 {
     myVisualTarget = new VisualTarget(theHostVisual);
 }
Ejemplo n.º 15
0
 public AsyncUISource(HostVisual hostVisual)
 {
     _visualTarget = new VisualTarget(hostVisual);
 }
 /// <summary>Initializes a new instance of the <see cref="VisualTargetPresentationSource"/> class.</summary>
 /// <param name="hostVisual">The host visual.</param>
 public VisualTargetPresentationSource(HostVisual hostVisual)
 {
     this.visualTarget = new VisualTarget(hostVisual);
     this.AddSource();
 }
Ejemplo n.º 17
0
        /// <summary>
        /// Initializes a new instance of the DropInfo class.
        /// <param name="sender">The sender of the drag event.</param>
        /// <param name="e">The drag event.</param>
        /// <param name="dragInfo">Information about the source of the drag, if the drag came from within the framework.</param>
        /// <param name="eventType">The type of the underlying event (tunneled or bubbled).</param>
        /// </summary>
        public DropInfo(object sender, DragEventArgs e, [CanBeNull] DragInfo dragInfo, EventType eventType)
        {
            DragInfo  = dragInfo;
            KeyStates = e.KeyStates;
            EventType = eventType;
            var dataFormat = dragInfo?.DataFormat;

            Data = dataFormat != null && e.Data.GetDataPresent(dataFormat.Name) ? e.Data.GetData(dataFormat.Name) : e.Data;

            VisualTarget = sender as UIElement;
            // if there is no drop target, find another
            if (!VisualTarget.IsDropTarget())
            {
                // try to find next element
                var element = VisualTarget.TryGetNextAncestorDropTargetElement();
                if (element != null)
                {
                    VisualTarget = element;
                }
            }

            // try find ScrollViewer
            var dropTargetScrollViewer = DragDrop.GetDropTargetScrollViewer(VisualTarget);

            if (dropTargetScrollViewer != null)
            {
                TargetScrollViewer = dropTargetScrollViewer;
            }
            else if (VisualTarget is TabControl)
            {
                var tabPanel = VisualTarget.FindVisualChild <TabPanel>();
                TargetScrollViewer = tabPanel?.FindVisualParent <ScrollViewer>();
            }
            else
            {
                TargetScrollViewer = VisualTarget?.FindVisualChild <ScrollViewer>();
            }

            TargetScrollingMode = VisualTarget != null?DragDrop.GetDropScrollingMode(VisualTarget) : ScrollingMode.Both;

            // visual target can be null, so give us a point...
            DropPosition = VisualTarget != null?e.GetPosition(VisualTarget) : new Point();

            if (VisualTarget is TabControl)
            {
                if (!HitTestUtilities.HitTest4Type <TabPanel>(VisualTarget, DropPosition))
                {
                    return;
                }
            }

            if (VisualTarget is ItemsControl itemsControl)
            {
                //System.Diagnostics.Debug.WriteLine(">>> Name = {0}", itemsControl.Name);
                // get item under the mouse
                item = itemsControl.GetItemContainerAt(DropPosition);
                var directlyOverItem = item != null;

                TargetGroup               = itemsControl.FindGroup(DropPosition);
                VisualTargetOrientation   = itemsControl.GetItemsPanelOrientation();
                VisualTargetFlowDirection = itemsControl.GetItemsPanelFlowDirection();

                if (item == null)
                {
                    // ok, no item found, so maybe we can found an item at top, left, right or bottom
                    item             = itemsControl.GetItemContainerAt(DropPosition, VisualTargetOrientation);
                    directlyOverItem = DropPosition.DirectlyOverElement(item, itemsControl);
                }

                if (item == null && TargetGroup != null && TargetGroup.IsBottomLevel)
                {
                    var itemData = TargetGroup.Items.FirstOrDefault();
                    if (itemData != null)
                    {
                        item             = itemsControl.ItemContainerGenerator.ContainerFromItem(itemData) as UIElement;
                        directlyOverItem = DropPosition.DirectlyOverElement(item, itemsControl);
                    }
                }

                if (item != null)
                {
                    itemParent = ItemsControl.ItemsControlFromItemContainer(item);
                    VisualTargetOrientation   = itemParent.GetItemsPanelOrientation();
                    VisualTargetFlowDirection = itemParent.GetItemsPanelFlowDirection();

                    InsertIndex      = itemParent.ItemContainerGenerator.IndexFromContainer(item);
                    TargetCollection = itemParent.ItemsSource ?? itemParent.Items;

                    var tvItem = item as TreeViewItem;

                    if (directlyOverItem || tvItem != null)
                    {
                        VisualTargetItem = item;
                        TargetItem       = itemParent.ItemContainerGenerator.ItemFromContainer(item);
                    }

                    var expandedTVItem = tvItem != null && tvItem.HasHeader && tvItem.HasItems && tvItem.IsExpanded;
                    var itemRenderSize = expandedTVItem ? tvItem.GetHeaderSize() : item.RenderSize;

                    if (VisualTargetOrientation == Orientation.Vertical)
                    {
                        // Get the current position relative to the items container
                        var currentYPos = e.GetPosition(item).Y;
                        // Get items container height
                        var targetHeight = itemRenderSize.Height;

                        var topGap    = targetHeight * 0.25;
                        var bottomGap = targetHeight * 0.75;
                        if (currentYPos > targetHeight / 2)
                        {
                            // If items control is tree viewer
                            if (expandedTVItem && (currentYPos < topGap || currentYPos > bottomGap))
                            {
                                VisualTargetItem = tvItem.ItemContainerGenerator.ContainerFromIndex(0) as UIElement;
                                TargetItem       = VisualTargetItem != null?tvItem.ItemContainerGenerator.ItemFromContainer(VisualTargetItem) : null;

                                TargetCollection = tvItem.ItemsSource ?? tvItem.Items;
                                InsertIndex      = 0;
                                InsertPosition   = RelativeInsertPosition.BeforeTargetItem;
                            }
                            else
                            {
                                InsertIndex++;
                                InsertPosition = RelativeInsertPosition.AfterTargetItem;
                            }
                        }
                        else
                        {
                            InsertPosition = RelativeInsertPosition.BeforeTargetItem;
                        }

                        if (currentYPos > topGap && currentYPos < bottomGap)
                        {
                            if (tvItem != null)
                            {
                                TargetCollection = tvItem.ItemsSource ?? tvItem.Items;
                                InsertIndex      = TargetCollection != null?TargetCollection.OfType <object>().Count() : 0;
                            }
                            InsertPosition |= RelativeInsertPosition.TargetItemCenter;
                        }
                        //System.Diagnostics.Debug.WriteLine("==> DropInfo: pos={0}, idx={1}, Y={2}, Item={3}", InsertPosition, InsertIndex, currentYPos, item);
                    }
                    else
                    {
                        var currentXPos = e.GetPosition(item).X;
                        var targetWidth = itemRenderSize.Width;

                        if (VisualTargetFlowDirection == FlowDirection.RightToLeft)
                        {
                            if (currentXPos > targetWidth / 2)
                            {
                                InsertPosition = RelativeInsertPosition.BeforeTargetItem;
                            }
                            else
                            {
                                InsertIndex++;
                                InsertPosition = RelativeInsertPosition.AfterTargetItem;
                            }
                        }
                        else if (VisualTargetFlowDirection == FlowDirection.LeftToRight)
                        {
                            if (currentXPos > targetWidth / 2)
                            {
                                InsertIndex++;
                                InsertPosition = RelativeInsertPosition.AfterTargetItem;
                            }
                            else
                            {
                                InsertPosition = RelativeInsertPosition.BeforeTargetItem;
                            }
                        }

                        if (currentXPos > targetWidth * 0.25 && currentXPos < targetWidth * 0.75)
                        {
                            if (tvItem != null)
                            {
                                TargetCollection = tvItem.ItemsSource ?? tvItem.Items;
                                InsertIndex      = TargetCollection != null?TargetCollection.OfType <object>().Count() : 0;
                            }
                            InsertPosition |= RelativeInsertPosition.TargetItemCenter;
                        }
                        //System.Diagnostics.Debug.WriteLine("==> DropInfo: pos={0}, idx={1}, X={2}, Item={3}", InsertPosition, InsertIndex, currentXPos, item);
                    }
                }
                else
                {
                    TargetCollection = itemsControl.ItemsSource ?? itemsControl.Items;
                    InsertIndex      = itemsControl.Items.Count;
                    //System.Diagnostics.Debug.WriteLine("==> DropInfo: pos={0}, item=NULL, idx={1}", InsertPosition, InsertIndex);
                }
            }
            else
            {
                VisualTargetItem = VisualTarget;
            }
        }
Ejemplo n.º 18
0
 public VisualTargetPresentationSource(VisualTarget visualTarget)
 {
     _VisualTarget = visualTarget;
 }