1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2024-11-24 08:02:15 +02:00

Update to CEF 117.1.5

This commit is contained in:
salvadordf 2023-09-29 19:23:38 +02:00
parent fd75f6f65e
commit f423f19168
36 changed files with 2208 additions and 40 deletions

View File

@ -3,15 +3,15 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro
CEF4Delphi is based on DCEF3 and fpCEF3. The original license of those projects still applies to CEF4Delphi. Read the license terms in the LICENSE.md file.
CEF4Delphi uses CEF 117.1.4 which includes Chromium 117.0.5938.92.
CEF4Delphi uses CEF 117.1.5 which includes Chromium 117.0.5938.132.
The CEF binaries used by CEF4Delphi are available for download at Spotify :
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_windows32.tar.bz2)
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_windows64.tar.bz2)
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_linux64.tar.bz2)
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_linuxarm.tar.bz2)
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_linuxarm64.tar.bz2)
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.4%2Bga26f38b%2Bchromium-117.0.5938.92_macosx64.tar.bz2)
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_windows32.tar.bz2)
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_windows64.tar.bz2)
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_linux64.tar.bz2)
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_linuxarm.tar.bz2)
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_linuxarm64.tar.bz2)
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_117.1.5%2Bgf1b94ea%2Bchromium-117.0.5938.132_macosx64.tar.bz2)
CEF4Delphi was developed and tested on Delphi 11.3 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3, Delphi 10.4 and Lazarus 2.2.6/FPC 3.2.2. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.

Binary file not shown.

View File

@ -66,14 +66,224 @@ Count=1
Item_0=..\source
[Files]
Count=7
Item_0=..\source\uCEFApplicationCore.pas
Item_1=..\source\uCEFChromium.pas
Item_2=..\source\uCEFChromiumCore.pas
Item_3=..\source\uCEFConstants.pas
Item_4=..\source\uCEFFMXChromium.pas
Item_5=..\source\uCEFInterfaces.pas
Item_6=..\source\uCEFTypes.pas
Count=217
Item_0=..\source\uCEFAccessibilityHandler.pas
Item_1=..\source\uCEFApp.pas
Item_2=..\source\uCEFApplication.pas
Item_3=..\source\uCEFApplicationCore.pas
Item_4=..\source\uCEFApplicationEvents.pas
Item_5=..\source\uCEFArgCopy.pas
Item_6=..\source\uCEFAudioHandler.pas
Item_7=..\source\uCEFAuthCallback.pas
Item_8=..\source\uCEFBaseRefCounted.pas
Item_9=..\source\uCEFBaseScopedWrapper.pas
Item_10=..\source\uCEFBeforeDownloadCallback.pas
Item_11=..\source\uCEFBinaryValue.pas
Item_12=..\source\uCEFBitmapBitBuffer.pas
Item_13=..\source\uCEFBoxLayout.pas
Item_14=..\source\uCEFBrowser.pas
Item_15=..\source\uCEFBrowserBitmap.pas
Item_16=..\source\uCEFBrowserProcessHandler.pas
Item_17=..\source\uCEFBrowserView.pas
Item_18=..\source\uCEFBrowserViewComponent.pas
Item_19=..\source\uCEFBrowserViewDelegate.pas
Item_20=..\source\uCEFBrowserWindow.pas
Item_21=..\source\uCEFBufferPanel.pas
Item_22=..\source\uCEFButton.pas
Item_23=..\source\uCEFButtonComponent.pas
Item_24=..\source\uCEFButtonDelegate.pas
Item_25=..\source\uCEFCallback.pas
Item_26=..\source\uCEFChromium.pas
Item_27=..\source\uCEFChromiumCore.pas
Item_28=..\source\uCEFChromiumEvents.pas
Item_29=..\source\uCEFChromiumFontOptions.pas
Item_30=..\source\uCEFChromiumOptions.pas
Item_31=..\source\uCEFChromiumWindow.pas
Item_32=..\source\uCEFClient.pas
Item_33=..\source\uCEFCommandHandler.pas
Item_34=..\source\uCEFCommandLine.pas
Item_35=..\source\uCEFCompletionCallback.pas
Item_36=..\source\uCEFConstants.pas
Item_37=..\source\uCEFContextMenuHandler.pas
Item_38=..\source\uCEFContextMenuParams.pas
Item_39=..\source\uCEFCookieAccessFilter.pas
Item_40=..\source\uCEFCookieManager.pas
Item_41=..\source\uCEFCookieVisitor.pas
Item_42=..\source\uCEFCustomStreamReader.pas
Item_43=..\source\uCEFDeleteCookiesCallback.pas
Item_44=..\source\uCEFDevToolsMessageObserver.pas
Item_45=..\source\uCEFDialogHandler.pas
Item_46=..\source\uCEFDictionaryValue.pas
Item_47=..\source\uCEFDisplay.pas
Item_48=..\source\uCEFDisplayHandler.pas
Item_49=..\source\uCEFDomDocument.pas
Item_50=..\source\uCEFDomNode.pas
Item_51=..\source\uCEFDomVisitor.pas
Item_52=..\source\uCEFDownloadHandler.pas
Item_53=..\source\uCEFDownloadImageCallBack.pas
Item_54=..\source\uCEFDownLoadItem.pas
Item_55=..\source\uCEFDownloadItemCallback.pas
Item_56=..\source\uCEFDragAndDropMgr.pas
Item_57=..\source\uCEFDragData.pas
Item_58=..\source\uCEFDragHandler.pas
Item_59=..\source\uCEFEndTracingCallback.pas
Item_60=..\source\uCEFExtension.pas
Item_61=..\source\uCEFExtensionHandler.pas
Item_62=..\source\uCEFFileDialogCallback.pas
Item_63=..\source\uCEFFileDialogInfo.pas
Item_64=..\source\uCEFFillLayout.pas
Item_65=..\source\uCEFFindHandler.pas
Item_66=..\source\uCEFFMXBufferPanel.pas
Item_67=..\source\uCEFFMXChromium.pas
Item_68=..\source\uCEFFMXWindowParent.pas
Item_69=..\source\uCEFFMXWorkScheduler.pas
Item_70=..\source\uCEFFocusHandler.pas
Item_71=..\source\uCEFFrame.pas
Item_72=..\source\uCEFFrameHandler.pas
Item_73=..\source\uCEFGetExtensionResourceCallback.pas
Item_74=..\source\uCEFImage.pas
Item_75=..\source\uCEFInterfaces.pas
Item_76=..\source\uCEFJsDialogCallback.pas
Item_77=..\source\uCEFJsDialogHandler.pas
Item_78=..\source\uCEFJson.pas
Item_79=..\source\uCEFKeyboardHandler.pas
Item_80=..\source\uCEFLabelButton.pas
Item_81=..\source\uCEFLabelButtonComponent.pas
Item_82=..\source\uCEFLayout.pas
Item_83=..\source\uceflazaruscocoa.pas
Item_84=..\source\uCEFLibFunctions.pas
Item_85=..\source\uCEFLifeSpanHandler.pas
Item_86=..\source\uCEFLinkedWinControlBase.pas
Item_87=..\source\uCEFLinkedWindowParent.pas
Item_88=..\source\uCEFLinuxConstants.pas
Item_89=..\source\uCEFLinuxEventPipe.pas
Item_90=..\source\uCEFLinuxFunctions.pas
Item_91=..\source\uCEFLinuxTypes.pas
Item_92=..\source\uCEFListValue.pas
Item_93=..\source\uCEFLoadHandler.pas
Item_94=..\source\uCEFMacOSConstants.pas
Item_95=..\source\uCEFMacOSCustomCocoaTimer.pas
Item_96=..\source\uCEFMacOSFunctions.pas
Item_97=..\source\uCEFMacOSInterfaces.pas
Item_98=..\source\uCEFMediaAccessCallback.pas
Item_99=..\source\uCEFMediaAccessHandler.pas
Item_100=..\source\uCEFMediaObserver.pas
Item_101=..\source\uCEFMediaRoute.pas
Item_102=..\source\uCEFMediaRouteCreateCallback.pas
Item_103=..\source\uCEFMediaRouter.pas
Item_104=..\source\uCEFMediaSink.pas
Item_105=..\source\uCEFMediaSinkDeviceInfoCallback.pas
Item_106=..\source\uCEFMediaSource.pas
Item_107=..\source\uCEFMenuButton.pas
Item_108=..\source\uCEFMenuButtonComponent.pas
Item_109=..\source\uCEFMenuButtonDelegate.pas
Item_110=..\source\uCEFMenuButtonPressedLock.pas
Item_111=..\source\uCEFMenuModel.pas
Item_112=..\source\uCEFMenuModelDelegate.pas
Item_113=..\source\uCEFMiscFunctions.pas
Item_114=..\source\uCEFNavigationEntry.pas
Item_115=..\source\uCEFNavigationEntryVisitor.pas
Item_116=..\source\uCEFOAuth2Helper.pas
Item_117=..\source\uCEFOLEDragAndDrop.pas
Item_118=..\source\uCEFOsrBrowserWindow.pas
Item_119=..\source\uCEFOSRIMEHandler.pas
Item_120=..\source\uCEFOverlayController.pas
Item_121=..\source\uCEFPanel.pas
Item_122=..\source\uCEFPanelComponent.pas
Item_123=..\source\uCEFPanelDelegate.pas
Item_124=..\source\uCEFPDFPrintCallback.pas
Item_125=..\source\uCEFPDFPrintOptions.pas
Item_126=..\source\uCEFPermissionHandler.pas
Item_127=..\source\uCEFPermissionPromptCallback.pas
Item_128=..\source\uCEFPostData.pas
Item_129=..\source\uCEFPostDataElement.pas
Item_130=..\source\uCEFPreferenceManager.pas
Item_131=..\source\uCEFPreferenceRegistrar.pas
Item_132=..\source\uCEFPrintDialogCallback.pas
Item_133=..\source\uCEFPrintHandler.pas
Item_134=..\source\uCEFPrintJobCallback.pas
Item_135=..\source\uCEFPrintSettings.pas
Item_136=..\source\uCEFProcessMessage.pas
Item_137=..\source\uCEFRegistration.pas
Item_138=..\source\uCEFRenderHandler.pas
Item_139=..\source\uCEFRenderProcessHandler.pas
Item_140=..\source\uCEFRequest.pas
Item_141=..\source\uCEFRequestContext.pas
Item_142=..\source\uCEFRequestContextHandler.pas
Item_143=..\source\uCEFRequestHandler.pas
Item_144=..\source\uCEFResolveCallback.pas
Item_145=..\source\uCEFResourceBundle.pas
Item_146=..\source\uCEFResourceBundleHandler.pas
Item_147=..\source\uCEFResourceHandler.pas
Item_148=..\source\uCEFResourceReadCallback.pas
Item_149=..\source\uCEFResourceRequestHandler.pas
Item_150=..\source\uCEFResourceSkipCallback.pas
Item_151=..\source\uCEFResponse.pas
Item_152=..\source\uCEFResponseFilter.pas
Item_153=..\source\uCEFRunContextMenuCallback.pas
Item_154=..\source\uCEFRunFileDialogCallback.pas
Item_155=..\source\uCEFRunQuickMenuCallback.pas
Item_156=..\source\uCEFSchemeHandlerFactory.pas
Item_157=..\source\uCEFSchemeRegistrar.pas
Item_158=..\source\uCEFScrollView.pas
Item_159=..\source\uCEFScrollViewComponent.pas
Item_160=..\source\uCEFSelectClientCertificateCallback.pas
Item_161=..\source\uCEFSentinel.pas
Item_162=..\source\uCEFServer.pas
Item_163=..\source\uCEFServerComponent.pas
Item_164=..\source\uCEFServerEvents.pas
Item_165=..\source\uCEFServerHandler.pas
Item_166=..\source\uCEFSetCookieCallback.pas
Item_167=..\source\uCEFSharedMemoryRegion.pas
Item_168=..\source\uCEFSharedProcessMessageBuilder.pas
Item_169=..\source\uCEFSslInfo.pas
Item_170=..\source\uCEFSSLStatus.pas
Item_171=..\source\uCEFStreamReader.pas
Item_172=..\source\uCEFStreamWriter.pas
Item_173=..\source\uCEFStringList.pas
Item_174=..\source\uCEFStringMap.pas
Item_175=..\source\uCEFStringMultimap.pas
Item_176=..\source\uCEFStringVisitor.pas
Item_177=..\source\uCEFTask.pas
Item_178=..\source\uCEFTaskRunner.pas
Item_179=..\source\uCEFTextfield.pas
Item_180=..\source\uCEFTextfieldComponent.pas
Item_181=..\source\uCEFTextfieldDelegate.pas
Item_182=..\source\uCEFThread.pas
Item_183=..\source\uCEFTimerWorkScheduler.pas
Item_184=..\source\uCEFTypes.pas
Item_185=..\source\uCEFUrlRequest.pas
Item_186=..\source\uCEFUrlrequestClient.pas
Item_187=..\source\uCEFUrlRequestClientComponent.pas
Item_188=..\source\uCEFUrlRequestClientEvents.pas
Item_189=..\source\uCEFv8Accessor.pas
Item_190=..\source\uCEFv8ArrayBufferReleaseCallback.pas
Item_191=..\source\uCEFv8Context.pas
Item_192=..\source\uCEFv8Exception.pas
Item_193=..\source\uCEFv8Handler.pas
Item_194=..\source\uCEFv8Interceptor.pas
Item_195=..\source\uCEFv8StackFrame.pas
Item_196=..\source\uCEFv8StackTrace.pas
Item_197=..\source\uCEFv8Value.pas
Item_198=..\source\uCEFValue.pas
Item_199=..\source\uCEFView.pas
Item_200=..\source\uCEFViewComponent.pas
Item_201=..\source\uCEFViewDelegate.pas
Item_202=..\source\uCEFViewsFrameworkEvents.pas
Item_203=..\source\uCEFWaitableEvent.pas
Item_204=..\source\uCEFWinControl.pas
Item_205=..\source\uCEFWindow.pas
Item_206=..\source\uCEFWindowComponent.pas
Item_207=..\source\uCEFWindowDelegate.pas
Item_208=..\source\uCEFWindowParent.pas
Item_209=..\source\uCEFWorkScheduler.pas
Item_210=..\source\uCEFWorkSchedulerQueueThread.pas
Item_211=..\source\uCEFWorkSchedulerThread.pas
Item_212=..\source\uCEFWriteHandler.pas
Item_213=..\source\uCEFX509Certificate.pas
Item_214=..\source\uCEFX509CertPrincipal.pas
Item_215=..\source\uCEFXmlReader.pas
Item_216=..\source\uCEFZipReader.pas
[AdditionalFiles]
Count=0

View File

