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(); }
/// <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(); }
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; } }
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); }
public VisualTargetPresentationSource(HostVisual hostVisual) { if (hostVisual == null) { throw new ArgumentNullException(nameof(hostVisual)); } _visualTarget = new VisualTarget(hostVisual); }
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(); }
protected virtual void Dispose(bool disposing) { if (!disposing) { return; } using (_visualTarget) { _visualTarget = null; } }
public void Dispose() { this.RunInTouchDispatcher(delegate() { VisualTarget visualTarget = this._visualTarget; if (visualTarget == null) { return; } visualTarget.Dispose(); }); this.Close(); }
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(); }
/// <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); }
/// <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); }
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(); }
/// <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; } }
public VisualTargetPresentationSource(VisualTarget visualTarget) { _VisualTarget = visualTarget; }