forked from cztomczak/cefpython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwindow_info.pyx
More file actions
138 lines (125 loc) · 5.87 KB
/
window_info.pyx
File metadata and controls
138 lines (125 loc) · 5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Copyright (c) 2013 CEF Python, see the Authors file.
# All rights reserved. Licensed under BSD 3-clause license.
# Project website: https://github.com/cztomczak/cefpython
include "cefpython.pyx"
cdef void SetCefWindowInfo(
CefWindowInfo& cefWindowInfo,
WindowInfo windowInfo
) except *:
if not windowInfo.windowType:
raise Exception("WindowInfo: windowType is not set")
# It is allowed to pass 0 as parentWindowHandle in OSR mode, but then
# some things like context menus and plugins may not display correctly.
if windowInfo.windowType != "offscreen":
if not windowInfo.parentWindowHandle:
# raise Exception("WindowInfo: parentWindowHandle is not set")
pass
IF UNAME_SYSNAME == "Windows":
cdef RECT windowRect
cdef CefString windowName
ELIF UNAME_SYSNAME == "Linux":
cdef CefRect windowRect
# CHILD WINDOW
if windowInfo.windowType == "child":
IF UNAME_SYSNAME == "Windows":
if windowInfo.windowRect:
windowRect.left = int(windowInfo.windowRect[0])
windowRect.top = int(windowInfo.windowRect[1])
windowRect.right = int(windowInfo.windowRect[2])
windowRect.bottom = int(windowInfo.windowRect[3])
else:
GetClientRect(<CefWindowHandle>windowInfo.parentWindowHandle,
&windowRect)
cefWindowInfo.SetAsChild(
<CefWindowHandle>windowInfo.parentWindowHandle,
windowRect)
ELIF UNAME_SYSNAME == "Darwin":
cefWindowInfo.SetAsChild(
<CefWindowHandle>windowInfo.parentWindowHandle,
int(windowInfo.windowRect[0]),
int(windowInfo.windowRect[1]),
int(windowInfo.windowRect[2]),
int(windowInfo.windowRect[3]))
ELIF UNAME_SYSNAME == "Linux":
x = int(windowInfo.windowRect[0])
y = int(windowInfo.windowRect[1])
width = int(windowInfo.windowRect[2] - windowInfo.windowRect[0])
height = int(windowInfo.windowRect[3] - windowInfo.windowRect[1])
windowRect = CefRect(x, y, width, height)
cefWindowInfo.SetAsChild(
<CefWindowHandle>windowInfo.parentWindowHandle,
windowRect)
# POPUP WINDOW - Windows only
IF UNAME_SYSNAME == "Windows":
if windowInfo.windowType == "popup":
PyToCefString(windowInfo.windowName, windowName)
cefWindowInfo.SetAsPopup(
<CefWindowHandle>windowInfo.parentWindowHandle,
windowName)
cdef cpp_bool transparent = bool(windowInfo.transparentPainting)
if windowInfo.windowType == "offscreen":
cefWindowInfo.SetAsWindowless(
<CefWindowHandle>windowInfo.parentWindowHandle,
transparent)
cdef class WindowInfo:
cdef public str windowType
cdef public WindowHandle parentWindowHandle
cdef public list windowRect # [left, top, right, bottom]
cdef public py_string windowName
cdef public py_bool transparentPainting
def __init__(self, title=""):
self.transparentPainting = False
self.windowName = ""
if title:
self.windowName = title
cpdef py_void SetAsChild(self, WindowHandle parentWindowHandle,
list windowRect=None):
# Allow parent window handle to be 0, in such case CEF will
# create top window automatically as in hello_world.py example.
IF UNAME_SYSNAME == "Windows":
# On Windows when parent window handle is 0 then SetAsPopup()
# must be called instead.
if parentWindowHandle == 0:
self.SetAsPopup(parentWindowHandle, "")
return
if parentWindowHandle != 0\
and not WindowUtils.IsWindowHandle(parentWindowHandle):
raise Exception("Invalid parentWindowHandle: %s"\
% parentWindowHandle)
self.windowType = "child"
self.parentWindowHandle = parentWindowHandle
IF UNAME_SYSNAME == "Darwin" or UNAME_SYSNAME == "Linux":
if not windowRect:
windowRect = [0,0,0,0]
if windowRect:
if type(windowRect) == list and len(windowRect) == 4:
self.windowRect = [windowRect[0], windowRect[1],
windowRect[2], windowRect[3]]
else:
raise Exception("WindowInfo.SetAsChild() failed: "
"windowRect: invalid value")
IF UNAME_SYSNAME == "Windows":
cpdef py_void SetAsPopup(self, WindowHandle parentWindowHandle,
py_string windowName):
# Allow parent window handle to be 0, in such case CEF will
# create top window automatically as in hello_world.py example.
if parentWindowHandle != 0\
and not WindowUtils.IsWindowHandle(parentWindowHandle):
raise Exception("Invalid parentWindowHandle: %s"\
% parentWindowHandle)
self.parentWindowHandle = parentWindowHandle
self.windowType = "popup"
if windowName:
self.windowName = str(windowName)
cpdef py_void SetAsOffscreen(self,
WindowHandle parentWindowHandle):
# It is allowed to pass 0 as parentWindowHandle in OSR mode
if parentWindowHandle and \
not WindowUtils.IsWindowHandle(parentWindowHandle):
raise Exception("Invalid parentWindowHandle: %s" \
% parentWindowHandle)
self.parentWindowHandle = parentWindowHandle
self.windowType = "offscreen"
cpdef py_void SetTransparentPainting(self,
py_bool transparentPainting):
self.transparentPainting = transparentPainting