예제 #1
0
파일: Window.cs 프로젝트: ulkyome/HtmlUi
        /// <summary>
        /// Creates the browser.
        /// </summary>
        /// <param name="handle">The handle.</param>
        /// <param name="position">The position.</param>
        protected void CreateBrowser(IntPtr handle, CefRectangle position)
        {
            Application.Current.EnsureCefThread();

            if (IsBrowserCreated)
            {
                throw new InvalidOperationException("Browser already created.");
            }

            Logger.Info("Creating browser.");

            var cefWindowInfo = CefWindowInfo.Create();

            cefWindowInfo.SetAsChild(handle, position);

            var cefClient = new Client();

            cefClient.BrowserCreated += (sender, e) =>
            {
                CefBrowser = e.CefBrowser;

                if (BrowserCreated != null)
                {
                    BrowserCreated(this, e);
                }
            };

            var cefSettings = new CefBrowserSettings();

            CefBrowserHost.CreateBrowser(cefWindowInfo, cefClient, cefSettings, Application.Current.GetContentUrl(View));

            IsBrowserCreated = true;

            Logger.Info("Browser created.");
        }
예제 #2
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     rect.X      = rect.Y = 0;
     rect.Width  = FRenderer.Size.Width;
     rect.Height = FRenderer.Size.Height;
     return(true);
 }
예제 #3
0
 internal FindResultEventArgs(int count, CefRectangle selectionRect, int activeMatchOrdinal, bool finalUpdate)
 {
     Count              = count;
     SelectionRect      = selectionRect;
     ActiveMatchOrdinal = activeMatchOrdinal;
     FinalUpdate        = finalUpdate;
 }
예제 #4
0
        internal bool GetViewRect(ref CefRectangle rect)
        {
            bool         rectProvided = false;
            CefRectangle browserRect  = new CefRectangle();

            // TODO: simplify this
            //_mainUiDispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
            //{
            try
            {
                // The simulated screen and view rectangle are the same. This is necessary
                // for popup menus to be located and sized inside the view.
                browserRect.X      = browserRect.Y = 0;
                browserRect.Width  = ViewSize.X;
                browserRect.Height = ViewSize.Y;

                rectProvided = true;
            }
            catch (Exception ex)
            {
                Log.Error("WebBrowserControl: Caught exception in GetViewRect(): " + ex.Message);
                rectProvided = false;
            }
            //}));

            if (rectProvided)
            {
                rect = browserRect;
            }

            //_logger.Debug("GetViewRect result provided:{0} Rect: X{1} Y{2} H{3} W{4}", rectProvided, browserRect.X, browserRect.Y, browserRect.Height, browserRect.Width);

            return(rectProvided);
        }
예제 #5
0
        internal bool GetViewRect(ref CefRectangle rect)
        {
            bool         rectProvided = false;
            CefRectangle browserRect  = new CefRectangle();

            // TODO: simplify this

            try
            {
                // The simulated screen and view rectangle are the same. This is necessary
                // for popup menus to be located and sized inside the view.
                browserRect.X      = browserRect.Y = 0;
                browserRect.Width  = (int)_browserWidth;
                browserRect.Height = (int)_browserHeight;

                rectProvided = true;
            }
            catch (Exception ex)
            {
                _logger.ErrorException("WpfCefBrowser: Caught exception in GetViewRect()", ex);
                rectProvided = false;
            }


            if (rectProvided)
            {
                rect = browserRect;
            }

            _logger.Debug("GetViewRect result provided:{0} Rect: X{1} Y{2} H{3} W{4}", rectProvided, browserRect.X, browserRect.Y, browserRect.Height, browserRect.Width);

            return(rectProvided);
        }
예제 #6
0
 /// <summary>
 /// 处理获取当前ViewRect的事件
 /// </summary>
 public void HandleGetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     rect.X      = 0;
     rect.Y      = 0;
     rect.Width  = (int)_windowsWidth;
     rect.Height = (int)_windowsHeight;
 }
예제 #7
0
파일: WebClient.cs 프로젝트: vvvv/VL.CEF
            protected override void GetViewRect(CefBrowser browser, out CefRectangle rect)
            {
                var logicalSize = renderer.Size.DeviceToLogical(renderer.ScaleFactor);
                var width       = Math.Max(1, (int)Math.Ceiling(logicalSize.X));
                var height      = Math.Max(1, (int)Math.Ceiling(logicalSize.Y));

                rect = new CefRectangle(0, 0, width, height);
            }
