diff --git a/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas b/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas index 2a844a66..85c9c3f5 100644 --- a/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas +++ b/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas @@ -89,7 +89,7 @@ type procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; cursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean); + procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect); procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean); procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean); procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean); @@ -579,8 +579,7 @@ end; procedure TFMXExternalPumpBrowserFrm.chrmosrGetViewRect(Sender : TObject; const browser : ICefBrowser; - var rect : TCefRect; - out Result : Boolean); + var rect : TCefRect); begin if (GlobalCEFApp <> nil) then begin @@ -588,10 +587,7 @@ begin rect.y := 0; rect.width := round(Panel1.Width); rect.height := round(Panel1.Height); - Result := True; - end - else - Result := False; + end; end; procedure TFMXExternalPumpBrowserFrm.chrmosrPaint(Sender : TObject; diff --git a/demos/KioskOSRBrowser/uKioskOSRBrowser.pas b/demos/KioskOSRBrowser/uKioskOSRBrowser.pas index 33fd7721..53587418 100644 --- a/demos/KioskOSRBrowser/uKioskOSRBrowser.pas +++ b/demos/KioskOSRBrowser/uKioskOSRBrowser.pas @@ -94,7 +94,7 @@ type procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; cursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean); + procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect); procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean); procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean); procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean); @@ -479,8 +479,7 @@ end; procedure TForm1.chrmosrGetViewRect( Sender : TObject; const browser : ICefBrowser; - var rect : TCefRect; - out Result : Boolean); + var rect : TCefRect); begin if (GlobalCEFApp <> nil) then begin @@ -488,10 +487,7 @@ begin rect.y := 0; rect.width := DeviceToLogical(Panel1.Width, GlobalCEFApp.DeviceScaleFactor); rect.height := DeviceToLogical(Panel1.Height, GlobalCEFApp.DeviceScaleFactor); - Result := True; - end - else - Result := False; + end; end; procedure TForm1.chrmosrPaint( Sender : TObject; diff --git a/demos/MiniBrowser/uMiniBrowser.dfm b/demos/MiniBrowser/uMiniBrowser.dfm index 6a15e762..dcecf727 100644 --- a/demos/MiniBrowser/uMiniBrowser.dfm +++ b/demos/MiniBrowser/uMiniBrowser.dfm @@ -153,6 +153,9 @@ object MiniBrowserFrm: TMiniBrowserFrm 'https://www.w3schools.com/Tags/tryit.asp?filename=tryhtml_iframe' + '_name' + + 'http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/html/tryit' + + '.asp-filename=tryhtml5_html_manifest.html' 'https://www.browserleaks.com/webrtc' 'https://frames-per-second.appspot.com/' 'chrome://version/' diff --git a/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas b/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas index 18f9a927..001dd34e 100644 --- a/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas +++ b/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas @@ -88,7 +88,7 @@ type procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; cursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean); + procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect); procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean); procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean); procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean); @@ -405,8 +405,7 @@ end; procedure TOSRExternalPumpBrowserFrm.chrmosrGetViewRect(Sender : TObject; const browser : ICefBrowser; - var rect : TCefRect; - out Result : Boolean); + var rect : TCefRect); begin if (GlobalCEFApp <> nil) then begin @@ -414,10 +413,7 @@ begin rect.y := 0; rect.width := DeviceToLogical(Panel1.Width, GlobalCEFApp.DeviceScaleFactor); rect.height := DeviceToLogical(Panel1.Height, GlobalCEFApp.DeviceScaleFactor); - Result := True; - end - else - Result := False; + end; end; procedure TOSRExternalPumpBrowserFrm.chrmosrPaint(Sender : TObject; diff --git a/demos/SimpleLazOSRBrowser/SimpleLazOSRBrowser.lps b/demos/SimpleLazOSRBrowser/SimpleLazOSRBrowser.lps index 1674b0f2..91b1d3d1 100644 --- a/demos/SimpleLazOSRBrowser/SimpleLazOSRBrowser.lps +++ b/demos/SimpleLazOSRBrowser/SimpleLazOSRBrowser.lps @@ -8,9 +8,10 @@ + - - + + @@ -20,15 +21,14 @@ - - - + + + - + - @@ -164,11 +164,9 @@ - - - - - - + + + + diff --git a/demos/SimpleLazOSRBrowser/usimplelazosrbrowser.pas b/demos/SimpleLazOSRBrowser/usimplelazosrbrowser.pas index 5d9ba34e..f86b4739 100644 --- a/demos/SimpleLazOSRBrowser/usimplelazosrbrowser.pas +++ b/demos/SimpleLazOSRBrowser/usimplelazosrbrowser.pas @@ -86,7 +86,7 @@ type procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; aWidth, aHeight: Integer); procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; aCursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean); + procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect); procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean); procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean); procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; aShow: Boolean); @@ -284,8 +284,7 @@ end; procedure TForm1.chrmosrGetViewRect(Sender : TObject; const browser : ICefBrowser; - var rect : TCefRect; - out Result : Boolean); + var rect : TCefRect); begin if (GlobalCEFApp <> nil) then begin @@ -293,10 +292,7 @@ begin rect.y := 0; rect.width := DeviceToLogical(Panel1.Width, GlobalCEFApp.DeviceScaleFactor); rect.height := DeviceToLogical(Panel1.Height, GlobalCEFApp.DeviceScaleFactor); - Result := True; - end - else - Result := False; + end; end; procedure TForm1.chrmosrPaint(Sender: TObject; const browser: ICefBrowser; diff --git a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.dfm b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.dfm index b57a044a..e9dd2436 100644 --- a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.dfm +++ b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.dfm @@ -99,7 +99,6 @@ object Form1: TForm1 TabOrder = 1 OnClick = SnapshotBtnClick OnEnter = SnapshotBtnEnter - ExplicitLeft = 72 end end end @@ -120,7 +119,6 @@ object Form1: TForm1 OnMouseUp = Panel1MouseUp OnResize = Panel1Resize OnMouseLeave = Panel1MouseLeave - ExplicitHeight = 458 end object chrmosr: TChromium OnTooltip = chrmosrTooltip diff --git a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas index 08e52974..6bb4b527 100644 --- a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas +++ b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas @@ -88,7 +88,7 @@ type procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; cursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean); + procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect); procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean); procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean); procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean); @@ -384,8 +384,7 @@ end; procedure TForm1.chrmosrGetViewRect(Sender : TObject; const browser : ICefBrowser; - var rect : TCefRect; - out Result : Boolean); + var rect : TCefRect); begin if (GlobalCEFApp <> nil) then begin @@ -393,10 +392,7 @@ begin rect.y := 0; rect.width := DeviceToLogical(Panel1.Width, GlobalCEFApp.DeviceScaleFactor); rect.height := DeviceToLogical(Panel1.Height, GlobalCEFApp.DeviceScaleFactor); - Result := True; - end - else - Result := False; + end; end; procedure TForm1.chrmosrPaint(Sender : TObject; diff --git a/source/uCEFApplication.pas b/source/uCEFApplication.pas index 07934ee4..6d27b5e0 100644 --- a/source/uCEFApplication.pas +++ b/source/uCEFApplication.pas @@ -58,14 +58,14 @@ uses const CEF_SUPPORTED_VERSION_MAJOR = 3; - CEF_SUPPORTED_VERSION_MINOR = 3538; - CEF_SUPPORTED_VERSION_RELEASE = 1852; + CEF_SUPPORTED_VERSION_MINOR = 3578; + CEF_SUPPORTED_VERSION_RELEASE = 1860; CEF_SUPPORTED_VERSION_BUILD = 0; - CEF_CHROMEELF_VERSION_MAJOR = 70; + CEF_CHROMEELF_VERSION_MAJOR = 71; CEF_CHROMEELF_VERSION_MINOR = 0; - CEF_CHROMEELF_VERSION_RELEASE = 3538; - CEF_CHROMEELF_VERSION_BUILD = 102; + CEF_CHROMEELF_VERSION_RELEASE = 3578; + CEF_CHROMEELF_VERSION_BUILD = 80; LIBCEF_DLL = 'libcef.dll'; CHROMEELF_DLL = 'chrome_elf.dll'; diff --git a/source/uCEFBrowser.pas b/source/uCEFBrowser.pas index 88306b25..14016b8d 100644 --- a/source/uCEFBrowser.pas +++ b/source/uCEFBrowser.pas @@ -121,6 +121,7 @@ type procedure NotifyScreenInfoChanged; procedure WasHidden(hidden: Boolean); procedure Invalidate(kind: TCefPaintElementType); + procedure SendExternalBeginFrame; procedure SendKeyEvent(const event: PCefKeyEvent); procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); @@ -157,6 +158,9 @@ uses uCEFRunFileDialogCallback, uCEFRequestContext, uCEFNavigationEntryVisitor, uCEFNavigationEntry, uCEFExtension, uCEFStringList; + +// TCefBrowserRef + function TCefBrowserRef.GetHost: ICefBrowserHost; begin Result := TCefBrowserHostRef.UnWrap(PCefBrowser(FData)^.get_host(PCefBrowser(FData))); @@ -305,11 +309,12 @@ begin Result := nil; end; + // TCefBrowserHostRef procedure TCefBrowserHostRef.CloseDevTools; begin - PCefBrowserHost(FData)^.close_dev_tools(FData); + PCefBrowserHost(FData)^.close_dev_tools(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.DownloadImage(const imageUrl : ustring; @@ -321,7 +326,12 @@ var url: TCefString; begin url := CefString(imageUrl); - PCefBrowserHost(FData)^.download_image(FData, @url, Ord(isFavicon), maxImageSize, Ord(bypassCache), CefGetData(callback)); + PCefBrowserHost(FData)^.download_image(PCefBrowserHost(FData), + @url, + Ord(isFavicon), + maxImageSize, + Ord(bypassCache), + CefGetData(callback)); end; procedure TCefBrowserHostRef.DownloadImageProc(const imageUrl : ustring; @@ -335,12 +345,12 @@ end; procedure TCefBrowserHostRef.DragSourceEndedAt(x, y: Integer; op: TCefDragOperation); begin - PCefBrowserHost(FData)^.drag_source_ended_at(FData, x, y, op); + PCefBrowserHost(FData)^.drag_source_ended_at(PCefBrowserHost(FData), x, y, op); end; procedure TCefBrowserHostRef.DragSourceSystemDragEnded; begin - PCefBrowserHost(FData)^.drag_source_system_drag_ended(FData); + PCefBrowserHost(FData)^.drag_source_system_drag_ended(PCefBrowserHost(FData)); end; function TCefBrowserHostRef.GetVisibleNavigationEntry : ICefNavigationEntry; @@ -350,42 +360,42 @@ end; procedure TCefBrowserHostRef.SetAccessibilityState(accessibilityState: TCefState); begin - PCefBrowserHost(FData)^.set_accessibility_state(FData, accessibilityState); + PCefBrowserHost(FData)^.set_accessibility_state(PCefBrowserHost(FData), accessibilityState); end; procedure TCefBrowserHostRef.SetAutoResizeEnabled(enabled: boolean; const min_size, max_size: PCefSize); begin - PCefBrowserHost(FData)^.set_auto_resize_enabled(FData, Ord(enabled), min_size, max_size); + PCefBrowserHost(FData)^.set_auto_resize_enabled(PCefBrowserHost(FData), Ord(enabled), min_size, max_size); end; function TCefBrowserHostRef.GetExtension : ICefExtension; begin - Result := TCefExtensionRef.UnWrap(PCefBrowserHost(FData)^.get_extension(FData)); + Result := TCefExtensionRef.UnWrap(PCefBrowserHost(FData)^.get_extension(PCefBrowserHost(FData))); end; function TCefBrowserHostRef.IsBackgroundHost : boolean; begin - Result := PCefBrowserHost(FData)^.is_background_host(FData) <> 0; + Result := PCefBrowserHost(FData)^.is_background_host(PCefBrowserHost(FData)) <> 0; end; procedure TCefBrowserHostRef.DragTargetDragEnter(const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations); begin - PCefBrowserHost(FData)^.drag_target_drag_enter(FData, CefGetData(dragData), event, allowedOps); + PCefBrowserHost(FData)^.drag_target_drag_enter(PCefBrowserHost(FData), CefGetData(dragData), event, allowedOps); end; procedure TCefBrowserHostRef.DragTargetDragLeave; begin - PCefBrowserHost(FData)^.drag_target_drag_leave(FData); + PCefBrowserHost(FData)^.drag_target_drag_leave(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.DragTargetDragOver(const event: PCefMouseEvent; allowedOps: TCefDragOperations); begin - PCefBrowserHost(FData)^.drag_target_drag_over(FData, event, allowedOps); + PCefBrowserHost(FData)^.drag_target_drag_over(PCefBrowserHost(FData), event, allowedOps); end; procedure TCefBrowserHostRef.DragTargetDrop(event: PCefMouseEvent); begin - PCefBrowserHost(FData)^.drag_target_drop(FData, event); + PCefBrowserHost(FData)^.drag_target_drop(PCefBrowserHost(FData), event); end; procedure TCefBrowserHostRef.Find(identifier: Integer; const searchText: ustring; forward, matchCase, findNext: Boolean); @@ -393,7 +403,7 @@ var TempText : TCefString; begin TempText := CefString(searchText); - PCefBrowserHost(FData)^.find(FData, identifier, @TempText, Ord(forward), Ord(matchCase), Ord(findNext)); + PCefBrowserHost(FData)^.find(PCefBrowserHost(FData), identifier, @TempText, Ord(forward), Ord(matchCase), Ord(findNext)); end; function TCefBrowserHostRef.GetBrowser: ICefBrowser; @@ -413,7 +423,7 @@ var str: TCefString; begin str := CefString(path); - PCefBrowserHost(FData)^.print_to_pdf(FData, @str, settings, CefGetData(callback)); + PCefBrowserHost(FData)^.print_to_pdf(PCefBrowserHost(FData), @str, settings, CefGetData(callback)); end; procedure TCefBrowserHostRef.PrintToPdfProc(const path : ustring; @@ -428,7 +438,7 @@ var str: TCefString; begin str := CefString(word); - PCefBrowserHost(FData)^.replace_misspelling(FData, @str); + PCefBrowserHost(FData)^.replace_misspelling(PCefBrowserHost(FData), @str); end; procedure TCefBrowserHostRef.RunFileDialog( mode : TCefFileDialogMode; @@ -475,7 +485,7 @@ var str: TCefString; begin str := CefString(word); - PCefBrowserHost(FData)^.add_word_to_dictionary(FData, @str); + PCefBrowserHost(FData)^.add_word_to_dictionary(PCefBrowserHost(FData), @str); end; procedure TCefBrowserHostRef.CloseBrowser(forceClose: Boolean); @@ -485,17 +495,17 @@ end; procedure TCefBrowserHostRef.SendCaptureLostEvent; begin - PCefBrowserHost(FData)^.send_capture_lost_event(FData); + PCefBrowserHost(FData)^.send_capture_lost_event(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.SendFocusEvent(aSetFocus: Boolean); begin - PCefBrowserHost(FData)^.send_focus_event(FData, Ord(aSetFocus)); + PCefBrowserHost(FData)^.send_focus_event(PCefBrowserHost(FData), Ord(aSetFocus)); end; procedure TCefBrowserHostRef.SendKeyEvent(const event: PCefKeyEvent); begin - PCefBrowserHost(FData)^.send_key_event(FData, event); + PCefBrowserHost(FData)^.send_key_event(PCefBrowserHost(FData), event); end; procedure TCefBrowserHostRef.SendMouseClickEvent(const event : PCefMouseEvent; @@ -503,17 +513,17 @@ procedure TCefBrowserHostRef.SendMouseClickEvent(const event : PCefMouseEve mouseUp : Boolean; clickCount : Integer); begin - PCefBrowserHost(FData)^.send_mouse_click_event(FData, event, kind, Ord(mouseUp), clickCount); + PCefBrowserHost(FData)^.send_mouse_click_event(PCefBrowserHost(FData), event, kind, Ord(mouseUp), clickCount); end; procedure TCefBrowserHostRef.SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); begin - PCefBrowserHost(FData)^.send_mouse_move_event(FData, event, Ord(mouseLeave)); + PCefBrowserHost(FData)^.send_mouse_move_event(PCefBrowserHost(FData), event, Ord(mouseLeave)); end; procedure TCefBrowserHostRef.SendMouseWheelEvent(const event: PCefMouseEvent; deltaX, deltaY: Integer); begin - PCefBrowserHost(FData)^.send_mouse_wheel_event(FData, event, deltaX, deltaY); + PCefBrowserHost(FData)^.send_mouse_wheel_event(PCefBrowserHost(FData), event, deltaX, deltaY); end; procedure TCefBrowserHostRef.SetFocus(focus: Boolean); @@ -548,12 +558,12 @@ end; function TCefBrowserHostRef.GetRequestContext: ICefRequestContext; begin - Result := TCefRequestContextRef.UnWrap(PCefBrowserHost(FData)^.get_request_context(FData)); + Result := TCefRequestContextRef.UnWrap(PCefBrowserHost(FData)^.get_request_context(PCefBrowserHost(FData))); end; procedure TCefBrowserHostRef.GetNavigationEntries(const visitor: ICefNavigationEntryVisitor; currentOnly: Boolean); begin - PCefBrowserHost(FData)^.get_navigation_entries(FData, CefGetData(visitor), Ord(currentOnly)); + PCefBrowserHost(FData)^.get_navigation_entries(PCefBrowserHost(FData), CefGetData(visitor), Ord(currentOnly)); end; procedure TCefBrowserHostRef.GetNavigationEntriesProc(const proc: TCefNavigationEntryVisitorProc; currentOnly: Boolean); @@ -575,7 +585,12 @@ var TempString : TCefString; begin TempString := CefString(text); - PCefBrowserHost(FData)^.ime_set_composition(PCefBrowserHost(FData), @TempString, underlinesCount, underlines, replacement_range, selection_range); + PCefBrowserHost(FData)^.ime_set_composition(PCefBrowserHost(FData), + @TempString, + underlinesCount, + underlines, + replacement_range, + selection_range); end; procedure TCefBrowserHostRef.IMECommitText(const text: ustring; const replacement_range : PCefRange; relative_cursor_pos : integer); @@ -598,27 +613,32 @@ end; function TCefBrowserHostRef.HasDevTools: Boolean; begin - Result := PCefBrowserHost(FData)^.has_dev_tools(FData) <> 0; + Result := PCefBrowserHost(FData)^.has_dev_tools(PCefBrowserHost(FData)) <> 0; end; function TCefBrowserHostRef.HasView: Boolean; begin - Result := PCefBrowserHost(FData)^.has_view(FData) <> 0; + Result := PCefBrowserHost(FData)^.has_view(PCefBrowserHost(FData)) <> 0; end; procedure TCefBrowserHostRef.Invalidate(kind: TCefPaintElementType); begin - PCefBrowserHost(FData)^.invalidate(FData, kind); + PCefBrowserHost(FData)^.invalidate(PCefBrowserHost(FData), kind); +end; + +procedure TCefBrowserHostRef.SendExternalBeginFrame; +begin + PCefBrowserHost(FData)^.send_external_begin_frame(PCefBrowserHost(FData)); end; function TCefBrowserHostRef.IsMouseCursorChangeDisabled: Boolean; begin - Result := PCefBrowserHost(FData)^.is_mouse_cursor_change_disabled(FData) <> 0; + Result := PCefBrowserHost(FData)^.is_mouse_cursor_change_disabled(PCefBrowserHost(FData)) <> 0; end; function TCefBrowserHostRef.IsWindowRenderingDisabled: Boolean; begin - Result := PCefBrowserHost(FData)^.is_window_rendering_disabled(FData) <> 0; + Result := PCefBrowserHost(FData)^.is_window_rendering_disabled(PCefBrowserHost(FData)) <> 0; end; procedure TCefBrowserHostRef.NotifyMoveOrResizeStarted; @@ -641,7 +661,11 @@ procedure TCefBrowserHostRef.ShowDevTools(const windowInfo : PCefWindowInf const settings : PCefBrowserSettings; inspectElementAt : PCefPoint); begin - PCefBrowserHost(FData)^.show_dev_tools(FData, windowInfo, CefGetData(client), settings, inspectElementAt); + PCefBrowserHost(FData)^.show_dev_tools(PCefBrowserHost(FData), + windowInfo, + CefGetData(client), + settings, + inspectElementAt); end; procedure TCefBrowserHostRef.StartDownload(const url: ustring); @@ -654,12 +678,12 @@ end; procedure TCefBrowserHostRef.StopFinding(clearSelection: Boolean); begin - PCefBrowserHost(FData)^.stop_finding(FData, Ord(clearSelection)); + PCefBrowserHost(FData)^.stop_finding(PCefBrowserHost(FData), Ord(clearSelection)); end; function TCefBrowserHostRef.TryCloseBrowser: Boolean; begin - Result := PCefBrowserHost(FData)^.try_close_browser(FData) <> 0; + Result := PCefBrowserHost(FData)^.try_close_browser(PCefBrowserHost(FData)) <> 0; end; class function TCefBrowserHostRef.UnWrap(data: Pointer): ICefBrowserHost; @@ -672,12 +696,12 @@ end; procedure TCefBrowserHostRef.WasHidden(hidden: Boolean); begin - PCefBrowserHost(FData)^.was_hidden(FData, Ord(hidden)); + PCefBrowserHost(FData)^.was_hidden(PCefBrowserHost(FData), Ord(hidden)); end; procedure TCefBrowserHostRef.WasResized; begin - PCefBrowserHost(FData)^.was_resized(FData); + PCefBrowserHost(FData)^.was_resized(PCefBrowserHost(FData)); end; diff --git a/source/uCEFChromium.pas b/source/uCEFChromium.pas index 5923f81c..ff8eedb8 100644 --- a/source/uCEFChromium.pas +++ b/source/uCEFChromium.pas @@ -212,6 +212,7 @@ type FOnPopupShow : TOnPopupShow; FOnPopupSize : TOnPopupSize; FOnPaint : TOnPaint; + FOnAcceleratedPaint : TOnAcceleratedPaint; FOnCursorChange : TOnCursorChange; FOnStartDragging : TOnStartDragging; FOnUpdateDragCursor : TOnUpdateDragCursor; @@ -435,12 +436,13 @@ type // ICefRenderHandler procedure doOnGetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); virtual; function doOnGetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; - function doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; + procedure doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect); virtual; function doOnGetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; virtual; function doOnGetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; virtual; procedure doOnPopupShow(const browser: ICefBrowser; show: Boolean); virtual; procedure doOnPopupSize(const browser: ICefBrowser; const rect: PCefRect); virtual; procedure doOnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); virtual; + procedure doOnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); virtual; procedure doOnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); virtual; function doOnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; virtual; procedure doOnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); virtual; @@ -544,6 +546,7 @@ type procedure NotifyScreenInfoChanged; procedure NotifyMoveOrResizeStarted; procedure Invalidate(kind: TCefPaintElementType = PET_VIEW); + procedure SendExternalBeginFrame; procedure SendKeyEvent(const event: PCefKeyEvent); procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); @@ -719,6 +722,7 @@ type property OnPopupShow : TOnPopupShow read FOnPopupShow write FOnPopupShow; property OnPopupSize : TOnPopupSize read FOnPopupSize write FOnPopupSize; property OnPaint : TOnPaint read FOnPaint write FOnPaint; + property OnAcceleratedPaint : TOnAcceleratedPaint read FOnAcceleratedPaint write FOnAcceleratedPaint; property OnCursorChange : TOnCursorChange read FOnCursorChange write FOnCursorChange; property OnStartDragging : TOnStartDragging read FOnStartDragging write FOnStartDragging; property OnUpdateDragCursor : TOnUpdateDragCursor read FOnUpdateDragCursor write FOnUpdateDragCursor; @@ -1071,6 +1075,7 @@ begin FOnPopupShow := nil; FOnPopupSize := nil; FOnPaint := nil; + FOnAcceleratedPaint := nil; FOnCursorChange := nil; FOnStartDragging := nil; FOnUpdateDragCursor := nil; @@ -3460,11 +3465,9 @@ begin if Assigned(FOnGetScreenPoint) then FOnGetScreenPoint(Self, browser, viewX, viewY, screenX, screenY, Result); end; -function TChromium.doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; +procedure TChromium.doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect); begin - Result := False; - - if Assigned(FOnGetViewRect) then FOnGetViewRect(Self, browser, rect, Result); + if Assigned(FOnGetViewRect) then FOnGetViewRect(Self, browser, rect); end; procedure TChromium.doOnGotFocus(const browser: ICefBrowser); @@ -3552,6 +3555,15 @@ begin if Assigned(FOnPaint) then FOnPaint(Self, browser, kind, dirtyRectsCount, dirtyRects, buffer, width, height); end; +procedure TChromium.doOnAcceleratedPaint(const browser : ICefBrowser; + kind : TCefPaintElementType; + dirtyRectsCount : NativeUInt; + const dirtyRects : PCefRectArray; + shared_handle : Pointer); +begin + if Assigned(FOnAcceleratedPaint) then FOnAcceleratedPaint(Self, browser, kind, dirtyRectsCount, dirtyRects, shared_handle); +end; + function TChromium.doOnSelectClientCertificate(const browser : ICefBrowser; isProxy : boolean; const host : ustring; @@ -3948,6 +3960,11 @@ begin end; end; +procedure TChromium.SendExternalBeginFrame; +begin + if Initialized then FBrowser.Host.SendExternalBeginFrame; +end; + procedure TChromium.SendKeyEvent(const event: PCefKeyEvent); begin if Initialized then FBrowser.Host.SendKeyEvent(event); diff --git a/source/uCEFChromiumEvents.pas b/source/uCEFChromiumEvents.pas index f863422b..a7a7d9f8 100644 --- a/source/uCEFChromiumEvents.pas +++ b/source/uCEFChromiumEvents.pas @@ -134,12 +134,13 @@ type // ICefRenderHandler TOnGetAccessibilityHandler = procedure(Sender: TObject; var aAccessibilityHandler : ICefAccessibilityHandler) of Object; TOnGetRootScreenRect = procedure(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean) of Object; - TOnGetViewRect = procedure(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean) of Object; + TOnGetViewRect = procedure(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect) of Object; TOnGetScreenPoint = procedure(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean) of Object; TOnGetScreenInfo = procedure(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean) of Object; TOnPopupShow = procedure(Sender: TObject; const browser: ICefBrowser; show: Boolean) of Object; TOnPopupSize = procedure(Sender: TObject; const browser: ICefBrowser; const rect: PCefRect) of Object; TOnPaint = procedure(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer) of Object; + TOnAcceleratedPaint = procedure(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer) of Object; TOnCursorChange = procedure(Sender: TObject; const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo) of Object; TOnStartDragging = procedure(Sender: TObject; const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer; out Result: Boolean) of Object; TOnUpdateDragCursor = procedure(Sender: TObject; const browser: ICefBrowser; operation: TCefDragOperation) of Object; diff --git a/source/uCEFInterfaces.pas b/source/uCEFInterfaces.pas index e4a4dad3..d01fbc5a 100644 --- a/source/uCEFInterfaces.pas +++ b/source/uCEFInterfaces.pas @@ -342,12 +342,13 @@ type // ICefRenderHandler procedure doOnGetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); function doOnGetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + procedure doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect); function doOnGetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; function doOnGetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; procedure doOnPopupShow(const browser: ICefBrowser; show: Boolean); procedure doOnPopupSize(const browser: ICefBrowser; const rect: PCefRect); procedure doOnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); + procedure doOnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); procedure doOnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); function doOnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; procedure doOnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); @@ -478,6 +479,7 @@ type procedure WasHidden(hidden: Boolean); procedure NotifyScreenInfoChanged; procedure Invalidate(kind: TCefPaintElementType); + procedure SendExternalBeginFrame; procedure SendKeyEvent(const event: PCefKeyEvent); procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); @@ -1733,12 +1735,13 @@ type ['{1FC1C22B-085A-4741-9366-5249B88EC410}'] procedure GetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); function GetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + procedure GetViewRect(const browser: ICefBrowser; var rect: TCefRect); function GetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; function GetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; procedure OnPopupShow(const browser: ICefBrowser; show: Boolean); procedure OnPopupSize(const browser: ICefBrowser; const rect: PCefRect); procedure OnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); + procedure OnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); procedure OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; CursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); function OnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; procedure OnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); diff --git a/source/uCEFMiscFunctions.pas b/source/uCEFMiscFunctions.pas index 0f7de516..74b025ea 100644 --- a/source/uCEFMiscFunctions.pas +++ b/source/uCEFMiscFunctions.pas @@ -493,6 +493,8 @@ begin aWindowInfo.parent_window := aParent; aWindowInfo.menu := 0; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; @@ -508,6 +510,8 @@ begin aWindowInfo.parent_window := aParent; aWindowInfo.menu := 0; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; @@ -523,6 +527,8 @@ begin aWindowInfo.parent_window := aParent; aWindowInfo.menu := 0; aWindowInfo.windowless_rendering_enabled := ord(True); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; {$ENDIF} @@ -538,6 +544,8 @@ begin aWindowInfo.hidden := Ord(aHidden); aWindowInfo.parent_view := aParent; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.view := 0; end; @@ -551,6 +559,8 @@ begin aWindowInfo.hidden := Ord(aHidden); aWindowInfo.parent_view := aParent; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.view := 0; end; @@ -565,6 +575,8 @@ begin aWindowInfo.hidden := Ord(aHidden); aWindowInfo.parent_view := aParent; aWindowInfo.windowless_rendering_enabled := ord(True); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.view := 0; end; {$ENDIF} @@ -578,6 +590,8 @@ begin aWindowInfo.height := aRect.bottom - aRect.top; aWindowInfo.parent_window := aParent; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; @@ -589,6 +603,8 @@ begin aWindowInfo.height := integer(CW_USEDEFAULT); aWindowInfo.parent_window := aParent; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; @@ -600,6 +616,8 @@ begin aWindowInfo.height := 0; aWindowInfo.parent_window := aParent; aWindowInfo.windowless_rendering_enabled := ord(False); + aWindowInfo.shared_texture_enabled := ord(False); + aWindowInfo.external_begin_frame_enabled := ord(False); aWindowInfo.window := 0; end; {$ENDIF} diff --git a/source/uCEFRenderHandler.pas b/source/uCEFRenderHandler.pas index 89dca0b3..f68fca28 100644 --- a/source/uCEFRenderHandler.pas +++ b/source/uCEFRenderHandler.pas @@ -56,12 +56,13 @@ type protected procedure GetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); virtual; function GetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; - function GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; + procedure GetViewRect(const browser: ICefBrowser; var rect: TCefRect); virtual; function GetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; virtual; function GetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; virtual; procedure OnPopupShow(const browser: ICefBrowser; show: Boolean); virtual; procedure OnPopupSize(const browser: ICefBrowser; const rect: PCefRect); virtual; procedure OnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); virtual; + procedure OnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); virtual; procedure OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; CursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); virtual; function OnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; virtual; procedure OnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); virtual; @@ -81,11 +82,12 @@ type procedure GetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); override; function GetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; override; - function GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; override; + procedure GetViewRect(const browser: ICefBrowser; var rect: TCefRect); override; function GetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; override; procedure OnPopupShow(const browser: ICefBrowser; show: Boolean); override; procedure OnPopupSize(const browser: ICefBrowser; const rect: PCefRect); override; procedure OnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); override; + procedure OnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); override; procedure OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); override; function GetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; override; function OnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; override; @@ -143,18 +145,17 @@ begin rect^)); end; -function cef_render_handler_get_view_rect(self : PCefRenderHandler; - browser : PCefBrowser; - rect : PCefRect): Integer; stdcall; +procedure cef_render_handler_get_view_rect(self : PCefRenderHandler; + browser : PCefBrowser; + rect : PCefRect); stdcall; var TempObject : TObject; begin - Result := Ord(False); TempObject := CefGetObject(self); if (TempObject <> nil) and (TempObject is TCefRenderHandlerOwn) then - Result := Ord(TCefRenderHandlerOwn(TempObject).GetViewRect(TCefBrowserRef.UnWrap(browser), - rect^)); + TCefRenderHandlerOwn(TempObject).GetViewRect(TCefBrowserRef.UnWrap(browser), + rect^); end; function cef_render_handler_get_screen_point(self : PCefRenderHandler; @@ -238,6 +239,25 @@ begin height); end; +procedure cef_render_handler_on_accelerated_paint( self : PCefRenderHandler; + browser : PCefBrowser; + kind : TCefPaintElementType; + dirtyRectsCount : NativeUInt; + const dirtyRects : PCefRectArray; + shared_handle : Pointer); stdcall; +var + TempObject : TObject; +begin + TempObject := CefGetObject(self); + + if (TempObject <> nil) and (TempObject is TCefRenderHandlerOwn) then + TCefRenderHandlerOwn(TempObject).OnAcceleratedPaint(TCefBrowserRef.UnWrap(browser), + kind, + dirtyRectsCount, + dirtyRects, + shared_handle); +end; + procedure cef_render_handler_on_cursor_change( self : PCefRenderHandler; browser : PCefBrowser; cursor : TCefCursorHandle; @@ -348,6 +368,7 @@ begin on_popup_show := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_popup_show; on_popup_size := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_popup_size; on_paint := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_paint; + on_accelerated_paint := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_accelerated_paint; on_cursor_change := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_cursor_change; start_dragging := {$IFDEF FPC}@{$ENDIF}cef_render_handler_start_dragging; update_drag_cursor := {$IFDEF FPC}@{$ENDIF}cef_render_handler_update_drag_cursor; @@ -377,9 +398,9 @@ begin Result := False; end; -function TCefRenderHandlerOwn.GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; +procedure TCefRenderHandlerOwn.GetViewRect(const browser: ICefBrowser; var rect: TCefRect); begin - Result := False; + // end; procedure TCefRenderHandlerOwn.OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; CursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); @@ -392,6 +413,11 @@ begin // end; +procedure TCefRenderHandlerOwn.OnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); +begin + // +end; + procedure TCefRenderHandlerOwn.OnPopupShow(const browser: ICefBrowser; show: Boolean); begin // @@ -487,12 +513,12 @@ begin Result := inherited GetScreenPoint(browser, viewX, viewY, screenX, screenY); end; -function TCustomRenderHandler.GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; +procedure TCustomRenderHandler.GetViewRect(const browser: ICefBrowser; var rect: TCefRect); begin if (FEvents <> nil) then - Result := IChromiumEvents(FEvents).doOnGetViewRect(browser, rect) + IChromiumEvents(FEvents).doOnGetViewRect(browser, rect) else - Result := inherited GetViewRect(browser, rect); + inherited GetViewRect(browser, rect); end; procedure TCustomRenderHandler.OnCursorChange(const browser : ICefBrowser; @@ -514,6 +540,15 @@ begin if (FEvents <> nil) then IChromiumEvents(FEvents).doOnPaint(browser, kind, dirtyRectsCount, dirtyRects, buffer, width, height); end; +procedure TCustomRenderHandler.OnAcceleratedPaint(const browser : ICefBrowser; + kind : TCefPaintElementType; + dirtyRectsCount : NativeUInt; + const dirtyRects : PCefRectArray; + shared_handle : Pointer); +begin + if (FEvents <> nil) then IChromiumEvents(FEvents).doOnAcceleratedPaint(browser, kind, dirtyRectsCount, dirtyRects, shared_handle); +end; + procedure TCustomRenderHandler.OnPopupShow(const browser: ICefBrowser; show: Boolean); begin if (FEvents <> nil) then IChromiumEvents(FEvents).doOnPopupShow(browser, show); diff --git a/source/uCEFTypes.pas b/source/uCEFTypes.pas index dac7d78a..44aac696 100644 --- a/source/uCEFTypes.pas +++ b/source/uCEFTypes.pas @@ -1013,6 +1013,8 @@ type parent_window : TCefWindowHandle; menu : HMENU; windowless_rendering_enabled : Integer; + shared_texture_enabled : Integer; + external_begin_frame_enabled : Integer; window : TCefWindowHandle; {$ENDIF} {$IFDEF MACOS} @@ -1024,6 +1026,8 @@ type hidden : Integer; parent_view : TCefWindowHandle; windowless_rendering_enabled : Integer; + shared_texture_enabled : Integer; + external_begin_frame_enabled : Integer; view : TCefWindowHandle; {$ENDIF} {$IFDEF LINUX} @@ -1033,6 +1037,8 @@ type height : uint32; parent_window : TCefWindowHandle; windowless_rendering_enabled : Integer; + shared_texture_enabled : Integer; + external_begin_frame_enabled : Integer; window : TCefWindowHandle; {$ENDIF} end; @@ -1399,12 +1405,13 @@ type base : TCefBaseRefCounted; get_accessibility_handler : function(self: PCefRenderHandler): PCefAccessibilityHandler; stdcall; get_root_screen_rect : function(self: PCefRenderHandler; browser: PCefBrowser; rect: PCefRect): Integer; stdcall; - get_view_rect : function(self: PCefRenderHandler; browser: PCefBrowser; rect: PCefRect): Integer; stdcall; + get_view_rect : procedure(self: PCefRenderHandler; browser: PCefBrowser; rect: PCefRect); stdcall; get_screen_point : function(self: PCefRenderHandler; browser: PCefBrowser; viewX, viewY: Integer; screenX, screenY: PInteger): Integer; stdcall; get_screen_info : function(self: PCefRenderHandler; browser: PCefBrowser; screen_info: PCefScreenInfo): Integer; stdcall; on_popup_show : procedure(self: PCefRenderHandler; browser: PCefBrowser; show: Integer); stdcall; on_popup_size : procedure(self: PCefRenderHandler; browser: PCefBrowser; const rect: PCefRect); stdcall; on_paint : procedure(self: PCefRenderHandler; browser: PCefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); stdcall; + on_accelerated_paint : procedure(self: PCefRenderHandler; browser: PCefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); stdcall; on_cursor_change : procedure(self: PCefRenderHandler; browser: PCefBrowser; cursor: TCefCursorHandle; type_: TCefCursorType; const custom_cursor_info: PCefCursorInfo); stdcall; start_dragging : function(self: PCefRenderHandler; browser: PCefBrowser; drag_data: PCefDragData; allowed_ops: TCefDragOperations; x, y: Integer): Integer; stdcall; update_drag_cursor : procedure(self: PCefRenderHandler; browser: PCefBrowser; operation: TCefDragOperation); stdcall; @@ -2536,6 +2543,7 @@ type was_hidden : procedure(self: PCefBrowserHost; hidden: Integer); stdcall; notify_screen_info_changed : procedure(self: PCefBrowserHost); stdcall; invalidate : procedure(self: PCefBrowserHost; kind: TCefPaintElementType); stdcall; + send_external_begin_frame : procedure(self: PCefBrowserHost); stdcall; send_key_event : procedure(self: PCefBrowserHost; const event: PCefKeyEvent); stdcall; send_mouse_click_event : procedure(self: PCefBrowserHost; const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp, clickCount: Integer); stdcall; send_mouse_move_event : procedure(self: PCefBrowserHost; const event: PCefMouseEvent; mouseLeave: Integer); stdcall; diff --git a/source/uFMXChromium.pas b/source/uFMXChromium.pas index e2621257..66729529 100644 --- a/source/uFMXChromium.pas +++ b/source/uFMXChromium.pas @@ -198,6 +198,7 @@ type FOnPopupShow : TOnPopupShow; FOnPopupSize : TOnPopupSize; FOnPaint : TOnPaint; + FOnAcceleratedPaint : TOnAcceleratedPaint; FOnCursorChange : TOnCursorChange; FOnScrollOffsetChanged : TOnScrollOffsetChanged; FOnIMECompositionRangeChanged : TOnIMECompositionRangeChanged; @@ -406,12 +407,13 @@ type // ICefRenderHandler procedure doOnGetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); virtual; function doOnGetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; - function doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; virtual; + procedure doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect); virtual; function doOnGetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; virtual; function doOnGetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; virtual; procedure doOnPopupShow(const browser: ICefBrowser; show: Boolean); virtual; procedure doOnPopupSize(const browser: ICefBrowser; const rect: PCefRect); virtual; procedure doOnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); virtual; + procedure doOnAcceleratedPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; shared_handle: Pointer); virtual; procedure doOnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); virtual; function doOnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; virtual; procedure doOnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); virtual; @@ -510,6 +512,7 @@ type procedure NotifyScreenInfoChanged; procedure NotifyMoveOrResizeStarted; procedure Invalidate(kind: TCefPaintElementType = PET_VIEW); + procedure SendExternalBeginFrame; procedure SendKeyEvent(const event: PCefKeyEvent); procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); @@ -684,6 +687,7 @@ type property OnPopupShow : TOnPopupShow read FOnPopupShow write FOnPopupShow; property OnPopupSize : TOnPopupSize read FOnPopupSize write FOnPopupSize; property OnPaint : TOnPaint read FOnPaint write FOnPaint; + property OnAcceleratedPaint : TOnAcceleratedPaint read FOnAcceleratedPaint write FOnAcceleratedPaint; property OnCursorChange : TOnCursorChange read FOnCursorChange write FOnCursorChange; property OnScrollOffsetChanged : TOnScrollOffsetChanged read FOnScrollOffsetChanged write FOnScrollOffsetChanged; property OnIMECompositionRangeChanged : TOnIMECompositionRangeChanged read FOnIMECompositionRangeChanged write FOnIMECompositionRangeChanged; @@ -988,6 +992,7 @@ begin FOnPopupShow := nil; FOnPopupSize := nil; FOnPaint := nil; + FOnAcceleratedPaint := nil; FOnCursorChange := nil; FOnScrollOffsetChanged := nil; FOnIMECompositionRangeChanged := nil; @@ -3087,11 +3092,9 @@ begin if Assigned(FOnGetScreenPoint) then FOnGetScreenPoint(Self, browser, viewX, viewY, screenX, screenY, Result); end; -function TFMXChromium.doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; +procedure TFMXChromium.doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect); begin - Result := False; - - if Assigned(FOnGetViewRect) then FOnGetViewRect(Self, browser, rect, Result); + if Assigned(FOnGetViewRect) then FOnGetViewRect(Self, browser, rect); end; procedure TFMXChromium.doOnGotFocus(const browser: ICefBrowser); @@ -3179,6 +3182,15 @@ begin if Assigned(FOnPaint) then FOnPaint(Self, browser, kind, dirtyRectsCount, dirtyRects, buffer, width, height); end; +procedure TFMXChromium.doOnAcceleratedPaint(const browser : ICefBrowser; + kind : TCefPaintElementType; + dirtyRectsCount : NativeUInt; + const dirtyRects : PCefRectArray; + shared_handle : Pointer); +begin + if Assigned(FOnAcceleratedPaint) then FOnAcceleratedPaint(Self, browser, kind, dirtyRectsCount, dirtyRects, shared_handle); +end; + function TFMXChromium.doOnSelectClientCertificate(const browser : ICefBrowser; isProxy : boolean; const host : ustring; @@ -3647,6 +3659,11 @@ begin end; end; +procedure TFMXChromium.SendExternalBeginFrame; +begin + if Initialized then FBrowser.Host.SendExternalBeginFrame; +end; + procedure TFMXChromium.SendKeyEvent(const event: PCefKeyEvent); begin if Initialized then FBrowser.Host.SendKeyEvent(event);