| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using Microsoft.Win32.SafeHandles;
- using System;
- using System.Windows.Input;
- using System.Windows.Interop;
- using Xilium.CefGlue.Helpers.Log;
- namespace Xilium.CefGlue.WPF
- {
- internal sealed class WpfCefRenderHandler : CefRenderHandler
- {
- private readonly WpfCefBrowser _owner;
- private readonly ILogger _logger;
- private readonly IUiHelper _uiHelper;
- public WpfCefRenderHandler(WpfCefBrowser owner, ILogger logger, IUiHelper uiHelper)
- {
- if (owner == null)
- {
- throw new ArgumentNullException("owner");
- }
- if (logger == null)
- {
- throw new ArgumentNullException("logger");
- }
- if (uiHelper == null)
- {
- throw new ArgumentNullException("uiHelper");
- }
- _owner = owner;
- _logger = logger;
- _uiHelper = uiHelper;
- }
- protected override bool GetRootScreenRect(CefBrowser browser, ref CefRectangle rect)
- {
- return _owner.GetViewRect(ref rect);
- }
- protected override bool GetViewRect(CefBrowser browser, ref CefRectangle rect)
- {
- return _owner.GetViewRect(ref rect);
- }
- protected override bool GetScreenPoint(CefBrowser browser, int viewX, int viewY, ref int screenX, ref int screenY)
- {
- _owner.GetScreenPoint(viewX, viewY, ref screenX, ref screenY);
- return true;
- }
- protected override bool GetScreenInfo(CefBrowser browser, CefScreenInfo screenInfo)
- {
- return false;
- }
- protected override void OnPopupShow(CefBrowser browser, bool show)
- {
- _owner.OnPopupShow(show);
- }
- protected override void OnPopupSize(CefBrowser browser, CefRectangle rect)
- {
- _owner.OnPopupSize(rect);
- }
- 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)
- {
- _owner.HandlePopupPaint(width, height, dirtyRects, buffer);
- }
- }
- protected override void OnCursorChange(CefBrowser browser, IntPtr cursorHandle, CefCursorType type, CefCursorInfo customCursorInfo)
- {
- _uiHelper.PerformInUiThread(() =>
- {
- Cursor cursor = CursorInteropHelper.Create(new SafeFileHandle(cursorHandle, false));
- _owner.Cursor = cursor;
- });
- }
- protected override void OnScrollOffsetChanged(CefBrowser browser, double x, double y)
- {
- }
- }
- }
|