예제 #8
0
 protected override bool GetRootScreenRect(CefBrowser browser, ref CefRectangle rect)
 {
     rect.X      = 0;
     rect.Y      = 0;
     rect.Width  = offscreenBrowser.Width;
     rect.Height = offscreenBrowser.Height;
     return(true);
 }
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     rect.X      = 0;
     rect.Y      = 0;
     rect.Width  = this._windowWidth;
     rect.Height = this._windowHeight;
     return(true);
 }
예제 #10
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     if (SizeEvent != null)
     {
         return(SizeEvent(ref rect));
     }
     return(false);
 }
예제 #11
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     rect.X      = 0;
     rect.Y      = 0;
     rect.Width  = mClient.BrowserTexture.width;
     rect.Height = mClient.BrowserTexture.height;
     return(true);
 }
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     //see https://www.magpcss.org/ceforum/viewtopic.php?f=6&t=12835
     rect.X      = 0; //_windowX;
     rect.Y      = 0; //_windowY;
     rect.Width  = _windowWidth;
     rect.Height = _windowHeight;
     return(true);
 }
예제 #13
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     //rect.X = 0;
     //rect.Y = 0;
     //rect.Width = client.WindowsWidth;
     //rect.Height = client.WindowsHeight;
     this._renderOwner.HandleGetViewRect(browser, ref rect);
     return(true);
 }
예제 #14
0
        public bool Size(ref CefRectangle rect)
        {
            rect.X      = 0;
            rect.Y      = 0;
            rect.Width  = BrowserConfig.BrowserSourceSettings.Width;
            rect.Height = BrowserConfig.BrowserSourceSettings.Height;

            return(true);
        }
예제 #15
0
        } // End Function GetViewRectImpl

        protected override void GetViewRect(CefBrowser browser, out CefRectangle rect)
        {
            System.Console.WriteLine("GetViewRect");

            rect = new CefRectangle();
            GetViewRectImpl(browser, ref rect);

            // return true;
        } // End Sub GetViewRect
예제 #16
0
        protected override Boolean GetViewRect(CefBrowser browser, ref CefRectangle rect)
        {
            rect.X      = 0;
            rect.Y      = 0;
            rect.Width  = this.Client.Width;
            rect.Height = this.Client.Height;

            Log.Trace("RenderHandler.GetViewRect( X: {0}, Y: {1}, Width: {2}, Height: {3} )", rect.X, rect.Y, rect.Width, rect.Height);

            return(true);
        }
예제 #17
0
        } // End Function GetScreenPoint

        protected bool GetViewRectImpl(CefBrowser browser, ref CefRectangle rect)
        {
            System.Console.WriteLine("GetViewRectImpl");

            rect.X      = 0;
            rect.Y      = 0;
            rect.Width  = _windowWidth;
            rect.Height = _windowHeight;

            return(true);
        } // End Function GetViewRectImpl
        protected override void OnPaint(CefBrowser browser, CefPaintElementType type, CefRectangle[] dirtyRects, IntPtr buffer, int width, int height)
        {
            _logger.Debug("Type: {0} Buffer: {1:X8} Width: {2} Height: {3}", type, buffer, width, height);
            foreach (var rect in dirtyRects)
            {
                _logger.Debug("   DirtyRect: X={0} Y={1} W={2} H={3}", rect.X, rect.Y, rect.Width, rect.Height);
            }

            if (type == CefPaintElementType.View)
            {
                _owner.HandleViewPaint(browser, type, dirtyRects, buffer, width, height);
            }
            // 			else if (type == CefPaintElementType.Popup)
            // 				this.browser.HandleWidgetPaint(browser, type, dirtyRects, buffer, width, height);
        }