@ -21,7 +21,7 @@
</CompilerOptions>
<Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/>
<License Value="MPL 1.1"/>
<Version Major="117" Minor="1" Release="4"/>
<Version Major="117" Minor="1" Release="5"/>
<Files Count="214">
<Item1>
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>

View File

@ -20,12 +20,38 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFLayout;
type
/// <summary>
/// A Layout manager that arranges child views vertically or horizontally in a
/// side-by-side fashion with spacing around and between the child views. The
/// child views are always sized according to their preferred size. If the
/// host's bounds provide insufficient space, child views will be clamped.
/// Excess space will not be distributed. Methods must be called on the browser
/// process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see cref="uCEFTypes|TCefBoxLayout">Implements TCefBoxLayout</see></para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_box_layout_capi.h">CEF source file: /include/capi/views/cef_box_layout_capi.h (cef_box_layout_t)</see></para>
/// </remarks>
TCefBoxLayoutRef = class(TCefLayoutRef, ICefBoxLayout)
protected
/// <summary>
/// Set the flex weight for the given |view|. Using the preferred size as the
/// basis, free space along the main axis is distributed to views in the ratio
/// of their flex weights. Similarly, if the views will overflow the parent,
/// space is subtracted in these ratios. A flex of 0 means this view is not
/// resized. Flex values must not be negative.
/// </summary>
procedure SetFlexForView(const view: ICefView; flex: Integer);
/// <summary>
/// Clears the flex for the given |view|, causing it to use the default flex
/// specified via TCefBoxLayoutSettings.default_flex.
/// </summary>
procedure ClearFlexForView(const view: ICefView);
public
/// <summary>
/// Returns a ICefBoxLayout instance using a PCefBoxLayout data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefBoxLayout;
end;

View File

@ -20,15 +20,56 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView;
type
/// <summary>
/// A View hosting a ICefBrowser instance. Methods must be called on the
/// browser process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_browser_view_capi.h">CEF source file: /include/capi/views/cef_browser_view_capi.h (cef_browser_view_t)</see></para>
/// </remarks>
TCefBrowserViewRef = class(TCefViewRef, ICefBrowserView)
protected
/// <summary>
/// Returns the ICefBrowser hosted by this BrowserView. Will return NULL if
/// the browser has not yet been created or has already been destroyed.
/// </summary>
function GetBrowser : ICefBrowser;
/// <summary>
/// Returns the Chrome toolbar associated with this BrowserView. Only
/// supported when using the Chrome runtime. The ICefBrowserViewDelegate.GetChromeToolbarType
/// function must return a value other than
/// CEF_CTT_NONE and the toolbar will not be available until after this
/// BrowserView is added to a ICefWindow and
/// ICefViewDelegate.OnWindowChanged() has been called.
/// </summary>
function GetChromeToolbar : ICefView;
/// <summary>
/// Sets whether accelerators registered with ICefWindow.SetAccelerator are
/// triggered before or after the event is sent to the ICefBrowser. If
/// |prefer_accelerators| is true (1) then the matching accelerator will be
/// triggered immediately and the event will not be sent to the ICefBrowser.
/// If |prefer_accelerators| is false (0) then the matching accelerator will
/// only be triggered if the event is not handled by web content or by
/// ICefKeyboardHandler. The default value is false (0).
/// </summary>
procedure SetPreferAccelerators(prefer_accelerators: boolean);
public
/// <summary>
/// Returns a ICefBrowserView instance using a PCefBrowserView data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefBrowserView;
/// <summary>
/// Create a new BrowserView. The underlying cef_browser_t will not be created
/// until this view is added to the views hierarchy. The optional |extra_info|
/// parameter provides an opportunity to specify extra information specific to
/// the created browser that will be passed to
/// cef_render_process_handler_t::on_browser_created() in the render process.
/// </summary>
class function CreateBrowserView(const client: ICefClient; const url: ustring; const settings: TCefBrowserSettings; const extra_info: ICefDictionaryValue; const request_context: ICefRequestContext; const delegate: ICefBrowserViewDelegate): ICefBrowserView;
/// <summary>
/// Returns the BrowserView associated with |browser|.
/// </summary>
class function GetForBrowser(const browser: ICefBrowser): ICefBrowserView;
end;

View File

@ -31,25 +31,86 @@ type
procedure OnGestureCommand(const browser_view: ICefBrowserView; gesture_command: TCefGestureCommand; var aResult : boolean);
public
/// <summary>
/// Returns a ICefBrowserViewDelegate instance using a PCefBrowserViewDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefBrowserViewDelegate;
end;
/// <summary>
/// Implement this interface to handle BrowserView events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_browser_view_delegate_capi.h">CEF source file: /include/capi/views/cef_browser_view_delegate_capi.h (cef_browser_view_delegate_t)</see></para>
/// </remarks>
TCefBrowserViewDelegateOwn = class(TCefViewDelegateOwn, ICefBrowserViewDelegate)
protected
/// <summary>
/// Called when |browser| associated with |browser_view| is created. This
/// function will be called after ICefLifeSpanHandler.OnAfterCreated()
/// is called for |browser| and before OnPopupBrowserViewCreated() is
/// called for |browser|'s parent delegate if |browser| is a popup.
/// </summary>
procedure OnBrowserCreated(const browser_view: ICefBrowserView; const browser: ICefBrowser); virtual;
/// <summary>
/// Called when |browser| associated with |browser_view| is destroyed. Release
/// all references to |browser| and do not attempt to execute any functions on
/// |browser| after this callback returns. This function will be called before
/// ICefLifeSpanHandler.OnBeforeClose() is called for |browser|.
/// </summary>
procedure OnBrowserDestroyed(const browser_view: ICefBrowserView; const browser: ICefBrowser); virtual;
/// <summary>
/// Called before a new popup BrowserView is created. The popup originated
/// from |browser_view|. |settings| and |client| are the values returned from
/// ICefLifeSpanHandler.OnBeforePopup(). |is_devtools| will be true (1)
/// if the popup will be a DevTools browser. Return the delegate that will be
/// used for the new popup BrowserView.
/// </summary>
procedure OnGetDelegateForPopupBrowserView(const browser_view: ICefBrowserView; const settings: TCefBrowserSettings; const client: ICefClient; is_devtools: boolean; var aResult : ICefBrowserViewDelegate); virtual;
/// <summary>
/// Called after |popup_browser_view| is created. This function will be called
/// after ICefLifeSpanHandler.OnAfterCreated() and OnBrowserCreated()
/// are called for the new popup browser. The popup originated from
/// |browser_view|. |is_devtools| will be true (1) if the popup is a DevTools
/// browser. Optionally add |popup_browser_view| to the views hierarchy
/// yourself and return true (1). Otherwise return false (0) and a default
/// ICefWindow will be created for the popup.
/// </summary>
procedure OnPopupBrowserViewCreated(const browser_view, popup_browser_view: ICefBrowserView; is_devtools: boolean; var aResult : boolean); virtual;
procedure OnGetChromeToolbarType(const browser_view: ICefBrowserView; var aResult: TCefChromeToolbarType); virtual;
/// <summary>
/// Returns the Chrome toolbar type that will be available via
/// ICefBrowserView.GetChromeToolbar(). See that function for related
/// documentation.
/// </summary>
procedure OnGetChromeToolbarType(const browser_view: ICefBrowserView; var aResult : TCefChromeToolbarType); virtual;
/// <summary>
/// Return true (1) to create frameless windows for Document picture-in-
/// picture popups. Content in frameless windows should specify draggable
/// regions using "-webkit-app-region: drag" CSS.
/// </summary>
procedure OnUseFramelessWindowForPictureInPicture(const browser_view: ICefBrowserView; var aResult: boolean); virtual;
/// <summary>
/// Called when |browser_view| receives a gesture command. Return true (1) to
/// handle (or disable) a |gesture_command| or false (0) to propagate the
/// gesture to the browser for default handling. With the Chrome runtime these
/// commands can also be handled via cef_command_handler_t::OnChromeCommand.
/// </summary>
procedure OnGestureCommand(const browser_view: ICefBrowserView; gesture_command: TCefGestureCommand; var aResult : boolean); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; override;
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the ICefBrowserViewDelegate methods which call the ICefBrowserViewDelegateEvents methods.
/// ICefBrowserViewDelegateEvents will be implemented by the control receiving the ICefBrowserViewDelegate events.
/// </summary>
TCustomBrowserViewDelegate = class(TCefBrowserViewDelegateOwn)
protected
FEvents : Pointer;

View File

@ -20,16 +20,47 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView;
type
/// <summary>
/// A View representing a button. Depending on the specific type, the button
/// could be implemented by a native control or custom rendered. Methods must be
/// called on the browser process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_button_capi.h">CEF source file: /include/capi/views/cef_button_capi.h (cef_button_t)</see></para>
/// </remarks>
TCefButtonRef = class(TCefViewRef, ICefButton)
protected
/// <summary>
/// Returns this Button as a LabelButton or NULL if this is not a LabelButton.
/// </summary>
function AsLabelButton : ICefLabelButton;
/// <summary>
/// Sets the current display state of the Button.
/// </summary>
procedure SetState(state_: TCefButtonState);
/// <summary>
/// Returns the current display state of the Button.
/// </summary>
function GetState : TCefButtonState;
/// <summary>
/// Sets the Button will use an ink drop effect for displaying state changes.
/// </summary>
procedure SetInkDropEnabled(enabled_: boolean);
/// <summary>
/// Sets the tooltip text that will be displayed when the user hovers the
/// mouse cursor over the Button.
/// </summary>
procedure SetTooltipText(const tooltip_text: ustring);
/// <summary>
/// Sets the accessible name that will be exposed to assistive technology
/// (AT).
/// </summary>
procedure SetAccessibleName(const name: ustring);
public
/// <summary>
/// Returns a ICefButton instance using a PCefButton data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefButton;
end;

View File

@ -47,15 +47,37 @@ type
procedure doOnButtonStateChanged(const button: ICefButton);
public
/// <summary>
/// Sets the Button will use an ink drop effect for displaying state changes.
/// </summary>
procedure SetInkDropEnabled(enabled_: boolean);
/// <summary>
/// Sets the tooltip text that will be displayed when the user hovers the
/// mouse cursor over the Button.
/// </summary>
procedure SetTooltipText(const tooltip_text: ustring);
/// <summary>
/// Sets the accessible name that will be exposed to assistive technology
/// (AT).
/// </summary>
procedure SetAccessibleName(const name_: ustring);
/// <summary>
/// Returns this Button as a LabelButton or NULL if this is not a LabelButton.
/// </summary>
property AsLabelButton : ICefLabelButton read GetAsLabelButton;
/// <summary>
/// Returns the current display state of the Button.
/// </summary>
property State : TCefButtonState read GetState write SetState;
published
/// <summary>
/// Called when |button| is pressed.
/// </summary>
property OnButtonPressed : TOnButtonPressedEvent read FOnButtonPressed write FOnButtonPressed;
/// <summary>
/// Called when the state of |button| changes.
/// </summary>
property OnButtonStateChanged : TOnButtonStateChangedEvent read FOnButtonStateChanged write FOnButtonStateChanged;
end;

View File

@ -26,19 +26,42 @@ type
procedure OnButtonStateChanged(const button: ICefButton);
public
/// <summary>
/// Returns a ICefButtonDelegate instance using a PCefButtonDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefButtonDelegate;
end;
/// <summary>
/// Implement this interface to handle Button events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_button_delegate_capi.h">CEF source file: /include/capi/views/cef_button_delegate_capi.h (cef_button_delegate_t)</see></para>
/// </remarks>
TCefButtonDelegateOwn = class(TCefViewDelegateOwn, ICefButtonDelegate)
protected
/// <summary>
/// Called when |button| is pressed.
/// </summary>
procedure OnButtonPressed(const button: ICefButton); virtual;
/// <summary>
/// Called when the state of |button| changes.
/// </summary>
procedure OnButtonStateChanged(const button: ICefButton); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; override;
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the ICefButtonDelegate methods which call the ICefButtonDelegateEvents methods.
/// ICefButtonDelegateEvents will be implemented by the control receiving the ICefButtonDelegate events.
/// </summary>
TCustomButtonDelegate = class(TCefButtonDelegateOwn)
protected
FEvents : Pointer;
@ -60,6 +83,9 @@ type
procedure OnButtonStateChanged(const button: ICefButton); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefButtonDelegateEvents); reintroduce;
end;

View File

@ -20,26 +20,104 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
/// <summary>
/// This class typically, but not always, corresponds to a physical display
/// connected to the system. A fake Display may exist on a headless system, or a
/// Display may correspond to a remote, virtual display. All size and position
/// values are in density independent pixel (DIP) coordinates unless otherwise
/// indicated. Methods must be called on the browser process UI thread unless
/// otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_display_capi.h">CEF source file: /include/capi/views/cef_display_capi.h (cef_display_t)</see></para>
/// </remarks>
TCefDisplayRef = class(TCefBaseRefCountedRef, ICefDisplay)
protected
/// <summary>
/// Returns the unique identifier for this Display.
/// </summary>
function GetID : int64;
/// <summary>
/// Returns this Display's device pixel scale factor. This specifies how much
/// the UI should be scaled when the actual output has more pixels than
/// standard displays (which is around 100~120dpi). The potential return
/// values differ by platform.
/// </summary>
function GetDeviceScaleFactor : Single;
/// <summary>
/// Convert |point| from DIP coordinates to pixel coordinates using this
/// Display's device scale factor.
/// </summary>
procedure ConvertPointToPixels(var point: TCefPoint);
/// <summary>
/// Convert |point| from pixel coordinates to DIP coordinates using this
/// Display's device scale factor.
/// </summary>
procedure ConvertPointFromPixels(var point: TCefPoint);
/// <summary>
/// Returns this Display's bounds in DIP screen coordinates. This is the full
/// size of the display.
/// </summary>
function GetBounds : TCefRect;
/// <summary>
/// Returns this Display's work area in DIP screen coordinates. This excludes
/// areas of the display that are occupied with window manager toolbars, etc.
/// </summary>
function GetWorkArea : TCefRect;
/// <summary>
/// Returns this Display's rotation in degrees.
/// </summary>
function GetRotation : Integer;
public
/// <summary>
/// Returns a ICefDisplay instance using a PCefDisplay data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefDisplay;
/// <summary>
/// Returns the primary Display.
/// </summary>
class function Primary: ICefDisplay;
/// <summary>
/// Returns the Display nearest |point|. Set |input_pixel_coords| to true (1) if
/// |point| is in pixel screen coordinates instead of DIP screen coordinates.
/// </summary>
class function NearestPoint(const point: TCefPoint; input_pixel_coords: boolean): ICefDisplay;
/// <summary>
/// Returns the Display that most closely intersects |bounds|. Set
/// |input_pixel_coords| to true (1) if |bounds| is in pixel screen coordinates
/// instead of DIP screen coordinates.
/// </summary>
class function MatchingBounds(const bounds: TCefRect; input_pixel_coords: boolean): ICefDisplay;
/// <summary>
/// Returns the total number of Displays. Mirrored displays are excluded; this
/// function is intended to return the number of distinct, usable displays.
/// </summary>
class function GetCount: NativeUInt;
/// <summary>
/// Returns all Displays. Mirrored displays are excluded; this function is
/// intended to return distinct, usable displays.
/// </summary>
class function GetAlls(var aDisplayArray : TCefDisplayArray) : boolean;
/// <summary>
/// Convert |point| from DIP screen coordinates to pixel screen coordinates.
/// This function is only used on Windows.
/// </summary>
class function ScreenPointToPixels(const aScreenPoint : TPoint) : TPoint;
/// <summary>
/// Convert |point| from pixel screen coordinates to DIP screen coordinates.
/// This function is only used on Windows.
/// </summary>
class function ScreenPointFromPixels(const aPixelsPoint : TPoint) : TPoint;
/// <summary>
/// Convert |rect| from DIP screen coordinates to pixel screen coordinates. This
/// function is only used on Windows.
/// </summary>
class function ScreenRectToPixels(const aScreenRect : TRect) : TRect;
/// <summary>
/// Convert |rect| from pixel screen coordinates to DIP screen coordinates. This
/// function is only used on Windows.
/// </summary>
class function ScreenRectFromPixels(const aPixelsRect : TRect) : TRect;
end;

