Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
916746bd
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
916746bd
编写于
1月 04, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
v2.0 Fixed Chinese input and gtk3 issues for linux packaging
上级
863f7cca
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
438 addition
and
434 deletion
+438
-434
cef/cef-aux-dev-tools-window.go
cef/cef-aux-dev-tools-window.go
+6
-3
cef/cef-aux-view-source-window.go
cef/cef-aux-view-source-window.go
+12
-11
cef/cef-browser-config.go
cef/cef-browser-config.go
+2
-2
cef/cef-browser-window.go
cef/cef-browser-window.go
+29
-42
cef/cef-commponent-tray_window.go
cef/cef-commponent-tray_window.go
+6
-0
cef/cef-events-callback.go
cef/cef-events-callback.go
+4
-6
cef/cef-events-def.go
cef/cef-events-def.go
+1
-1
cef/cef-frame.go
cef/cef-frame.go
+11
-0
cef/cef-lcl-browser-window.go
cef/cef-lcl-browser-window.go
+211
-41
cef/cef-views-framework-browser-window.go
cef/cef-views-framework-browser-window.go
+8
-8
cef/window-component.go
cef/window-component.go
+2
-2
cef/window-component_windows.go
cef/window-component_windows.go
+2
-2
cef/window-info.go
cef/window-info.go
+0
-235
cef/window.go
cef/window.go
+67
-0
example/browser-control/src/main-browser-window.go
example/browser-control/src/main-browser-window.go
+4
-4
example/browser-cookie/cookie.go
example/browser-cookie/cookie.go
+1
-1
example/browser-download/download.go
example/browser-download/download.go
+2
-2
example/browser-ipc-on-emit/js-to-go/js-to-go.go
example/browser-ipc-on-emit/js-to-go/js-to-go.go
+2
-2
example/browser-key-event/key-event.go
example/browser-key-event/key-event.go
+1
-1
example/browser-linux/linux.go
example/browser-linux/linux.go
+0
-5
example/mini-browser/src/min-browser.go
example/mini-browser/src/min-browser.go
+67
-66
未找到文件。
cef/cef-aux-dev-tools-window.go
浏览文件 @
916746bd
...
...
@@ -29,8 +29,11 @@ func updateBrowserDevTools(browser *ICefBrowser, title string) {
}
}
}
func
createBrowserDevTools
(
browser
*
ICefBrowser
,
browserWinInfo
*
TCefWindowInfo
)
{
func
createBrowserDevTools
(
browser
*
ICefBrowser
,
browserWinInfo
*
LCLBrowserWindow
)
{
QueueAsyncCall
(
func
(
id
int
)
{
if
browserWinInfo
.
auxTools
==
nil
{
browserWinInfo
.
auxTools
=
&
auxTools
{}
}
winAuxTools
:=
browserWinInfo
.
auxTools
if
winAuxTools
.
devToolsWindow
!=
nil
{
winAuxTools
.
devToolsWindow
.
Show
()
...
...
@@ -38,7 +41,7 @@ func createBrowserDevTools(browser *ICefBrowser, browserWinInfo *TCefWindowInfo)
}
winAuxTools
.
devToolsWindow
=
&
LCLBrowserWindow
{}
winAuxTools
.
devToolsWindow
.
SetWindowType
(
WT_DEV_TOOLS
)
winAuxTools
.
devToolsWindow
.
TForm
=
lcl
.
NewForm
(
browserWinInfo
.
Window
)
winAuxTools
.
devToolsWindow
.
TForm
=
lcl
.
NewForm
(
browserWinInfo
)
winAuxTools
.
devToolsWindow
.
SetCaption
(
fmt
.
Sprintf
(
"%s - %s"
,
dev_tools_name
,
browser
.
MainFrame
()
.
Url
))
winAuxTools
.
devToolsWindow
.
FormCreate
()
winAuxTools
.
devToolsWindow
.
defaultWindowEvent
()
...
...
@@ -80,7 +83,7 @@ func createBrowserDevTools(browser *ICefBrowser, browserWinInfo *TCefWindowInfo)
winAuxTools
.
devToolsWindow
.
ChromiumCreate
(
nil
,
""
)
winAuxTools
.
devToolsWindow
.
putChromiumWindowInfo
()
winAuxTools
.
devToolsWindow
.
defaultChromiumEvent
()
winAuxTools
.
devToolsWindow
.
windowInfo
=
browserWinInfo
//
winAuxTools.devToolsWindow.windowInfo = browserWinInfo
winAuxTools
.
devToolsWindow
.
Show
()
//明确的生成下一个窗体序号
BrowserWindow
.
setOrIncNextWindowNum
()
...
...
cef/cef-aux-view-source-window.go
浏览文件 @
916746bd
...
...
@@ -19,22 +19,20 @@ const (
)
func
updateBrowserViewSource
(
browser
*
ICefBrowser
,
title
string
)
{
if
browserWinInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
browserWinInfo
!=
nil
&&
browserWinInfo
.
Window
!=
nil
&&
browserWinInfo
.
Window
.
WindowType
()
==
WT_VIEW_SOURCE
{
if
browserWinInfo
.
Window
!=
nil
{
QueueAsyncCall
(
func
(
id
int
)
{
if
mainFrame
:=
browser
.
MainFrame
();
mainFrame
!=
nil
{
browserWinInfo
.
Window
.
SetCaption
(
fmt
.
Sprintf
(
"%s - %s"
,
view_source_name
,
mainFrame
.
Url
))
}
else
{
logger
.
Error
(
"failed to get main frame"
)
}
})
}
if
browserWinInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
browserWinInfo
!=
nil
&&
browserWinInfo
.
WindowType
()
==
WT_VIEW_SOURCE
{
QueueAsyncCall
(
func
(
id
int
)
{
if
mainFrame
:=
browser
.
MainFrame
();
mainFrame
!=
nil
{
browserWinInfo
.
SetCaption
(
fmt
.
Sprintf
(
"%s - %s"
,
view_source_name
,
mainFrame
.
Url
))
}
else
{
logger
.
Error
(
"failed to get main frame"
)
}
})
}
}
func
viewSourceAfterCreate
(
browser
*
ICefBrowser
)
bool
{
if
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
winInfo
!=
nil
{
if
winInfo
.
Window
.
Window
Type
()
==
WT_VIEW_SOURCE
&&
winInfo
.
auxTools
.
viewSourceWindow
!=
nil
{
if
winInfo
.
WindowType
()
==
WT_VIEW_SOURCE
&&
winInfo
.
auxTools
.
viewSourceWindow
!=
nil
{
winInfo
.
auxTools
.
viewSourceWindow
.
chromium
.
LoadUrl
(
winInfo
.
auxTools
.
viewSourceUrl
)
return
true
}
...
...
@@ -58,6 +56,9 @@ func createBrowserViewSource(browser *ICefBrowser, frame *ICefFrame) {
m
.
SetWidth
(
1024
)
m
.
SetHeight
(
768
)
if
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
m
.
windowId
);
winInfo
!=
nil
{
if
winInfo
.
auxTools
==
nil
{
winInfo
.
auxTools
=
&
auxTools
{}
}
winInfo
.
auxTools
.
viewSourceUrl
=
viewSourceUrl
winInfo
.
auxTools
.
viewSourceWindow
=
m
}
...
...
cef/cef-browser-config.go
浏览文件 @
916746bd
...
...
@@ -13,8 +13,8 @@ import (
)
type
viewsFrameBrowserWindowOnEventCallback
func
(
event
*
BrowserEvent
,
window
*
ViewsFrameworkBrowserWindow
)
type
browserWindowOnEventCallback
func
(
event
*
BrowserEvent
,
window
*
TCefWindowInfo
)
type
browserWindowAfterOnEventCallback
func
(
window
*
TCefWindowInfo
)
type
browserWindowOnEventCallback
func
(
event
*
BrowserEvent
,
window
*
LCLBrowserWindow
)
type
browserWindowAfterOnEventCallback
func
(
window
*
LCLBrowserWindow
)
//创建主窗口指定的一些快捷配置属性
type
browserConfig
struct
{
...
...
cef/cef-browser-window.go
浏览文件 @
916746bd
...
...
@@ -30,7 +30,7 @@ var (
Config
:
&
browserConfig
{
WindowProperty
:
*
NewWindowProperty
(),
},
windowInfo
:
make
(
map
[
int32
]
*
TCefWindowInfo
),
windowInfo
:
make
(
map
[
int32
]
*
LCLBrowserWindow
),
windowSerial
:
1
,
uiLock
:
new
(
sync
.
Mutex
),
}
...
...
@@ -50,12 +50,12 @@ func SetBrowserProcessStartAfterCallback(callback browserProcessStartAfterCallba
// 浏览器包装结构体
type
browser
struct
{
mainBrowserWindow
*
browserWindow
//主浏览器窗口
popupWindow
*
LCLBrowserWindow
//弹出的子窗口
browserEvent
*
BrowserEvent
//浏览器全局事件
Config
*
browserConfig
//浏览器和窗口配置
windowInfo
map
[
int32
]
*
TCefWindowInfo
//窗口信息集合
windowSerial
int32
//窗口序号
mainBrowserWindow
*
browserWindow
//主浏览器窗口
popupWindow
*
LCLBrowserWindow
//弹出的子窗口
browserEvent
*
BrowserEvent
//浏览器全局事件
Config
*
browserConfig
//浏览器和窗口配置
windowInfo
map
[
int32
]
*
LCLBrowserWindow
//窗口信息集合
windowSerial
int32
//窗口序号
uiLock
*
sync
.
Mutex
}
...
...
@@ -139,7 +139,6 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
m
.
ChromiumCreate
(
BrowserWindow
.
Config
.
chromiumConfig
,
BrowserWindow
.
Config
.
Url
)
m
.
putChromiumWindowInfo
()
m
.
defaultChromiumEvent
()
BrowserWindow
.
mainBrowserWindow
.
windowInfo
=
m
.
windowInfo
m
.
AddOnCloseQuery
(
func
(
sender
lcl
.
IObject
,
canClose
*
bool
)
bool
{
if
m
.
tray
!=
nil
{
m
.
tray
.
close
()
...
...
@@ -149,14 +148,14 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
if
BrowserWindow
.
Config
.
Title
!=
""
{
m
.
SetCaption
(
BrowserWindow
.
Config
.
Title
)
}
if
BrowserWindow
.
Config
.
Icon
!=
""
{
lcl
.
Application
.
Icon
()
.
LoadFromFSFile
(
BrowserWindow
.
Config
.
Icon
)
if
BrowserWindow
.
Config
.
Icon
FS
!=
""
{
lcl
.
Application
.
Icon
()
.
LoadFromFSFile
(
BrowserWindow
.
Config
.
Icon
FS
)
}
m
.
SetWidth
(
BrowserWindow
.
Config
.
Width
)
m
.
SetHeight
(
BrowserWindow
.
Config
.
Height
)
if
BrowserWindow
.
Config
.
browserWindowOnEventCallback
!=
nil
{
BrowserWindow
.
browserEvent
.
chromium
=
m
.
chromium
BrowserWindow
.
Config
.
browserWindowOnEventCallback
(
BrowserWindow
.
browserEvent
,
m
.
windowInfo
)
BrowserWindow
.
Config
.
browserWindowOnEventCallback
(
BrowserWindow
.
browserEvent
,
&
m
.
LCLBrowserWindow
)
}
//主进程(主窗口)启动后回调函数事件
...
...
@@ -165,14 +164,14 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
if
!
m
.
isFirstActivate
{
m
.
isFirstActivate
=
true
if
BrowserWindow
.
Config
.
browserWindowAfterOnEventCallback
!=
nil
{
BrowserWindow
.
Config
.
browserWindowAfterOnEventCallback
(
m
.
windowInfo
)
BrowserWindow
.
Config
.
browserWindowAfterOnEventCallback
(
&
m
.
LCLBrowserWindow
)
}
}
})
}
func
(
m
*
browser
)
MainWindow
()
*
TCefWindowInfo
{
return
m
.
mainBrowserWindow
.
windowInfo
func
(
m
*
browser
)
MainWindow
()
*
LCLBrowserWindow
{
return
&
m
.
mainBrowserWindow
.
LCLBrowserWindow
}
// 基于CEF views framework窗口 - 主窗口和chromium初始化时回调
...
...
@@ -240,30 +239,26 @@ func (m *browser) GetNextWindowNum() int32 {
func
(
m
*
browser
)
createNextPopupWindow
()
{
m
.
popupWindow
=
&
LCLBrowserWindow
{}
m
.
popupWindow
.
TForm
=
lcl
.
NewForm
(
m
.
MainWindow
()
.
Window
)
m
.
popupWindow
.
TForm
=
lcl
.
NewForm
(
m
.
MainWindow
())
m
.
popupWindow
.
FormCreate
()
m
.
popupWindow
.
defaultWindowEvent
()
m
.
popupWindow
.
defaultWindowCloseEvent
()
}
// 拿到窗口信息
func
(
m
*
browser
)
GetWindowInfo
(
browserId
int32
)
*
TCefWindowInfo
{
func
(
m
*
browser
)
GetWindowInfo
(
browserId
int32
)
*
LCLBrowserWindow
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browserId
];
ok
{
return
winInfo
}
return
nil
}
func
(
m
*
browser
)
GetWindowsInfo
()
map
[
int32
]
*
TCefWindowInfo
{
func
(
m
*
browser
)
GetWindowsInfo
()
map
[
int32
]
*
LCLBrowserWindow
{
return
m
.
windowInfo
}
func
(
m
*
browser
)
putWindowInfo
(
browserId
int32
,
windowInfo
*
TCefWindowInfo
)
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browserId
];
ok
{
winInfo
.
Window
=
windowInfo
.
Window
}
else
{
m
.
windowInfo
[
browserId
]
=
windowInfo
}
func
(
m
*
browser
)
putWindowInfo
(
browserId
int32
,
windowInfo
*
LCLBrowserWindow
)
{
m
.
windowInfo
[
browserId
]
=
windowInfo
}
func
(
m
*
browser
)
removeWindowInfo
(
browseId
int32
)
{
...
...
@@ -273,46 +268,38 @@ func (m *browser) removeWindowInfo(browseId int32) {
func
(
m
*
browser
)
GetBrowser
(
browseId
int32
)
*
ICefBrowser
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browseId
];
ok
{
return
winInfo
.
B
rowser
return
winInfo
.
b
rowser
}
return
nil
}
func
(
m
*
browser
)
putBrowserFrame
(
browser
*
ICefBrowser
,
frame
*
ICefFrame
)
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browser
.
Identifier
()];
!
ok
{
winInfo
=
&
TCefWindowInfo
{
Browser
:
browser
,
Frames
:
make
(
map
[
int64
]
*
ICefFrame
),
}
if
frame
!=
nil
{
winInfo
.
Frames
[
frame
.
Id
]
=
frame
}
m
.
windowInfo
[
browser
.
Identifier
()]
=
winInfo
}
else
{
winInfo
.
Browser
=
browser
if
frame
!=
nil
{
winInfo
.
Frames
[
frame
.
Id
]
=
frame
if
winInfo
,
ok
:=
m
.
windowInfo
[
browser
.
Identifier
()];
ok
{
if
winInfo
.
frames
==
nil
{
winInfo
.
frames
=
make
(
TCEFFrame
)
}
winInfo
.
browser
=
browser
winInfo
.
frames
[
frame
.
Id
]
=
frame
}
}
func
(
m
*
browser
)
GetFrames
(
browseId
int32
)
map
[
int64
]
*
ICefFrame
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browseId
];
ok
{
return
winInfo
.
F
rames
return
winInfo
.
f
rames
}
return
nil
}
func
(
m
*
browser
)
GetFrame
(
browseId
int32
,
frameId
int64
)
*
ICefFrame
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browseId
];
ok
{
return
winInfo
.
F
rames
[
frameId
]
return
winInfo
.
f
rames
[
frameId
]
}
return
nil
}
func
(
m
*
browser
)
RemoveFrame
(
browseId
int32
,
frameId
int64
)
{
if
winInfo
,
ok
:=
m
.
windowInfo
[
browseId
];
ok
{
delete
(
winInfo
.
F
rames
,
frameId
)
delete
(
winInfo
.
f
rames
,
frameId
)
}
}
...
...
@@ -325,9 +312,9 @@ func (m *browser) IsSameFrame(browseId int32, frameId int64) bool {
func
(
m
*
browser
)
removeNoValidFrames
()
{
for
_
,
winInfo
:=
range
m
.
windowInfo
{
for
_
,
frm
:=
range
winInfo
.
F
rames
{
for
_
,
frm
:=
range
winInfo
.
f
rames
{
if
!
frm
.
IsValid
()
{
delete
(
winInfo
.
F
rames
,
frm
.
Id
)
delete
(
winInfo
.
f
rames
,
frm
.
Id
)
}
}
}
...
...
cef/cef-commponent-tray_window.go
浏览文件 @
916746bd
...
...
@@ -172,11 +172,17 @@ func (m *tCefTrayForm) createCefTrayWindow() {
m
.
TForm
.
InheritedWndProc
(
msg
)
if
msg
.
Msg
==
6
&&
msg
.
WParam
==
0
&&
msg
.
LParam
==
0
{
QueueAsyncCall
(
func
(
id
int
)
{
if
m
.
isClosing
{
return
}
m
.
TForm
.
Hide
()
})
}
})
m
.
TForm
.
SetOnDeactivate
(
func
(
sender
lcl
.
IObject
)
{
if
m
.
isClosing
{
return
}
m
.
TForm
.
Hide
()
})
...
...
cef/cef-events-callback.go
浏览文件 @
916746bd
...
...
@@ -77,11 +77,9 @@ func chromiumOnBeforeContextMenu(sender lcl.IObject, browser *ICefBrowser, frame
return
}
if
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
winInfo
!=
nil
{
if
winInfo
.
Window
!=
nil
{
//开发者工具和显示源代码不展示框架自定义菜单
if
winInfo
.
Window
.
WindowType
()
==
WT_DEV_TOOLS
||
winInfo
.
Window
.
WindowType
()
==
WT_VIEW_SOURCE
{
return
}
//开发者工具和显示源代码不展示框架自定义菜单
if
winInfo
.
WindowType
()
==
WT_DEV_TOOLS
||
winInfo
.
WindowType
()
==
WT_VIEW_SOURCE
{
return
}
}
undoVisible
,
undoEnabled
:=
model
.
IsVisible
(
MENU_ID_UNDO
),
model
.
IsEnabled
(
MENU_ID_UNDO
)
...
...
@@ -282,7 +280,7 @@ func chromiumOnContextMenuCommand(sender lcl.IObject, browser *ICefBrowser, fram
browser
.
Print
()
}
else
if
commandId
==
closeBrowserId
{
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
())
winInfo
.
Close
()
winInfo
.
Close
BrowserWindow
()
}
else
if
commandId
==
refreshId
{
browser
.
Reload
()
}
else
if
commandId
==
forcedRefreshId
{
...
...
cef/cef-events-def.go
浏览文件 @
916746bd
...
...
@@ -109,7 +109,7 @@ type ChromiumEventOnMainFrameChanged func(sender lcl.IObject, browser *ICefBrows
type
ChromiumEventOnBeforePopup
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
beforePopupInfo
*
BeforePopupInfo
,
client
*
ICefClient
,
noJavascriptAccess
*
bool
)
bool
// windowParent popup
type
ChromiumEventOnBeforePopupForWindowInfo
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
beforePopupInfo
*
BeforePopupInfo
,
popupWindow
*
TCefWindowInfo
,
noJavascriptAccess
*
bool
)
bool
type
ChromiumEventOnBeforePopupForWindowInfo
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
beforePopupInfo
*
BeforePopupInfo
,
popupWindow
*
LCLBrowserWindow
,
noJavascriptAccess
*
bool
)
bool
// windowParent open url from tab
type
ChromiumEventOnOpenUrlFromTab
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
)
...
...
cef/cef-frame.go
浏览文件 @
916746bd
...
...
@@ -30,6 +30,17 @@ type cefFrame struct {
Identifier
uintptr
}
type
TCEFFrame
map
[
int64
]
*
ICefFrame
func
(
m
TCEFFrame
)
GetByFrameId
(
frameId
int64
)
*
ICefFrame
{
if
m
!=
nil
{
if
frame
,
ok
:=
m
[
frameId
];
ok
{
return
frame
}
}
return
nil
}
func
(
m
*
ICefFrame
)
Undo
()
{
var
frameId
=
m
.
Id
Proc
(
internale_CEFFrame_Undo
)
.
Call
(
uintptr
(
m
.
Browser
.
Identifier
()),
uintptr
(
unsafe
.
Pointer
(
&
frameId
)))
...
...
cef/cef-lcl-browser-window.go
浏览文件 @
916746bd
...
...
@@ -35,24 +35,25 @@ type IBaseWindow interface {
//LCLBrowserWindow 基于chromium 和 lcl 的窗口组件
type
LCLBrowserWindow
struct
{
*
lcl
.
TForm
//
chromium
IChromium
//
windowParent
ITCefWindowParent
//
windowProperty
*
WindowProperty
vFrameBrowserWindow
*
ViewsFrameworkBrowserWindow
//基于CEF views framework窗口
windowInfo
*
TCefWindowInfo
//基于LCL窗口信息
windowId
int32
//
windowType
consts
.
WINDOW_TYPE
//0:browser 1:devTools 2:viewSource 默认:0
isClosing
bool
//
canClose
bool
//
onResize
[]
TNotifyEvent
//
onActivate
[]
TNotifyEvent
//
onShow
[]
TNotifyEvent
//
onClose
[]
TCloseEvent
//
onCloseQuery
[]
TCloseQueryEvent
//
onActivateAfter
lcl
.
TNotifyEvent
//
isFormCreate
bool
//是否创建完成 WindowForm
isChromiumCreate
bool
//是否创建完成 Chromium
*
lcl
.
TForm
//
chromium
IChromium
//
browser
*
ICefBrowser
//
windowParent
ITCefWindowParent
//
windowProperty
*
WindowProperty
//
windowId
int32
//
windowType
consts
.
WINDOW_TYPE
//0:browser 1:devTools 2:viewSource 默认:0
isClosing
bool
//
canClose
bool
//
onResize
[]
TNotifyEvent
//
onActivate
[]
TNotifyEvent
//
onShow
[]
TNotifyEvent
//
onClose
[]
TCloseEvent
//
onCloseQuery
[]
TCloseQueryEvent
//
onActivateAfter
lcl
.
TNotifyEvent
//
isFormCreate
bool
//是否创建完成 WindowForm
isChromiumCreate
bool
//是否创建完成 Chromium
frames
TCEFFrame
//当前浏览器下的所有frame
auxTools
*
auxTools
//辅助工具
}
//创建一个带有 chromium 窗口
...
...
@@ -70,6 +71,10 @@ func NewBrowserWindow(config *tCefChromiumConfig, windowProperty *WindowProperty
return
window
}
func
(
m
*
LCLBrowserWindow
)
Browser
()
*
ICefBrowser
{
return
m
.
browser
}
func
(
m
*
LCLBrowserWindow
)
Chromium
()
IChromium
{
return
m
.
chromium
}
...
...
@@ -106,11 +111,6 @@ func (m *LCLBrowserWindow) SetVisible(value bool) {
m
.
TForm
.
SetVisible
(
value
)
}
//返回窗口信息
func
(
m
*
LCLBrowserWindow
)
WindowInfo
()
*
TCefWindowInfo
{
return
m
.
windowInfo
}
//以默认的方式展示在任务栏上
func
(
m
*
LCLBrowserWindow
)
SetDefaultInTaskBar
()
{
if
m
.
TForm
==
nil
{
...
...
@@ -203,14 +203,7 @@ func (m *LCLBrowserWindow) ChromiumCreate(config *tCefChromiumConfig, defaultUrl
}
func
(
m
*
LCLBrowserWindow
)
putChromiumWindowInfo
()
{
m
.
windowInfo
=
&
TCefWindowInfo
{
Window
:
m
,
Browser
:
nil
,
Frames
:
make
(
map
[
int64
]
*
ICefFrame
),
WindowProperty
:
NewWindowProperty
(),
auxTools
:
&
auxTools
{},
}
BrowserWindow
.
putWindowInfo
(
m
.
windowId
,
m
.
windowInfo
)
BrowserWindow
.
putWindowInfo
(
m
.
windowId
,
m
)
}
//默认的chromium事件
...
...
@@ -292,6 +285,181 @@ func (m *LCLBrowserWindow) SetOnActivateAfter(fn lcl.TNotifyEvent) {
m
.
onActivateAfter
=
fn
}
func
(
m
*
LCLBrowserWindow
)
Minimize
()
{
if
m
.
TForm
==
nil
{
return
}
QueueAsyncCall
(
func
(
id
int
)
{
m
.
SetWindowState
(
types
.
WsMinimized
)
})
}
func
(
m
*
LCLBrowserWindow
)
Maximize
()
{
if
m
.
TForm
==
nil
{
return
}
QueueAsyncCall
(
func
(
id
int
)
{
var
bs
=
m
.
BorderStyle
()
var
monitor
=
m
.
Monitor
()
.
WorkareaRect
()
if
m
.
windowProperty
==
nil
{
m
.
windowProperty
=
&
WindowProperty
{}
}
if
bs
==
types
.
BsNone
{
var
ws
=
m
.
WindowState
()
var
redWindowState
types
.
TWindowState
//默认状态0
if
m
.
windowProperty
.
WindowState
==
types
.
WsNormal
&&
m
.
windowProperty
.
WindowState
==
ws
{
redWindowState
=
types
.
WsMaximized
}
else
{
if
m
.
windowProperty
.
WindowState
==
types
.
WsNormal
{
redWindowState
=
types
.
WsMaximized
}
else
if
m
.
windowProperty
.
WindowState
==
types
.
WsMaximized
{
redWindowState
=
types
.
WsNormal
}
}
m
.
windowProperty
.
WindowState
=
redWindowState
if
redWindowState
==
types
.
WsMaximized
{
m
.
windowProperty
.
X
=
m
.
Left
()
m
.
windowProperty
.
Y
=
m
.
Top
()
m
.
windowProperty
.
Width
=
m
.
Width
()
m
.
windowProperty
.
Height
=
m
.
Height
()
m
.
SetLeft
(
monitor
.
Left
)
m
.
SetTop
(
monitor
.
Top
)
m
.
SetWidth
(
monitor
.
Right
-
monitor
.
Left
-
1
)
m
.
SetHeight
(
monitor
.
Bottom
-
monitor
.
Top
-
1
)
}
else
if
redWindowState
==
types
.
WsNormal
{
m
.
SetLeft
(
m
.
windowProperty
.
X
)
m
.
SetTop
(
m
.
windowProperty
.
Y
)
m
.
SetWidth
(
m
.
windowProperty
.
Width
)
m
.
SetHeight
(
m
.
windowProperty
.
Height
)
}
}
else
{
if
m
.
WindowState
()
==
types
.
WsMaximized
{
m
.
SetWindowState
(
types
.
WsNormal
)
if
IsDarwin
()
{
m
.
SetWindowState
(
types
.
WsMaximized
)
m
.
SetWindowState
(
types
.
WsNormal
)
}
}
else
if
m
.
WindowState
()
==
types
.
WsNormal
{
m
.
SetWindowState
(
types
.
WsMaximized
)
}
m
.
windowProperty
.
WindowState
=
m
.
WindowState
()
}
})
}
// 关闭带有浏览器的窗口
func
(
m
*
LCLBrowserWindow
)
CloseBrowserWindow
()
{
if
m
.
TForm
==
nil
{
return
}
QueueAsyncCall
(
func
(
id
int
)
{
if
m
==
nil
{
logger
.
Error
(
"关闭浏览器 WindowInfo 为空"
)
return
}
if
IsDarwin
()
{
//main window close
if
m
.
WindowType
()
==
consts
.
WT_MAIN_BROWSER
{
m
.
Close
()
}
else
{
//sub window close
m
.
isClosing
=
true
m
.
Hide
()
m
.
chromium
.
CloseBrowser
(
true
)
}
}
else
{
m
.
isClosing
=
true
m
.
Hide
()
m
.
chromium
.
CloseBrowser
(
true
)
}
})
}
//禁用口透明
func
(
m
*
LCLBrowserWindow
)
DisableTransparent
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetAllowDropFiles
(
false
)
m
.
SetAlphaBlend
(
false
)
m
.
SetAlphaBlendValue
(
255
)
}
//使窗口透明 value 0 ~ 255
func
(
m
*
LCLBrowserWindow
)
EnableTransparent
(
value
uint8
)
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetAllowDropFiles
(
true
)
m
.
SetAlphaBlend
(
true
)
m
.
SetAlphaBlendValue
(
value
)
}
//禁用最小化按钮
func
(
m
*
LCLBrowserWindow
)
DisableMinimize
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Exclude
(
types
.
BiMinimize
))
}
//禁用最大化按钮
func
(
m
*
LCLBrowserWindow
)
DisableMaximize
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Exclude
(
types
.
BiMaximize
))
}
//禁用系统菜单-同时禁用最小化,最大化,关闭按钮
func
(
m
*
LCLBrowserWindow
)
DisableSystemMenu
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Exclude
(
types
.
BiSystemMenu
))
}
//禁用帮助菜单
func
(
m
*
LCLBrowserWindow
)
DisableHelp
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Exclude
(
types
.
BiHelp
))
}
//启用最小化按钮
func
(
m
*
LCLBrowserWindow
)
EnableMinimize
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Include
(
types
.
BiMinimize
))
}
//启用最大化按钮
func
(
m
*
LCLBrowserWindow
)
EnableMaximize
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Include
(
types
.
BiMaximize
))
}
//启用系统菜单-同时禁用最小化,最大化,关闭按钮
func
(
m
*
LCLBrowserWindow
)
EnableSystemMenu
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Include
(
types
.
BiSystemMenu
))
}
//启用帮助菜单
func
(
m
*
LCLBrowserWindow
)
EnableHelp
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
SetBorderIcons
(
m
.
BorderIcons
()
.
Include
(
types
.
BiHelp
))
}
func
(
m
*
LCLBrowserWindow
)
show
(
sender
lcl
.
IObject
)
{
var
ret
bool
if
m
.
onShow
!=
nil
{
...
...
@@ -372,7 +540,7 @@ func (m *LCLBrowserWindow) registerPopupEvent() {
QueueAsyncCall
(
func
(
id
int
)
{
BrowserWindow
.
uiLock
.
Lock
()
defer
BrowserWindow
.
uiLock
.
Unlock
()
winProperty
:=
BrowserWindow
.
popupWindow
.
window
Info
.
Window
Property
winProperty
:=
BrowserWindow
.
popupWindow
.
windowProperty
if
winProperty
!=
nil
{
if
winProperty
.
IsShowModel
{
BrowserWindow
.
popupWindow
.
ShowModal
()
...
...
@@ -384,7 +552,7 @@ func (m *LCLBrowserWindow) registerPopupEvent() {
}
}()
if
bwEvent
.
onBeforePopup
!=
nil
{
result
=
!
bwEvent
.
onBeforePopup
(
sender
,
browser
,
frame
,
beforePopupInfo
,
BrowserWindow
.
popupWindow
.
windowInfo
,
noJavascriptAccess
)
result
=
!
bwEvent
.
onBeforePopup
(
sender
,
browser
,
frame
,
beforePopupInfo
,
BrowserWindow
.
popupWindow
,
noJavascriptAccess
)
}
return
result
})
...
...
@@ -461,7 +629,7 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
m
.
chromium
.
SetOnKeyEvent
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
event
*
TCefKeyEvent
,
result
*
bool
)
{
if
api
.
GoBool
(
BrowserWindow
.
Config
.
chromiumConfig
.
enableDevTools
)
{
if
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
winInfo
!=
nil
{
if
winInfo
.
Window
.
WindowType
()
==
consts
.
WT_DEV_TOOLS
||
winInfo
.
Window
.
WindowType
()
==
consts
.
WT_VIEW_SOURCE
{
if
winInfo
.
Window
Type
()
==
consts
.
WT_DEV_TOOLS
||
winInfo
.
WindowType
()
==
consts
.
WT_VIEW_SOURCE
{
return
}
}
...
...
@@ -580,17 +748,19 @@ func (m *LCLBrowserWindow) registerDefaultChromiumCloseEvent() {
logger
.
Debug
(
"chromium.onBeforeClose"
)
chromiumOnBeforeClose
(
browser
)
m
.
canClose
=
true
var
tempClose
=
func
()
{
var
closeWindow
=
func
()
{
defer
func
()
{
if
err
:=
recover
();
err
!=
nil
{
logger
.
Error
(
"chromium.OnBeforeClose Error:"
,
err
)
}
}()
if
m
.
windowInfo
.
auxTools
.
viewSourceWindow
!=
nil
{
m
.
windowInfo
.
auxTools
.
viewSourceWindow
=
nil
}
if
m
.
windowInfo
!=
nil
&&
m
.
windowInfo
.
auxTools
.
devToolsWindow
!=
nil
{
m
.
windowInfo
.
auxTools
.
devToolsWindow
.
Close
()
if
m
.
auxTools
!=
nil
{
if
m
.
auxTools
.
viewSourceWindow
!=
nil
{
m
.
auxTools
.
viewSourceWindow
=
nil
}
if
m
.
auxTools
.
devToolsWindow
!=
nil
{
m
.
auxTools
.
devToolsWindow
.
Close
()
}
}
BrowserWindow
.
removeWindowInfo
(
m
.
windowId
)
//主窗口关闭
...
...
@@ -605,7 +775,7 @@ func (m *LCLBrowserWindow) registerDefaultChromiumCloseEvent() {
}
}
QueueAsyncCall
(
func
(
id
int
)
{
// main thread run
tempClose
()
closeWindow
()
})
if
bwEvent
.
onBeforeClose
!=
nil
{
bwEvent
.
onBeforeClose
(
sender
,
browser
)
...
...
cef/cef-views-framework-browser-window.go
浏览文件 @
916746bd
...
...
@@ -114,17 +114,17 @@ func (m *browserWindow) appContextInitialized(app *TCEFApplication) {
BrowserWindow
.
Config
.
chromiumConfig
.
SetEnableOpenUrlTab
(
true
)
BrowserWindow
.
Config
.
chromiumConfig
.
SetEnableWindowPopup
(
true
)
}
m
.
vFrameBrowserWindow
=
NewViewsFrameworkBrowserWindow
(
BrowserWindow
.
Config
.
chromiumConfig
,
&
BrowserWindow
.
Config
.
WindowProperty
,
BrowserWindow
.
Config
.
viewsFrameBrowserWindowOnEventCallback
)
m
.
chromium
=
m
.
vFrameBrowserWindow
.
chromium
vFrameBrowserWindow
:
=
NewViewsFrameworkBrowserWindow
(
BrowserWindow
.
Config
.
chromiumConfig
,
&
BrowserWindow
.
Config
.
WindowProperty
,
BrowserWindow
.
Config
.
viewsFrameBrowserWindowOnEventCallback
)
m
.
chromium
=
vFrameBrowserWindow
.
chromium
m
.
putChromiumWindowInfo
()
m
.
vFrameBrowserWindow
.
registerPopupEvent
()
m
.
vFrameBrowserWindow
.
registerDefaultEvent
()
m
.
vFrameBrowserWindow
.
windowComponent
.
SetOnCanClose
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
vFrameBrowserWindow
.
registerPopupEvent
()
vFrameBrowserWindow
.
registerDefaultEvent
()
vFrameBrowserWindow
.
windowComponent
.
SetOnCanClose
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
fmt
.
Println
(
"OnCanClose"
)
*
aResult
=
true
app
.
QuitMessageLoop
()
})
m
.
vFrameBrowserWindow
.
CreateTopLevelWindow
()
vFrameBrowserWindow
.
CreateTopLevelWindow
()
})
}
...
...
@@ -141,7 +141,7 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() {
fmt
.
Println
(
"BrowserWindow-beforePopupInfo"
,
beforePopupInfo
.
TargetUrl
)
var
result
=
false
if
bwEvent
.
onBeforePopup
!=
nil
{
result
=
!
bwEvent
.
onBeforePopup
(
sender
,
browser
,
frame
,
beforePopupInfo
,
BrowserWindow
.
popupWindow
.
windowInfo
,
noJavascriptAccess
)
result
=
!
bwEvent
.
onBeforePopup
(
sender
,
browser
,
frame
,
beforePopupInfo
,
BrowserWindow
.
popupWindow
,
noJavascriptAccess
)
}
if
!
result
{
result
=
true
...
...
@@ -242,7 +242,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
m
.
chromium
.
SetOnKeyEvent
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
event
*
TCefKeyEvent
,
result
*
bool
)
{
if
api
.
GoBool
(
BrowserWindow
.
Config
.
chromiumConfig
.
enableDevTools
)
{
if
winInfo
:=
BrowserWindow
.
GetWindowInfo
(
browser
.
Identifier
());
winInfo
!=
nil
{
if
winInfo
.
Window
.
WindowType
()
==
consts
.
WT_DEV_TOOLS
||
winInfo
.
Window
.
WindowType
()
==
consts
.
WT_VIEW_SOURCE
{
if
winInfo
.
Window
Type
()
==
consts
.
WT_DEV_TOOLS
||
winInfo
.
WindowType
()
==
consts
.
WT_VIEW_SOURCE
{
return
}
}
...
...
cef/window-component.go
浏览文件 @
916746bd
...
...
@@ -9,6 +9,6 @@
package
cef
//适用于 windows linux macos 系统托盘
func
(
m
*
TCefWindowInfo
)
NewTray
()
ITray
{
return
newTray
(
m
.
Window
)
func
(
m
*
LCLBrowserWindow
)
NewTray
()
ITray
{
return
newTray
(
m
)
}
cef/window-component_windows.go
浏览文件 @
916746bd
...
...
@@ -12,9 +12,9 @@
package
cef
//只适用于windows的无菜单托盘
func
(
m
*
TCefWindowInfo
)
NewCefTray
(
width
,
height
int32
,
url
string
)
ITray
{
func
(
m
*
LCLBrowserWindow
)
NewCefTray
(
width
,
height
int32
,
url
string
)
ITray
{
if
BrowserWindow
.
mainBrowserWindow
.
tray
==
nil
{
BrowserWindow
.
mainBrowserWindow
.
tray
=
newCefTray
(
m
.
Window
,
width
,
height
,
url
)
BrowserWindow
.
mainBrowserWindow
.
tray
=
newCefTray
(
m
,
width
,
height
,
url
)
}
return
BrowserWindow
.
mainBrowserWindow
.
tray
}
cef/window-info.go
已删除
100644 → 0
浏览文件 @
863f7cca
//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under GNU General Public License v3.0
//
//----------------------------------------
package
cef
import
(
"github.com/energye/energy/common"
"github.com/energye/energy/consts"
"github.com/energye/energy/logger"
"github.com/energye/golcl/lcl/types"
)
type
TCEFFrame
map
[
int64
]
*
ICefFrame
// 窗口信息
type
TCefWindowInfo
struct
{
Window
*
LCLBrowserWindow
`json:"-"`
//窗口Form
Browser
*
ICefBrowser
`json:"-"`
//浏览器对象,加载完chromium之后创建
WindowProperty
*
WindowProperty
`json:"-"`
//窗口属性
Frames
TCEFFrame
`json:"-"`
//当前浏览器下的所有frame
auxTools
*
auxTools
//辅助工具
}
//辅助工具
type
auxTools
struct
{
devToolsWindow
*
LCLBrowserWindow
//devTools
devToolsX
int32
//上次改变的窗体位置,宽度
devToolsY
int32
//
devToolsWidth
int32
//
devToolsHeight
int32
//
viewSourceWindow
*
LCLBrowserWindow
//viewSource
viewSourceUrl
string
//
viewSourceX
int32
//上次改变的窗体位置,宽度
viewSourceY
int32
//
viewSourceWidth
int32
//
viewSourceHeight
int32
//
}
//窗口属性
type
WindowProperty
struct
{
IsShowModel
bool
//是否以模态窗口显示
WindowState
types
.
TWindowState
//窗口 状态
Title
string
//窗口 标题
Url
string
//默认打开URL
Icon
string
//窗口图标 加载本地图标
IconFS
string
//窗口图标 加载emfs内置图标
CanMinimize
bool
//窗口 是否启用最小化功能
CanMaximize
bool
//窗口 是否启用最大化功能
CanResize
bool
//窗口 是否允许调整窗口大小
CanClose
bool
//窗口 关闭时是否关闭窗口
CenterWindow
bool
//窗口 是否居中显示
AlwaysOnTop
bool
//窗口 置顶
X
int32
//窗口 CenterWindow=false X坐标
Y
int32
//窗口 CenterWindow=false Y坐标
Width
int32
//窗口 宽
Height
int32
//窗口 高
}
//创建一个 窗口默认属性
func
NewWindowProperty
()
*
WindowProperty
{
return
&
WindowProperty
{
Title
:
"Energy"
,
Url
:
"about:blank"
,
CanMinimize
:
true
,
CanMaximize
:
true
,
CanResize
:
true
,
CanClose
:
true
,
CenterWindow
:
true
,
Width
:
1024
,
Height
:
768
,
}
}
func
(
m
*
TCefWindowInfo
)
Chromium
()
IChromiumProc
{
return
m
.
Window
.
chromium
}
func
(
m
*
TCefWindowInfo
)
chromiumEvent
()
IChromiumEvent
{
return
m
.
Window
.
chromium
}
func
(
m
*
TCefWindowInfo
)
Minimize
()
{
QueueAsyncCall
(
func
(
id
int
)
{
m
.
Window
.
SetWindowState
(
types
.
WsMinimized
)
})
}
func
(
m
*
TCefWindowInfo
)
Maximize
()
{
BrowserWindow
.
uiLock
.
Lock
()
defer
BrowserWindow
.
uiLock
.
Unlock
()
QueueAsyncCall
(
func
(
id
int
)
{
var
bs
=
m
.
Window
.
BorderStyle
()
var
monitor
=
m
.
Window
.
Monitor
()
.
WorkareaRect
()
if
bs
==
types
.
BsNone
{
var
ws
=
m
.
Window
.
WindowState
()
var
redWindowState
types
.
TWindowState
//默认状态0
if
m
.
WindowProperty
.
WindowState
==
types
.
WsNormal
&&
m
.
WindowProperty
.
WindowState
==
ws
{
redWindowState
=
types
.
WsMaximized
}
else
{
if
m
.
WindowProperty
.
WindowState
==
types
.
WsNormal
{
redWindowState
=
types
.
WsMaximized
}
else
if
m
.
WindowProperty
.
WindowState
==
types
.
WsMaximized
{
redWindowState
=
types
.
WsNormal
}
}
m
.
WindowProperty
.
WindowState
=
redWindowState
if
redWindowState
==
types
.
WsMaximized
{
m
.
WindowProperty
.
X
=
m
.
Window
.
Left
()
m
.
WindowProperty
.
Y
=
m
.
Window
.
Top
()
m
.
WindowProperty
.
Width
=
m
.
Window
.
Width
()
m
.
WindowProperty
.
Height
=
m
.
Window
.
Height
()
m
.
Window
.
SetLeft
(
monitor
.
Left
)
m
.
Window
.
SetTop
(
monitor
.
Top
)
m
.
Window
.
SetWidth
(
monitor
.
Right
-
monitor
.
Left
-
1
)
m
.
Window
.
SetHeight
(
monitor
.
Bottom
-
monitor
.
Top
-
1
)
}
else
if
redWindowState
==
types
.
WsNormal
{
m
.
Window
.
SetLeft
(
m
.
WindowProperty
.
X
)
m
.
Window
.
SetTop
(
m
.
WindowProperty
.
Y
)
m
.
Window
.
SetWidth
(
m
.
WindowProperty
.
Width
)
m
.
Window
.
SetHeight
(
m
.
WindowProperty
.
Height
)
}
}
else
{
if
m
.
Window
.
WindowState
()
==
types
.
WsMaximized
{
m
.
Window
.
SetWindowState
(
types
.
WsNormal
)
if
common
.
IsDarwin
()
{
m
.
Window
.
SetWindowState
(
types
.
WsMaximized
)
m
.
Window
.
SetWindowState
(
types
.
WsNormal
)
}
}
else
if
m
.
Window
.
WindowState
()
==
types
.
WsNormal
{
m
.
Window
.
SetWindowState
(
types
.
WsMaximized
)
}
m
.
WindowProperty
.
WindowState
=
m
.
Window
.
WindowState
()
}
})
}
// 关闭窗口-在ui线程中执行
func
(
m
*
TCefWindowInfo
)
Close
()
{
BrowserWindow
.
uiLock
.
Lock
()
defer
BrowserWindow
.
uiLock
.
Unlock
()
QueueAsyncCall
(
func
(
id
int
)
{
if
m
==
nil
{
logger
.
Error
(
"关闭浏览器 WindowInfo 为空"
)
return
}
if
m
.
Window
==
nil
{
logger
.
Error
(
"关闭浏览器 Window 为空"
)
return
}
if
common
.
IsDarwin
()
{
//main window close
if
m
.
Window
.
WindowType
()
==
consts
.
WT_MAIN_BROWSER
{
m
.
Window
.
Close
()
}
else
{
//sub window close
m
.
Window
.
isClosing
=
true
m
.
Window
.
Hide
()
m
.
Window
.
chromium
.
CloseBrowser
(
true
)
}
}
else
{
m
.
Window
.
isClosing
=
true
m
.
Window
.
Hide
()
m
.
Window
.
chromium
.
CloseBrowser
(
true
)
}
})
}
//禁用口透明
func
(
m
*
TCefWindowInfo
)
DisableTransparent
()
{
m
.
Window
.
SetAllowDropFiles
(
false
)
m
.
Window
.
SetAlphaBlend
(
false
)
m
.
Window
.
SetAlphaBlendValue
(
255
)
}
//使窗口透明 value 0 ~ 255
func
(
m
*
TCefWindowInfo
)
EnableTransparent
(
value
uint8
)
{
m
.
Window
.
SetAllowDropFiles
(
true
)
m
.
Window
.
SetAlphaBlend
(
true
)
m
.
Window
.
SetAlphaBlendValue
(
value
)
}
//禁用最小化按钮
func
(
m
*
TCefWindowInfo
)
DisableMinimize
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Exclude
(
types
.
BiMinimize
))
}
//禁用最大化按钮
func
(
m
*
TCefWindowInfo
)
DisableMaximize
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Exclude
(
types
.
BiMaximize
))
}
//禁用系统菜单-同时禁用最小化,最大化,关闭按钮
func
(
m
*
TCefWindowInfo
)
DisableSystemMenu
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Exclude
(
types
.
BiSystemMenu
))
}
//禁用帮助菜单
func
(
m
*
TCefWindowInfo
)
DisableHelp
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Exclude
(
types
.
BiHelp
))
}
//启用最小化按钮
func
(
m
*
TCefWindowInfo
)
EnableMinimize
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Include
(
types
.
BiMinimize
))
}
//启用最大化按钮
func
(
m
*
TCefWindowInfo
)
EnableMaximize
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Include
(
types
.
BiMaximize
))
}
//启用系统菜单-同时禁用最小化,最大化,关闭按钮
func
(
m
*
TCefWindowInfo
)
EnableSystemMenu
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Include
(
types
.
BiSystemMenu
))
}
//启用帮助菜单
func
(
m
*
TCefWindowInfo
)
EnableHelp
()
{
m
.
Window
.
SetBorderIcons
(
m
.
Window
.
BorderIcons
()
.
Include
(
types
.
BiHelp
))
}
func
(
m
TCEFFrame
)
GetByFrameId
(
frameId
int64
)
*
ICefFrame
{
if
m
!=
nil
{
if
frame
,
ok
:=
m
[
frameId
];
ok
{
return
frame
}
}
return
nil
}
cef/window.go
浏览文件 @
916746bd
...
...
@@ -13,6 +13,41 @@ import (
"github.com/energye/golcl/lcl/types"
)
//辅助工具
type
auxTools
struct
{
devToolsWindow
*
LCLBrowserWindow
//devTools
devToolsX
int32
//上次改变的窗体位置,宽度
devToolsY
int32
//
devToolsWidth
int32
//
devToolsHeight
int32
//
viewSourceWindow
*
LCLBrowserWindow
//viewSource
viewSourceUrl
string
//
viewSourceX
int32
//上次改变的窗体位置,宽度
viewSourceY
int32
//
viewSourceWidth
int32
//
viewSourceHeight
int32
//
}
//窗口属性
type
WindowProperty
struct
{
IsShowModel
bool
//是否以模态窗口显示
WindowState
types
.
TWindowState
//窗口 状态
Title
string
//窗口 标题
Url
string
//默认打开URL
Icon
string
//窗口图标 加载本地图标
IconFS
string
//窗口图标 加载emfs内置图标
CanMinimize
bool
//窗口 是否启用最小化功能
CanMaximize
bool
//窗口 是否启用最大化功能
CanResize
bool
//窗口 是否允许调整窗口大小
CanClose
bool
//窗口 关闭时是否关闭窗口
CenterWindow
bool
//窗口 是否居中显示
AlwaysOnTop
bool
//窗口 置顶
X
int32
//窗口 CenterWindow=false X坐标
Y
int32
//窗口 CenterWindow=false Y坐标
Width
int32
//窗口 宽
Height
int32
//窗口 高
}
//创建一个新window窗口
func
NewWindow
(
windowProperty
*
WindowProperty
)
*
LCLBrowserWindow
{
if
windowProperty
==
nil
{
...
...
@@ -50,3 +85,35 @@ func NewWindow(windowProperty *WindowProperty) *LCLBrowserWindow {
}
return
window
}
type
IBrowserWindow
interface
{
Show
()
Hide
()
Close
()
}
type
ILCLBrowserWindow
interface
{
IBrowserWindow
Id
()
int32
}
type
IViewsFrameworkBrowserWindow
interface
{
IBrowserWindow
CreateTopLevelWindow
()
CenterWindow
(
size
*
TCefSize
)
}
//创建一个 窗口默认属性
func
NewWindowProperty
()
*
WindowProperty
{
return
&
WindowProperty
{
Title
:
"Energy"
,
Url
:
"about:blank"
,
CanMinimize
:
true
,
CanMaximize
:
true
,
CanResize
:
true
,
CanClose
:
true
,
CenterWindow
:
true
,
Width
:
1024
,
Height
:
768
,
}
}
example/browser-control/src/main-browser-window.go
浏览文件 @
916746bd
...
...
@@ -28,7 +28,7 @@ func MainBrowserWindow() {
config
.
SetEnableDevTools
(
true
)
cef
.
BrowserWindow
.
Config
.
SetChromiumConfig
(
config
)
//创建窗口时的回调函数 对浏览器事件设置,和窗口属性组件等创建和修改
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
LCLBrowserWindow
)
{
//设置应用图标 这里加载的图标是内置到执行程序里的资源文件
lcl
.
Application
.
Icon
()
.
LoadFromFSFile
(
"resources/icon.ico"
)
//在窗体初始化时创建窗口内的组件
...
...
@@ -59,15 +59,15 @@ func MainBrowserWindow() {
})
})
//创建窗口之后对对主窗口的属性、组件或子窗口的创建
cef
.
BrowserWindow
.
SetBrowserInitAfter
(
func
(
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInitAfter
(
func
(
browserWindow
*
cef
.
LCLBrowserWindow
)
{
fmt
.
Println
(
"SetBrowserInitAfter"
)
})
}
//控制组件UI
//地址栏和控制按钮创建
func
controlUI
(
browserWindow
*
cef
.
TCefWindowInfo
)
(
goBack
*
lcl
.
TButton
,
goForward
*
lcl
.
TButton
,
stop
*
lcl
.
TButton
,
refresh
*
lcl
.
TButton
,
progressLabel
*
lcl
.
TLabel
,
addrBox
*
lcl
.
TComboBox
)
{
window
:=
browserWindow
.
Window
func
controlUI
(
browserWindow
*
cef
.
LCLBrowserWindow
)
(
goBack
*
lcl
.
TButton
,
goForward
*
lcl
.
TButton
,
stop
*
lcl
.
TButton
,
refresh
*
lcl
.
TButton
,
progressLabel
*
lcl
.
TLabel
,
addrBox
*
lcl
.
TComboBox
)
{
window
:=
browserWindow
//这里使用系统UI组件
//创建panel做为地址栏的父组件
addrPanel
:=
lcl
.
NewPanel
(
window
)
//设置父组件
...
...
example/browser-cookie/cookie.go
浏览文件 @
916746bd
...
...
@@ -51,7 +51,7 @@ func main() {
})
})
//在SetBrowserInit中设置cookie事件,这些事件将返回操作后的结果
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
LCLBrowserWindow
)
{
//获取cookie时触发
event
.
SetOnCookiesVisited
(
func
(
sender
lcl
.
IObject
,
cookie
*
cef
.
ICefCookie
)
{
fmt
.
Printf
(
"SetOnCookiesVisited: %+v
\n
"
,
cookie
)
...
...
example/browser-download/download.go
浏览文件 @
916746bd
...
...
@@ -27,10 +27,10 @@ func main() {
//指定一个URL地址,或本地html文件目录
cef
.
BrowserWindow
.
Config
.
Url
=
"http://localhost:22022/download.html"
//在主窗口初始化回调函数里设置浏览器事件
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
LCLBrowserWindow
)
{
//linux 下载文件 系统弹出保存对话框不启作用
//所以 自己调用系统的保存对话框获得保存路径
linuxDlSave
:=
lcl
.
NewSaveDialog
(
browserWindow
.
Window
)
linuxDlSave
:=
lcl
.
NewSaveDialog
(
browserWindow
)
linuxDlSave
.
SetTitle
(
"保存对话框标题"
)
//下载之前事件
...
...
example/browser-ipc-on-emit/js-to-go/js-to-go.go
浏览文件 @
916746bd
...
...
@@ -55,9 +55,9 @@ func timeTask() {
args
.
SetString
(
0
,
fmt
.
Sprintf
(
"Go发送的数据: %d"
,
param0
),
true
)
args
.
SetFloat64
(
1
,
float64
(
param0
+
10
))
//将数据发送出去
info
.
Chromium
()
.
Emit
(
"js-on-event-demo"
,
args
,
info
.
Browser
)
info
.
Chromium
()
.
Emit
(
"js-on-event-demo"
,
args
,
info
.
Browser
()
)
//触发js监听函数,这个函数带有返回值到go中
info
.
Chromium
()
.
EmitAndCallback
(
"js-on-event-demo-return"
,
args
,
info
.
Browser
,
func
(
context
ipc
.
IIPCContext
)
{
info
.
Chromium
()
.
EmitAndCallback
(
"js-on-event-demo-return"
,
args
,
info
.
Browser
()
,
func
(
context
ipc
.
IIPCContext
)
{
//因为js和go不一样,返回值只能有1个,且是通过 Arguments 获取
arguments
:=
context
.
Arguments
()
//需要正确的获取类型,否则会失败
...
...
example/browser-key-event/key-event.go
浏览文件 @
916746bd
...
...
@@ -21,7 +21,7 @@ func main() {
cef
.
BrowserWindow
.
Config
.
Title
=
"Energy - Key Event"
cef
.
BrowserWindow
.
Config
.
Icon
=
"resources/icon.ico"
//在主窗口初始化回调函数里设置浏览器事件
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
LCLBrowserWindow
)
{
event
.
SetOnKeyEvent
(
func
(
sender
lcl
.
IObject
,
browser
*
cef
.
ICefBrowser
,
event
*
cef
.
TCefKeyEvent
,
result
*
bool
)
{
fmt
.
Printf
(
"%s %+v
\n
"
,
string
(
rune
(
event
.
Character
)),
event
)
})
...
...
example/browser-linux/linux.go
浏览文件 @
916746bd
...
...
@@ -33,11 +33,6 @@ func main() {
fmt
.
Println
(
"SetOnContextMenuCommand"
,
commandId
)
})
})
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
window
*
cef
.
TCefWindowInfo
)
{
fmt
.
Println
(
"cef.BrowserWindow.SetBrowserInit"
,
window
)
fmt
.
Printf
(
"%+v
\n
"
,
window
)
})
//在主进程启动成功之后执行
//在这里启动内置http服务
//内置http服务需要使用 go:embed resources 内置资源到执行程序中
...
...
example/mini-browser/src/min-browser.go
浏览文件 @
916746bd
...
...
@@ -67,7 +67,7 @@ func AppBrowserInit() {
event
.
On
(
"close"
,
func
(
context
ipc
.
IIPCContext
)
{
fmt
.
Println
(
"close browserId:"
,
context
.
BrowserId
())
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
winInfo
.
Close
()
winInfo
.
Close
BrowserWindow
()
})
event
.
On
(
"minWindow"
,
func
(
context
ipc
.
IIPCContext
)
{
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
...
...
@@ -80,7 +80,7 @@ func AppBrowserInit() {
event
.
On
(
"closeWindow"
,
func
(
context
ipc
.
IIPCContext
)
{
fmt
.
Println
(
"closeWindow"
,
context
.
BrowserId
())
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
winInfo
.
Close
()
winInfo
.
Close
BrowserWindow
()
})
event
.
On
(
"window-list"
,
func
(
context
ipc
.
IIPCContext
)
{
var
ids
[]
int32
...
...
@@ -95,11 +95,11 @@ func AppBrowserInit() {
args
:=
context
.
Arguments
()
.
GetString
(
0
)
fmt
.
Println
(
"find-args:"
,
args
)
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
winInfo
.
Browser
.
Find
(
args
,
false
,
false
,
true
)
winInfo
.
Browser
()
.
Find
(
args
,
false
,
false
,
true
)
})
event
.
On
(
"find-stop"
,
func
(
context
ipc
.
IIPCContext
)
{
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
winInfo
.
Browser
.
StopFinding
(
true
)
winInfo
.
Browser
()
.
StopFinding
(
true
)
})
var
newForm
*
cef
.
LCLBrowserWindow
event
.
On
(
"js-new-window"
,
func
(
context
ipc
.
IIPCContext
)
{
...
...
@@ -139,6 +139,7 @@ func AppBrowserInit() {
browserWindow
=
cef
.
NewBrowserWindow
(
nil
,
wp
)
browserWindow
.
SetWidth
(
800
)
browserWindow
.
SetHeight
(
600
)
browserWindow
.
SetShowInTaskBar
()
}
fmt
.
Println
(
"
\t
|--"
,
browserWindow
.
IsClosing
())
cef
.
QueueAsyncCall
(
func
(
id
int
)
{
...
...
@@ -173,47 +174,47 @@ func AppBrowserInit() {
})
//主窗口初始化回调函数
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInit
(
func
(
event
*
cef
.
BrowserEvent
,
browserWindow
*
cef
.
LCLBrowserWindow
)
{
lcl
.
Application
.
SetOnMinimize
(
func
(
sender
lcl
.
IObject
)
{
fmt
.
Println
(
"minimize"
)
})
fmt
.
Println
(
"主窗口初始化回调函数"
)
lcl
.
Application
.
Icon
()
.
LoadFromFSFile
(
"resources/icon.ico"
)
//设置应用图标
browserWindow
.
Window
.
SetCaption
(
"这里设置应用标题"
)
browserWindow
.
Window
.
SetPosition
(
types
.
PoScreenCenter
)
//窗口局中显示
browserWindow
.
SetCaption
(
"这里设置应用标题"
)
browserWindow
.
SetPosition
(
types
.
PoScreenCenter
)
//窗口局中显示
//设置窗口样式,无标题 ,最大化按钮等
//browserWindow.
Window.
SetBorderStyle(types.BsSingle)
//browserWindow.
Window.
SetFormStyle(types.FsNormal)
//browserWindow.
Window.
SetFormStyle(types.FsSystemStayOnTop)
//browserWindow.SetBorderStyle(types.BsSingle)
//browserWindow.SetFormStyle(types.FsNormal)
//browserWindow.SetFormStyle(types.FsSystemStayOnTop)
//设置窗口大小
browserWindow
.
Window
.
SetWidth
(
1600
)
browserWindow
.
Window
.
SetHeight
(
900
)
browserWindow
.
SetWidth
(
1600
)
browserWindow
.
SetHeight
(
900
)
//限制窗口大小 linux 下不是很友好
//browserWindow.Window.Constraints().SetMinHeight(300)
//browserWindow.Window.Constraints().SetMinWidth(300)
//browserWindow.Window.Constraints().SetMaxWidth(1600)
//browserWindow.Window.Constraints().SetMaxHeight(900)
browserWindow
.
Window
.
Constraints
()
.
SetOnChange
(
func
(
sender
lcl
.
IObject
)
{
browserWindow
.
Constraints
()
.
SetOnChange
(
func
(
sender
lcl
.
IObject
)
{
fmt
.
Println
(
"browserWindow SetOnChange"
)
})
//添加事件,add不会覆盖默认的事件 set会覆盖默认的事件
browserWindow
.
Window
.
AddOnClose
(
func
(
sender
lcl
.
IObject
,
action
*
types
.
TCloseAction
)
bool
{
browserWindow
.
AddOnClose
(
func
(
sender
lcl
.
IObject
,
action
*
types
.
TCloseAction
)
bool
{
fmt
.
Println
(
"添加onclose事件"
)
return
false
})
//窗口大小改变后触发
browserWindow
.
Window
.
AddOnResize
(
func
(
sender
lcl
.
IObject
)
bool
{
browserWindow
.
AddOnResize
(
func
(
sender
lcl
.
IObject
)
bool
{
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if
browserWindow
.
Browser
!=
nil
{
if
browserWindow
.
Browser
()
!=
nil
{
var
target
=
&
cef
.
EmitTarget
{
BrowseId
:
browserWindow
.
Browser
.
Identifier
(),
FrameId
:
browserWindow
.
Browser
.
MainFrame
()
.
Id
,
BrowseId
:
browserWindow
.
Browser
()
.
Identifier
(),
FrameId
:
browserWindow
.
Browser
()
.
MainFrame
()
.
Id
,
}
var
argumentList
=
ipc
.
NewArgumentList
()
argumentList
.
SetInt32
(
0
,
browserWindow
.
Window
.
Left
())
argumentList
.
SetInt32
(
1
,
browserWindow
.
Window
.
Top
())
argumentList
.
SetInt32
(
2
,
browserWindow
.
Wi
ndow
.
Wi
dth
())
argumentList
.
SetInt32
(
3
,
browserWindow
.
Window
.
Height
())
argumentList
.
SetInt32
(
0
,
browserWindow
.
Left
())
argumentList
.
SetInt32
(
1
,
browserWindow
.
Top
())
argumentList
.
SetInt32
(
2
,
browserWindow
.
Width
())
argumentList
.
SetInt32
(
3
,
browserWindow
.
Height
())
browserWindow
.
Chromium
()
.
Emit
(
"window-resize"
,
argumentList
,
target
)
browserWindow
.
Chromium
()
.
EmitAndCallback
(
"window-resize"
,
argumentList
,
target
,
func
(
context
ipc
.
IIPCContext
)
{
fmt
.
Println
(
"EmitAndCallback AddOnResize"
)
...
...
@@ -225,18 +226,18 @@ func AppBrowserInit() {
return
false
})
//windows下可以使用这个函数,实时触发
browserWindow
.
Window
.
SetOnConstrainedResize
(
func
(
sender
lcl
.
IObject
,
minWidth
,
minHeight
,
maxWidth
,
maxHeight
*
int32
)
{
browserWindow
.
SetOnConstrainedResize
(
func
(
sender
lcl
.
IObject
,
minWidth
,
minHeight
,
maxWidth
,
maxHeight
*
int32
)
{
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if
browserWindow
.
Browser
!=
nil
{
if
browserWindow
.
Browser
()
!=
nil
{
var
target
=
&
cef
.
EmitTarget
{
BrowseId
:
browserWindow
.
Browser
.
Identifier
(),
FrameId
:
browserWindow
.
Browser
.
MainFrame
()
.
Id
,
BrowseId
:
browserWindow
.
Browser
()
.
Identifier
(),
FrameId
:
browserWindow
.
Browser
()
.
MainFrame
()
.
Id
,
}
var
argumentList
=
ipc
.
NewArgumentList
()
argumentList
.
SetInt32
(
0
,
browserWindow
.
Window
.
Left
())
argumentList
.
SetInt32
(
1
,
browserWindow
.
Window
.
Top
())
argumentList
.
SetInt32
(
2
,
browserWindow
.
Wi
ndow
.
Wi
dth
())
argumentList
.
SetInt32
(
3
,
browserWindow
.
Window
.
Height
())
argumentList
.
SetInt32
(
0
,
browserWindow
.
Left
())
argumentList
.
SetInt32
(
1
,
browserWindow
.
Top
())
argumentList
.
SetInt32
(
2
,
browserWindow
.
Width
())
argumentList
.
SetInt32
(
3
,
browserWindow
.
Height
())
browserWindow
.
Chromium
()
.
Emit
(
"window-resize"
,
argumentList
,
target
)
//使用EmitAndReturn函数会锁死
// browserWindow.Chromium.EmitAndCallback("window-resize", argumentList, target, func(context cef.IIPCContext) {
...
...
@@ -245,11 +246,11 @@ func AppBrowserInit() {
}
})
//自定义browser窗体
addressBar
(
browserWindow
.
Window
)
addressBar
(
browserWindow
)
//下载文件
//linux系统弹出保存对话框不启作用
//自己调用系统的保存对话框获得保存路径
dlSave
:=
lcl
.
NewSaveDialog
(
browserWindow
.
Window
)
dlSave
:=
lcl
.
NewSaveDialog
(
browserWindow
)
dlSave
.
SetTitle
(
"保存对话框标题"
)
event
.
SetOnBeforeDownload
(
func
(
sender
lcl
.
IObject
,
browser
*
cef
.
ICefBrowser
,
beforeDownloadItem
*
cef
.
DownloadItem
,
suggestedName
string
,
callback
*
cef
.
ICefBeforeDownloadCallback
)
{
fmt
.
Println
(
"OnBeforeDownload:"
,
beforeDownloadItem
,
suggestedName
)
...
...
@@ -273,45 +274,45 @@ func AppBrowserInit() {
event
.
SetOnFindResult
(
func
(
sender
lcl
.
IObject
,
browser
*
cef
.
ICefBrowser
,
identifier
,
count
int32
,
selectionRect
*
cef
.
TCefRect
,
activeMatchOrdinal
int32
,
finalUpdate
bool
)
{
fmt
.
Println
(
"OnFindResult:"
,
browser
.
Identifier
(),
identifier
,
count
,
selectionRect
,
activeMatchOrdinal
,
finalUpdate
)
})
event
.
SetOnBeforePopup
(
func
(
sender
lcl
.
IObject
,
browser
*
cef
.
ICefBrowser
,
frame
*
cef
.
ICefFrame
,
beforePopupInfo
*
cef
.
BeforePopupInfo
,
popupWindow
*
cef
.
TCefWindowInfo
,
noJavascriptAccess
*
bool
)
bool
{
event
.
SetOnBeforePopup
(
func
(
sender
lcl
.
IObject
,
browser
*
cef
.
ICefBrowser
,
frame
*
cef
.
ICefFrame
,
beforePopupInfo
*
cef
.
BeforePopupInfo
,
popupWindow
*
cef
.
LCLBrowserWindow
,
noJavascriptAccess
*
bool
)
bool
{
fmt
.
Println
(
"OnBeforePopup: "
+
beforePopupInfo
.
TargetUrl
)
popupWindow
.
Window
.
SetCaption
(
"改变了标题 - "
+
beforePopupInfo
.
TargetUrl
)
popupWindow
.
SetCaption
(
"改变了标题 - "
+
beforePopupInfo
.
TargetUrl
)
//popupWindow.Form.SetBorderStyle(types.BsNone)
//popupWindow.Form.SetFormStyle(types.FsNormal)
popupWindow
.
Window
.
SetWidth
(
800
)
popupWindow
.
Window
.
SetHeight
(
600
)
popupWindow
.
SetWidth
(
800
)
popupWindow
.
SetHeight
(
600
)
//窗口弹出之前可自定义系统组件
//窗口大小改变后触发
//windows下窗口调整后触发一次
popupWindow
.
Window
.
AddOnResize
(
func
(
sender
lcl
.
IObject
)
bool
{
popupWindow
.
AddOnResize
(
func
(
sender
lcl
.
IObject
)
bool
{
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if
popupWindow
.
Browser
!=
nil
{
if
popupWindow
.
Browser
()
!=
nil
{
var
target
=
&
cef
.
EmitTarget
{
BrowseId
:
popupWindow
.
Browser
.
Identifier
(),
FrameId
:
popupWindow
.
Browser
.
MainFrame
()
.
Id
,
BrowseId
:
popupWindow
.
Browser
()
.
Identifier
(),
FrameId
:
popupWindow
.
Browser
()
.
MainFrame
()
.
Id
,
}
var
argumentList
=
ipc
.
NewArgumentList
()
argumentList
.
SetInt32
(
0
,
popupWindow
.
Window
.
Left
())
argumentList
.
SetInt32
(
1
,
popupWindow
.
Window
.
Top
())
argumentList
.
SetInt32
(
2
,
popupWindow
.
Wi
ndow
.
Wi
dth
())
argumentList
.
SetInt32
(
3
,
popupWindow
.
Window
.
Height
())
argumentList
.
SetInt32
(
0
,
popupWindow
.
Left
())
argumentList
.
SetInt32
(
1
,
popupWindow
.
Top
())
argumentList
.
SetInt32
(
2
,
popupWindow
.
Width
())
argumentList
.
SetInt32
(
3
,
popupWindow
.
Height
())
popupWindow
.
Chromium
()
.
Emit
(
"window-resize"
,
argumentList
,
target
)
}
return
false
})
//windows下可以使用这个函数,实时触发
popupWindow
.
Window
.
SetOnConstrainedResize
(
func
(
sender
lcl
.
IObject
,
minWidth
,
minHeight
,
maxWidth
,
maxHeight
*
int32
)
{
popupWindow
.
SetOnConstrainedResize
(
func
(
sender
lcl
.
IObject
,
minWidth
,
minHeight
,
maxWidth
,
maxHeight
*
int32
)
{
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if
popupWindow
.
Browser
!=
nil
{
if
popupWindow
.
Browser
()
!=
nil
{
var
target
=
&
cef
.
EmitTarget
{
BrowseId
:
popupWindow
.
Browser
.
Identifier
(),
FrameId
:
popupWindow
.
Browser
.
MainFrame
()
.
Id
,
BrowseId
:
popupWindow
.
Browser
()
.
Identifier
(),
FrameId
:
popupWindow
.
Browser
()
.
MainFrame
()
.
Id
,
}
var
argumentList
=
ipc
.
NewArgumentList
()
argumentList
.
SetInt32
(
0
,
popupWindow
.
Window
.
Left
())
argumentList
.
SetInt32
(
1
,
popupWindow
.
Window
.
Top
())
argumentList
.
SetInt32
(
2
,
popupWindow
.
Wi
ndow
.
Wi
dth
())
argumentList
.
SetInt32
(
3
,
popupWindow
.
Window
.
Height
())
argumentList
.
SetInt32
(
0
,
popupWindow
.
Left
())
argumentList
.
SetInt32
(
1
,
popupWindow
.
Top
())
argumentList
.
SetInt32
(
2
,
popupWindow
.
Width
())
argumentList
.
SetInt32
(
3
,
popupWindow
.
Height
())
popupWindow
.
Chromium
()
.
Emit
(
"window-resize"
,
argumentList
,
target
)
}
})
...
...
@@ -373,7 +374,7 @@ func AppBrowserInit() {
})
})
//添加子窗口初始化
cef
.
BrowserWindow
.
SetBrowserInitAfter
(
func
(
browserWindow
*
cef
.
TCefWindowInfo
)
{
cef
.
BrowserWindow
.
SetBrowserInitAfter
(
func
(
browserWindow
*
cef
.
LCLBrowserWindow
)
{
//在这里创建 一些子窗口 子组件 等
//托盘
if
common
.
IsWindows
()
{
...
...
@@ -385,14 +386,14 @@ func AppBrowserInit() {
}
// 托盘 只适用 windows 的系统托盘, 基于html 和 ipc 实现功能
func
cefTray
(
browserWindow
*
cef
.
TCefWindowInfo
)
{
func
cefTray
(
browserWindow
*
cef
.
LCLBrowserWindow
)
{
var
url
=
"http://localhost:22022/min-browser-tray.html"
tray
:=
browserWindow
.
NewCefTray
(
250
,
300
,
url
)
tray
.
SetTitle
(
"任务管理器里显示的标题"
)
tray
.
SetHint
(
"这里是文字
\n
文字啊"
)
tray
.
SetIcon
(
"resources/icon.ico"
)
tray
.
SetOnClick
(
func
(
sender
lcl
.
IObject
)
{
browserWindow
.
Window
.
SetVisible
(
!
browserWindow
.
Window
.
Visible
())
browserWindow
.
SetVisible
(
!
browser
Window
.
Visible
())
})
tray
.
SetBalloon
(
"气泡标题"
,
"气泡内容"
,
2000
)
ipc
.
IPC
.
Browser
()
.
On
(
"tray-show-balloon"
,
func
(
context
ipc
.
IIPCContext
)
{
...
...
@@ -401,18 +402,18 @@ func cefTray(browserWindow *cef.TCefWindowInfo) {
tray
.
Hide
()
})
ipc
.
IPC
.
Browser
()
.
On
(
"tray-show-main-window"
,
func
(
context
ipc
.
IIPCContext
)
{
vb
:=
!
browserWindow
.
Window
.
Visible
()
browserWindow
.
Window
.
SetVisible
(
vb
)
vb
:=
!
browserWindow
.
Visible
()
browserWindow
.
SetVisible
(
vb
)
if
vb
{
if
browserWindow
.
Window
.
Window
State
()
==
types
.
WsMinimized
{
browserWindow
.
Window
.
SetWindowState
(
types
.
WsNormal
)
if
browserWindow
.
WindowState
()
==
types
.
WsMinimized
{
browserWindow
.
SetWindowState
(
types
.
WsNormal
)
}
browserWindow
.
Window
.
Focused
()
browserWindow
.
Focused
()
}
tray
.
Hide
()
})
ipc
.
IPC
.
Browser
()
.
On
(
"tray-close-main-window"
,
func
(
context
ipc
.
IIPCContext
)
{
browserWindow
.
Window
.
Close
()
browserWindow
.
CloseBrowserWindow
()
})
ipc
.
IPC
.
Browser
()
.
On
(
"tray-show-message-box"
,
func
(
context
ipc
.
IIPCContext
)
{
cef
.
QueueAsyncCall
(
func
(
id
int
)
{
...
...
@@ -424,7 +425,7 @@ func cefTray(browserWindow *cef.TCefWindowInfo) {
}
// 托盘 系统原生 windows linux macos
func
tray
(
browserWindow
*
cef
.
TCefWindowInfo
)
{
func
tray
(
browserWindow
*
cef
.
LCLBrowserWindow
)
{
//托盘 windows linux macos 系统托盘
newTray
:=
browserWindow
.
NewTray
()
tray
:=
newTray
.
Tray
()
...
...
@@ -437,12 +438,12 @@ func tray(browserWindow *cef.TCefWindowInfo) {
newTray
.
ShowBalloon
()
})
tray
.
AddMenuItem
(
"显示/隐藏"
,
func
(
object
lcl
.
IObject
)
{
vis
:=
browserWindow
.
Window
.
Visible
()
vis
:=
browserWindow
.
Visible
()
cef
.
BrowserWindow
.
GetWindowInfo
(
1
)
browserWindow
.
Window
.
SetVisible
(
!
vis
)
browserWindow
.
SetVisible
(
!
vis
)
})
tray
.
AddMenuItem
(
"退出"
,
func
(
object
lcl
.
IObject
)
{
browserWindow
.
Close
()
browserWindow
.
Close
BrowserWindow
()
})
//linux下有些问题
tray
.
SetBalloon
(
"气泡标题"
,
"气泡内容"
,
2000
)
...
...
@@ -495,5 +496,5 @@ func addressBar(window *cef.LCLBrowserWindow) {
//
//fmt.Println("monitor WorkareaRect:", monitor.WorkareaRect())
//fmt.Println("monitor Height:", monitor.Height(), "Width:", monitor.Width())
//fmt.Println("m.Window
.Window
State():", window.WindowState())
//fmt.Println("m.WindowState():", window.WindowState())
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录