Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
4a9d599e
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 搜索 >>
提交
4a9d599e
编写于
1月 04, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed Chinese input and gtk3 issues for linux packaging
上级
6c9e89cf
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
258 addition
and
197 deletion
+258
-197
cef/cef-aux-dev-tools-window.go
cef/cef-aux-dev-tools-window.go
+1
-1
cef/cef-browser-window.go
cef/cef-browser-window.go
+5
-6
cef/cef-chromium-proc.go
cef/cef-chromium-proc.go
+6
-6
cef/cef-commponent-tray_window.go
cef/cef-commponent-tray_window.go
+1
-1
cef/cef-events-callback.go
cef/cef-events-callback.go
+5
-3
cef/cef-i-window-parent.go
cef/cef-i-window-parent.go
+2
-2
cef/cef-lcl-browser-window.go
cef/cef-lcl-browser-window.go
+131
-79
cef/cef-views-framework-browser-window.go
cef/cef-views-framework-browser-window.go
+42
-41
cef/window-info.go
cef/window-info.go
+23
-22
cef/window.go
cef/window.go
+30
-27
example/browser-linux/resources/index.html
example/browser-linux/resources/index.html
+1
-0
example/mini-browser/src/min-browser.go
example/mini-browser/src/min-browser.go
+11
-9
未找到文件。
cef/cef-aux-dev-tools-window.go
浏览文件 @
4a9d599e
...
...
@@ -36,7 +36,7 @@ func createBrowserDevTools(browser *ICefBrowser, browserWinInfo *TCefWindowInfo)
winAuxTools
.
devToolsWindow
.
Show
()
return
}
winAuxTools
.
devToolsWindow
=
&
Base
Window
{}
winAuxTools
.
devToolsWindow
=
&
LCLBrowser
Window
{}
winAuxTools
.
devToolsWindow
.
SetWindowType
(
WT_DEV_TOOLS
)
winAuxTools
.
devToolsWindow
.
TForm
=
lcl
.
NewForm
(
browserWinInfo
.
Window
)
winAuxTools
.
devToolsWindow
.
SetCaption
(
fmt
.
Sprintf
(
"%s - %s"
,
dev_tools_name
,
browser
.
MainFrame
()
.
Url
))
...
...
cef/cef-browser-window.go
浏览文件 @
4a9d599e
...
...
@@ -51,8 +51,7 @@ func SetBrowserProcessStartAfterCallback(callback browserProcessStartAfterCallba
// 浏览器包装结构体
type
browser
struct
{
mainBrowserWindow
*
browserWindow
//主浏览器窗口
mainWindow
*
TCefWindowInfo
//主窗口信息
popupWindow
*
browserWindow
//弹出的子窗口
popupWindow
*
LCLBrowserWindow
//弹出的子窗口
browserEvent
*
BrowserEvent
//浏览器全局事件
Config
*
browserConfig
//浏览器和窗口配置
windowInfo
map
[
int32
]
*
TCefWindowInfo
//窗口信息集合
...
...
@@ -84,7 +83,7 @@ type BrowserEvent struct {
}
type
browserWindow
struct
{
Base
Window
LCLBrowser
Window
isFirstActivate
bool
tray
ITray
}
...
...
@@ -140,7 +139,7 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
m
.
ChromiumCreate
(
BrowserWindow
.
Config
.
chromiumConfig
,
BrowserWindow
.
Config
.
Url
)
m
.
putChromiumWindowInfo
()
m
.
defaultChromiumEvent
()
BrowserWindow
.
main
Window
=
m
.
windowInfo
BrowserWindow
.
main
BrowserWindow
.
windowInfo
=
m
.
windowInfo
m
.
AddOnCloseQuery
(
func
(
sender
lcl
.
IObject
,
canClose
*
bool
)
bool
{
if
m
.
tray
!=
nil
{
m
.
tray
.
close
()
...
...
@@ -173,7 +172,7 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
}
func
(
m
*
browser
)
MainWindow
()
*
TCefWindowInfo
{
return
m
.
main
Window
return
m
.
main
BrowserWindow
.
windowInfo
}
// 基于CEF views framework窗口 - 主窗口和chromium初始化时回调
...
...
@@ -240,7 +239,7 @@ func (m *browser) GetNextWindowNum() int32 {
}
func
(
m
*
browser
)
createNextPopupWindow
()
{
m
.
popupWindow
=
&
b
rowserWindow
{}
m
.
popupWindow
=
&
LCLB
rowserWindow
{}
m
.
popupWindow
.
TForm
=
lcl
.
NewForm
(
m
.
MainWindow
()
.
Window
)
m
.
popupWindow
.
FormCreate
()
m
.
popupWindow
.
defaultWindowEvent
()
...
...
cef/cef-chromium-proc.go
浏览文件 @
4a9d599e
...
...
@@ -37,7 +37,7 @@ type IChromiumProc interface {
StopLoad
()
ResetZoomLevel
()
CloseAllBrowsers
()
CreateBrowser
(
window
ITCefWindow
)
bool
CreateBrowser
(
window
ITCefWindow
Parent
)
bool
CreateBrowserByBrowserViewComponent
(
homePage
string
,
browserViewComponent
*
TCEFBrowserViewComponent
)
bool
Initialized
()
bool
BrowserId
()
int32
...
...
@@ -51,8 +51,8 @@ type IChromiumProc interface {
GoForward
()
NotifyMoveOrResizeStarted
()
CloseBrowser
(
forceClose
bool
)
ShowDevTools
(
window
ITCefWindow
)
CloseDevTools
(
window
ITCefWindow
)
ShowDevTools
(
window
ITCefWindow
Parent
)
CloseDevTools
(
window
ITCefWindow
Parent
)
VisitAllCookies
(
id
int32
)
VisitURLCookies
(
url
string
,
includeHttpOnly
bool
,
id
int32
)
DeleteCookies
(
url
,
cookieName
string
,
deleteImmediately
bool
)
...
...
@@ -166,7 +166,7 @@ func (m *TCEFChromium) CloseAllBrowsers() {
_CEFChromium_CloseAllBrowses
(
m
.
Instance
())
}
func
(
m
*
TCEFChromium
)
CreateBrowser
(
window
ITCefWindow
)
bool
{
func
(
m
*
TCEFChromium
)
CreateBrowser
(
window
ITCefWindow
Parent
)
bool
{
if
window
.
Type
()
==
Wht_WindowParent
{
return
_CEFChromium_CreateBrowseByWindow
(
m
.
Instance
(),
window
.
Instance
())
}
else
if
window
.
Type
()
==
Wht_LinkedWindowParent
{
...
...
@@ -235,7 +235,7 @@ func (m *TCEFChromium) CloseBrowser(forceClose bool) {
_CEFChromium_CloseBrowser
(
m
.
Instance
(),
api
.
PascalBool
(
forceClose
))
}
func
(
m
*
TCEFChromium
)
ShowDevTools
(
window
ITCefWindow
)
{
func
(
m
*
TCEFChromium
)
ShowDevTools
(
window
ITCefWindow
Parent
)
{
if
window
==
nil
{
_CEFChromium_ShowDevTools
(
m
.
Instance
())
}
else
{
...
...
@@ -243,7 +243,7 @@ func (m *TCEFChromium) ShowDevTools(window ITCefWindow) {
}
}
func
(
m
*
TCEFChromium
)
CloseDevTools
(
window
ITCefWindow
)
{
func
(
m
*
TCEFChromium
)
CloseDevTools
(
window
ITCefWindow
Parent
)
{
if
window
==
nil
{
_CEFChromium_CloseDevTools
(
m
.
Instance
())
}
else
{
...
...
cef/cef-commponent-tray_window.go
浏览文件 @
4a9d599e
...
...
@@ -27,7 +27,7 @@ type tCefTrayForm struct {
owner
lcl
.
IWinControl
trayIcon
*
lcl
.
TTrayIcon
chromium
IChromium
windowParent
ITCefWindow
windowParent
ITCefWindow
Parent
x
,
y
,
w
,
h
int32
mouseUp
TMouseEvent
isClosing
bool
...
...
cef/cef-events-callback.go
浏览文件 @
4a9d599e
...
...
@@ -14,6 +14,8 @@ import (
"github.com/energye/energy/ipc"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/api"
"github.com/energye/golcl/lcl/rtl"
"github.com/energye/golcl/lcl/types/messages"
)
// 事件处理函数返回true将不继续执行
...
...
@@ -21,9 +23,9 @@ func chromiumOnAfterCreate(browser *ICefBrowser) bool {
if
viewSourceAfterCreate
(
browser
)
{
return
true
}
//
if IsWindows() {
//
rtl.SendMessage(browser.HostWindowHandle(), messages.WM_SETICON, 1, lcl.Application.Icon().Handle())
//
}
if
IsWindows
()
{
rtl
.
SendMessage
(
browser
.
HostWindowHandle
(),
messages
.
WM_SETICON
,
1
,
lcl
.
Application
.
Icon
()
.
Handle
())
}
return
false
}
...
...
cef/cef-i-window-parent.go
浏览文件 @
4a9d599e
...
...
@@ -14,7 +14,7 @@ import (
"github.com/energye/golcl/lcl"
)
type
ITCefWindow
interface
{
type
ITCefWindow
Parent
interface
{
lcl
.
IWinControl
Type
()
consts
.
TCefWindowHandleType
SetChromium
(
chromium
IChromium
,
tag
int32
)
...
...
@@ -27,7 +27,7 @@ type ITCefWindow interface {
Free
()
}
func
NewCEFWindow
(
owner
lcl
.
IComponent
)
ITCefWindow
{
func
NewCEFWindow
(
owner
lcl
.
IComponent
)
ITCefWindow
Parent
{
if
common
.
IsWindows
()
{
return
NewCEFWindowParent
(
owner
)
}
else
{
...
...
cef/cef-
base
-browser-window.go
→
cef/cef-
lcl
-browser-window.go
浏览文件 @
4a9d599e
...
...
@@ -26,18 +26,19 @@ import (
type
IBaseWindow
interface
{
lcl
.
IWinControl
FormCreate
()
WindowParent
()
ITCefWindow
WindowParent
()
ITCefWindow
Parent
Chromium
()
IChromium
ChromiumCreate
(
config
*
tCefChromiumConfig
,
defaultUrl
string
)
registerEvent
()
registerDefaultEvent
()
}
//BaseWindow 是一个基于chromium 和 lcl 的窗口组件
type
BaseWindow
struct
{
*
lcl
.
TForm
//
chromium
IChromium
//
windowParent
ITCefWindow
//
//LCLBrowserWindow 基于chromium 和 lcl 的窗口组件
type
LCLBrowserWindow
struct
{
*
lcl
.
TForm
//
chromium
IChromium
//
windowParent
ITCefWindowParent
//
windowProperty
*
WindowProperty
vFrameBrowserWindow
*
ViewsFrameworkBrowserWindow
//基于CEF views framework窗口
windowInfo
*
TCefWindowInfo
//基于LCL窗口信息
windowId
int32
//
...
...
@@ -57,52 +58,80 @@ type BaseWindow struct {
//创建一个带有 chromium 窗口
//
//该窗口默认不具备默认事件处理能力, 通过 EnableDefaultEvent 函数注册事件处理
func
NewBrowserWindow
(
config
*
tCefChromiumConfig
,
defaultUrl
string
)
*
Window
{
var
window
=
NewWindow
()
window
.
ChromiumCreate
(
config
,
defaultUrl
)
func
NewBrowserWindow
(
config
*
tCefChromiumConfig
,
windowProperty
*
WindowProperty
)
*
LCLBrowserWindow
{
if
windowProperty
==
nil
{
windowProperty
=
NewWindowProperty
()
}
var
window
=
NewWindow
(
windowProperty
)
window
.
ChromiumCreate
(
config
,
windowProperty
.
Url
)
window
.
putChromiumWindowInfo
()
//
BeforeBrowser
是一个必须的默认事件,在浏览器创建时窗口序号会根据browserId生成
//
OnBeforeBrowser
是一个必须的默认事件,在浏览器创建时窗口序号会根据browserId生成
window
.
Chromium
()
.
SetOnBeforeBrowser
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
)
bool
{
return
false
})
return
window
}
func
(
m
*
BaseWindow
)
Id
()
int32
{
func
(
m
*
LCLBrowserWindow
)
Chromium
()
IChromium
{
return
m
.
chromium
}
func
(
m
*
LCLBrowserWindow
)
Id
()
int32
{
return
m
.
windowId
}
func
(
m
*
BaseWindow
)
Show
()
{
func
(
m
*
LCLBrowserWindow
)
Show
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
Show
()
}
func
(
m
*
BaseWindow
)
Hide
()
{
func
(
m
*
LCLBrowserWindow
)
Hide
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
Hide
()
}
func
(
m
*
BaseWindow
)
Visible
()
bool
{
func
(
m
*
LCLBrowserWindow
)
Visible
()
bool
{
if
m
.
TForm
==
nil
{
return
false
}
return
m
.
TForm
.
Visible
()
}
func
(
m
*
BaseWindow
)
SetVisible
(
value
bool
)
{
func
(
m
*
LCLBrowserWindow
)
SetVisible
(
value
bool
)
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
SetVisible
(
value
)
}
//返回窗口信息
func
(
m
*
Base
Window
)
WindowInfo
()
*
TCefWindowInfo
{
func
(
m
*
LCLBrowser
Window
)
WindowInfo
()
*
TCefWindowInfo
{
return
m
.
windowInfo
}
//以默认的方式展示在任务栏上
func
(
m
*
BaseWindow
)
SetDefaultInTaskBar
()
{
func
(
m
*
LCLBrowserWindow
)
SetDefaultInTaskBar
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
SetShowInTaskBar
(
types
.
StDefault
)
}
//展示在任务栏上
func
(
m
*
BaseWindow
)
SetShowInTaskBar
()
{
func
(
m
*
LCLBrowserWindow
)
SetShowInTaskBar
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
SetShowInTaskBar
(
types
.
StAlways
)
}
//不会展示在任务栏上
func
(
m
*
BaseWindow
)
SetNotInTaskBar
()
{
func
(
m
*
LCLBrowserWindow
)
SetNotInTaskBar
()
{
if
m
.
TForm
==
nil
{
return
}
m
.
TForm
.
SetShowInTaskBar
(
types
.
StNever
)
}
...
...
@@ -111,29 +140,29 @@ func (m *BaseWindow) SetNotInTaskBar() {
//在windows下它是 TCEFWindowParent, linux或macOSx下它是 TCEFLinkedWindowParent
//
//通过函数可调整该组件的属性
func
(
m
*
BaseWindow
)
WindowParent
()
ITCefWindow
{
func
(
m
*
LCLBrowserWindow
)
WindowParent
()
ITCefWindowParent
{
return
m
.
windowParent
}
//返回窗口关闭状态
func
(
m
*
Base
Window
)
IsClosing
()
bool
{
func
(
m
*
LCLBrowser
Window
)
IsClosing
()
bool
{
return
m
.
isClosing
}
// 设置窗口类型
func
(
m
*
Base
Window
)
SetWindowType
(
windowType
consts
.
WINDOW_TYPE
)
{
func
(
m
*
LCLBrowser
Window
)
SetWindowType
(
windowType
consts
.
WINDOW_TYPE
)
{
m
.
windowType
=
windowType
}
// 返回窗口类型
func
(
m
*
Base
Window
)
WindowType
()
consts
.
WINDOW_TYPE
{
func
(
m
*
LCLBrowser
Window
)
WindowType
()
consts
.
WINDOW_TYPE
{
return
m
.
windowType
}
// 创建window浏览器组件
//
// 不带有默认事件的chromium
func
(
m
*
Base
Window
)
ChromiumCreate
(
config
*
tCefChromiumConfig
,
defaultUrl
string
)
{
func
(
m
*
LCLBrowser
Window
)
ChromiumCreate
(
config
*
tCefChromiumConfig
,
defaultUrl
string
)
{
if
m
.
isChromiumCreate
{
return
}
...
...
@@ -173,7 +202,7 @@ func (m *BaseWindow) ChromiumCreate(config *tCefChromiumConfig, defaultUrl strin
})
}
func
(
m
*
Base
Window
)
putChromiumWindowInfo
()
{
func
(
m
*
LCLBrowser
Window
)
putChromiumWindowInfo
()
{
m
.
windowInfo
=
&
TCefWindowInfo
{
Window
:
m
,
Browser
:
nil
,
...
...
@@ -185,9 +214,10 @@ func (m *BaseWindow) putChromiumWindowInfo() {
}
//默认的chromium事件
func
(
m
*
Base
Window
)
defaultChromiumEvent
()
{
func
(
m
*
LCLBrowser
Window
)
defaultChromiumEvent
()
{
if
m
.
WindowType
()
!=
consts
.
WT_DEV_TOOLS
{
AddGoForm
(
m
.
windowId
,
m
.
Instance
())
m
.
registerPopupEvent
()
m
.
registerDefaultEvent
()
m
.
registerDefaultChromiumCloseEvent
()
}
...
...
@@ -196,7 +226,7 @@ func (m *BaseWindow) defaultChromiumEvent() {
// 创建窗口
//
// 不带有默认事件的窗口
func
(
m
*
Base
Window
)
FormCreate
()
{
func
(
m
*
LCLBrowser
Window
)
FormCreate
()
{
if
m
.
isFormCreate
{
return
}
...
...
@@ -206,7 +236,7 @@ func (m *BaseWindow) FormCreate() {
}
//默认窗口活动/关闭处理事件
func
(
m
*
Base
Window
)
defaultWindowEvent
()
{
func
(
m
*
LCLBrowser
Window
)
defaultWindowEvent
()
{
if
m
.
WindowType
()
!=
consts
.
WT_DEV_TOOLS
{
m
.
SetOnResize
(
m
.
resize
)
m
.
SetOnActivate
(
m
.
activate
)
...
...
@@ -215,42 +245,54 @@ func (m *BaseWindow) defaultWindowEvent() {
}
//默认的窗口关闭事件
func
(
m
*
Base
Window
)
defaultWindowCloseEvent
()
{
func
(
m
*
LCLBrowser
Window
)
defaultWindowCloseEvent
()
{
m
.
SetOnClose
(
m
.
close
)
m
.
SetOnCloseQuery
(
m
.
closeQuery
)
}
//启用默认关闭事件行为-该窗口将被关闭
func
(
m
*
LCLBrowserWindow
)
EnableDefaultClose
()
{
m
.
defaultWindowCloseEvent
()
m
.
registerDefaultChromiumCloseEvent
()
}
//启用所有默认事件行为
func
(
m
*
LCLBrowserWindow
)
EnableAllDefaultEvent
()
{
m
.
defaultWindowCloseEvent
()
m
.
defaultChromiumEvent
()
}
// 添加OnResize事件,不会覆盖默认事件,返回值:false继续执行默认事件, true跳过默认事件
func
(
m
*
Base
Window
)
AddOnResize
(
fn
TNotifyEvent
)
{
func
(
m
*
LCLBrowser
Window
)
AddOnResize
(
fn
TNotifyEvent
)
{
m
.
onResize
=
append
(
m
.
onResize
,
fn
)
}
// 添加OnActivate事件,不会覆盖默认事件,返回值:false继续执行默认事件, true跳过默认事件
func
(
m
*
Base
Window
)
AddOnActivate
(
fn
TNotifyEvent
)
{
func
(
m
*
LCLBrowser
Window
)
AddOnActivate
(
fn
TNotifyEvent
)
{
m
.
onActivate
=
append
(
m
.
onActivate
,
fn
)
}
// 添加OnShow事件,不会覆盖默认事件,返回值:false继续执行默认事件, true跳过默认事件
func
(
m
*
Base
Window
)
AddOnShow
(
fn
TNotifyEvent
)
{
func
(
m
*
LCLBrowser
Window
)
AddOnShow
(
fn
TNotifyEvent
)
{
m
.
onShow
=
append
(
m
.
onShow
,
fn
)
}
// 添加OnClose事件,不会覆盖默认事件,返回值:false继续执行默认事件, true跳过默认事件
func
(
m
*
Base
Window
)
AddOnClose
(
fn
TCloseEvent
)
{
func
(
m
*
LCLBrowser
Window
)
AddOnClose
(
fn
TCloseEvent
)
{
m
.
onClose
=
append
(
m
.
onClose
,
fn
)
}
// 添加OnCloseQuery事件,不会覆盖默认事件,返回值:false继续执行默认事件, true跳过默认事件
func
(
m
*
Base
Window
)
AddOnCloseQuery
(
fn
TCloseQueryEvent
)
{
func
(
m
*
LCLBrowser
Window
)
AddOnCloseQuery
(
fn
TCloseQueryEvent
)
{
m
.
onCloseQuery
=
append
(
m
.
onCloseQuery
,
fn
)
}
//每次激活窗口之后执行一次
func
(
m
*
Base
Window
)
SetOnActivateAfter
(
fn
lcl
.
TNotifyEvent
)
{
func
(
m
*
LCLBrowser
Window
)
SetOnActivateAfter
(
fn
lcl
.
TNotifyEvent
)
{
m
.
onActivateAfter
=
fn
}
func
(
m
*
Base
Window
)
show
(
sender
lcl
.
IObject
)
{
func
(
m
*
LCLBrowser
Window
)
show
(
sender
lcl
.
IObject
)
{
var
ret
bool
if
m
.
onShow
!=
nil
{
for
_
,
fn
:=
range
m
.
onShow
{
...
...
@@ -268,7 +310,7 @@ func (m *BaseWindow) show(sender lcl.IObject) {
}
}
func
(
m
*
Base
Window
)
resize
(
sender
lcl
.
IObject
)
{
func
(
m
*
LCLBrowser
Window
)
resize
(
sender
lcl
.
IObject
)
{
var
ret
bool
if
m
.
onResize
!=
nil
{
for
_
,
fn
:=
range
m
.
onResize
{
...
...
@@ -290,7 +332,7 @@ func (m *BaseWindow) resize(sender lcl.IObject) {
}
}
func
(
m
*
Base
Window
)
activate
(
sender
lcl
.
IObject
)
{
func
(
m
*
LCLBrowser
Window
)
activate
(
sender
lcl
.
IObject
)
{
var
ret
bool
if
m
.
onActivate
!=
nil
{
for
_
,
fn
:=
range
m
.
onActivate
{
...
...
@@ -313,9 +355,7 @@ func (m *BaseWindow) activate(sender lcl.IObject) {
m
.
onActivateAfter
(
sender
)
}
}
// 默认事件注册 部分事件允许被覆盖
func
(
m
*
BaseWindow
)
registerDefaultEvent
()
{
func
(
m
*
LCLBrowserWindow
)
registerPopupEvent
()
{
var
bwEvent
=
BrowserWindow
.
browserEvent
m
.
chromium
.
SetOnBeforePopup
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
beforePopupInfo
*
BeforePopupInfo
,
client
*
ICefClient
,
noJavascriptAccess
*
bool
)
bool
{
if
!
api
.
GoBool
(
BrowserWindow
.
Config
.
chromiumConfig
.
enableWindowPopup
)
{
...
...
@@ -348,12 +388,52 @@ func (m *BaseWindow) registerDefaultEvent() {
}
return
result
})
}
// 默认事件注册 部分事件允许被覆盖
func
(
m
*
LCLBrowserWindow
)
registerDefaultEvent
()
{
var
bwEvent
=
BrowserWindow
.
browserEvent
//默认自定义快捷键
defaultAcceleratorCustom
()
m
.
chromium
.
SetOnProcessMessageReceived
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
sourceProcess
consts
.
CefProcessId
,
message
*
ipc
.
ICefProcessMessage
)
bool
{
if
bwEvent
.
onProcessMessageReceived
!=
nil
{
return
bwEvent
.
onProcessMessageReceived
(
sender
,
browser
,
frame
,
sourceProcess
,
message
)
}
return
false
})
m
.
chromium
.
SetOnBeforeResourceLoad
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
request
*
ICefRequest
,
callback
*
ICefCallback
,
result
*
consts
.
TCefReturnValue
)
{
if
assetserve
.
AssetsServerHeaderKeyValue
!=
""
{
request
.
SetHeaderByName
(
assetserve
.
AssetsServerHeaderKeyName
,
assetserve
.
AssetsServerHeaderKeyValue
,
true
)
}
if
bwEvent
.
onBeforeResourceLoad
!=
nil
{
bwEvent
.
onBeforeResourceLoad
(
sender
,
browser
,
frame
,
request
,
callback
,
result
)
}
})
//事件可以被覆盖
m
.
chromium
.
SetOnBeforeDownload
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
beforeDownloadItem
*
DownloadItem
,
suggestedName
string
,
callback
*
ICefBeforeDownloadCallback
)
{
if
bwEvent
.
onBeforeDownload
!=
nil
{
bwEvent
.
onBeforeDownload
(
sender
,
browser
,
beforeDownloadItem
,
suggestedName
,
callback
)
}
else
{
callback
.
Cont
(
consts
.
ExePath
+
consts
.
Separator
+
suggestedName
,
true
)
}
})
m
.
chromium
.
SetOnBeforeContextMenu
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
model
*
ICefMenuModel
)
{
chromiumOnBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
if
bwEvent
.
onBeforeContextMenu
!=
nil
{
bwEvent
.
onBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
}
})
m
.
chromium
.
SetOnContextMenuCommand
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
commandId
consts
.
MenuId
,
eventFlags
uint32
,
result
*
bool
)
{
chromiumOnContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
if
bwEvent
.
onContextMenuCommand
!=
nil
{
bwEvent
.
onContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
}
})
m
.
chromium
.
SetOnLoadingStateChange
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
isLoading
,
canGoBack
,
canGoForward
bool
)
{
if
bwEvent
.
onLoadingStateChange
!=
nil
{
bwEvent
.
onLoadingStateChange
(
sender
,
browser
,
isLoading
,
canGoBack
,
canGoForward
)
}
})
m
.
chromium
.
SetOnFrameCreated
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
)
{
QueueAsyncCall
(
func
(
id
int
)
{
BrowserWindow
.
putBrowserFrame
(
browser
,
frame
)
...
...
@@ -368,6 +448,7 @@ func (m *BaseWindow) registerDefaultEvent() {
bwEvent
.
onFrameDetached
(
sender
,
browser
,
frame
)
}
})
m
.
chromium
.
SetOnAfterCreated
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
)
{
if
chromiumOnAfterCreate
(
browser
)
{
return
...
...
@@ -376,24 +457,6 @@ func (m *BaseWindow) registerDefaultEvent() {
bwEvent
.
onAfterCreated
(
sender
,
browser
)
}
})
m
.
chromium
.
SetOnBeforeResourceLoad
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
request
*
ICefRequest
,
callback
*
ICefCallback
,
result
*
consts
.
TCefReturnValue
)
{
if
assetserve
.
AssetsServerHeaderKeyValue
!=
""
{
request
.
SetHeaderByName
(
assetserve
.
AssetsServerHeaderKeyName
,
assetserve
.
AssetsServerHeaderKeyValue
,
true
)
}
if
bwEvent
.
onBeforeResourceLoad
!=
nil
{
bwEvent
.
onBeforeResourceLoad
(
sender
,
browser
,
frame
,
request
,
callback
,
result
)
}
})
//事件可以被覆盖
m
.
chromium
.
SetOnBeforeDownload
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
beforeDownloadItem
*
DownloadItem
,
suggestedName
string
,
callback
*
ICefBeforeDownloadCallback
)
{
if
bwEvent
.
onBeforeDownload
!=
nil
{
bwEvent
.
onBeforeDownload
(
sender
,
browser
,
beforeDownloadItem
,
suggestedName
,
callback
)
}
else
{
callback
.
Cont
(
consts
.
ExePath
+
consts
.
Separator
+
suggestedName
,
true
)
}
})
//默认自定义快捷键
defaultAcceleratorCustom
()
//事件可以被覆盖
m
.
chromium
.
SetOnKeyEvent
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
event
*
TCefKeyEvent
,
result
*
bool
)
{
if
api
.
GoBool
(
BrowserWindow
.
Config
.
chromiumConfig
.
enableDevTools
)
{
...
...
@@ -430,25 +493,14 @@ func (m *BaseWindow) registerDefaultEvent() {
bwEvent
.
onTitleChange
(
sender
,
browser
,
title
)
}
})
m
.
chromium
.
SetOnBeforeContextMenu
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
model
*
ICefMenuModel
)
{
chromiumOnBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
if
bwEvent
.
onBeforeContextMenu
!=
nil
{
bwEvent
.
onBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
}
})
m
.
chromium
.
SetOnContextMenuCommand
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
commandId
consts
.
MenuId
,
eventFlags
uint32
,
result
*
bool
)
{
chromiumOnContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
if
bwEvent
.
onContextMenuCommand
!=
nil
{
bwEvent
.
onContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
}
})
m
.
chromium
.
SetOnLoadingStateChange
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
isLoading
,
canGoBack
,
canGoForward
bool
)
{
if
bwEvent
.
onLoadingStateChange
!=
nil
{
bwEvent
.
onLoadingStateChange
(
sender
,
browser
,
isLoading
,
canGoBack
,
canGoForward
)
}
})
}
func
(
m
*
BaseWindow
)
close
(
sender
lcl
.
IObject
,
action
*
types
.
TCloseAction
)
{
//控制LCL创建的窗口事件
func
(
m
*
LCLBrowserWindow
)
registerControlLCLWindowEvent
()
{
}
func
(
m
*
LCLBrowserWindow
)
close
(
sender
lcl
.
IObject
,
action
*
types
.
TCloseAction
)
{
var
ret
bool
if
m
.
onClose
!=
nil
{
for
_
,
fn
:=
range
m
.
onClose
{
...
...
@@ -463,7 +515,7 @@ func (m *BaseWindow) close(sender lcl.IObject, action *types.TCloseAction) {
}
}
func
(
m
*
Base
Window
)
closeQuery
(
sender
lcl
.
IObject
,
close
*
bool
)
{
func
(
m
*
LCLBrowser
Window
)
closeQuery
(
sender
lcl
.
IObject
,
close
*
bool
)
{
var
ret
bool
if
m
.
onCloseQuery
!=
nil
{
for
_
,
fn
:=
range
m
.
onCloseQuery
{
...
...
@@ -501,7 +553,7 @@ func (m *BaseWindow) closeQuery(sender lcl.IObject, close *bool) {
}
//默认的chromium关闭事件
func
(
m
*
Base
Window
)
registerDefaultChromiumCloseEvent
()
{
func
(
m
*
LCLBrowser
Window
)
registerDefaultChromiumCloseEvent
()
{
var
bwEvent
=
BrowserWindow
.
browserEvent
m
.
chromium
.
SetOnClose
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
aAction
*
TCefCloseBrowsesAction
)
{
logger
.
Debug
(
"chromium.onClose"
)
...
...
cef/cef-views-framework-browser-window.go
浏览文件 @
4a9d599e
...
...
@@ -18,8 +18,6 @@ import (
"github.com/energye/golcl/lcl/api"
)
//为解决linux 107.xx以后版本gtk2和gtk3共存和中文输入问题
//
//基于CEF views framework窗口
//
//该窗口使用CEF内部实现,在linux下107.xx以后版本默认使用GTK3,但无法使用lcl组件集成到窗口中
...
...
@@ -30,7 +28,7 @@ type ViewsFrameworkBrowserWindow struct {
component
lcl
.
IComponent
//
windowComponent
*
TCEFWindowComponent
//
browserViewComponent
*
TCEFBrowserViewComponent
//
windowProperty
*
WindowProperty
//
windowProperty
*
WindowProperty
//
窗口属性
}
//创建 ViewsFrameworkBrowserWindow 窗口
...
...
@@ -87,6 +85,7 @@ func NewViewsFrameworkBrowserWindow(chromiumConfig *tCefChromiumConfig, windowPr
m
.
windowComponent
.
SetOnCanClose
(
func
(
sender
lcl
.
IObject
,
window
*
ICefWindow
,
aResult
*
bool
)
{
*
aResult
=
windowProperty
.
CanClose
})
m
.
windowComponent
.
SetAlwaysOnTop
(
windowProperty
.
AlwaysOnTop
)
return
m
}
...
...
@@ -117,7 +116,6 @@ func (m *browserWindow) appContextInitialized(app *TCEFApplication) {
}
m
.
vFrameBrowserWindow
=
NewViewsFrameworkBrowserWindow
(
BrowserWindow
.
Config
.
chromiumConfig
,
&
BrowserWindow
.
Config
.
WindowProperty
,
BrowserWindow
.
Config
.
viewsFrameBrowserWindowOnEventCallback
)
m
.
chromium
=
m
.
vFrameBrowserWindow
.
chromium
m
.
windowId
=
BrowserWindow
.
GetNextWindowNum
()
m
.
putChromiumWindowInfo
()
m
.
vFrameBrowserWindow
.
registerPopupEvent
()
m
.
vFrameBrowserWindow
.
registerDefaultEvent
()
...
...
@@ -165,6 +163,8 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() {
Height
:
BrowserWindow
.
Config
.
WindowProperty
.
Height
,
}
vFrameBrowserWindow
:=
NewViewsFrameworkBrowserWindow
(
BrowserWindow
.
Config
.
chromiumConfig
,
wp
,
nil
)
vFrameBrowserWindow
.
registerPopupEvent
()
vFrameBrowserWindow
.
registerDefaultEvent
()
vFrameBrowserWindow
.
windowComponent
.
CreateTopLevelWindow
()
}
...
...
@@ -174,12 +174,47 @@ func (m *ViewsFrameworkBrowserWindow) registerPopupEvent() {
func
(
m
*
ViewsFrameworkBrowserWindow
)
registerDefaultEvent
()
{
var
bwEvent
=
BrowserWindow
.
browserEvent
//默认自定义快捷键
defaultAcceleratorCustom
()
m
.
chromium
.
SetOnProcessMessageReceived
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
sourceProcess
consts
.
CefProcessId
,
message
*
ipc
.
ICefProcessMessage
)
bool
{
if
bwEvent
.
onProcessMessageReceived
!=
nil
{
return
bwEvent
.
onProcessMessageReceived
(
sender
,
browser
,
frame
,
sourceProcess
,
message
)
}
return
false
})
m
.
chromium
.
SetOnBeforeResourceLoad
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
request
*
ICefRequest
,
callback
*
ICefCallback
,
result
*
consts
.
TCefReturnValue
)
{
if
assetserve
.
AssetsServerHeaderKeyValue
!=
""
{
request
.
SetHeaderByName
(
assetserve
.
AssetsServerHeaderKeyName
,
assetserve
.
AssetsServerHeaderKeyValue
,
true
)
}
if
bwEvent
.
onBeforeResourceLoad
!=
nil
{
bwEvent
.
onBeforeResourceLoad
(
sender
,
browser
,
frame
,
request
,
callback
,
result
)
}
})
//事件可以被覆盖
m
.
chromium
.
SetOnBeforeDownload
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
beforeDownloadItem
*
DownloadItem
,
suggestedName
string
,
callback
*
ICefBeforeDownloadCallback
)
{
if
bwEvent
.
onBeforeDownload
!=
nil
{
bwEvent
.
onBeforeDownload
(
sender
,
browser
,
beforeDownloadItem
,
suggestedName
,
callback
)
}
else
{
callback
.
Cont
(
consts
.
ExePath
+
consts
.
Separator
+
suggestedName
,
true
)
}
})
m
.
chromium
.
SetOnBeforeContextMenu
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
model
*
ICefMenuModel
)
{
chromiumOnBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
if
bwEvent
.
onBeforeContextMenu
!=
nil
{
bwEvent
.
onBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
}
})
m
.
chromium
.
SetOnContextMenuCommand
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
commandId
consts
.
MenuId
,
eventFlags
uint32
,
result
*
bool
)
{
chromiumOnContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
if
bwEvent
.
onContextMenuCommand
!=
nil
{
bwEvent
.
onContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
}
})
m
.
chromium
.
SetOnLoadingStateChange
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
isLoading
,
canGoBack
,
canGoForward
bool
)
{
if
bwEvent
.
onLoadingStateChange
!=
nil
{
bwEvent
.
onLoadingStateChange
(
sender
,
browser
,
isLoading
,
canGoBack
,
canGoForward
)
}
})
m
.
chromium
.
SetOnFrameCreated
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
)
{
QueueAsyncCall
(
func
(
id
int
)
{
BrowserWindow
.
putBrowserFrame
(
browser
,
frame
)
...
...
@@ -194,6 +229,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
bwEvent
.
onFrameDetached
(
sender
,
browser
,
frame
)
}
})
m
.
chromium
.
SetOnAfterCreated
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
)
{
if
chromiumOnAfterCreate
(
browser
)
{
return
...
...
@@ -202,24 +238,6 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
bwEvent
.
onAfterCreated
(
sender
,
browser
)
}
})
m
.
chromium
.
SetOnBeforeResourceLoad
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
request
*
ICefRequest
,
callback
*
ICefCallback
,
result
*
consts
.
TCefReturnValue
)
{
if
assetserve
.
AssetsServerHeaderKeyValue
!=
""
{
request
.
SetHeaderByName
(
assetserve
.
AssetsServerHeaderKeyName
,
assetserve
.
AssetsServerHeaderKeyValue
,
true
)
}
if
bwEvent
.
onBeforeResourceLoad
!=
nil
{
bwEvent
.
onBeforeResourceLoad
(
sender
,
browser
,
frame
,
request
,
callback
,
result
)
}
})
//事件可以被覆盖
m
.
chromium
.
SetOnBeforeDownload
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
beforeDownloadItem
*
DownloadItem
,
suggestedName
string
,
callback
*
ICefBeforeDownloadCallback
)
{
if
bwEvent
.
onBeforeDownload
!=
nil
{
bwEvent
.
onBeforeDownload
(
sender
,
browser
,
beforeDownloadItem
,
suggestedName
,
callback
)
}
else
{
callback
.
Cont
(
consts
.
ExePath
+
consts
.
Separator
+
suggestedName
,
true
)
}
})
//默认自定义快捷键
defaultAcceleratorCustom
()
//事件可以被覆盖
m
.
chromium
.
SetOnKeyEvent
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
event
*
TCefKeyEvent
,
result
*
bool
)
{
if
api
.
GoBool
(
BrowserWindow
.
Config
.
chromiumConfig
.
enableDevTools
)
{
...
...
@@ -250,27 +268,10 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
return
false
})
m
.
chromium
.
SetOnTitleChange
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
title
string
)
{
//
updateBrowserDevTools(browser, title)
//
updateBrowserViewSource(browser, title)
updateBrowserDevTools
(
browser
,
title
)
updateBrowserViewSource
(
browser
,
title
)
if
bwEvent
.
onTitleChange
!=
nil
{
bwEvent
.
onTitleChange
(
sender
,
browser
,
title
)
}
})
m
.
chromium
.
SetOnBeforeContextMenu
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
model
*
ICefMenuModel
)
{
chromiumOnBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
if
bwEvent
.
onBeforeContextMenu
!=
nil
{
bwEvent
.
onBeforeContextMenu
(
sender
,
browser
,
frame
,
params
,
model
)
}
})
m
.
chromium
.
SetOnContextMenuCommand
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
frame
*
ICefFrame
,
params
*
ICefContextMenuParams
,
commandId
consts
.
MenuId
,
eventFlags
uint32
,
result
*
bool
)
{
chromiumOnContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
if
bwEvent
.
onContextMenuCommand
!=
nil
{
bwEvent
.
onContextMenuCommand
(
sender
,
browser
,
frame
,
params
,
commandId
,
eventFlags
,
result
)
}
})
m
.
chromium
.
SetOnLoadingStateChange
(
func
(
sender
lcl
.
IObject
,
browser
*
ICefBrowser
,
isLoading
,
canGoBack
,
canGoForward
bool
)
{
if
bwEvent
.
onLoadingStateChange
!=
nil
{
bwEvent
.
onLoadingStateChange
(
sender
,
browser
,
isLoading
,
canGoBack
,
canGoForward
)
}
})
}
cef/window-info.go
浏览文件 @
4a9d599e
...
...
@@ -19,39 +19,40 @@ type TCEFFrame map[int64]*ICefFrame
// 窗口信息
type
TCefWindowInfo
struct
{
Window
*
BaseWindow
`json:"-"`
//窗口Form
Browser
*
ICefBrowser
`json:"-"`
//浏览器对象,加载完chromium之后创建
WindowProperty
*
WindowProperty
`json:"-"`
//窗口属性
Frames
TCEFFrame
`json:"-"`
//当前浏览器下的所有frame
auxTools
*
auxTools
//辅助工具
Window
*
LCLBrowserWindow
`json:"-"`
//窗口Form
Browser
*
ICefBrowser
`json:"-"`
//浏览器对象,加载完chromium之后创建
WindowProperty
*
WindowProperty
`json:"-"`
//窗口属性
Frames
TCEFFrame
`json:"-"`
//当前浏览器下的所有frame
auxTools
*
auxTools
//辅助工具
}
type
auxTools
struct
{
devToolsWindow
*
BaseWindow
//开发者工具窗口
devToolsX
int32
//上次改变的窗体位置,宽度
devToolsY
int32
//
devToolsWidth
int32
//
devToolsHeight
int32
//
viewSourceWindow
*
b
rowserWindow
//viewSource
viewSourceUrl
string
//
viewSourceX
int32
//上次改变的窗体位置,宽度
viewSourceY
int32
//
viewSourceWidth
int32
//
viewSourceHeight
int32
//
devToolsWindow
*
LCLBrowserWindow
//devTools
devToolsX
int32
//上次改变的窗体位置,宽度
devToolsY
int32
//
devToolsWidth
int32
//
devToolsHeight
int32
//
viewSourceWindow
*
LCLB
rowserWindow
//viewSource
viewSourceUrl
string
//
viewSourceX
int32
//上次改变的窗体位置,宽度
viewSourceY
int32
//
viewSourceWidth
int32
//
viewSourceHeight
int32
//
}
type
WindowProperty
struct
{
IsShowModel
bool
//是否以模态窗口显示
WindowState
types
.
TWindowState
//窗口状态
Title
string
//标题
WindowState
types
.
TWindowState
//窗口
状态
Title
string
//
窗口
标题
Url
string
//默认打开URL
Icon
string
//窗口图标 加载本地图
IconFS
string
//窗口图标 加载emfs内置图
片
CanMinimize
bool
//窗口 是否
显示最小化按钮
CanMaximize
bool
//窗口 是否
显示最大化按钮
Icon
string
//窗口图标 加载本地图
标
IconFS
string
//窗口图标 加载emfs内置图
标
CanMinimize
bool
//窗口 是否
启用最小化功能
CanMaximize
bool
//窗口 是否
启用最大化功能
CanResize
bool
//窗口 是否允许调整窗口大小
CanClose
bool
//窗口 关闭时是否关闭窗口
IsCenterWindow
bool
//窗口 是否居中显示
AlwaysOnTop
bool
//窗口 置顶
X
int32
//窗口 IsCenterWindow=false X坐标
Y
int32
//窗口 IsCenterWindow=false Y坐标
Width
int32
//窗口 宽
...
...
cef/window.go
浏览文件 @
4a9d599e
...
...
@@ -8,40 +8,43 @@
package
cef
import
"github.com/energye/golcl/lcl"
// 自定义窗口组件
type
Window
struct
{
BaseWindow
defaultUrl
string
config
*
tCefChromiumConfig
}
import
(
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/types"
)
//创建一个新window窗口
func
NewWindow
()
*
Window
{
var
window
=
&
Window
{}
func
NewWindow
(
windowProperty
*
WindowProperty
)
*
LCLBrowserWindow
{
if
windowProperty
==
nil
{
windowProperty
=
NewWindowProperty
()
}
var
window
=
&
LCLBrowserWindow
{}
window
.
windowProperty
=
windowProperty
//window.TForm = lcl.NewForm(owner)
lcl
.
Application
.
CreateForm
(
&
window
)
window
.
ParentDoubleBuffered
()
window
.
FormCreate
()
window
.
SetNotInTaskBar
()
window
.
defaultWindowEvent
()
window
.
SetCaption
(
windowProperty
.
Title
)
if
windowProperty
.
IsCenterWindow
{
window
.
SetPosition
(
types
.
PoDesktopCenter
)
}
else
{
window
.
SetPosition
(
types
.
PoDefault
)
window
.
SetBounds
(
windowProperty
.
X
,
windowProperty
.
Y
,
windowProperty
.
Width
,
windowProperty
.
Height
)
}
if
windowProperty
.
IconFS
!=
""
{
_
=
window
.
Icon
()
.
LoadFromFSFile
(
windowProperty
.
IconFS
)
}
else
if
windowProperty
.
Icon
!=
""
{
window
.
Icon
()
.
LoadFromFile
(
windowProperty
.
Icon
)
}
if
windowProperty
.
AlwaysOnTop
{
window
.
SetFormStyle
(
types
.
FsSystemStayOnTop
)
}
window
.
EnabledMinimize
(
windowProperty
.
CanMinimize
)
window
.
EnabledMaximize
(
windowProperty
.
CanMaximize
)
if
!
windowProperty
.
CanResize
{
window
.
SetBorderStyle
(
types
.
BsSingle
)
}
return
window
}
//返回完整的chromium对象
func
(
m
*
Window
)
Chromium
()
IChromium
{
return
m
.
chromium
}
//启用默认关闭事件行为-该窗口将被关闭
func
(
m
*
Window
)
EnableDefaultClose
()
{
m
.
defaultWindowCloseEvent
()
m
.
registerDefaultChromiumCloseEvent
()
}
//启用所有默认事件行为
func
(
m
*
Window
)
EnableAllDefaultEvent
()
{
m
.
defaultWindowCloseEvent
()
m
.
defaultChromiumEvent
()
}
example/browser-linux/resources/index.html
浏览文件 @
4a9d599e
...
...
@@ -11,6 +11,7 @@
</head>
<body
style=
"overflow: hidden;margin: 0px;padding: 0px;"
>
<a
href=
"https://www.baidu.com"
target=
"_blank"
>
百度
</a>
<a
href=
"/"
target=
"_blank"
>
index
</a>
<a
href=
"https://energy.yanghy.cn"
>
Energy
</a>
</body>
</html>
\ No newline at end of file
example/mini-browser/src/min-browser.go
浏览文件 @
4a9d599e
...
...
@@ -101,11 +101,11 @@ func AppBrowserInit() {
winInfo
:=
cef
.
BrowserWindow
.
GetWindowInfo
(
context
.
BrowserId
())
winInfo
.
Browser
.
StopFinding
(
true
)
})
var
newForm
*
cef
.
Window
var
newForm
*
cef
.
LCLBrowser
Window
event
.
On
(
"js-new-window"
,
func
(
context
ipc
.
IIPCContext
)
{
fmt
.
Println
(
"创建新窗口 ProcessType:"
,
common
.
Args
.
ProcessType
())
if
newForm
==
nil
{
newForm
=
cef
.
NewWindow
()
newForm
=
cef
.
NewWindow
(
nil
)
newForm
.
SetCaption
(
"新窗口标题"
)
btn
:=
lcl
.
NewButton
(
newForm
)
btn
.
SetParent
(
newForm
)
...
...
@@ -129,12 +129,14 @@ func AppBrowserInit() {
}
})
})
var
browserWindow
*
cef
.
Window
var
browserWindow
*
cef
.
LCLBrowser
Window
event
.
On
(
"js-new-browser-window"
,
func
(
context
ipc
.
IIPCContext
)
{
fmt
.
Println
(
"通过 js ipc emit 事件创建新Browser窗口 ProcessType:"
,
common
.
Args
.
ProcessType
())
if
browserWindow
==
nil
{
browserWindow
=
cef
.
NewBrowserWindow
(
nil
,
"https://www.baidu.com"
)
browserWindow
.
SetCaption
(
"Browser新窗口标题"
)
wp
:=
cef
.
NewWindowProperty
()
wp
.
Url
=
"https://www.baidu.com"
wp
.
Title
=
"Browser新窗口标题"
browserWindow
=
cef
.
NewBrowserWindow
(
nil
,
wp
)
browserWindow
.
SetWidth
(
800
)
browserWindow
.
SetHeight
(
600
)
}
...
...
@@ -180,9 +182,9 @@ func AppBrowserInit() {
browserWindow
.
Window
.
SetCaption
(
"这里设置应用标题"
)
browserWindow
.
Window
.
SetPosition
(
types
.
PoScreenCenter
)
//窗口局中显示
//设置窗口样式,无标题 ,最大化按钮等
//
window.Window.SetBorderStyle(types.BsNon
e)
//
window.Form
.SetFormStyle(types.FsNormal)
//
window.Form
.SetFormStyle(types.FsSystemStayOnTop)
//
browserWindow.Window.SetBorderStyle(types.BsSingl
e)
//
browserWindow.Window
.SetFormStyle(types.FsNormal)
//
browserWindow.Window
.SetFormStyle(types.FsSystemStayOnTop)
//设置窗口大小
browserWindow
.
Window
.
SetWidth
(
1600
)
browserWindow
.
Window
.
SetHeight
(
900
)
...
...
@@ -448,7 +450,7 @@ func tray(browserWindow *cef.TCefWindowInfo) {
}
// 自定义组件
func
addressBar
(
window
*
cef
.
Base
Window
)
{
func
addressBar
(
window
*
cef
.
LCLBrowser
Window
)
{
window
.
WindowParent
()
.
SetAlign
(
types
.
AlNone
)
window
.
WindowParent
()
.
SetAnchors
(
types
.
NewSet
(
types
.
AkTop
,
types
.
AkLeft
,
types
.
AkRight
,
types
.
AkBottom
))
window
.
WindowParent
()
.
SetTop
(
0
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录