View File

@ -20,8 +20,19 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFLayout;
type
/// <summary>
/// A simple Layout that causes the associated Panel's one child to be sized to
/// match the bounds of its parent. Methods must be called on the browser
/// process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_fill_layout_capi.h">CEF source file: /include/capi/views/cef_fill_layout_capi.h (cef_fill_layout_t)</see></para>
/// </remarks>
TCefFillLayoutRef = class(TCefLayoutRef, ICefFillLayout)
public
/// <summary>
/// Returns a ICefFillLayout instance using a PCefFillLayout data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefFillLayout;
end;

View File

@ -20,22 +20,84 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFButton;
type
/// <summary>
/// LabelButton is a button with optional text and/or icon. Methods must be
/// called on the browser process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_label_button_capi.h">CEF source file: /include/capi/views/cef_label_button_capi.h (cef_label_button_t)</see></para>
/// </remarks>
TCefLabelButtonRef = class(TCefButtonRef, ICefLabelButton)
protected
/// <summary>
/// Returns this LabelButton as a MenuButton or NULL if this is not a
/// MenuButton.
/// </summary>
function AsMenuButton : ICefMenuButton;
/// <summary>
/// Sets the text shown on the LabelButton. By default |text| will also be
/// used as the accessible name.
/// </summary>
procedure SetText(const text_: ustring);
/// <summary>
/// Returns the text shown on the LabelButton.
/// </summary>
function GetText : ustring;
/// <summary>
/// Sets the image shown for |button_state|. When this Button is drawn if no
/// image exists for the current state then the image for
/// CEF_BUTTON_STATE_NORMAL, if any, will be shown.
/// </summary>
procedure SetImage(button_state: TCefButtonState; const image: ICefImage);
/// <summary>
/// Returns the image shown for |button_state|. If no image exists for that
/// state then the image for CEF_BUTTON_STATE_NORMAL will be returned.
/// </summary>
function GetImage(button_state: TCefButtonState): ICefImage;
/// <summary>
/// Sets the text color shown for the specified button |for_state| to |color|.
/// </summary>
procedure SetTextColor(for_state: TCefButtonState; color: TCefColor);
/// <summary>
/// Sets the text colors shown for the non-disabled states to |color|.
/// </summary>
procedure SetEnabledTextColors(color: TCefColor);
/// <summary>
/// Sets the font list. The format is "<FONT_FAMILY_LIST>,[STYLES] <SIZE>",
/// where: - FONT_FAMILY_LIST is a comma-separated list of font family names,
/// - STYLES is an optional space-separated list of style names (case-
/// sensitive
/// "Bold" and "Italic" are supported), and
/// - SIZE is an integer font size in pixels with the suffix "px".
///
/// Here are examples of valid font description strings: - "Arial, Helvetica,
/// Bold Italic 14px" - "Arial, 14px"
/// </summary>
procedure SetFontList(const font_list: ustring);
/// <summary>
/// Sets the horizontal alignment; reversed in RTL. Default is
/// CEF_HORIZONTAL_ALIGNMENT_CENTER.
/// </summary>
procedure SetHorizontalAlignment(alignment: TCefHorizontalAlignment);
/// <summary>
/// Reset the minimum size of this LabelButton to |size|.
/// </summary>
procedure SetMinimumSize(const size_: TCefSize);
/// <summary>
/// Reset the maximum size of this LabelButton to |size|.
/// </summary>
procedure SetMaximumSize(const size_: TCefSize);
public
/// <summary>
/// Returns a ICefLabelButton instance using a PCefLabelButton data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefLabelButton;
/// <summary>
/// Create a new LabelButton. A |delegate| must be provided to handle the button
/// click. |text| will be shown on the LabelButton and used as the default
/// accessible name.
/// </summary>
class function CreateLabelButton(const delegate: ICefButtonDelegate; const text: ustring): ICefLabelButton;
end;

View File

@ -47,16 +47,62 @@ type
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new LabelButton. |aText| will be shown on the LabelButton and used as the default
/// accessible name.
/// </summary>
procedure CreateLabelButton(const aText : ustring);
/// <summary>
/// Sets the text color shown for the specified button |for_state| to |color|.
/// </summary>
procedure SetTextColor(for_state: TCefButtonState; color: TCefColor);
/// <summary>
/// Sets the text colors shown for the non-disabled states to |color|.
/// </summary>
procedure SetEnabledTextColors(color: TCefColor);
/// <summary>
/// <para>Sets the font list. The format is "<FONT_FAMILY_LIST>,[STYLES] <SIZE>",
/// where:</para>
/// <code>
/// - FONT_FAMILY_LIST is a comma-separated list of font family names,
/// - STYLES is an optional space-separated list of style names (case-sensitive
/// "Bold" and "Italic" are supported), and
/// - SIZE is an integer font size in pixels with the suffix "px".
/// </code>
/// <para>Here are examples of valid font description strings:</para>
/// <code>
/// - "Arial, Helvetica, Bold Italic 14px"
/// - "Arial, 14px"
/// </code>
/// </summary>
procedure SetFontList(const font_list: ustring);
/// <summary>
/// Sets the horizontal alignment; reversed in RTL. Default is
/// CEF_HORIZONTAL_ALIGNMENT_CENTER.
/// </summary>
procedure SetHorizontalAlignment(alignment: TCefHorizontalAlignment);
/// <summary>
/// Reset the minimum size of this LabelButton to |size|.
/// </summary>
procedure SetMinimumSize(const size_: TCefSize);
/// <summary>
/// Reset the maximum size of this LabelButton to |size|.
/// </summary>
procedure SetMaximumSize(const size_: TCefSize);
/// <summary>
/// Gets and sets the text shown on the LabelButton. By default |text| will also be
/// used as the accessible name.
/// </summary>
property Text : ustring read GetText write SetText;
/// <summary>
/// Returns the image shown for |button_state|. If no image exists for that
/// state then the image for CEF_BUTTON_STATE_NORMAL will be returned.
/// </summary>
property Image[button_state : TCefButtonState] : ICefImage read GetImage write SetImage;
/// <summary>
/// Returns this LabelButton as a MenuButton or NULL if this is not a
/// MenuButton.
/// </summary>
property AsMenuButton : ICefMenuButton read GetAsMenuButton;
end;

View File

@ -20,13 +20,33 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
/// <summary>
/// A Layout handles the sizing of the children of a Panel according to
/// implementation-specific heuristics. Methods must be called on the browser
/// process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_layout_capi.h">CEF source file: /include/capi/views/cef_layout_capi.h (cef_layout_t)</see></para>
/// </remarks>
TCefLayoutRef = class(TCefBaseRefCountedRef, ICefLayout)
protected
/// <summary>
/// Returns this Layout as a BoxLayout or NULL if this is not a BoxLayout.
/// </summary>
function AsBoxLayout : ICefBoxLayout;
/// <summary>
/// Returns this Layout as a FillLayout or NULL if this is not a FillLayout.
/// </summary>
function AsFillLayout : ICefFillLayout;
/// <summary>
/// Returns true (1) if this Layout is valid.
/// </summary>
function IsValid : boolean;
public
/// <summary>
/// Returns a ICefLayout instance using a PCefLayout data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefLayout;
end;

View File

@ -20,13 +20,45 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFLabelButton;
type
/// <summary>
/// MenuButton is a button with optional text, icon and/or menu marker that
/// shows a menu when clicked with the left mouse button. All size and position
/// values are in density independent pixels (DIP) unless otherwise indicated.
/// Methods must be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_menu_button_capi.h">CEF source file: /include/capi/views/cef_menu_button_capi.h (cef_menu_button_t)</see></para>
/// </remarks>
TCefMenuButtonRef = class(TCefLabelButtonRef, ICefMenuButton)
protected
/// <summary>
/// Show a menu with contents |menu_model|. |screen_point| specifies the menu
/// position in screen coordinates. |anchor_position| specifies how the menu
/// will be anchored relative to |screen_point|. This function should be
/// called from ICefMenuButtonDelegate.OnMenuButtonPressed().
/// </summary>
procedure ShowMenu(const menu_model: ICefMenuModel; const screen_point: TCefPoint; anchor_position: TCefMenuAnchorPosition);
/// <summary>
/// Show the menu for this button. Results in a call to
/// ICefMenuButtonDelegate.OnMenuButtonPressed().
/// </summary>
procedure TriggerMenu;
public
/// <summary>
/// Returns a ICefMenuButton instance using a PCefMenuButton data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefMenuButton;
/// <summary>
/// Create a new MenuButton. A |delegate| must be provided to call show_menu()
/// when the button is clicked. |text| will be shown on the MenuButton and used
/// as the default accessible name. If |with_frame| is true (1) the button will
/// have a visible frame at all times, center alignment, additional padding and
/// a default minimum size of 70x33 DIP. If |with_frame| is false (0) the button
/// will only have a visible frame on hover/press, left alignment, less padding
/// and no default minimum size.
/// </summary>
class function CreateMenuButton(const delegate: ICefMenuButtonDelegate; const text: ustring): ICefMenuButton;
end;

View File

@ -47,11 +47,30 @@ type
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new MenuButton.
/// </summary>
procedure CreateMenuButton(const aText : ustring);
/// <summary>
/// Show a menu with contents |menu_model|. |screen_point| specifies the menu
/// position in screen coordinates. |anchor_position| specifies how the menu
/// will be anchored relative to |screen_point|. This function should be
/// called from ICefMenuButtonDelegate.OnMenuButtonPressed().
/// </summary>
procedure ShowMenu(const menu_model: ICefMenuModel; const screen_point: TCefPoint; anchor_position: TCefMenuAnchorPosition);
/// <summary>
/// Show the menu for this button. Results in a call to
/// ICefMenuButtonDelegate.OnMenuButtonPressed().
/// </summary>
procedure TriggerMenu;
published
/// <summary>
/// Called when |button| is pressed. Call ICefMenuButton.ShowMenu() to
/// show a popup menu at |screen_point|. When showing a custom popup such as a
/// window keep a reference to |button_pressed_lock| until the popup is hidden
/// to maintain the pressed button state.
/// </summary>
property OnMenuButtonPressed : TOnMenuButtonPressedEvent read FOnMenuButtonPressed write FOnMenuButtonPressed;
end;

View File

@ -25,18 +25,41 @@ type
procedure OnMenuButtonPressed(const menu_button: ICefMenuButton; const screen_point: TCefPoint; const button_pressed_lock: ICefMenuButtonPressedLock);
public
/// <summary>
/// Returns a ICefMenuButtonDelegate instance using a PCefMenuButtonDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefMenuButtonDelegate;
end;
/// <summary>
/// Implement this interface to handle MenuButton events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_menu_button_delegate_capi.h">CEF source file: /include/capi/views/cef_menu_button_delegate_capi.h (cef_menu_button_delegate_t)</see></para>
/// </remarks>
TCefMenuButtonDelegateOwn = class(TCefButtonDelegateOwn, ICefMenuButtonDelegate)
protected
/// <summary>
/// Called when |button| is pressed. Call ICefMenuButton.ShowMenu() to
/// show a popup menu at |screen_point|. When showing a custom popup such as a
/// window keep a reference to |button_pressed_lock| until the popup is hidden
/// to maintain the pressed button state.
/// </summary>
procedure OnMenuButtonPressed(const menu_button: ICefMenuButton; const screen_point: TCefPoint; const button_pressed_lock: ICefMenuButtonPressedLock); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; override;
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the ICefMenuButtonDelegate methods which call the ICefMenuButtonDelegateEvents methods.
/// ICefMenuButtonDelegateEvents will be implemented by the control receiving the ICefMenuButtonDelegate events.
/// </summary>
TCustomMenuButtonDelegate = class(TCefMenuButtonDelegateOwn)
protected
FEvents : Pointer;
@ -61,6 +84,9 @@ type
procedure OnMenuButtonPressed(const menu_button: ICefMenuButton; const screen_point: TCefPoint; const button_pressed_lock: ICefMenuButtonPressedLock); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefMenuButtonDelegateEvents); reintroduce;
end;

View File

@ -20,8 +20,17 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
/// <summary>
/// MenuButton pressed lock is released when this object is destroyed.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_menu_button_delegate_capi.h">CEF source file: /include/capi/views/cef_menu_button_delegate_capi.h (cef_menu_button_pressed_lock_t)</see></para>
/// </remarks>
TCefMenuButtonPressedLockRef = class(TCefBaseRefCountedRef, ICefMenuButtonPressedLock)
public
/// <summary>
/// Returns a ICefMenuButtonPressedLock instance using a PCefMenuButtonPressedLock data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefMenuButtonPressedLock;
end;

View File

