コード例 #1
0
ファイル: GraphicsHandler.cs プロジェクト: yaram/Eto
        public void FillRectangle(Brush brush, float x, float y, float width, float height)
        {
            SetOffset(true);
            var wpfBrush = brush.ToWpf(true);

            Control.DrawRectangle(wpfBrush, null, WpfExtensions.NormalizedRect(x, y, width, height));
        }
コード例 #2
0
        /// <summary>
        /// Handles a <see cref="E:Stylus" /> event.
        /// </summary>
        /// <param name="e">The <see cref="StylusEventArgs"/> instance containing the event data.</param>
        /// <param name="touchEventType">The <see cref="TouchEventType"/> event type</param>
        private void OnStylus(StylusEventArgs e, TouchEventType touchEventType)
        {
            var browser = GetBrowser();

            if (!e.Handled && browser != null)
            {
                var modifiers   = WpfExtensions.GetModifierKeys();
                var pointerType = e.StylusDevice.Inverted ? PointerType.Eraser : PointerType.Pen;
                //Send all points to host
                foreach (var stylusPoint in e.GetStylusPoints(this))
                {
                    var touchEvent = new TouchEvent()
                    {
                        Id          = e.StylusDevice.Id,
                        X           = (float)stylusPoint.X,
                        Y           = (float)stylusPoint.Y,
                        PointerType = pointerType,
                        Pressure    = stylusPoint.PressureFactor,
                        Type        = touchEventType,
                        Modifiers   = modifiers,
                    };

                    browser.GetHost().SendTouchEvent(touchEvent);
                }
                e.Handled = true;
            }
        }
コード例 #3
0
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var contentControl = WpfExtensions.VisualUpwardSearch <ContentControl>(container);
            var dataTemplate   = item == null?GetNullDataTemplate(contentControl) : GetNotNullDataTemplate(contentControl);

            return(dataTemplate);
        }