예제 #19
0
 /// <summary>
 /// 打开或者关闭DevTools
 /// </summary>
 /// <param name="_core"></param>
 /// <param name="browser"></param>
 public static void DevTools(CefWebBrowser _core, CefBrowser browser)
 {
     MainForm.Instance.Invoke(new Action(() =>
     {
         if (!_core.DevToolsOpen)
         {
             if (MainForm.Instance.faTabStrip1.SelectedItem.DevToolsName == null || MainForm.Instance.faTabStrip1.SelectedItem.DevToolsName == string.Empty)
             {
                 CefWindowInfo CefWindowInfo1;
                 int devWidth = MainForm.Instance.faTabStrip1.SelectedItem.Width;
                 MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel1.AutoScroll = true;
                 MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel2.AutoScroll = true;
                 MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel2Collapsed   = false;
                 MainForm.Instance.faTabStrip1.SelectedItem.Tag = _core;
                 CefWindowInfo1         = CefWindowInfo.Create();
                 CefWindowInfo1.X       = devWidth / 2;
                 CefWindowInfo1.Y       = 0;
                 CefRectangle rectangle = new CefRectangle(0, 0, devWidth / 2, _core.Height);
                 //此举是为了多个Devtools打开的情况,要让后面的FindwindowEX函数能找到这个窗口的句柄
                 MainForm.Instance.faTabStrip1.SelectedItem.DevToolsName = "CefDevTools" + DateTime.Now.ToString("yyyyMMddHHmmss");
                 CefWindowInfo1.SetAsWindow(MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel2.Handle, rectangle, MainForm.Instance.faTabStrip1.SelectedItem.DevToolsName);
                 browser.GetHost().ShowDevTools(CefWindowInfo1, new DevFormClient(), new CefBrowserSettings(), new CefPoint(0, 0));
                 browser.GetHost().SetFocus(true);
                 _core.DevToolsOpen = MainForm.Instance.faTabStrip1.SelectedItem.DevToolsOpen = true;
                 MainForm.Instance.faTabStrip1.SelectedItem.ItemBrowser     = browser;
                 MainForm.Instance.faTabStrip1.SelectedItem.splic.BackColor = SystemColors.ControlDark;
             }
             else
             {
                 MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel2Collapsed = false;
                 _core.DevToolsOpen = MainForm.Instance.faTabStrip1.SelectedItem.DevToolsOpen = true;
                 MainForm.Instance.faTabStrip1.SelectedItem.ItemBrowser = browser;
             }
         }
         else
         {
             MainForm.Instance.faTabStrip1.SelectedItem.splic.Panel2Collapsed = true;
             _core.DevToolsOpen = MainForm.Instance.faTabStrip1.SelectedItem.DevToolsOpen = false;
             //_core = null;
             MainForm.Instance.faTabStrip1.SelectedItem.ItemBrowser = null;
             // MainForm.Instance.faTabStrip1.SelectedItem.DevToolsName = null;
             ResizeWindow(browser.GetHost().GetWindowHandle(), MainForm.Instance.faTabStrip1.SelectedItem.Width, MainForm.Instance.faTabStrip1.SelectedItem.Height);
             GC.Collect();
         }
     }));
 }
        protected override void GetViewRect(CefBrowser browser, out CefRectangle rect)
        {
            var handle = _owner.HostWindowHandle;

            var scaleFactor = DpiHelper.GetScaleFactorForCurrentWindow(handle);


            var clientRect = new RECT();

            rect = new CefRectangle();


            User32.GetClientRect(handle, ref clientRect);

            rect.X = rect.Y = 0;


            if (User32.IsIconic(handle) || clientRect.Width == 0 || clientRect.Height == 0)
            {
                var placement = new WINDOWPLACEMENT();

                User32.GetWindowPlacement(_owner.HostWindowHandle, ref placement);

                clientRect = placement.rcNormalPosition;

                rect.Width = (int)(clientRect.Width / scaleFactor);

                rect.Height = (int)(clientRect.Height / scaleFactor);
            }
            else
            {
                rect.Width  = (int)(clientRect.Width / scaleFactor);
                rect.Height = (int)(clientRect.Height / scaleFactor);
            }



            if (clientRect.Width != _view_width || clientRect.Height != _view_height)
            {
                _view_width  = clientRect.Width;
                _view_height = clientRect.Height;

                DiscardDeviceResources();
            }
        }
예제 #21
0
        internal void OnPopupSize(CefRectangle rect)
        {
            _mainUiDispatcher.Invoke(
                new Action(
                    () =>
            {
                _popupImageBitmap = null;
                _popupImageBitmap = new WriteableBitmap(
                    rect.Width,
                    rect.Height,
                    96,
                    96,
                    PixelFormats.Bgr32,
                    null);

                _popupImage.Source = this._popupImageBitmap;
            }));
        }