@ -20,28 +20,137 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
/// <summary>
/// Controller for an overlay that contains a contents View added via
/// ICefWindow.AddOverlayView. Methods exposed by this controller should be
/// called in preference to functions of the same name exposed by the contents
/// View unless otherwise indicated. Methods must be called on the browser
/// process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_overlay_controller_capi.h">CEF source file: /include/capi/views/cef_overlay_controller_capi.h (cef_overlay_controller_t)</see></para>
/// </remarks>
TCefOverlayControllerRef = class(TCefBaseRefCountedRef, ICefOverlayController)
public
/// <summary>
/// Returns true (1) if this object is valid.
/// </summary>
function IsValid: boolean;
/// <summary>
/// Returns true (1) if this object is the same as |that| object.
/// </summary>
function IsSame(const that: ICefOverlayController): boolean;
/// <summary>
/// Returns the contents View for this overlay.
/// </summary>
function GetContentsView: ICefView;
/// <summary>
/// Returns the top-level Window hosting this overlay. Use this function
/// instead of calling get_window() on the contents View.
/// </summary>
function GetWindow: ICefWindow;
/// <summary>
/// Returns the docking mode for this overlay.
/// </summary>
function GetDockingMode: TCefDockingMode;
/// <summary>
/// Destroy this overlay.
/// </summary>
procedure DestroyOverlay;
/// <summary>
/// Sets the bounds (size and position) of this overlay. This will set the
/// bounds of the contents View to match and trigger a re-layout if necessary.
/// |bounds| is in parent coordinates and any insets configured on this
/// overlay will be ignored. Use this function only for overlays created with
/// a docking mode value of CEF_DOCKING_MODE_CUSTOM. With other docking modes
/// modify the insets of this overlay and/or layout of the contents View and
/// call size_to_preferred_size() instead to calculate the new size and re-
/// position the overlay if necessary.
/// </summary>
procedure SetBounds(const bounds: TCefRect);
/// <summary>
/// Returns the bounds (size and position) of this overlay in parent
/// coordinates.
/// </summary>
function GetBounds: TCefRect;
/// <summary>
/// Returns the bounds (size and position) of this overlay in DIP screen
/// coordinates.
/// </summary>
function GetBoundsInScreen: TCefRect;
/// <summary>
/// Sets the size of this overlay without changing the position. This will set
/// the size of the contents View to match and trigger a re-layout if
/// necessary. |size| is in parent coordinates and any insets configured on
/// this overlay will be ignored. Use this function only for overlays created
/// with a docking mode value of CEF_DOCKING_MODE_CUSTOM. With other docking
/// modes modify the insets of this overlay and/or layout of the contents View
/// and call size_to_preferred_size() instead to calculate the new size and
/// re-position the overlay if necessary.
/// </summary>
procedure SetSize(const size: TCefSize);
/// <summary>
/// Returns the size of this overlay in parent coordinates.
/// </summary>
function GetSize: TCefSize;
/// <summary>
/// Sets the position of this overlay without changing the size. |position| is
/// in parent coordinates and any insets configured on this overlay will be
/// ignored. Use this function only for overlays created with a docking mode
/// value of CEF_DOCKING_MODE_CUSTOM. With other docking modes modify the
/// insets of this overlay and/or layout of the contents View and call
/// size_to_preferred_size() instead to calculate the new size and re-position
/// the overlay if necessary.
/// </summary>
procedure SetPosition(const position: TCefPoint);
/// <summary>
/// Returns the position of this overlay in parent coordinates.
/// </summary>
function GetPosition: TCefPoint;
/// <summary>
/// Sets the insets for this overlay. |insets| is in parent coordinates. Use
/// this function only for overlays created with a docking mode value other
/// than CEF_DOCKING_MODE_CUSTOM.
/// </summary>
procedure SetInsets(const insets: TCefInsets);
/// <summary>
/// Returns the insets for this overlay in parent coordinates.
/// </summary>
function GetInsets: TCefInsets;
/// <summary>
/// Size this overlay to its preferred size and trigger a re-layout if
/// necessary. The position of overlays created with a docking mode value of
/// CEF_DOCKING_MODE_CUSTOM will not be modified by calling this function.
/// With other docking modes this function may re-position the overlay if
/// necessary to accommodate the new size and any insets configured on the
/// contents View.
/// </summary>
procedure SizeToPreferredSize;
/// <summary>
/// Sets whether this overlay is visible. Overlays are hidden by default. If
/// this overlay is hidden then it and any child Views will not be drawn and,
/// if any of those Views currently have focus, then focus will also be
/// cleared. Painting is scheduled as needed.
/// </summary>
procedure SetVisible(visible: boolean);
/// <summary>
/// Returns whether this overlay is visible. A View may be visible but still
/// not drawn in a Window if any parent Views are hidden. Call is_drawn() to
/// determine whether this overlay and all parent Views are visible and will
/// be drawn.
/// </summary>
function IsVisible: boolean;
/// <summary>
/// Returns whether this overlay is visible and drawn in a Window. A View is
/// drawn if it and all parent Views are visible. To determine if the
/// containing Window is visible to the user on-screen call is_visible() on
/// the Window.
/// </summary>
function IsDrawn: boolean;
/// <summary>
/// Returns a ICefOverlayController instance using a PCefOverlayController data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefOverlayController;
end;

View File

@ -20,23 +20,77 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView;
type
/// <summary>
/// A Panel is a container in the views hierarchy that can contain other Views
/// as children. Methods must be called on the browser process UI thread unless
/// otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_panel_capi.h">CEF source file: /include/capi/views/cef_panel_capi.h (cef_panel_t)</see></para>
/// </remarks>
TCefPanelRef = class(TCefViewRef, ICefPanel)
protected
/// <summary>
/// Returns this Panel as a Window or NULL if this is not a Window.
/// </summary>
function GetAsWindow : ICefWindow;
/// <summary>
/// Set this Panel's Layout to FillLayout and return the FillLayout object.
/// </summary>
function SetToFillLayout : ICefFillLayout;
/// <summary>
/// Set this Panel's Layout to BoxLayout and return the BoxLayout object.
/// </summary>
function SetToBoxLayout(const settings: TCefBoxLayoutSettings): ICefBoxLayout;
/// <summary>
/// Get the Layout.
/// </summary>
function GetLayout : ICefLayout;
/// <summary>
/// Lay out the child Views (set their bounds based on sizing heuristics
/// specific to the current Layout).
/// </summary>
procedure Layout;
/// <summary>
/// Add a child View.
/// </summary>
procedure AddChildView(const view: ICefView);
/// <summary>
/// Add a child View at the specified |index|. If |index| matches the result
/// of GetChildCount() then the View will be added at the end.
/// </summary>
procedure AddChildViewAt(const view: ICefView; index: Integer);
/// <summary>
/// Move the child View to the specified |index|. A negative value for |index|
/// will move the View to the end.
/// </summary>
procedure ReorderChildView(const view: ICefView; index: Integer);
/// <summary>
/// Remove a child View. The View can then be added to another Panel.
/// </summary>
procedure RemoveChildView(const view: ICefView);
/// <summary>
/// Remove all child Views. The removed Views will be deleted if the client
/// holds no references to them.
/// </summary>
procedure RemoveAllChildViews;
/// <summary>
/// Returns the number of child Views.
/// </summary>
function GetChildViewCount : NativeUInt;
/// <summary>
/// Returns the child View at the specified |index|.
/// </summary>
function GetChildViewAt(index: Integer): ICefView;
public
/// <summary>
/// Returns a ICefPanel instance using a PCefPanel data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefPanel;
/// <summary>
/// Create a new Panel.
/// </summary>
class function CreatePanel(const delegate: ICefPanelDelegate): ICefPanel;
end;

View File

@ -35,25 +35,68 @@ type
function GetAsView : ICefView; override;
function GetAsPanel : ICefPanel; override;
function GetAsWindow : ICefWindow; virtual;
function GetChildViewCount : NativeUInt;
// ICefViewDelegateEvents
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new Panel.
/// </summary>
procedure CreatePanel;
/// <summary>
/// Set this Panel's Layout to FillLayout and return the FillLayout object.
/// </summary>
function SetToFillLayout : ICefFillLayout;
/// <summary>
/// Set this Panel's Layout to BoxLayout and return the BoxLayout object.
/// </summary>
function SetToBoxLayout(const settings: TCefBoxLayoutSettings): ICefBoxLayout;
/// <summary>
/// Get the Layout.
/// </summary>
function GetLayout : ICefLayout;
/// <summary>
/// Lay out the child Views (set their bounds based on sizing heuristics
/// specific to the current Layout).
/// </summary>
procedure Layout;
/// <summary>
/// Add a child View.
/// </summary>
procedure AddChildView(const view: ICefView);
/// <summary>
/// Add a child View at the specified |index|. If |index| matches the result
/// of GetChildCount() then the View will be added at the end.
/// </summary>
procedure AddChildViewAt(const view: ICefView; index: Integer);
/// <summary>
/// Move the child View to the specified |index|. A negative value for |index|
/// will move the View to the end.
/// </summary>
procedure ReorderChildView(const view: ICefView; index: Integer);
/// <summary>
/// Remove a child View. The View can then be added to another Panel.
/// </summary>
procedure RemoveChildView(const view: ICefView);
/// <summary>
/// Remove all child Views. The removed Views will be deleted if the client
/// holds no references to them.
/// </summary>
procedure RemoveAllChildViews;
function GetChildViewCount : NativeUInt;
/// <summary>
/// Returns the child View at the specified |index|.
/// </summary>
function GetChildViewAt(index: Integer): ICefView;
property AsWindow : ICefWindow read GetAsWindow;
/// <summary>
/// Returns this Panel as a Window or NULL if this is not a Window.
/// </summary>
property AsWindow : ICefWindow read GetAsWindow;
/// <summary>
/// Returns the number of child Views.
/// </summary>
property ChildViewCount : NativeUInt read GetChildViewCount;
end;
{$IFDEF FPC}

View File

@ -22,14 +22,29 @@ uses
type
TCefPanelDelegateRef = class(TCefViewDelegateRef, ICefPanelDelegate)
public
/// <summary>
/// Returns a ICefPanelDelegate instance using a PCefPanelDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefPanelDelegate;
end;
/// <summary>
/// Implement this interface to handle Panel events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_panel_delegate_capi.h">CEF source file: /include/capi/views/cef_panel_delegate_capi.h (cef_panel_delegate_t)</see></para>
/// </remarks>
TCefPanelDelegateOwn = class(TCefViewDelegateOwn, ICefPanelDelegate)
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the ICefPanelDelegate methods which call the ICefPanelDelegateEvents methods.
/// ICefPanelDelegateEvents will be implemented by the control receiving the ICefPanelDelegate events.
/// </summary>
TCustomPanelDelegate = class(TCefPanelDelegateOwn)
protected
FEvents : Pointer;
@ -47,6 +62,9 @@ type
procedure OnBlur(const view: ICefView); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefPanelDelegateEvents); reintroduce;
end;

View File

@ -20,18 +20,54 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView;
type
/// <summary>
/// A ScrollView will show horizontal and/or vertical scrollbars when necessary
/// based on the size of the attached content view. Methods must be called on
/// the browser process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_scroll_view_capi.h">CEF source file: /include/capi/views/cef_scroll_view_capi.h (cef_scroll_view_t)</see></para>
/// </remarks>
TCefScrollViewRef = class(TCefViewRef, ICefScrollView)
protected
/// <summary>
/// Set the content View. The content View must have a specified size (e.g.
/// via ICefView.SetBounds or ICefViewDelegate.GetPreferredSize).
/// </summary>
procedure SetContentView(const view: ICefView);
/// <summary>
/// Returns the content View.
/// </summary>
function GetContentView : ICefView;
/// <summary>
/// Returns the visible region of the content View.
/// </summary>
function GetVisibleContentRect : TCefRect;
/// <summary>
/// Returns true (1) if the horizontal scrollbar is currently showing.
/// </summary>
function HasHorizontalScrollbar : boolean;
/// <summary>
/// Returns the height of the horizontal scrollbar.
/// </summary>
function GetHorizontalScrollbarHeight : Integer;
/// <summary>
/// Returns true (1) if the vertical scrollbar is currently showing.
/// </summary>
function HasVerticalScrollbar : boolean;
/// <summary>
/// Returns the width of the vertical scrollbar.
/// </summary>
function GetVerticalScrollbarWidth : Integer;
public
/// <summary>
/// Returns a ICefScrollView instance using a PCefScrollView data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefScrollView;
/// <summary>
/// Create a new ScrollView.
/// </summary>
class function CreateScrollView(const delegate: ICefViewDelegate): ICefScrollView;
end;

View File

@ -47,13 +47,34 @@ type
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new ScrollView.
/// </summary>
procedure CreateScrollView;
/// <summary>
/// Get and set the content View. The content View must have a specified size (e.g.
/// via ICefView.SetBounds or ICefViewDelegate.GetPreferredSize).
/// </summary>
property ContentView : ICefView read GetContentView write SetContentView;
/// <summary>
/// Returns the visible region of the content View.
/// </summary>
property VisibleContentRect : TCefRect read GetVisibleContentRect;
/// <summary>
/// Returns the height of the horizontal scrollbar.
/// </summary>
property HorizontalScrollbarHeight : Integer read GetHorizontalScrollbarHeight;
/// <summary>
/// Returns the width of the vertical scrollbar.
/// </summary>
property VerticalScrollbarWidth : Integer read GetVerticalScrollbarWidth;
/// <summary>
/// Returns true (1) if the horizontal scrollbar is currently showing.
/// </summary>
property HasHorizontalScrollbar : boolean read GetHasHorizontalScrollbar;
/// <summary>
/// Returns true (1) if the vertical scrollbar is currently showing.
/// </summary>
property HasVerticalScrollbar : boolean read GetHasVerticalScrollbar;
end;

View File