コード例 #4
0
        private static void FrameworkElementOnRequestBringIntoView(object sender, RequestBringIntoViewEventArgs requestBringIntoViewEventArgs)
        {
            requestBringIntoViewEventArgs.Handled = true;
            var itemsControl = WpfExtensions.FindParent <ItemsControl>((FrameworkElement)sender);

            if (itemsControl != null)
            {
                var scrollViewer = WpfExtensions.GetDescendantByType <ScrollViewer>(itemsControl);
                if (scrollViewer != null)
                {
                    var item          = (FrameworkElement)requestBringIntoViewEventArgs.TargetObject;
                    var relativePoint = item.TranslatePoint(new Point(0, 0), itemsControl);

                    var childTransform = item.TransformToAncestor(scrollViewer);
                    var rectangle      = childTransform.TransformBounds(new Rect(new Point(0, 0), item.RenderSize));
                    //Check if the elements Rect intersects with that of the scrollviewer’s
                    var result    = Rect.Intersect(new Rect(new Point(0, 0), scrollViewer.RenderSize), rectangle);
                    var invisible = result == Rect.Empty;

                    if (invisible)
                    {
                        scrollViewer.ScrollToVerticalOffset(relativePoint.Y);
                    }
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Handles a <see cref="E:Stylus" /> event.
        /// </summary>
        /// <param name="e">The <see cref="StylusEventArgs"/> instance containing the event data.</param>
        /// <param name="touchEventType">The <see cref="TouchEventType"/> event type</param>
        private void OnStylus(StylusEventArgs e, TouchEventType touchEventType)
        {
            var browser = GetBrowser();

            var stylusPoints = e.GetStylusPoints(this);

            if (!e.Handled && browser != null && e.StylusDevice != null && e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus && stylusPoints.Count > 0)
            {
                var modifiers   = WpfExtensions.GetModifierKeys();
                var pressure    = stylusPoints[0].PressureFactor;
                var pointerType = e.StylusDevice.Inverted ? PointerType.Eraser : PointerType.Pen;

                var touchEvent = new TouchEvent()
                {
                    Id          = e.StylusDevice.Id,
                    X           = (float)stylusPoints[0].X,
                    Y           = (float)stylusPoints[0].Y,
                    PointerType = pointerType,
                    Pressure    = pressure,
                    Type        = touchEventType,
                    Modifiers   = modifiers,
                };

                browser.GetHost().SendTouchEvent(touchEvent);

                e.Handled = true;
            }
        }
コード例 #6
0
        public void GetVisibleRange(out int firstVisibleItemIndex, out int lastVisibleItemIndex)
        {
            firstVisibleItemIndex = 0;
            lastVisibleItemIndex  = -1;

            var scrollViewer = WpfExtensions.FindParent <ScrollViewer>(this);

            if (scrollViewer == null)
            {
                return;
            }

            var itemsControl = ItemsControl.GetItemsOwner(this);

            if (!itemsControl.HasItems)
            {
                return;
            }

            var container = (FrameworkElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(0);

            firstVisibleItemIndex = (int)Math.Floor(scrollViewer.VerticalOffset / container.ActualHeight) * Columns;
            lastVisibleItemIndex  =
                (int)Math.Ceiling((scrollViewer.VerticalOffset + scrollViewer.ViewportHeight) / container.ActualHeight) *
                Columns - 1;

            var itemCount = itemsControl.HasItems ? itemsControl.Items.Count : 0;

            if (lastVisibleItemIndex >= itemCount)
            {
                lastVisibleItemIndex = itemCount - 1;
            }
        }
コード例 #7
0
        private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            Loaded -= OnLoaded;
            var itemsControl = WpfExtensions.FindChild <ItemsControl>(KeyLogView, null);

            _scrollViewer = WpfExtensions.FindChild <ScrollViewer>(itemsControl, null);
            ((LiveKeyloggerViewModel)DataContext).ViewUpdated += OnViewUpdated;
        }
コード例 #8
0
        private void TextBoxButtonOnLoaded(object sender, RoutedEventArgs e)
        {
            //workaround for a bug in MahApps.Metro
            var button = WpfExtensions.FindParent <Button>((DependencyObject)sender);

            button.ToolTip = (string)Application.Current.Resources["Proxy"];
            TextBoxHelper.SetIsClearTextButtonBehaviorEnabled(button, false);
            button.Command = ((ConnectToServerViewModel)DataContext).OpenProxySettingsCommand;
        }
コード例 #9
0
 protected override void OnAttached()
 {
     base.OnAttached();
     _scrollViewer = WpfExtensions.GetDescendantByType<ScrollViewer>(AssociatedObject);
     AssociatedObject.AddValueChanged(ItemsControl.ItemsSourceProperty, ItemsSourceChanged);
     _oldItemsSource = AssociatedObject.ItemsSource as INotifyCollectionChanged;
     if (_oldItemsSource != null)
         _oldItemsSource.CollectionChanged += ItemsSourceOnCollectionChanged;
 }
コード例 #10
0
        private static void TreeViewOnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            var treeListViewItem = WpfExtensions.VisualUpwardSearch <TreeViewItem>(e.OriginalSource as DependencyObject);

            if (treeListViewItem != null)
            {
                treeListViewItem.Focus();
                treeListViewItem.IsSelected = true;
                e.Handled = true;
            }
        }
コード例 #11
0
ファイル: GraphicsHandler.cs プロジェクト: yaram/Eto
 public void DrawArc(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
 {
     SetOffset(false);
     if (sweepAngle >= 360f)
     {
         DrawEllipse(pen, x, y, width, height);
     }
     else
     {
         var arc = CreateArcDrawing(WpfExtensions.NormalizedRect(x, y, width, height), startAngle, sweepAngle, false);
         Control.DrawGeometry(null, pen.ToWpf(true), arc);
     }
 }
コード例 #12
0
ファイル: GraphicsHandler.cs プロジェクト: yaram/Eto
 public void FillPie(Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
 {
     SetOffset(true);
     if (sweepAngle >= 360f)
     {
         FillEllipse(brush, x, y, width, height);
     }
     else
     {
         var arc = CreateArcDrawing(WpfExtensions.NormalizedRect(x, y, width, height), startAngle, sweepAngle, true);
         Control.DrawGeometry(brush.ToWpf(true), null, arc);
     }
 }
コード例 #13
0
        /// <summary>
        /// Handles a <see cref="E:Touch" /> event.
        /// </summary>
        /// <param name="e">The <see cref="TouchEventArgs"/> instance containing the event data.</param>
        private void OnTouch(TouchEventArgs e)
        {
            var browser = GetBrowser();

            if (!e.Handled && browser != null)
            {
                var modifiers      = WpfExtensions.GetModifierKeys();
                var touchPoint     = e.GetTouchPoint(this);
                var touchEventType = TouchEventType.Cancelled;
                switch (touchPoint.Action)
                {
                case TouchAction.Down:
                {
                    touchEventType = TouchEventType.Pressed;
                    break;
                }

                case TouchAction.Move:
                {
                    touchEventType = TouchEventType.Moved;
                    break;
                }

                case TouchAction.Up:
                {
                    touchEventType = TouchEventType.Released;
                    break;
                }

                default:
                {
                    touchEventType = TouchEventType.Cancelled;
                    break;
                }
                }

                var touchEvent = new TouchEvent()
                {
                    Id          = e.TouchDevice.Id,
                    X           = (float)touchPoint.Position.X,
                    Y           = (float)touchPoint.Position.Y,
                    PointerType = PointerType.Touch,
                    Type        = touchEventType,
                    Modifiers   = modifiers,
                };

                browser.GetHost().SendTouchEvent(touchEvent);

                e.Handled = true;
            }
        }
コード例 #14
0
ファイル: TabItemEx.cs プロジェクト: yangyraaron/entry
        private void Close(object o, RoutedEventArgs e)
        {
            TabControlEx tabControl = WpfExtensions.FindVisualParent <TabControlEx>(this);

            if (tabControl == null)
            {
                return;
            }

            tabControl.RemoveItem(this);

            //after remove the item from the tabcontrol,detach the hander from the click event
            this._closeButton.Click -= new RoutedEventHandler(Close);
        }
コード例 #15
0
        public void DrawImage(Image image, float x, float y, float width, float height)
        {
            SetOffset(true);
            var src = image.ToWpf((int)Math.Max(width, height));

            if ((ImageInterpolation == ImageInterpolation.High || ImageInterpolation == ImageInterpolation.Default) &&
                (width != src.Width || height != src.Height))
            {
                // better image quality by using transformed bitmap, plus it is actually faster
                src = new swmi.TransformedBitmap(
                    src,
                    new swm.ScaleTransform(width / src.Width * 96 / src.DpiX, height / src.Height * 96 / src.DpiY, 0, 0)
                    );
            }
            Control.DrawImage(src, WpfExtensions.NormalizedRect(x, y, width, height));
        }
コード例 #16
0
        private void AssociatedObject_LayoutUpdated(object sender, System.EventArgs e)
        {
            if (this.AssociatedObject.IsVisible == false)
            {
                SetIsInViewport(this.AssociatedObject, false);
                return;
            }
            var container = WpfExtensions.FindParent <ListBox>(this.AssociatedObject);

            if (container == null)
            {
                return;
            }
            var visible = this.IsVisibleToUser(this.AssociatedObject, container) == true;

            SetIsInViewport(this.AssociatedObject, visible);
        }
コード例 #17
0
        protected override void OnPreviewMouseRightButtonDown(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseRightButtonDown(e);
            if (!SelectItemOnRightClick)
            {
                return;
            }

            var treeListViewItem =
                WpfExtensions.VisualUpwardSearch <TreeListViewItem>(e.OriginalSource as DependencyObject);

            if (treeListViewItem != null)
            {
                treeListViewItem.Focus();
                treeListViewItem.IsSelected = true;
                e.Handled = true;
            }
        }
コード例 #18
0
 private void MainListViewOnLoaded(object sender, RoutedEventArgs routedEventArgs)
 {
     _listViewScrollViewer = WpfExtensions.GetFirstChildOfType <ScrollViewer>(MainListView);
     _listViewScrollViewer.ScrollChanged += ListViewScrollViewerOnScrollChanged;
     RefreshVisibleClients();
 }
コード例 #19
0
 private void AssociatedObjectOnLoaded(object sender, RoutedEventArgs routedEventArgs)
 {
     _fileListScrollViewer = WpfExtensions.GetFirstChildOfType <ScrollViewer>(AssociatedObject);
     _fileListScrollViewer.ScrollChanged += FileListScrollViewerOnScrollChanged;
 }
コード例 #20
0
        public static void Attach(FrameworkElement fe)
        {
            FrameworkElement selectedControl = null;
            Style            designerStyle   = (Style)Application.Current.FindResource("DesignerItemStyle");

            if (fe is Panel)
            {
                var fePanel = (Panel)fe;
                fe.PreviewMouseLeftButtonDown += (s, e) =>
                {
                    if (e.Source is DependencyObject)
                    {
                        var clickedElement = ((DependencyObject)e.OriginalSource).GetAncestors <ContentControl>().FirstOrDefault(el => el.Style == designerStyle && WpfExtensions.GetItemsPanel(el.GetParent(true)) == fe);
                        if (clickedElement == null)
                        {
                            foreach (DependencyObject item in fePanel.Children)
                            {
                                Selector.SetIsSelected(item, false);
                            }
                            selectedControl = null;
                            return;
                        }
                        foreach (var control in fePanel.Children.OfType <FrameworkElement>())
                        {
                            if (ProcessControl(control, clickedElement, ref selectedControl))
                            {
                                if (selectedControl is ContentControl cc && cc.Content is ButtonBase)
                                {
                                    e.Handled = true;
                                    return;
                                }
                            }
                        }
                    }
                };
            }
            else if (fe is ItemsControl)
            {
                var feItemsControl = (ItemsControl)fe;
                fe.PreviewMouseLeftButtonDown += (s, e) =>
                {
                    if (e.Source is DependencyObject)
                    {
                        var clickedElement = ((DependencyObject)e.Source).GetAncestors <ContentControl>().FirstOrDefault(el => el.Style == designerStyle && el.Parent == fe);
                        if (clickedElement == null)
                        {
                            foreach (DependencyObject item in feItemsControl.Items)
                            {
                                Selector.SetIsSelected(item, false);
                            }
                            selectedControl = null;
                            return;
                        }
                        foreach (var control in feItemsControl.Items.OfType <FrameworkElement>())
                        {
                            if (ProcessControl(control, clickedElement, ref selectedControl))
                            {
                                if (selectedControl is ContentControl cc && cc.Content is ButtonBase)
                                {
                                    e.Handled = true;
                                    return;
                                }
                            }
                        }
                    }
                };
            }
        }
コード例 #21
0
ファイル: GraphicsHandler.cs プロジェクト: yaram/Eto
 public void DrawRectangle(Pen pen, float x, float y, float width, float height)
 {
     SetOffset(false);
     Control.DrawRectangle(null, pen.ToWpf(true), WpfExtensions.NormalizedRect(x, y, width, height));
 }
コード例 #22
0
 public void AddRectangle(float x, float y, float width, float height)
 {
     Control.AddGeometry(new swm.RectangleGeometry(WpfExtensions.NormalizedRect(x, y, width, height)));
     figure = null;
 }
コード例 #23
0
 public MainWindow()
 {
     WpfExtensions.SetTracing();
     InitializeComponent();
 }