예제 #22
0
        protected override void OnPaint(CefBrowser browser, CefPaintElementType type, CefRectangle[] dirtyRects, IntPtr buffer, int width, int height)
        {
            synchronization.Post((_) =>
            {
                if (type == CefPaintElementType.View)
                {
                    if (this.Resize(width, height))
                    {
                        ((Device)this.GraphicsDevice).ImmediateContext.UpdateSubresource(this._offscreenBuffer, 0, null, buffer, this._width * 4, 0);
                    }
                    else
                    {
                        for (int i = 0; i < dirtyRects.Length; i++)
                        {
                            CefRectangle cefRectangle = dirtyRects[i];
                            ((Device)this.GraphicsDevice).ImmediateContext.UpdateSubresource(this._offscreenBuffer, 0, new ResourceRegion?(new ResourceRegion(cefRectangle.X, cefRectangle.Y, 0, cefRectangle.X + cefRectangle.Width, cefRectangle.Y + cefRectangle.Height, 1)), buffer + cefRectangle.X * 4 + cefRectangle.Y * width * 4, this._width * 4, 0);
                        }
                    }

                    ////try
                    ////{
                    ////    var Pointer = new DataPointer(buffer, this._windowWidth * this._windowHeight * 4);
                    ////    this._offscreenBuffer.SetData(Pointer);
                    ////}
                    ////catch (Exception)
                    ////{

                    ////}


                    //for (int i = 0; i < dirtyRects.Length; i++)
                    //{
                    //    CefRectangle cefRectangle = dirtyRects[i];

                    //    var region = new ResourceRegion(cefRectangle.X, cefRectangle.Y, 0, cefRectangle.X + cefRectangle.Width, cefRectangle.Y + cefRectangle.Height, 1);
                    //    var pointer = new DataPointer(buffer + cefRectangle.X * 4 + cefRectangle.Y * width * 4, cefRectangle.Width * cefRectangle.Height * 4);
                    //    this._offscreenBuffer.SetData(pointer, 0, 0, region);
                    //}
                }

                ((Device)this.GraphicsDevice).ImmediateContext.Flush();
            }, null);
        }
예제 #23
0
        //internal void OnPopupShow(bool show)
        //{
        //    if (_popup == null)
        //    {
        //        return;
        //    }

        //    _mainUiDispatcher.Invoke(new Action(() => _popup.IsOpen = show));
        //}

        internal void OnPopupSize(CefRectangle rect)
        {
            _mainUiDispatcher.Invoke(
                new Action(
                    () =>
            {
                _popupImageBitmap = null;
                _popupImageBitmap = new WriteableBitmap(
                    rect.Width,
                    rect.Height,
                    96,
                    96,
                    PixelFormats.Bgr32,
                    null);

                _popupImage.Source = this._popupImageBitmap;

                //_popup.Width = rect.Width;
                //_popup.Height = rect.Height;
                //_popup.HorizontalOffset = rect.X;
                //_popup.VerticalOffset = rect.Y;
            }));
        }
예제 #24
0
        } // End Constructor

        protected override bool GetRootScreenRect(CefBrowser browser, ref CefRectangle rect)
        {
            System.Console.WriteLine("GetRootScreenRect");

            return(GetViewRectImpl(browser, ref rect));
        } // End Function GetRootScreenRect
예제 #25
0
        }                // throw new NotImplementedException();

        protected override void OnPopupSize(CefBrowser browser, CefRectangle rect)
        {
        }
예제 #26
0
 protected override void OnPopupSize(CefBrowser browser, CefRectangle rect)
 {
     // _owner.OnPopupSize(rect);
 }
예제 #27
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     return(_owner.GetViewRect(ref rect));
 }
예제 #28
0
 protected override void OnFindResult(CefBrowser browser, int identifier, int count, CefRectangle selectionRect, int activeMatchOrdinal, bool finalUpdate)
 {
     //throw new NotImplementedException();
 }
예제 #29
0
 protected override void GetViewRect(CefBrowser browser, out CefRectangle rect)
 {
     _owner.GetViewRect(out rect);
 }
 protected override bool GetRootScreenRect(CefBrowser browser, ref CefRectangle rect)
 {
     return(GetViewRect(browser, ref rect));
 }
예제 #31
0
 protected override bool GetRootScreenRect(CefBrowser browser, ref CefRectangle rect)
 {
     _owner.GetViewRect(out rect);
     return(true);
 }
예제 #32
0
        //protected override void OnPopupShow(CefBrowser browser, bool show)
        //{
        //    _owner.OnPopupShow(show);
        //}

        protected override void OnPopupSize(CefBrowser browser, CefRectangle rect)
        {
            _owner.OnPopupSize(rect);
        }
예제 #33
0
 protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
 {
     return _owner.GetViewRect(ref rect);
 }