@ -20,42 +20,168 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFView;
type
/// <summary>
/// A Textfield supports editing of text. This control is custom rendered with
/// no platform-specific code. Methods must be called on the browser process UI
/// thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_textfield_capi.h">CEF source file: /include/capi/views/cef_textfield_capi.h (cef_textfield_t)</see></para>
/// </remarks>
TCefTextfieldRef = class(TCefViewRef, ICefTextfield)
protected
/// <summary>
/// Sets whether the text will be displayed as asterisks.
/// </summary>
procedure SetPasswordInput(password_input: boolean);
/// <summary>
/// Returns true (1) if the text will be displayed as asterisks.
/// </summary>
function IsPasswordInput : boolean;
/// <summary>
/// Sets whether the text will read-only.
/// </summary>
procedure SetReadOnly(read_only: boolean);
/// <summary>
/// Returns true (1) if the text is read-only.
/// </summary>
function IsReadOnly : boolean;
/// <summary>
/// Returns the currently displayed text.
/// </summary>
function GetText : ustring;
/// <summary>
/// Sets the contents to |text|. The cursor will be moved to end of the text
/// if the current position is outside of the text range.
/// </summary>
procedure SetText(const text_: ustring);
/// <summary>
/// Appends |text| to the previously-existing text.
/// </summary>
procedure AppendText(const text_: ustring);
/// <summary>
/// Inserts |text| at the current cursor position replacing any selected text.
/// </summary>
procedure InsertOrReplaceText(const text_: ustring);
/// <summary>
/// Returns true (1) if there is any selected text.
/// </summary>
function HasSelection : boolean;
/// <summary>
/// Returns the currently selected text.
/// </summary>
function GetSelectedText : ustring;
/// <summary>
/// Selects all text. If |reversed| is true (1) the range will end at the
/// logical beginning of the text; this generally shows the leading portion of
/// text that overflows its display area.
/// </summary>
procedure SelectAll(reversed: boolean);
/// <summary>
/// Clears the text selection and sets the caret to the end.
/// </summary>
procedure ClearSelection;
/// <summary>
/// Returns the selected logical text range.
/// </summary>
function GetSelectedRange : TCefRange;
/// <summary>
/// Selects the specified logical text range.
/// </summary>
procedure SelectRange(const range: TCefRange);
/// <summary>
/// Returns the current cursor position.
/// </summary>
function GetCursorPosition : NativeUInt;
/// <summary>
/// Sets the text color.
/// </summary>
procedure SetTextColor(color: TCefColor);
/// <summary>
/// Returns the text color.
/// </summary>
function GetTextColor : TCefColor;
/// <summary>
/// Sets the selection text color.
/// </summary>
procedure SetSelectionTextColor(color: TCefColor);
/// <summary>
/// Returns the selection text color.
/// </summary>
function GetSelectionTextColor : TCefColor;
/// <summary>
/// Sets the selection background color.
/// </summary>
procedure SetSelectionBackgroundColor(color: TCefColor);
/// <summary>
/// Returns the selection background color.
/// </summary>
function GetSelectionBackgroundColor : TCefColor;
/// <summary>
/// Sets the font list. The format is "<FONT_FAMILY_LIST>,[STYLES] <SIZE>",
/// where: - FONT_FAMILY_LIST is a comma-separated list of font family names,
/// - STYLES is an optional space-separated list of style names (case-
/// sensitive
/// "Bold" and "Italic" are supported), and
/// - SIZE is an integer font size in pixels with the suffix "px".
///
/// Here are examples of valid font description strings: - "Arial, Helvetica,
/// Bold Italic 14px" - "Arial, 14px"
/// </summary>
procedure SetFontList(const font_list: ustring);
/// <summary>
/// Applies |color| to the specified |range| without changing the default
/// color. If |range| is NULL the color will be set on the complete text
/// contents.
/// </summary>
procedure ApplyTextColor(color: TCefColor; const range: TCefRange);
/// <summary>
/// Applies |style| to the specified |range| without changing the default
/// style. If |add| is true (1) the style will be added, otherwise the style
/// will be removed. If |range| is NULL the style will be set on the complete
/// text contents.
/// </summary>
procedure ApplyTextStyle(style: TCefTextStyle; add: boolean; const range: TCefRange);
/// <summary>
/// Returns true (1) if the action associated with the specified command id is
/// enabled. See additional comments on execute_command().
/// </summary>
function IsCommandEnabled(command_id: TCefTextFieldCommands): boolean;
/// <summary>
/// Performs the action associated with the specified command id.
/// </summary>
procedure ExecuteCommand(command_id: TCefTextFieldCommands);
/// <summary>
/// Clears Edit history.
/// </summary>
procedure ClearEditHistory;
/// <summary>
/// Sets the placeholder text that will be displayed when the Textfield is
/// NULL.
/// </summary>
procedure SetPlaceholderText(const text_: ustring);
/// <summary>
/// Returns the placeholder text that will be displayed when the Textfield is
/// NULL.
/// </summary>
function GetPlaceholderText : ustring;
/// <summary>
/// Sets the placeholder text color.
/// </summary>
procedure SetPlaceholderTextColor(color: TCefColor);
/// <summary>
/// Set the accessible name that will be exposed to assistive technology (AT).
/// </summary>
procedure SetAccessibleName(const name: ustring);
public
/// <summary>
/// Returns a ICefTextfield instance using a PCefTextfield data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefTextfield;
/// <summary>
/// Create a new Textfield.
/// </summary>
class function CreateTextField(const delegate: ICefTextfieldDelegate): ICefTextfield;
end;

View File

@ -57,6 +57,7 @@ type
procedure SetSelectionTextColor(color: TCefColor);
procedure SetSelectionBackgroundColor(color: TCefColor);
procedure SetPlaceholderText(const text_: ustring);
procedure SetSelectedRange(const range: TCefRange);
// ICefTextfieldDelegateEvents
procedure doOnKeyEvent(const textfield: ICefTextfield; const event: TCefKeyEvent; var aResult : boolean);
@ -66,33 +67,134 @@ type
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new Textfield.
/// </summary>
procedure CreateTextField;
/// <summary>
/// Appends |text| to the previously-existing text.
/// </summary>
procedure AppendText(const text_: ustring);
/// <summary>
/// Inserts |text| at the current cursor position replacing any selected text.
/// </summary>
procedure InsertOrReplaceText(const text_: ustring);
/// <summary>
/// Selects all text. If |reversed| is true (1) the range will end at the
/// logical beginning of the text; this generally shows the leading portion of
/// text that overflows its display area.
/// </summary>
procedure SelectAll(reversed: boolean);
/// <summary>
/// Clears the text selection and sets the caret to the end.
/// </summary>
procedure ClearSelection;
procedure SelectRange(const range: TCefRange);
/// <summary>
/// <para>Sets the font list. The format is "<FONT_FAMILY_LIST>,[STYLES] <SIZE>",
/// where:</para>
/// <code>
/// - FONT_FAMILY_LIST is a comma-separated list of font family names,
/// - STYLES is an optional space-separated list of style names (case-sensitive
/// "Bold" and "Italic" are supported), and
/// - SIZE is an integer font size in pixels with the suffix "px".
/// </code>
/// <para>Here are examples of valid font description strings:</para>
/// <code>
/// - "Arial, Helvetica, Bold Italic 14px"
/// - "Arial, 14px"
/// </code>
/// </summary>
procedure SetFontList(const font_list: ustring);
/// <summary>
/// Applies |color| to the specified |range| without changing the default
/// color. If |range| is NULL the color will be set on the complete text
/// contents.
/// </summary>
procedure ApplyTextColor(color: TCefColor; const range: TCefRange);
/// <summary>
/// Applies |style| to the specified |range| without changing the default
/// style. If |add| is true (1) the style will be added, otherwise the style
/// will be removed. If |range| is NULL the style will be set on the complete
/// text contents.
/// </summary>
procedure ApplyTextStyle(style: TCefTextStyle; add: boolean; const range: TCefRange);
/// <summary>
/// Returns true (1) if the action associated with the specified command id is
/// enabled. See additional comments on execute_command().
/// </summary>
function IsCommandEnabled(command_id: TCefTextFieldCommands): boolean;
/// <summary>
/// Performs the action associated with the specified command id.
/// </summary>
procedure ExecuteCommand(command_id: TCefTextFieldCommands);
/// <summary>
/// Clears Edit history.
/// </summary>
procedure ClearEditHistory;
/// <summary>
/// Set the accessible name that will be exposed to assistive technology (AT).
/// </summary>
procedure SetAccessibleName(const name_: ustring);
/// <summary>
/// Sets the placeholder text color.
/// </summary>
procedure SetPlaceholderTextColor(color: TCefColor);
/// <summary>
/// Returns true (1) if the text will be displayed as asterisks.
/// </summary>
property PasswordInput : boolean read GetIsPasswordInput write SetPasswordInput;
/// <summary>
/// Returns true (1) if the text is read-only.
/// </summary>
property ReadOnly : boolean read GetIsReadOnly write SetReadOnly;
/// <summary>
/// Returns the currently displayed text.
/// </summary>
property Text : ustring read GetText write SetText;
/// <summary>
/// Returns the currently selected text.
/// </summary>
property SelectedText : ustring read GetSelectedText;
/// <summary>
/// Returns the selected logical text range.
/// </summary>
property SelectedRange : TCefRange read GetSelectedRange write SetSelectedRange;
/// <summary>
/// Returns the current cursor position.
/// </summary>
property CursorPosition : NativeUInt read GetCursorPosition;
/// <summary>
/// Returns the text color.
/// </summary>
property TextColor : TCefColor read GetTextColor write SetTextColor;
/// <summary>
/// Returns the selection text color.
/// </summary>
property SelectionTextColor : TCefColor read GetSelectionTextColor write SetSelectionTextColor;
/// <summary>
/// Returns the selection background color.
/// </summary>
property SelectionBackgroundColor : TCefColor read GetSelectionBackgroundColor write SetSelectionBackgroundColor;
/// <summary>
/// Returns the placeholder text that will be displayed when the Textfield is
/// NULL.
/// </summary>
property PlaceholderText : ustring read GetPlaceholderText write SetPlaceholderText;
/// <summary>
/// Returns true (1) if there is any selected text.
/// </summary>
property HasSelection : boolean read GetHasSelection;
published
/// <summary>
/// Called when |textfield| recieves a keyboard event. |event| contains
/// information about the keyboard event. Return true (1) if the keyboard
/// event was handled or false (0) otherwise for default handling.
/// </summary>
property OnTextfieldKeyEvent : TOnTextfieldKeyEventEvent read FOnTextfieldKeyEvent write FOnTextfieldKeyEvent;
/// <summary>
/// Called after performing a user action that may change |textfield|.
/// </summary>
property OnAfterUserAction : TOnAfterUserActionEvent read FOnAfterUserAction write FOnAfterUserAction;
end;
@ -345,7 +447,7 @@ begin
FTextfield.ClearSelection;
end;
procedure TCEFTextfieldComponent.SelectRange(const range: TCefRange);
procedure TCEFTextfieldComponent.SetSelectedRange(const range: TCefRange);
begin
if Initialized then
FTextfield.SelectRange(range);

View File

@ -26,20 +26,45 @@ type
procedure OnAfterUserAction(const textfield: ICefTextfield);
public
/// <summary>
/// Returns a ICefTextfieldDelegate instance using a PCefTextfieldDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefTextfieldDelegate;
end;
/// <summary>
/// Implement this interface to handle Textfield events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_textfield_delegate_capi.h">CEF source file: /include/capi/views/cef_textfield_delegate_capi.h (cef_textfield_delegate_t)</see></para>
/// </remarks>
TCefTextfieldDelegateOwn = class(TCefViewDelegateOwn, ICefTextfieldDelegate)
protected
/// <summary>
/// Called when |textfield| recieves a keyboard event. |event| contains
/// information about the keyboard event. Return true (1) if the keyboard
/// event was handled or false (0) otherwise for default handling.
/// </summary>
procedure OnKeyEvent(const textfield: ICefTextfield; const event: TCefKeyEvent; var aResult : boolean); virtual;
/// <summary>
/// Called after performing a user action that may change |textfield|.
/// </summary>
procedure OnAfterUserAction(const textfield: ICefTextfield); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; override;
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the ICefTextfieldDelegate and ICefViewDelegate methods which call the ICefTextfieldDelegateEvents methods.
/// ICefTextfieldDelegateEvents will be implemented by the control receiving the ICefTextfieldDelegate events.
/// </summary>
TCustomTextfieldDelegate = class(TCefTextfieldDelegateOwn)
protected
FEvents : Pointer;
@ -61,6 +86,9 @@ type
procedure OnAfterUserAction(const textfield: ICefTextfield); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefTextfieldDelegateEvents); reintroduce;
end;

View File

@ -1,9 +1,9 @@
CEF_SUPPORTED_VERSION_MAJOR = 117;
CEF_SUPPORTED_VERSION_MINOR = 1;
CEF_SUPPORTED_VERSION_RELEASE = 4;
CEF_SUPPORTED_VERSION_RELEASE = 5;
CEF_SUPPORTED_VERSION_BUILD = 0;
CEF_CHROMEELF_VERSION_MAJOR = CEF_SUPPORTED_VERSION_MAJOR;
CEF_CHROMEELF_VERSION_MINOR = 0;
CEF_CHROMEELF_VERSION_RELEASE = 5938;
CEF_CHROMEELF_VERSION_BUILD = 92;
CEF_CHROMEELF_VERSION_BUILD = 132;

View File

