Skip to content

Commit f8a460f

Browse files
committed
Add DisplayHandler.OnAutoResize and Browser.SetAutoResizeEnabled (#403)
1 parent 1671a40 commit f8a460f

13 files changed

+179
-61
lines changed

README.md

+59-55
Original file line numberDiff line numberDiff line change
@@ -256,61 +256,61 @@ Additional information for v31.2 release:
256256

257257
### API categories
258258

259-
#### Modules
260-
261-
* [cefpython](api/cefpython.md#cefpython) module
262-
263-
264-
#### Settings
265-
266-
* [ApplicationSettings](api/ApplicationSettings.md#application-settings) dictionary
267-
* [BrowserSettings](api/BrowserSettings.md#browser-settings) dictionary
268-
* [CommandLineSwitches](api/CommandLineSwitches.md#command-line-switches) dictionary
269-
270-
271-
#### Classes and objects
272-
273-
* [Browser](api/Browser.md#browser-object) object
274-
* [Callback](api/Callback.md#callback-object) object
275-
* [Cookie](api/Cookie.md#cookie-class) class
276-
* [CookieManager](api/CookieManager.md#cookiemanager-class) class
277-
* [DpiAware](api/DpiAware.md#dpiaware-class) class (Win)
278-
* [DragData](api/DragData.md#dragdata-object) object
279-
* [Frame](api/Frame.md#frame-object) object
280-
* [Image](api/Image.md#image-object) object
281-
* [JavascriptBindings](api/JavascriptBindings.md#javascriptbindings-class) class
282-
* [JavascriptCallback](api/JavascriptCallback.md#javascriptcallback-object) object
283-
* [PaintBuffer](api/PaintBuffer.md#paintbuffer-object) object
284-
* [Request](api/Request.md#request-class) class
285-
* [Response](api/Response.md#response-object) object
286-
* [WebPluginInfo](api/WebPluginInfo.md#webplugininfo-object) object
287-
* [WebRequest](api/WebRequest.md#webrequest-class) class
288-
* [WindowInfo](api/WindowInfo.md#windowinfo-class) class
289-
* [WindowUtils](api/WindowUtils.md#windowutils-class) class
290-
291-
292-
#### Client handlers (interfaces)
293-
294-
* [AccessibilityHandler](api/AccessibilityHandler.md#accessibilityhandler-interface)
295-
* [DisplayHandler](api/DisplayHandler.md#displayhandler-interface)
296-
* [DownloadHandler](api/DownloadHandler.md#downloadhandler)
297-
* [FocusHandler](api/FocusHandler.md#focushandler-interface)
298-
* [JavascriptDialogHandler](api/JavascriptDialogHandler.md#javascriptdialoghandler-interface)
299-
* [KeyboardHandler](api/KeyboardHandler.md#keyboardhandler-interface)
300-
* [LifespanHandler](api/LifespanHandler.md#lifespanhandler-interface)
301-
* [LoadHandler](api/LoadHandler.md#loadhandler-interface)
302-
* [RenderHandler](api/RenderHandler.md#renderhandler-interface)
303-
* [RequestHandler](api/RequestHandler.md#requesthandler-interface)
304-
* [ResourceHandler](api/ResourceHandler.md#resourcehandler-interface)
305-
* [V8ContextHandler](api/V8ContextHandler.md#v8contexthandler-interface)
306-
307-
308-
#### Other interfaces
309-
310-
* [CookieVisitor](api/CookieVisitor.md#cookievisitor-interface) interface
311-
* [StringVisitor](api/StringVisitor.md#stringvisitor-interface) interface
312-
* [WebRequestClient](api/WebRequestClient.md#webrequestclient-interface) interface
313-
259+
#### Modules
260+
261+
* [cefpython](api/cefpython.md#cefpython) module
262+
263+
264+
#### Settings
265+
266+
* [ApplicationSettings](api/ApplicationSettings.md#application-settings) dictionary
267+
* [BrowserSettings](api/BrowserSettings.md#browser-settings) dictionary
268+
* [CommandLineSwitches](api/CommandLineSwitches.md#command-line-switches) dictionary
269+
270+
271+
#### Classes and objects
272+
273+
* [Browser](api/Browser.md#browser-object) object
274+
* [Callback](api/Callback.md#callback-object) object
275+
* [Cookie](api/Cookie.md#cookie-class) class
276+
* [CookieManager](api/CookieManager.md#cookiemanager-class) class
277+
* [DpiAware](api/DpiAware.md#dpiaware-class) class (Win)
278+
* [DragData](api/DragData.md#dragdata-object) object
279+
* [Frame](api/Frame.md#frame-object) object
280+
* [Image](api/Image.md#image-object) object
281+
* [JavascriptBindings](api/JavascriptBindings.md#javascriptbindings-class) class
282+
* [JavascriptCallback](api/JavascriptCallback.md#javascriptcallback-object) object
283+
* [PaintBuffer](api/PaintBuffer.md#paintbuffer-object) object
284+
* [Request](api/Request.md#request-class) class
285+
* [Response](api/Response.md#response-object) object
286+
* [WebPluginInfo](api/WebPluginInfo.md#webplugininfo-object) object
287+
* [WebRequest](api/WebRequest.md#webrequest-class) class
288+
* [WindowInfo](api/WindowInfo.md#windowinfo-class) class
289+
* [WindowUtils](api/WindowUtils.md#windowutils-class) class
290+
291+
292+
#### Client handlers (interfaces)
293+
294+
* [AccessibilityHandler](api/AccessibilityHandler.md#accessibilityhandler-interface)
295+
* [DisplayHandler](api/DisplayHandler.md#displayhandler-interface)
296+
* [DownloadHandler](api/DownloadHandler.md#downloadhandler)
297+
* [FocusHandler](api/FocusHandler.md#focushandler-interface)
298+
* [JavascriptDialogHandler](api/JavascriptDialogHandler.md#javascriptdialoghandler-interface)
299+
* [KeyboardHandler](api/KeyboardHandler.md#keyboardhandler-interface)
300+
* [LifespanHandler](api/LifespanHandler.md#lifespanhandler-interface)
301+
* [LoadHandler](api/LoadHandler.md#loadhandler-interface)
302+
* [RenderHandler](api/RenderHandler.md#renderhandler-interface)
303+
* [RequestHandler](api/RequestHandler.md#requesthandler-interface)
304+
* [ResourceHandler](api/ResourceHandler.md#resourcehandler-interface)
305+
* [V8ContextHandler](api/V8ContextHandler.md#v8contexthandler-interface)
306+
307+
308+
#### Other interfaces
309+
310+
* [CookieVisitor](api/CookieVisitor.md#cookievisitor-interface) interface
311+
* [StringVisitor](api/StringVisitor.md#stringvisitor-interface) interface
312+
* [WebRequestClient](api/WebRequestClient.md#webrequestclient-interface) interface
313+
314314

315315
### API index
316316

@@ -391,6 +391,7 @@ Additional information for v31.2 release:
391391
* [HandleKeyEventAfterTextInputClient](api/Browser.md#handlekeyeventaftertextinputclient)
392392
* [HandleKeyEventBeforeTextInputClient](api/Browser.md#handlekeyeventbeforetextinputclient)
393393
* [HasDocument](api/Browser.md#hasdocument)
394+
* [Invalidate](api/Browser.md#invalidate)
394395
* [IsFullscreen](api/Browser.md#isfullscreen)
395396
* [IsLoading](api/Browser.md#isloading)
396397
* [IsMouseCursorChangeDisabled](api/Browser.md#ismousecursorchangedisabled)
@@ -405,6 +406,7 @@ Additional information for v31.2 release:
405406
* [Reload](api/Browser.md#reload)
406407
* [ReloadIgnoreCache](api/Browser.md#reloadignorecache)
407408
* [ReplaceMisspelling](api/Browser.md#replacemisspelling)
409+
* [SetAutoResizeEnabled](api/Browser.md#setautoresizeenabled)
408410
* [SetBounds](api/Browser.md#setbounds)
409411
* [SendKeyEvent](api/Browser.md#sendkeyevent)
410412
* [SendMouseClickEvent](api/Browser.md#sendmouseclickevent)
@@ -519,6 +521,7 @@ Additional information for v31.2 release:
519521
* [Visit](api/CookieVisitor.md#visit)
520522
* [DisplayHandler (interface)](api/DisplayHandler.md#displayhandler-interface)
521523
* [OnAddressChange](api/DisplayHandler.md#onaddresschange)
524+
* [OnAutoResize](api/DisplayHandler.md#onautoresize)
522525
* [OnTitleChange](api/DisplayHandler.md#ontitlechange)
523526
* [OnTooltip](api/DisplayHandler.md#ontooltip)
524527
* [OnStatusMessage](api/DisplayHandler.md#onstatusmessage)
@@ -670,6 +673,7 @@ Additional information for v31.2 release:
670673
* [OnPaint](api/RenderHandler.md#onpaint)
671674
* [OnCursorChange](api/RenderHandler.md#oncursorchange)
672675
* [OnScrollOffsetChanged](api/RenderHandler.md#onscrolloffsetchanged)
676+
* [OnTextSelectionChanged](api/RenderHandler.md#ontextselectionchanged)
673677
* [StartDragging](api/RenderHandler.md#startdragging)
674678
* [UpdateDragCursor](api/RenderHandler.md#updatedragcursor)
675679
* [Request (class)](api/Request.md#request-class)

api/API-index.md

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
* [HandleKeyEventAfterTextInputClient](Browser.md#handlekeyeventaftertextinputclient)
8080
* [HandleKeyEventBeforeTextInputClient](Browser.md#handlekeyeventbeforetextinputclient)
8181
* [HasDocument](Browser.md#hasdocument)
82+
* [Invalidate](Browser.md#invalidate)
8283
* [IsFullscreen](Browser.md#isfullscreen)
8384
* [IsLoading](Browser.md#isloading)
8485
* [IsMouseCursorChangeDisabled](Browser.md#ismousecursorchangedisabled)
@@ -93,6 +94,7 @@
9394
* [Reload](Browser.md#reload)
9495
* [ReloadIgnoreCache](Browser.md#reloadignorecache)
9596
* [ReplaceMisspelling](Browser.md#replacemisspelling)
97+
* [SetAutoResizeEnabled](Browser.md#setautoresizeenabled)
9698
* [SetBounds](Browser.md#setbounds)
9799
* [SendKeyEvent](Browser.md#sendkeyevent)
98100
* [SendMouseClickEvent](Browser.md#sendmouseclickevent)
@@ -207,6 +209,7 @@
207209
* [Visit](CookieVisitor.md#visit)
208210
* [DisplayHandler (interface)](DisplayHandler.md#displayhandler-interface)
209211
* [OnAddressChange](DisplayHandler.md#onaddresschange)
212+
* [OnAutoResize](DisplayHandler.md#onautoresize)
210213
* [OnTitleChange](DisplayHandler.md#ontitlechange)
211214
* [OnTooltip](DisplayHandler.md#ontooltip)
212215
* [OnStatusMessage](DisplayHandler.md#onstatusmessage)
@@ -358,6 +361,7 @@
358361
* [OnPaint](RenderHandler.md#onpaint)
359362
* [OnCursorChange](RenderHandler.md#oncursorchange)
360363
* [OnScrollOffsetChanged](RenderHandler.md#onscrolloffsetchanged)
364+
* [OnTextSelectionChanged](RenderHandler.md#ontextselectionchanged)
361365
* [StartDragging](RenderHandler.md#startdragging)
362366
* [UpdateDragCursor](RenderHandler.md#updatedragcursor)
363367
* [Request (class)](Request.md#request-class)

api/Browser.md

+17
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Table of contents:
5555
* [HandleKeyEventAfterTextInputClient](#handlekeyeventaftertextinputclient)
5656
* [HandleKeyEventBeforeTextInputClient](#handlekeyeventbeforetextinputclient)
5757
* [HasDocument](#hasdocument)
58+
* [Invalidate](#invalidate)
5859
* [IsFullscreen](#isfullscreen)
5960
* [IsLoading](#isloading)
6061
* [IsMouseCursorChangeDisabled](#ismousecursorchangedisabled)
@@ -69,6 +70,7 @@ Table of contents:
6970
* [Reload](#reload)
7071
* [ReloadIgnoreCache](#reloadignorecache)
7172
* [ReplaceMisspelling](#replacemisspelling)
73+
* [SetAutoResizeEnabled](#setautoresizeenabled)
7274
* [SetBounds](#setbounds)
7375
* [SendKeyEvent](#sendkeyevent)
7476
* [SendMouseClickEvent](#sendmouseclickevent)
@@ -753,6 +755,21 @@ If a misspelled word is currently selected in an editable node calling
753755
this method will replace it with the specified |word|.
754756

755757

758+
### SetAutoResizeEnabled
759+
760+
| Parameter | Type |
761+
| --- | --- |
762+
| enabled | bool |
763+
| min_size | list[width, height] |
764+
| max_size | list[width, heifght] |
765+
| __Return__ | void |
766+
767+
Description from upstream CEF:
768+
> Enable notifications of auto resize via CefDisplayHandler::OnAutoResize.
769+
> Notifications are disabled by default. |min_size| and |max_size| define the
770+
> range of allowed sizes.
771+
772+
756773
### SetBounds
757774

758775
| Parameter | Type |

api/DisplayHandler.md

+17
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ For an example of how to implement handler see [cefpython](cefpython.md).CreateB
1111
Table of contents:
1212
* [Callbacks](#callbacks)
1313
* [OnAddressChange](#onaddresschange)
14+
* [OnAutoResize](#onautoresize)
1415
* [OnTitleChange](#ontitlechange)
1516
* [OnTooltip](#ontooltip)
1617
* [OnStatusMessage](#onstatusmessage)
@@ -32,6 +33,22 @@ Table of contents:
3233
Called when a frame's address has changed.
3334

3435

36+
37+
### OnAutoResize
38+
39+
| Parameter | Type |
40+
| --- | --- |
41+
| browser | [Browser](Browser.md) |
42+
| new_size | list[width, height] |
43+
| __Return__ | bool |
44+
45+
Description from upstream CEF:
46+
> Called when auto-resize is enabled via CefBrowserHost::SetAutoResizeEnabled
47+
> and the contents have auto-resized. |new_size| will be the desired size in
48+
> view coordinates. Return true if the resize was handled or false for
49+
> default handling.
50+
51+
3552
### OnTitleChange
3653

3754
| Parameter | Type |

api/RenderHandler.md

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Table of contents:
2222
* [OnPaint](#onpaint)
2323
* [OnCursorChange](#oncursorchange)
2424
* [OnScrollOffsetChanged](#onscrolloffsetchanged)
25+
* [OnTextSelectionChanged](#ontextselectionchanged)
2526
* [StartDragging](#startdragging)
2627
* [UpdateDragCursor](#updatedragcursor)
2728

src/browser.pyx

+12-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ cdef class PyBrowser:
218218
# DisplayHandler
219219
self.allowedClientCallbacks += [
220220
"OnAddressChange", "OnTitleChange", "OnTooltip",
221-
"OnStatusMessage", "OnConsoleMessage"]
221+
"OnStatusMessage", "OnConsoleMessage", "OnAutoResize"]
222222
# KeyboardHandler
223223
self.allowedClientCallbacks += ["OnPreKeyEvent", "OnKeyEvent"]
224224
# RequestHandler
@@ -513,6 +513,17 @@ cdef class PyBrowser:
513513
PyToCefString(word, cef_word)
514514
self.GetCefBrowserHost().get().ReplaceMisspelling(cef_word)
515515

516+
cpdef py_void SetAutoResizeEnabled(self,
517+
py_bool enabled,
518+
list min_size,
519+
list max_size):
520+
self.GetCefBrowserHost().get().SetAutoResizeEnabled(
521+
bool(enabled),
522+
CefSize(min_size[0], min_size[1]),
523+
CefSize(max_size[0], max_size[1])
524+
)
525+
526+
516527
cpdef py_void SetBounds(self, int x, int y, int width, int height):
517528
IF UNAME_SYSNAME == "Linux":
518529
x11.SetX11WindowBounds(self.GetCefBrowser(), x, y, width, height)

src/cef_v59..v66_changes.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,15 @@ cef_render_handler.h
9393

9494
cef_browser.h
9595
+ SetAccessibilityState
96-
- SetAutoResizeEnabled
96+
+ SetAutoResizeEnabled
9797
- GetExtension
9898
- IsBackgroundHost
9999

100100
cef_cookie.h
101101
- GetBlockingManager
102102

103103
cef_display_handler.h
104-
- OnAutoResize
104+
+ OnAutoResize
105105
- OnLoadingProgressChange
106106

107107
cef_drag_data.h

src/client_handler/display_handler.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,9 @@ bool DisplayHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
4848
return DisplayHandler_OnConsoleMessage(browser, level, message, source,
4949
line);
5050
}
51+
52+
bool DisplayHandler::OnAutoResize(CefRefPtr<CefBrowser> browser,
53+
const CefSize& new_size) {
54+
REQUIRE_UI_THREAD();
55+
return DisplayHandler_OnAutoResize(browser, new_size);
56+
}

src/client_handler/display_handler.h

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class DisplayHandler : public CefDisplayHandler
3333
const CefString& source,
3434
int line) override;
3535

36+
bool OnAutoResize(CefRefPtr<CefBrowser> browser,
37+
const CefSize& new_size) override;
38+
3639
private:
3740
IMPLEMENT_REFCOUNTING(DisplayHandler);
3841
};

src/extern/cef/cef_browser.pxd

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ from libcpp cimport bool as cpp_bool
1111
from libcpp.vector cimport vector as cpp_vector
1212
from cef_frame cimport CefFrame
1313
cimport cef_types
14-
from cef_types cimport int64, cef_state_t, PaintElementType
14+
from cef_types cimport int64, cef_state_t, CefSize
1515
from cef_types cimport CefBrowserSettings, CefPoint
1616
from cef_drag_data cimport CefDragData
1717
from cef_types cimport CefMouseEvent
@@ -87,7 +87,10 @@ cdef extern from "include/cef_browser.h":
8787
void AddWordToDictionary(const CefString& word)
8888

8989
void SetAccessibilityState(cef_state_t accessibility_state)
90-
void Invalidate(cef_types.cef_paint_element_type_t type)
90+
void Invalidate(cef_types.cef_paint_element_type_t element_type)
91+
void SetAutoResizeEnabled(cpp_bool enabled,
92+
const CefSize& min_size,
93+
const CefSize& max_size)
9194

9295

9396
cdef cppclass CefBrowser:

src/handlers/display_handler.pyx

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ cdef public void DisplayHandler_OnAddressChange(
2525
(exc_type, exc_value, exc_trace) = sys.exc_info()
2626
sys.excepthook(exc_type, exc_value, exc_trace)
2727

28+
29+
cdef public cpp_bool DisplayHandler_OnAutoResize(
30+
CefRefPtr[CefBrowser] cef_browser,
31+
const CefSize& new_size
32+
) except * with gil:
33+
cdef PyBrowser browser
34+
cdef object callback
35+
try:
36+
browser = GetPyBrowser(cef_browser, "OnAutoResize")
37+
callback = browser.GetClientCallback("OnAutoResize")
38+
if callback:
39+
return bool(callback(browser=browser, new_size=[new_size.width,
40+
new_size.height]))
41+
return False
42+
except:
43+
(exc_type, exc_value, exc_trace) = sys.exc_info()
44+
sys.excepthook(exc_type, exc_value, exc_trace)
45+
46+
2847
cdef public void DisplayHandler_OnTitleChange(
2948
CefRefPtr[CefBrowser] cefBrowser,
3049
const CefString& cefTitle

unittests/_common.py

+9
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,18 @@
66

77
import base64
88
import os
9+
import platform
910
import sys
1011
import time
1112

13+
# Platforms
14+
SYSTEM = platform.system().upper()
15+
if SYSTEM == "DARWIN":
16+
SYSTEM = "MAC"
17+
WINDOWS = SYSTEM if SYSTEM == "WINDOWS" else False
18+
LINUX = SYSTEM if SYSTEM == "LINUX" else False
19+
MAC = SYSTEM if SYSTEM == "MAC" else False
20+
1221
# To show the window for an extended period of time increase this number.
1322
MESSAGE_LOOP_RANGE = 100 # each iteration is 0.01 sec
1423

0 commit comments

Comments
 (0)