@ -20,60 +20,289 @@ uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
/// <summary>
/// A View is a rectangle within the views View hierarchy. It is the base
/// interface for all Views. All size and position values are in density
/// independent pixels (DIP) unless otherwise indicated. Methods must be called
/// on the browser process UI thread unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_view_capi.h">CEF source file: /include/capi/views/cef_view_capi.h (cef_view_t)</see></para>
/// </remarks>
TCefViewRef = class(TCefBaseRefCountedRef, ICefView)
protected
/// <summary>
/// Returns this View as a BrowserView or NULL if this is not a BrowserView.
/// </summary>
function AsBrowserView : ICefBrowserView;
/// <summary>
/// Returns this View as a Button or NULL if this is not a Button.
/// </summary>
function AsButton : ICefButton;
/// <summary>
/// Returns this View as a Panel or NULL if this is not a Panel.
/// </summary>
function AsPanel : ICefPanel;
/// <summary>
/// Returns this View as a ScrollView or NULL if this is not a ScrollView.
/// </summary>
function AsScrollView : ICefScrollView;
/// <summary>
/// Returns this View as a Textfield or NULL if this is not a Textfield.
/// </summary>
function AsTextfield : ICefTextfield;
/// <summary>
/// Returns the type of this View as a string. Used primarily for testing
/// purposes.
/// </summary>
function GetTypeString : ustring;
/// <summary>
/// Returns a string representation of this View which includes the type and
/// various type-specific identifying attributes. If |include_children| is
/// true (1) any child Views will also be included. Used primarily for testing
/// purposes.
/// </summary>
function ToStringEx(include_children: boolean): ustring;
/// <summary>
/// Returns true (1) if this View is valid.
/// </summary>
function IsValid : boolean;
/// <summary>
/// Returns true (1) if this View is currently attached to another View. A
/// View can only be attached to one View at a time.
/// </summary>
function IsAttached : boolean;
/// <summary>
/// Returns true (1) if this View is the same as |that| View.
/// </summary>
function IsSame(const that: ICefView): boolean;
/// <summary>
/// Returns the delegate associated with this View, if any.
/// </summary>
function GetDelegate : ICefViewDelegate;
/// <summary>
/// Returns the top-level Window hosting this View, if any.
/// </summary>
function GetWindow : ICefWindow;
/// <summary>
/// Returns the ID for this View.
/// </summary>
function GetID : Integer;
/// <summary>
/// Sets the ID for this View. ID should be unique within the subtree that you
/// intend to search for it. 0 is the default ID for views.
/// </summary>
procedure SetID(id_: Integer);
/// <summary>
/// Returns the group id of this View, or -1 if not set.
/// </summary>
function GetGroupID : Integer;
/// <summary>
/// A group id is used to tag Views which are part of the same logical group.
/// Focus can be moved between views with the same group using the arrow keys.
/// The group id is immutable once it's set.
/// </summary>
procedure SetGroupID(group_id: Integer);
/// <summary>
/// Returns the View that contains this View, if any.
/// </summary>
function GetParentView : ICefView;
/// <summary>
/// Recursively descends the view tree starting at this View, and returns the
/// first child that it encounters with the given ID. Returns NULL if no
/// matching child view is found.
/// </summary>
function GetViewForID(id_: Integer): ICefView;
/// <summary>
/// Sets the bounds (size and position) of this View. |bounds| is in parent
/// coordinates, or DIP screen coordinates if there is no parent.
/// </summary>
procedure SetBounds(const bounds_: TCefRect);
/// <summary>
/// Returns the bounds (size and position) of this View in parent coordinates,
/// or DIP screen coordinates if there is no parent.
/// </summary>
function GetBounds : TCefRect;
/// <summary>
/// Returns the bounds (size and position) of this View in DIP screen
/// coordinates.
/// </summary>
function GetBoundsInScreen : TCefRect;
/// <summary>
/// Sets the size of this View without changing the position. |size| in parent
/// coordinates, or DIP screen coordinates if there is no parent.
/// </summary>
procedure SetSize(const size_: TCefSize);
/// <summary>
/// Returns the size of this View in parent coordinates, or DIP screen
/// coordinates if there is no parent.
/// </summary>
function GetSize : TCefSize;
/// <summary>
/// Sets the position of this View without changing the size. |position| is in
/// parent coordinates, or DIP screen coordinates if there is no parent.
/// </summary>
procedure SetPosition(const position_: TCefPoint);
/// <summary>
/// Returns the position of this View. Position is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
function GetPosition : TCefPoint;
/// <summary>
/// Sets the insets for this View. |insets| is in parent coordinates, or DIP
/// screen coordinates if there is no parent.
/// </summary>
procedure SetInsets(const insets: TCefInsets);
/// <summary>
/// Returns the insets for this View in parent coordinates, or DIP screen
/// coordinates if there is no parent.
/// </summary>
function GetInsets: TCefInsets;
/// <summary>
/// Returns the size this View would like to be if enough space is available.
/// Size is in parent coordinates, or DIP screen coordinates if there is no
/// parent.
/// </summary>
function GetPreferredSize : TCefSize;
/// <summary>
/// Size this View to its preferred size. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
procedure SizeToPreferredSize;
/// <summary>
/// Returns the minimum size for this View. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
function GetMinimumSize : TCefSize;
/// <summary>
/// Returns the maximum size for this View. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
function GetMaximumSize : TCefSize;
/// <summary>
/// Returns the height necessary to display this View with the provided width.
/// </summary>
function GetHeightForWidth(width: Integer): Integer;
/// <summary>
/// Indicate that this View and all parent Views require a re-layout. This
/// ensures the next call to layout() will propagate to this View even if the
/// bounds of parent Views do not change.
/// </summary>
procedure InvalidateLayout;
/// <summary>
/// Sets whether this View is visible. Windows are hidden by default and other
/// views are visible by default. This View and any parent views must be set
/// as visible for this View to be drawn in a Window. If this View is set as
/// hidden then it and any child views will not be drawn and, if any of those
/// views currently have focus, then focus will also be cleared. Painting is
/// scheduled as needed. If this View is a Window then calling this function
/// is equivalent to calling the Window show() and hide() functions.
/// </summary>
procedure SetVisible(visible_: boolean);
/// <summary>
/// Returns whether this View is visible. A view may be visible but still not
/// drawn in a Window if any parent views are hidden. If this View is a Window
/// then a return value of true (1) indicates that this Window is currently
/// visible to the user on-screen. If this View is not a Window then call
/// is_drawn() to determine whether this View and all parent views are visible
/// and will be drawn.
/// </summary>
function IsVisible : boolean;
/// <summary>
/// Returns whether this View is visible and drawn in a Window. A view is
/// drawn if it and all parent views are visible. If this View is a Window
/// then calling this function is equivalent to calling is_visible().
/// Otherwise, to determine if the containing Window is visible to the user
/// on-screen call is_visible() on the Window.
/// </summary>
function IsDrawn : boolean;
/// <summary>
/// Set whether this View is enabled. A disabled View does not receive
/// keyboard or mouse inputs. If |enabled| differs from the current value the
/// View will be repainted. Also, clears focus if the focused View is
/// disabled.
/// </summary>
procedure SetEnabled(enabled_: boolean);
/// <summary>
/// Returns whether this View is enabled.
/// </summary>
function IsEnabled : boolean;
/// <summary>
/// Sets whether this View is capable of taking focus. It will clear focus if
/// the focused View is set to be non-focusable. This is false (0) by default
/// so that a View used as a container does not get the focus.
/// </summary>
procedure SetFocusable(focusable_: boolean);
/// <summary>
/// Returns true (1) if this View is focusable, enabled and drawn.
/// </summary>
function IsFocusable : boolean;
/// <summary>
/// Return whether this View is focusable when the user requires full keyboard
/// access, even though it may not be normally focusable.
/// </summary>
function IsAccessibilityFocusable : boolean;
/// <summary>
/// Request keyboard focus. If this View is focusable it will become the
/// focused View.
/// </summary>
procedure RequestFocus;
/// <summary>
/// Sets the background color for this View.
/// </summary>
procedure SetBackgroundColor(color: TCefColor);
/// <summary>
/// Returns the background color for this View.
/// </summary>
function GetBackgroundColor : TCefColor;
/// <summary>
/// Convert |point| from this View's coordinate system to DIP screen
/// coordinates. This View must belong to a Window when calling this function.
/// Returns true (1) if the conversion is successful or false (0) otherwise.
/// Use ICefDisplay.ConvertPointToPixels() after calling this function
/// if further conversion to display-specific pixel coordinates is desired.
/// </summary>
function ConvertPointToScreen(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from DIP screen
/// coordinates. This View must belong to a Window when calling this function.
/// Returns true (1) if the conversion is successful or false (0) otherwise.
/// Use ICefDisplay.ConvertPointFromPixels() before calling this
/// function if conversion from display-specific pixel coordinates is
/// necessary.
/// </summary>
function ConvertPointFromScreen(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| from this View's coordinate system to that of the Window.
/// This View must belong to a Window when calling this function. Returns true
/// (1) if the conversion is successful or false (0) otherwise.
/// </summary>
function ConvertPointToWindow(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from that of the Window.
/// This View must belong to a Window when calling this function. Returns true
/// (1) if the conversion is successful or false (0) otherwise.
/// </summary>
function ConvertPointFromWindow(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| from this View's coordinate system to that of |view|.
/// |view| needs to be in the same Window but not necessarily the same view
/// hierarchy. Returns true (1) if the conversion is successful or false (0)
/// otherwise.
/// </summary>
function ConvertPointToView(const view : ICefView; var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from that |view|. |view|
/// needs to be in the same Window but not necessarily the same view
/// hierarchy. Returns true (1) if the conversion is successful or false (0)
/// otherwise.
/// </summary>
function ConvertPointFromView(const view : ICefView; var point: TCefPoint): boolean;
public
/// <summary>
/// Returns a ICefView instance using a PCefView data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefView;
end;

View File

@ -71,6 +71,7 @@ type
function GetBackgroundColor : TCefColor;
function GetViewForID(id_: Integer): ICefView;
function GetHeightForWidth(width: Integer): Integer;
function GetInsets: TCefInsets;
procedure SetID(id_: Integer);
procedure SetGroupID(group_id: Integer);
@ -81,6 +82,7 @@ type
procedure SetEnabled(enabled_: boolean);
procedure SetFocusable(focusable_: boolean);
procedure SetBackgroundColor(color: TCefColor);
procedure SetInsets(const insets: TCefInsets);
// ICefViewDelegateEvents
procedure doOnGetPreferredSize(const view: ICefView; var aResult : TCefSize); virtual;
@ -98,61 +100,283 @@ type
public
constructor Create(AOwner: TComponent); override;
procedure BeforeDestruction; override;
/// <summary>
/// Returns a string representation of this View which includes the type and
/// various type-specific identifying attributes. If |include_children| is
/// true (1) any child Views will also be included. Used primarily for testing
/// purposes.
/// </summary>
function ToStringEx(include_children: boolean): ustring;
/// <summary>
/// Returns true (1) if this View is the same as |that| View.
/// </summary>
function IsSame(const that: ICefView): boolean;
/// <summary>
/// Size this View to its preferred size. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
procedure SizeToPreferredSize;
/// <summary>
/// Indicate that this View and all parent Views require a re-layout. This
/// ensures the next call to layout() will propagate to this View even if the
/// bounds of parent Views do not change.
/// </summary>
procedure InvalidateLayout;
/// <summary>
/// Request keyboard focus. If this View is focusable it will become the
/// focused View.
/// </summary>
procedure RequestFocus;
/// <summary>
/// Convert |point| from this View's coordinate system to DIP screen
/// coordinates. This View must belong to a Window when calling this function.
/// Returns true (1) if the conversion is successful or false (0) otherwise.
/// Use ICefDisplay.ConvertPointToPixels() after calling this function
/// if further conversion to display-specific pixel coordinates is desired.
/// </summary>
function ConvertPointToScreen(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from DIP screen
/// coordinates. This View must belong to a Window when calling this function.
/// Returns true (1) if the conversion is successful or false (0) otherwise.
/// Use ICefDisplay.ConvertPointFromPixels() before calling this
/// function if conversion from display-specific pixel coordinates is
/// necessary.
/// </summary>
function ConvertPointFromScreen(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| from this View's coordinate system to that of the Window.
/// This View must belong to a Window when calling this function. Returns true
/// (1) if the conversion is successful or false (0) otherwise.
/// </summary>
function ConvertPointToWindow(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from that of the Window.
/// This View must belong to a Window when calling this function. Returns true
/// (1) if the conversion is successful or false (0) otherwise.
/// </summary>
function ConvertPointFromWindow(var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| from this View's coordinate system to that of |view|.
/// |view| needs to be in the same Window but not necessarily the same view
/// hierarchy. Returns true (1) if the conversion is successful or false (0)
/// otherwise.
/// </summary>
function ConvertPointToView(const view : ICefView; var point: TCefPoint): boolean;
/// <summary>
/// Convert |point| to this View's coordinate system from that |view|. |view|
/// needs to be in the same Window but not necessarily the same view
/// hierarchy. Returns true (1) if the conversion is successful or false (0)
/// otherwise.
/// </summary>
function ConvertPointFromView(const view : ICefView; var point: TCefPoint): boolean;
/// <summary>
/// Returns true when the control is fully initialized.
/// </summary>
property Initialized : boolean read GetInitialized;
/// <summary>
/// Returns this control as a View.
/// </summary>
property AsView : ICefView read GetAsView;
/// <summary>
/// Returns this View as a BrowserView or NULL if this is not a BrowserView.
/// </summary>
property AsBrowserView : ICefBrowserView read GetAsBrowserView;
/// <summary>
/// Returns this View as a Button or NULL if this is not a Button.
/// </summary>
property AsButton : ICefButton read GetAsButton;
/// <summary>
/// Returns this View as a Panel or NULL if this is not a Panel.
/// </summary>
property AsPanel : ICefPanel read GetAsPanel;
/// <summary>
/// Returns this View as a ScrollView or NULL if this is not a ScrollView.
/// </summary>
property AsScrollView : ICefScrollView read GetAsScrollView;
/// <summary>
/// Returns this View as a Textfield or NULL if this is not a Textfield.
/// </summary>
property AsTextfield : ICefTextfield read GetAsTextfield;
/// <summary>
/// Recursively descends the view tree starting at this View, and returns the
/// first child that it encounters with the given ID. Returns NULL if no
/// matching child view is found.
/// </summary>
property ViewForID[id_: Integer] : ICefView read GetViewForID;
/// <summary>
/// Returns true (1) if this View is valid.
/// </summary>
property Valid : boolean read GetIsValid;
/// <summary>
/// Returns true (1) if this View is currently attached to another View. A
/// View can only be attached to one View at a time.
/// </summary>
property Attached : boolean read GetIsAttached;
/// <summary>
/// Returns the delegate associated with this View, if any.
/// </summary>
property Delegate : ICefViewDelegate read GetDelegate;
/// <summary>
/// Returns the top-level Window hosting this View, if any.
/// </summary>
property Window : ICefWindow read GetWindow;
/// <summary>
/// Returns the View that contains this View, if any.
/// </summary>
property ParentView : ICefView read GetParentView;
/// <summary>
/// Returns the bounds (size and position) of this View in DIP screen
/// coordinates.
/// </summary>
property BoundsInScreen : TCefRect read GetBoundsInScreen;
/// <summary>
/// Returns the size this View would like to be if enough space is available.
/// Size is in parent coordinates, or DIP screen coordinates if there is no
/// parent.
/// </summary>
property PreferredSize : TCefSize read GetPreferredSize;
/// <summary>
/// Returns the minimum size for this View. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
property MinimumSize : TCefSize read GetMinimumSize;
/// <summary>
/// Returns the maximum size for this View. Size is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
property MaximumSize : TCefSize read GetMaximumSize;
/// <summary>
/// Returns whether this View is visible. A view may be visible but still not
/// drawn in a Window if any parent views are hidden. If this View is a Window
/// then a return value of true (1) indicates that this Window is currently
/// visible to the user on-screen. If this View is not a Window then call
/// is_drawn() to determine whether this View and all parent views are visible
/// and will be drawn.
/// </summary>
property Visible : boolean read GetIsVisible write SetVisible;
/// <summary>
/// Returns whether this View is visible and drawn in a Window. A view is
/// drawn if it and all parent views are visible. If this View is a Window
/// then calling this function is equivalent to calling is_visible().
/// Otherwise, to determine if the containing Window is visible to the user
/// on-screen call is_visible() on the Window.
/// </summary>
property Drawn : boolean read GetIsDrawn;
/// <summary>
/// Get or set whether this View is enabled. A disabled View does not receive
/// keyboard or mouse inputs. If |enabled| differs from the current value the
/// View will be repainted. Also, clears focus if the focused View is
/// disabled.
/// </summary>
property Enabled : boolean read GetIsEnabled write SetEnabled;
/// <summary>
/// Gets and sets whether this View is capable of taking focus. It will clear focus if
/// the focused View is set to be non-focusable. This is false (0) by default
/// so that a View used as a container does not get the focus.
/// </summary>
property Focusable : boolean read GetIsFocusable write SetFocusable;
/// <summary>
/// Return whether this View is focusable when the user requires full keyboard
/// access, even though it may not be normally focusable.
/// </summary>
property AccessibilityFocusable : boolean read GetIsAccessibilityFocusable;
/// <summary>
/// Returns the background color for this View.
/// </summary>
property BackgroundColor : TCefColor read GetBackgroundColor write SetBackgroundColor;
/// <summary>
/// Gets or sets the ID for this View. ID should be unique within the subtree that you
/// intend to search for it. 0 is the default ID for views.
/// </summary>
property ID : integer read GetID write SetID;
/// <summary>
/// Returns the group id of this View, or -1 if not set.
/// </summary>
property GroupID : integer read GetGroupID write SetGroupID;
/// <summary>
/// Returns the bounds (size and position) of this View in parent coordinates,
/// or DIP screen coordinates if there is no parent.
/// </summary>
property Bounds : TCefRect read GetBounds write SetBounds;
/// <summary>
/// Returns the size of this View in parent coordinates, or DIP screen
/// coordinates if there is no parent.
/// </summary>
property Size : TCefSize read GetSize write SetSize;
/// <summary>
/// Returns the position of this View. Position is in parent coordinates, or
/// DIP screen coordinates if there is no parent.
/// </summary>
property Position : TCefPoint read GetPosition write SetPosition;
/// <summary>
/// Returns the insets for this View in parent coordinates, or DIP screen
/// coordinates if there is no parent.
/// </summary>
property Insets : TCefInsets read GetInsets write SetInsets;
/// <summary>
/// Returns the type of this View as a string. Used primarily for testing
/// purposes.
/// </summary>
property TypeString : ustring read GetTypeString;
/// <summary>
/// Returns the height necessary to display this View with the provided width.
/// </summary>
property HeightForWidth[width: Integer] : Integer read GetHeightForWidth;
published
/// <summary>
/// Return the preferred size for |view|. The Layout will use this information
/// to determine the display size.
/// </summary>
property OnGetPreferredSize : TOnGetPreferredSizeEvent read FOnGetPreferredSize write FOnGetPreferredSize;
/// <summary>
/// Return the minimum size for |view|.
/// </summary>
property OnGetMinimumSize : TOnGetMinimumSizeEvent read FOnGetMinimumSize write FOnGetMinimumSize;
/// <summary>
/// Return the maximum size for |view|.
/// </summary>
property OnGetMaximumSize : TOnGetMaximumSizeEvent read FOnGetMaximumSize write FOnGetMaximumSize;
/// <summary>
/// Return the height necessary to display |view| with the provided |width|.
/// If not specified the result of get_preferred_size().height will be used by
/// default. Override if |view|'s preferred height depends upon the width (for
/// example, with Labels).
/// </summary>
property OnGetHeightForWidth : TOnGetHeightForWidthEvent read FOnGetHeightForWidth write FOnGetHeightForWidth;
/// <summary>
/// Called when the parent of |view| has changed. If |view| is being added to
/// |parent| then |added| will be true (1). If |view| is being removed from
/// |parent| then |added| will be false (0). If |view| is being reparented the
/// remove notification will be sent before the add notification. Do not
/// modify the view hierarchy in this callback.
/// </summary>
property OnParentViewChanged : TOnParentViewChangedEvent read FOnParentViewChanged write FOnParentViewChanged;
/// <summary>
/// Called when a child of |view| has changed. If |child| is being added to
/// |view| then |added| will be true (1). If |child| is being removed from
/// |view| then |added| will be false (0). If |child| is being reparented the
/// remove notification will be sent to the old parent before the add
/// notification is sent to the new parent. Do not modify the view hierarchy
/// in this callback.
/// </summary>
property OnChildViewChanged : TOnChildViewChangedEvent read FOnChildViewChanged write FOnChildViewChanged;
/// <summary>
/// Called when |view| is added or removed from the ICefWindow.
/// </summary>
property OnWindowChanged : TOnWindowChangedEvent read FOnWindowChanged write FOnWindowChanged;
/// <summary>
/// Called when the layout of |view| has changed.
/// </summary>
property OnLayoutChanged : TOnLayoutChangedEvent read FOnLayoutChanged write FOnLayoutChanged;
/// <summary>
/// Called when |view| gains focus.
/// </summary>
property OnFocus : TOnFocusEvent read FOnFocus write FOnFocus;
/// <summary>
/// Called when |view| loses focus.
/// </summary>
property OnBlur : TOnBlurEvent read FOnBlur write FOnBlur;
end;
@ -521,6 +745,19 @@ begin
Result := 0;
end;
function TCEFViewComponent.GetInsets: TCefInsets;
begin
if Initialized then
Result := AsView.GetInsets
else
begin
Result.top := 0;
Result.left := 0;
Result.bottom := 0;
Result.right := 0;
end;
end;
procedure TCEFViewComponent.InvalidateLayout;
begin
if Initialized then
@ -582,6 +819,12 @@ begin
AsView.SetBackgroundColor(color);
end;
procedure TCEFViewComponent.SetInsets(const insets: TCefInsets);
begin
if Initialized then
AsView.SetInsets(insets);
end;
function TCEFViewComponent.GetBackgroundColor : TCefColor;
begin
if Initialized then

View File

@ -34,27 +34,88 @@ type
procedure OnBlur(const view: ICefView);
public
/// <summary>
/// Returns a ICefViewDelegate instance using a PCefViewDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefViewDelegate;
end;
/// <summary>
/// Implement this interface to handle view events. All size and position values
/// are in density independent pixels (DIP) unless otherwise indicated. The
/// functions of this interface will be called on the browser process UI thread
/// unless otherwise indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_view_delegate_capi.h">CEF source file: /include/capi/views/cef_view_delegate_capi.h (cef_view_delegate_t)</see></para>
/// </remarks>
TCefViewDelegateOwn = class(TCefBaseRefCountedOwn, ICefViewDelegate)
protected
/// <summary>
/// Return the preferred size for |view|. The Layout will use this information
/// to determine the display size.
/// </summary>
procedure OnGetPreferredSize(const view: ICefView; var aResult : TCefSize); virtual;
/// <summary>
/// Return the minimum size for |view|.
/// </summary>
procedure OnGetMinimumSize(const view: ICefView; var aResult : TCefSize); virtual;
/// <summary>
/// Return the maximum size for |view|.
/// </summary>
procedure OnGetMaximumSize(const view: ICefView; var aResult : TCefSize); virtual;
/// <summary>
/// Return the height necessary to display |view| with the provided |width|.
/// If not specified the result of get_preferred_size().height will be used by
/// default. Override if |view|'s preferred height depends upon the width (for
/// example, with Labels).
/// </summary>
procedure OnGetHeightForWidth(const view: ICefView; width: Integer; var aResult: Integer); virtual;
/// <summary>
/// Called when the parent of |view| has changed. If |view| is being added to
/// |parent| then |added| will be true (1). If |view| is being removed from
/// |parent| then |added| will be false (0). If |view| is being reparented the
/// remove notification will be sent before the add notification. Do not
/// modify the view hierarchy in this callback.
/// </summary>
procedure OnParentViewChanged(const view: ICefView; added: boolean; const parent: ICefView); virtual;
/// <summary>
/// Called when a child of |view| has changed. If |child| is being added to
/// |view| then |added| will be true (1). If |child| is being removed from
/// |view| then |added| will be false (0). If |child| is being reparented the
/// remove notification will be sent to the old parent before the add
/// notification is sent to the new parent. Do not modify the view hierarchy
/// in this callback.
/// </summary>
procedure OnChildViewChanged(const view: ICefView; added: boolean; const child: ICefView); virtual;
/// <summary>
/// Called when |view| is added or removed from the ICefWindow.
/// </summary>
procedure OnWindowChanged(const view: ICefView; added: boolean); virtual;
/// <summary>
/// Called when the layout of |view| has changed.
/// </summary>
procedure OnLayoutChanged(const view: ICefView; new_bounds: TCefRect); virtual;
/// <summary>
/// Called when |view| gains focus.
/// </summary>
procedure OnFocus(const view: ICefView); virtual;
/// <summary>
/// Called when |view| loses focus.
/// </summary>
procedure OnBlur(const view: ICefView); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; virtual;
public
constructor Create; virtual;
end;
/// <summary>
/// This class handles all the ICefViewDelegate methods which call the ICefViewDelegateEvents methods.
/// ICefViewDelegateEvents will be implemented by the control receiving the ICefViewDelegate events.
/// </summary>
TCustomViewDelegate = class(TCefViewDelegateOwn)
protected
FEvents : Pointer;
@ -71,6 +132,9 @@ type
procedure OnBlur(const view: ICefView); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefViewDelegateEvents); reintroduce;
destructor Destroy; override;
end;

View File

@ -282,7 +282,13 @@ type
procedure RemoveAllAccelerators;
public
/// <summary>
/// Returns a ICefWindow instance using a PCefWindow data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefWindow;
/// <summary>
/// Create a new Window.
/// </summary>
class function CreateTopLevel(const delegate: ICefWindowDelegate): ICefWindow;
end;

View File

@ -101,60 +101,313 @@ type
procedure doCreateCustomView; override;
public
/// <summary>
/// Create a new Window.
/// </summary>
procedure CreateTopLevelWindow;
/// <summary>
/// Show the Window.
/// </summary>
procedure Show;
/// <summary>
/// Show the Window as a browser modal dialog relative to |browser_view|. A
/// parent Window must be returned via
/// cef_window_delegate_t::get_parent_window() and |browser_view| must belong
/// to that parent Window. While this Window is visible, |browser_view| will
/// be disabled while other controls in the parent Window remain enabled.
/// Navigating or destroying the |browser_view| will close this Window
/// automatically. Alternately, use show() and return true (1) from
/// cef_window_delegate_t::is_window_modal_dialog() for a window modal dialog
/// where all controls in the parent Window are disabled.
/// </summary>
procedure ShowAsBrowserModalDialog(const browser_view: ICefBrowserView);
/// <summary>
/// Hide the Window.
/// </summary>
procedure Hide;
/// <summary>
/// Sizes the Window to |size| and centers it in the current display.
/// </summary>
procedure CenterWindow(const size_: TCefSize);
/// <summary>
/// Close the Window.
/// </summary>
procedure Close;
/// <summary>
/// Activate the Window, assuming it already exists and is visible.
/// </summary>
procedure Activate;
/// <summary>
/// Deactivate the Window, making the next Window in the Z order the active
/// Window.
/// </summary>
procedure Deactivate;
/// <summary>
/// Bring this Window to the top of other Windows in the Windowing system.
/// </summary>
procedure BringToTop;
/// <summary>
/// Maximize the Window.
/// </summary>
procedure Maximize;
/// <summary>
/// Minimize the Window.
/// </summary>
procedure Minimize;
/// <summary>
/// Restore the Window.
/// </summary>
procedure Restore;
/// <summary>
/// <para>Add a View that will be overlayed on the Window contents with absolute
/// positioning and high z-order. Positioning is controlled by |docking_mode|
/// as described below. The returned cef_overlay_controller_t object is used
/// to control the overlay. Overlays are hidden by default.</para>
/// <para>With CEF_DOCKING_MODE_CUSTOM:</para>
/// <code>
/// 1. The overlay is initially hidden, sized to |view|'s preferred size,
/// and positioned in the top-left corner.
/// 2. Optionally change the overlay position and/or size by calling
/// CefOverlayController methods.
/// 3. Call CefOverlayController::SetVisible(true) to show the overlay.
/// 4. The overlay will be automatically re-sized if |view|'s layout
/// changes. Optionally change the overlay position and/or size when
/// OnLayoutChanged is called on the Window's delegate to indicate a
/// change in Window bounds.</code>
/// <para>With other docking modes:</para>
/// <code>
/// 1. The overlay is initially hidden, sized to |view|'s preferred size,
/// and positioned based on |docking_mode|.
/// 2. Call CefOverlayController::SetVisible(true) to show the overlay.
/// 3. The overlay will be automatically re-sized if |view|'s layout changes
/// and re-positioned as appropriate when the Window resizes.</code>
/// <para>Overlays created by this function will receive a higher z-order then any
/// child Views added previously. It is therefore recommended to call this
/// function last after all other child Views have been added so that the
/// overlay displays as the top-most child of the Window.</para>
/// </summary>
function AddOverlayView(const view: ICefView; docking_mode: TCefDockingMode): ICefOverlayController;
/// <summary>
/// Show a menu with contents |menu_model|. |screen_point| specifies the menu
/// position in screen coordinates. |anchor_position| specifies how the menu
/// will be anchored relative to |screen_point|.
/// </summary>
procedure ShowMenu(const menu_model: ICefMenuModel; const screen_point: TCefPoint; anchor_position : TCefMenuAnchorPosition);
/// <summary>
/// Cancel the menu that is currently showing, if any.
/// </summary>
procedure CancelMenu;
/// <summary>
/// Set the regions where mouse events will be intercepted by this Window to
/// support drag operations. Call this function with an NULL vector to clear
/// the draggable regions. The draggable region bounds should be in window
/// coordinates.
/// </summary>
procedure SetDraggableRegions(regionsCount: NativeUInt; const regions: PCefDraggableRegionArray);
/// <summary>
/// Simulate a key press. |key_code| is the VKEY_* value from Chromium's
/// ui/events/keycodes/keyboard_codes.h header (VK_* values on Windows).
/// |event_flags| is some combination of EVENTFLAG_SHIFT_DOWN,
/// EVENTFLAG_CONTROL_DOWN and/or EVENTFLAG_ALT_DOWN. This function is exposed
/// primarily for testing purposes.
/// </summary>
procedure SendKeyPress(key_code: Integer; event_flags: cardinal);
/// <summary>
/// Simulate a mouse move. The mouse cursor will be moved to the specified
/// (screen_x, screen_y) position. This function is exposed primarily for
/// testing purposes.
/// </summary>
procedure SendMouseMove(screen_x, screen_y: Integer);
/// <summary>
/// Simulate mouse down and/or mouse up events. |button| is the mouse button
/// type. If |mouse_down| is true (1) a mouse down event will be sent. If
/// |mouse_up| is true (1) a mouse up event will be sent. If both are true (1)
/// a mouse down event will be sent followed by a mouse up event (equivalent
/// to clicking the mouse button). The events will be sent using the current
/// cursor position so make sure to call send_mouse_move() first to position
/// the mouse. This function is exposed primarily for testing purposes.
/// </summary>
procedure SendMouseEvents(button: TCefMouseButtonType; mouse_down, mouse_up: boolean);
/// <summary>
/// Set the keyboard accelerator for the specified |command_id|. |key_code|
/// can be any virtual key or character value.
/// cef_window_delegate_t::OnAccelerator will be called if the keyboard
/// combination is triggered while this window has focus.
/// </summary>
procedure SetAccelerator(command_id, key_code : Integer; shift_pressed, ctrl_pressed, alt_pressed: boolean);
/// <summary>
/// Remove the keyboard accelerator for the specified |command_id|.
/// </summary>
procedure RemoveAccelerator(command_id: Integer);
/// <summary>
/// Remove all keyboard accelerators.
/// </summary>
procedure RemoveAllAccelerators;
/// <summary>
/// Get the Window title.
/// </summary>
property Title : ustring read GetTitle write SetTitle;
/// <summary>
/// Get the Window icon.
/// </summary>
property WindowIcon : ICefImage read GetWindowIcon write SetWindowIcon;
/// <summary>
/// Get or set the Window App icon. This should be a larger icon for use in the host
/// environment app switching UI. On Windows, this is the ICON_BIG used in
/// Alt-Tab list and Windows taskbar. The Window icon will be used by default
/// if no Window App icon is specified.
/// </summary>
property WindowAppIcon : ICefImage read GetWindowAppIcon write SetWindowAppIcon;
/// <summary>
/// Returns the Display that most closely intersects the bounds of this
/// Window. May return NULL if this Window is not currently displayed.
/// </summary>
property Display : ICefDisplay read GetDisplay;
/// <summary>
/// Returns the bounds (size and position) of this Window's client area.
/// Position is in screen coordinates.
/// </summary>
property ClientAreaBoundsInScreen : TCefRect read GetClientAreaBoundsInScreen;
/// <summary>
/// Retrieve the platform window handle for this Window.
/// </summary>
property WindowHandle : TCefWindowHandle read GetWindowHandle;
/// <summary>
/// Returns true (1) if the Window has been closed.
/// </summary>
property IsClosed : boolean read GetIsClosed;
/// <summary>
/// Returns whether the Window is the currently active Window.
/// </summary>
property IsActive : boolean read GetIsActive;
/// <summary>
/// Returns whether the Window has been set to be on top of other Windows in
/// the Windowing system.
/// </summary>
property IsAlwaysOnTop : boolean read GetIsAlwaysOnTop write SetAlwaysOnTop;
/// <summary>
/// Returns true (1) if the Window is fullscreen.
/// </summary>
property IsFullscreen : boolean read GetIsFullscreen write SetFullscreen;
/// <summary>
/// Returns true (1) if the Window is maximized.
/// </summary>
property IsMaximized : boolean read GetIsMaximized;
/// <summary>
/// Returns true (1) if the Window is minimized.
/// </summary>
property IsMinimized : boolean read GetIsMinimized;
published
/// <summary>
/// Called when |window| is created.
/// </summary>
property OnWindowCreated : TOnWindowCreatedEvent read FOnWindowCreated write FOnWindowCreated;
/// <summary>
/// Called when |window| is closing.
/// </summary>
property OnWindowClosing : TOnWindowClosingEvent read FOnWindowClosing write FOnWindowClosing;
/// <summary>
/// Called when |window| is destroyed. Release all references to |window| and
/// do not attempt to execute any functions on |window| after this callback
/// returns.
/// </summary>
property OnWindowDestroyed : TOnWindowDestroyedEvent read FOnWindowDestroyed write FOnWindowDestroyed;
/// <summary>
/// Called when |window| is activated or deactivated.
/// </summary>
property OnWindowActivationChanged : TOnWindowActivationChangedEvent read FOnWindowActivationChanged write FOnWindowActivationChanged;
/// <summary>
/// Called when |window| bounds have changed. |new_bounds| will be in DIP
/// screen coordinates.
/// </summary>
property OnWindowBoundsChanged : TOnWindowBoundsChangedEvent read FOnWindowBoundsChanged write FOnWindowBoundsChanged;
/// <summary>
/// Return the parent for |window| or NULL if the |window| does not have a
/// parent. Windows with parents will not get a taskbar button. Set |is_menu|
/// to true (1) if |window| will be displayed as a menu, in which case it will
/// not be clipped to the parent window bounds. Set |can_activate_menu| to
/// false (0) if |is_menu| is true (1) and |window| should not be activated
/// (given keyboard focus) when displayed.
/// </summary>
property OnGetParentWindow : TOnGetParentWindowEvent read FOnGetParentWindow write FOnGetParentWindow;
/// <summary>
/// Return true (1) if |window| should be created as a window modal dialog.
/// Only called when a Window is returned via get_parent_window() with
/// |is_menu| set to false (0). All controls in the parent Window will be
/// disabled while |window| is visible. This functionality is not supported by
/// all Linux window managers. Alternately, use
/// ICefWindow.ShowAsBrowserModalDialog() for a browser modal dialog
/// that works on all platforms.
/// </summary>
property OnIsWindowModalDialog : TOnIsWindowModalDialogEvent read FOnIsWindowModalDialog write FOnIsWindowModalDialog;
/// <summary>
/// Return the initial bounds for |window| in density independent pixel (DIP)
/// coordinates. If this function returns an NULL CefRect then
/// GetPreferredSize() will be called to retrieve the size, and the window
/// will be placed on the screen with origin (0,0). This function can be used
/// in combination with ICefView.GetBoundsInScreen() to restore the
/// previous window bounds.
/// </summary>
property OnGetInitialBounds : TOnGetInitialBoundsEvent read FOnGetInitialBounds write FOnGetInitialBounds;
/// <summary>
/// Return the initial show state for |window|.
/// </summary>
property OnGetInitialShowState : TOnGetInitialShowStateEvent read FOnGetInitialShowState write FOnGetInitialShowState;
/// <summary>
/// Return true (1) if |window| should be created without a frame or title
/// bar. The window will be resizable if can_resize() returns true (1). Use
/// ICefWindow.SetDraggableRegions() to specify draggable regions.
/// </summary>
property OnIsFrameless : TOnIsFramelessEvent read FOnIsFrameless write FOnIsFrameless;
/// <summary>
/// Return true (1) if |window| should be created with standard window buttons
/// like close, minimize and zoom. This function is only supported on macOS.
/// </summary>
property OnWithStandardWindowButtons : TOnWithStandardWindowButtonsEvent read FOnWithStandardWindowButtons write FOnWithStandardWindowButtons;
/// <summary>
/// Return whether the titlebar height should be overridden, and sets the
/// height of the titlebar in |titlebar_height|. On macOS, it can also be used
/// to adjust the vertical position of the traffic light buttons in frameless
/// windows. The buttons will be positioned halfway down the titlebar at a
/// height of |titlebar_height| / 2.
/// </summary>
property OnGetTitlebarHeight : TOnGetTitlebarHeightEvent read FOnGetTitlebarHeight write FOnGetTitlebarHeight;
/// <summary>
/// Return true (1) if |window| can be resized.
/// </summary>
property OnCanResize : TOnCanResizeEvent read FOnCanResize write FOnCanResize;
/// <summary>
/// Return true (1) if |window| can be maximized.
/// </summary>
property OnCanMaximize : TOnCanMaximizeEvent read FOnCanMaximize write FOnCanMaximize;
/// <summary>
/// Return true (1) if |window| can be minimized.
/// </summary>
property OnCanMinimize : TOnCanMinimizeEvent read FOnCanMinimize write FOnCanMinimize;
/// <summary>
/// Return true (1) if |window| can be closed. This will be called for user-
/// initiated window close actions and when ICefWindow.close() is called.
/// </summary>
property OnCanClose : TOnCanCloseEvent read FOnCanClose write FOnCanClose;
/// <summary>
/// Called when a keyboard accelerator registered with
/// ICefWindow.SetAccelerator is triggered. Return true (1) if the
/// accelerator was handled or false (0) otherwise.
/// </summary>
property OnAccelerator : TOnAcceleratorEvent read FOnAccelerator write FOnAccelerator;
/// <summary>
/// Called after all other controls in the window have had a chance to handle
/// the event. |event| contains information about the keyboard event. Return
/// true (1) if the keyboard event was handled or false (0) otherwise.
/// </summary>
property OnKeyEvent : TOnWindowKeyEventEvent read FOnKeyEvent write FOnKeyEvent;
/// <summary>
/// Called when the |window| is transitioning to or from fullscreen mode. The
/// transition occurs in two stages, with |is_competed| set to false (0) when
/// the transition starts and true (1) when the transition completes. This
/// function is only supported on macOS.
/// </summary>
property OnWindowFullscreenTransition : TOnWindowFullscreenTransitionEvent read FOnWindowFullscreenTransition write FOnWindowFullscreenTransition;
end;
@ -398,6 +651,11 @@ begin
if Initialized then FWindow.Show;
end;
procedure TCEFWindowComponent.ShowAsBrowserModalDialog(const browser_view: ICefBrowserView);
begin
if Initialized then FWindow.ShowAsBrowserModalDialog(browser_view);
end;
procedure TCEFWindowComponent.Hide;
begin
if Initialized then FWindow.Hide;

View File

@ -43,37 +43,145 @@ type
procedure OnWindowFullscreenTransition(const window_: ICefWindow; is_completed: boolean);
public
/// <summary>
/// Returns a ICefWindowDelegate instance using a PCefWindowDelegate data pointer.
/// </summary>
class function UnWrap(data: Pointer): ICefWindowDelegate;
end;
/// <summary>
/// Implement this interface to handle window events. The functions of this
/// interface will be called on the browser process UI thread unless otherwise
/// indicated.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/views/cef_window_delegate_capi.h">CEF source file: /include/capi/views/cef_window_delegate_capi.h (cef_window_delegate_t)</see></para>
/// </remarks>
TCefWindowDelegateOwn = class(TCefPanelDelegateOwn, ICefWindowDelegate)
protected
/// <summary>
/// Called when |window| is created.
/// </summary>
procedure OnWindowCreated(const window_: ICefWindow); virtual;
/// <summary>
/// Called when |window| is closing.
/// </summary>
procedure OnWindowClosing(const window_: ICefWindow); virtual;
/// <summary>
/// Called when |window| is destroyed. Release all references to |window| and
/// do not attempt to execute any functions on |window| after this callback
/// returns.
/// </summary>
procedure OnWindowDestroyed(const window_: ICefWindow); virtual;
/// <summary>
/// Called when |window| is activated or deactivated.
/// </summary>
procedure OnWindowActivationChanged(const window_: ICefWindow; active: boolean); virtual;
/// <summary>
/// Called when |window| bounds have changed. |new_bounds| will be in DIP
/// screen coordinates.
/// </summary>
procedure OnWindowBoundsChanged(const window_: ICefWindow; const new_bounds: TCefRect); virtual;
/// <summary>
/// Return the parent for |window| or NULL if the |window| does not have a
/// parent. Windows with parents will not get a taskbar button. Set |is_menu|
/// to true (1) if |window| will be displayed as a menu, in which case it will
/// not be clipped to the parent window bounds. Set |can_activate_menu| to
/// false (0) if |is_menu| is true (1) and |window| should not be activated
/// (given keyboard focus) when displayed.
/// </summary>
procedure OnGetParentWindow(const window_: ICefWindow; var is_menu, can_activate_menu: boolean; var aResult : ICefWindow); virtual;
/// <summary>
/// Return true (1) if |window| should be created as a window modal dialog.
/// Only called when a Window is returned via get_parent_window() with
/// |is_menu| set to false (0). All controls in the parent Window will be
/// disabled while |window| is visible. This functionality is not supported by
/// all Linux window managers. Alternately, use
/// ICefWindow.ShowAsBrowserModalDialog() for a browser modal dialog
/// that works on all platforms.
/// </summary>
procedure OnIsWindowModalDialog(const window_: ICefWindow; var aResult: boolean); virtual;
/// <summary>
/// Return the initial bounds for |window| in density independent pixel (DIP)
/// coordinates. If this function returns an NULL CefRect then
/// GetPreferredSize() will be called to retrieve the size, and the window
/// will be placed on the screen with origin (0,0). This function can be used
/// in combination with ICefView.GetBoundsInScreen() to restore the
/// previous window bounds.
/// </summary>
procedure OnGetInitialBounds(const window_: ICefWindow; var aResult : TCefRect); virtual;
/// <summary>
/// Return the initial show state for |window|.
/// </summary>
procedure OnGetInitialShowState(const window_: ICefWindow; var aResult : TCefShowState); virtual;
/// <summary>
/// Return true (1) if |window| should be created without a frame or title
/// bar. The window will be resizable if can_resize() returns true (1). Use
/// ICefWindow.SetDraggableRegions() to specify draggable regions.
/// </summary>
procedure OnIsFrameless(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Return true (1) if |window| should be created with standard window buttons
/// like close, minimize and zoom. This function is only supported on macOS.
/// </summary>
procedure OnWithStandardWindowButtons(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Return whether the titlebar height should be overridden, and sets the
/// height of the titlebar in |titlebar_height|. On macOS, it can also be used
/// to adjust the vertical position of the traffic light buttons in frameless
/// windows. The buttons will be positioned halfway down the titlebar at a
/// height of |titlebar_height| / 2.
/// </summary>
procedure OnGetTitlebarHeight(const window_: ICefWindow; var titlebar_height: Single; var aResult : boolean); virtual;
/// <summary>
/// Return true (1) if |window| can be resized.
/// </summary>
procedure OnCanResize(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Return true (1) if |window| can be maximized.
/// </summary>
procedure OnCanMaximize(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Return true (1) if |window| can be minimized.
/// </summary>
procedure OnCanMinimize(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Return true (1) if |window| can be closed. This will be called for user-
/// initiated window close actions and when ICefWindow.close() is called.
/// </summary>
procedure OnCanClose(const window_: ICefWindow; var aResult : boolean); virtual;
/// <summary>
/// Called when a keyboard accelerator registered with
/// ICefWindow.SetAccelerator is triggered. Return true (1) if the
/// accelerator was handled or false (0) otherwise.
/// </summary>
procedure OnAccelerator(const window_: ICefWindow; command_id: Integer; var aResult : boolean); virtual;
/// <summary>
/// Called after all other controls in the window have had a chance to handle
/// the event. |event| contains information about the keyboard event. Return
/// true (1) if the keyboard event was handled or false (0) otherwise.
/// </summary>
procedure OnKeyEvent(const window_: ICefWindow; const event: TCefKeyEvent; var aResult : boolean); virtual;
/// <summary>
/// Called when the |window| is transitioning to or from fullscreen mode. The
/// transition occurs in two stages, with |is_competed| set to false (0) when
/// the transition starts and true (1) when the transition completes. This
/// function is only supported on macOS.
/// </summary>
procedure OnWindowFullscreenTransition(const window_: ICefWindow; is_completed: boolean); virtual;
/// <summary>
/// Links the methods in the internal CEF record data pointer with the methods in this class.
/// </summary>
procedure InitializeCEFMethods; override;
public
constructor Create; override;
end;
/// <summary>
/// This class handles all the TCustomWindowDelegate methods which call the ICefWindowDelegateEvents methods.
/// ICefWindowDelegateEvents will be implemented by the control receiving the TCustomWindowDelegate events.
/// </summary>
TCustomWindowDelegate = class(TCefWindowDelegateOwn)
protected
FEvents : Pointer;
@ -112,6 +220,9 @@ type
procedure OnWindowFullscreenTransition(const window_: ICefWindow; is_completed: boolean); override;
public
/// <summary>
/// Creates an instance of this class liked to an interface that's implemented by a control receiving the events.
/// </summary>
constructor Create(const events: ICefWindowDelegateEvents); reintroduce;
end;

View File

@ -2,9 +2,9 @@
"UpdateLazPackages" : [
{
"ForceNotify" : true,
"InternalVersion" : 523,
"InternalVersion" : 524,
"Name" : "cef4delphi_lazarus.lpk",
"Version" : "117.1.4"
"Version" : "117.1.5"
}
],
"UpdatePackageData" : {