提交 b711d376 编写于 作者: yanghye's avatar yanghye

v2.2.1 Fixed Chinese input and gtk3 issues for linux packaging

上级 be6c03f5
......@@ -22,9 +22,9 @@ const (
func updateBrowserDevTools(browser *ICefBrowser, title string) {
if browserWinInfo := BrowserWindow.GetWindowInfo(browser.Identifier()); browserWinInfo != nil {
if browserWinInfo.auxTools != nil && browserWinInfo.auxTools.devToolsWindow != nil {
if browserWinInfo.getAuxTools() != nil && browserWinInfo.getAuxTools().devToolsWindow != nil {
QueueAsyncCall(func(id int) {
browserWinInfo.auxTools.devToolsWindow.SetCaption(fmt.Sprintf("%s - %s", dev_tools_name, browser.MainFrame().Url))
browserWinInfo.getAuxTools().devToolsWindow.SetCaption(fmt.Sprintf("%s - %s", dev_tools_name, browser.MainFrame().Url))
})
}
}
......
......@@ -22,7 +22,7 @@ func updateBrowserViewSource(browser *ICefBrowser, title string) {
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))
browserWinInfo.SetTitle(fmt.Sprintf("%s - %s", view_source_name, mainFrame.Url))
} else {
logger.Error("failed to get main frame")
}
......@@ -32,8 +32,8 @@ func updateBrowserViewSource(browser *ICefBrowser, title string) {
func viewSourceAfterCreate(browser *ICefBrowser) bool {
if winInfo := BrowserWindow.GetWindowInfo(browser.Identifier()); winInfo != nil {
if winInfo.WindowType() == WT_VIEW_SOURCE && winInfo.auxTools.viewSourceWindow != nil {
winInfo.auxTools.viewSourceWindow.chromium.LoadUrl(winInfo.auxTools.viewSourceUrl)
if winInfo.WindowType() == WT_VIEW_SOURCE && winInfo.getAuxTools().viewSourceWindow != nil {
winInfo.getAuxTools().viewSourceWindow.chromium.LoadUrl(winInfo.getAuxTools().viewSourceUrl)
return true
}
}
......@@ -53,11 +53,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
winInfo.createAuxTools()
winInfo.getAuxTools().viewSourceUrl = viewSourceUrl
winInfo.getAuxTools().viewSourceWindow = m
}
m.Show()
} else {
......
......@@ -12,9 +12,9 @@ import (
"github.com/energye/energy/common"
)
type viewsFrameBrowserWindowOnEventCallback func(event *BrowserEvent, window *ViewsFrameworkBrowserWindow)
type browserWindowOnEventCallback func(event *BrowserEvent, window *LCLBrowserWindow)
type browserWindowAfterOnEventCallback func(window *LCLBrowserWindow)
type viewsFrameBrowserWindowOnEventCallback func(event *BrowserEvent, window IViewsFrameworkBrowserWindow)
type browserWindowOnEventCallback func(event *BrowserEvent, window ILCLBrowserWindow)
type browserWindowAfterOnEventCallback func(window ILCLBrowserWindow)
//创建主窗口指定的一些快捷配置属性
type browserConfig struct {
......
......@@ -30,7 +30,7 @@ var (
Config: &browserConfig{
WindowProperty: *NewWindowProperty(),
},
windowInfo: make(map[int32]*LCLBrowserWindow),
windowInfo: make(map[int32]IBrowserWindow),
windowSerial: 1,
}
browserProcessStartAfterCallback browserProcessStartAfterCallbackFunc
......@@ -49,13 +49,13 @@ func SetBrowserProcessStartAfterCallback(callback browserProcessStartAfterCallba
// 浏览器包装结构体
type browser struct {
mainBrowserWindow *browserWindow //主浏览器窗口
mainVFBrowserWindow *vfBrowserWindow //主浏览器窗口
popupWindow *LCLBrowserWindow //弹出的子窗口
browserEvent *BrowserEvent //浏览器全局事件
Config *browserConfig //浏览器和窗口配置
windowInfo map[int32]*LCLBrowserWindow //窗口信息集合
windowSerial int32 //窗口序号
mainBrowserWindow *browserWindow //主浏览器窗口
mainVFBrowserWindow IViewsFrameworkBrowserWindow //主浏览器窗口
popupWindow *LCLBrowserWindow //弹出的子窗口
browserEvent *BrowserEvent //浏览器全局事件
Config *browserConfig //浏览器和窗口配置
windowInfo map[int32]IBrowserWindow //窗口信息集合
windowSerial int32 //窗口序号
}
// 浏览器全局事件监听-扩展
......@@ -83,13 +83,6 @@ type BrowserEvent struct {
type browserWindow struct {
LCLBrowserWindow
isFirstActivate bool
tray ITray
}
type vfBrowserWindow struct {
ViewsFrameworkBrowserWindow
isFirstActivate bool
tray ITray
}
// 运行应用
......@@ -183,7 +176,7 @@ func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
}
func (m *browser) MainWindow() *LCLBrowserWindow {
return &m.mainBrowserWindow.LCLBrowserWindow
return m.mainBrowserWindow.BrowserWindow()
}
// 基于CEF views framework窗口 - 主窗口和chromium初始化时回调
......@@ -255,18 +248,18 @@ func (m *browser) createNextPopupWindow() {
}
// 拿到窗口信息
func (m *browser) GetWindowInfo(browserId int32) *LCLBrowserWindow {
func (m *browser) GetWindowInfo(browserId int32) IBrowserWindow {
if winInfo, ok := m.windowInfo[browserId]; ok {
return winInfo
}
return nil
}
func (m *browser) GetWindowsInfo() map[int32]*LCLBrowserWindow {
func (m *browser) GetWindowsInfo() map[int32]IBrowserWindow {
return m.windowInfo
}
func (m *browser) putWindowInfo(browserId int32, windowInfo *LCLBrowserWindow) {
func (m *browser) putWindowInfo(browserId int32, windowInfo IBrowserWindow) {
m.windowInfo[browserId] = windowInfo
}
......@@ -277,38 +270,35 @@ func (m *browser) removeWindowInfo(browseId int32) {
func (m *browser) GetBrowser(browseId int32) *ICefBrowser {
if winInfo, ok := m.windowInfo[browseId]; ok {
return winInfo.browser
return winInfo.Browser()
}
return nil
}
func (m *browser) putBrowserFrame(browser *ICefBrowser, frame *ICefFrame) {
if winInfo, ok := m.windowInfo[browser.Identifier()]; ok {
if winInfo.frames == nil {
winInfo.frames = make(TCEFFrame)
}
winInfo.browser = browser
winInfo.frames[frame.Id] = frame
winInfo.setBrowser(browser)
winInfo.addFrame(frame)
}
}
func (m *browser) GetFrames(browseId int32) map[int64]*ICefFrame {
if winInfo, ok := m.windowInfo[browseId]; ok {
return winInfo.frames
return winInfo.Frames()
}
return nil
}
func (m *browser) GetFrame(browseId int32, frameId int64) *ICefFrame {
if winInfo, ok := m.windowInfo[browseId]; ok {
return winInfo.frames[frameId]
return winInfo.Frames()[frameId]
}
return nil
}
func (m *browser) RemoveFrame(browseId int32, frameId int64) {
if winInfo, ok := m.windowInfo[browseId]; ok {
delete(winInfo.frames, frameId)
delete(winInfo.Frames(), frameId)
}
}
......@@ -321,9 +311,9 @@ func (m *browser) IsSameFrame(browseId int32, frameId int64) bool {
func (m *browser) removeNoValidFrames() {
for _, winInfo := range m.windowInfo {
for _, frm := range winInfo.frames {
for _, frm := range winInfo.Frames() {
if !frm.IsValid() {
delete(winInfo.frames, frm.Id)
delete(winInfo.Frames(), frm.Id)
}
}
}
......
......@@ -244,7 +244,7 @@ func (m *ICefBrowser) ViewSource(frame *ICefFrame) {
//显示开发者工具
func (m *ICefBrowser) ShowDevTools() {
if browserWinInfo := BrowserWindow.GetWindowInfo(m.Identifier()); browserWinInfo != nil {
createBrowserDevTools(m, browserWinInfo)
createBrowserDevTools(m, browserWinInfo.AsLCLBrowserWindow().BrowserWindow())
}
}
......
......@@ -59,7 +59,7 @@ func (m *tCefTrayForm) Tray() *Tray {
}
func (m *tCefTrayForm) Show() {
if BrowserWindow.mainBrowserWindow.chromium == nil || !BrowserWindow.mainBrowserWindow.chromium.Initialized() {
if BrowserWindow.mainBrowserWindow.Chromium() == nil || !BrowserWindow.mainBrowserWindow.Chromium().Initialized() {
return
}
m.TForm.Show()
......
......@@ -54,6 +54,7 @@ type LCLBrowserWindow struct {
isChromiumCreate bool //是否创建完成 Chromium
frames TCEFFrame //当前浏览器下的所有frame
auxTools *auxTools //辅助工具
tray ITray //
}
//创建一个带有 chromium 窗口
......@@ -74,10 +75,58 @@ func NewBrowserWindow(config *tCefChromiumConfig, windowProperty *WindowProperty
return window
}
func (m *LCLBrowserWindow) BrowserWindow() *LCLBrowserWindow {
return m
}
func (m *LCLBrowserWindow) AsViewsFrameworkBrowserWindow() IViewsFrameworkBrowserWindow {
return nil
}
func (m *LCLBrowserWindow) AsLCLBrowserWindow() ILCLBrowserWindow {
return m
}
func (m *LCLBrowserWindow) SetTitle(title string) {
if m.TForm == nil {
return
}
m.TForm.SetCaption(title)
}
func (m *LCLBrowserWindow) getAuxTools() *auxTools {
return m.auxTools
}
func (m *LCLBrowserWindow) createAuxTools() {
if m.auxTools == nil {
m.auxTools = &auxTools{}
}
}
func (m *LCLBrowserWindow) Browser() *ICefBrowser {
return m.browser
}
func (m *LCLBrowserWindow) setBrowser(browser *ICefBrowser) {
m.browser = browser
}
func (m *LCLBrowserWindow) addFrame(frame *ICefFrame) {
m.createFrames()
m.frames[frame.Id] = frame
}
func (m *LCLBrowserWindow) Frames() TCEFFrame {
return m.frames
}
func (m *LCLBrowserWindow) createFrames() {
if m.frames == nil {
m.frames = make(TCEFFrame)
}
}
func (m *LCLBrowserWindow) Chromium() IChromium {
return m.chromium
}
......@@ -152,6 +201,10 @@ func (m *LCLBrowserWindow) IsClosing() bool {
return m.isClosing
}
func (m *LCLBrowserWindow) ITray() {
}
// 设置窗口类型
func (m *LCLBrowserWindow) SetWindowType(windowType consts.WINDOW_TYPE) {
m.windowType = windowType
......@@ -243,7 +296,7 @@ func (m *LCLBrowserWindow) defaultWindowCloseEvent() {
}
//启用默认关闭事件行为-该窗口将被关闭
func (m *LCLBrowserWindow) EnableDefaultClose() {
func (m *LCLBrowserWindow) EnableDefaultCloseEvent() {
m.defaultWindowCloseEvent()
m.registerDefaultChromiumCloseEvent()
}
......
......@@ -92,18 +92,6 @@ func NewViewsFrameworkBrowserWindow(chromiumConfig *tCefChromiumConfig, windowPr
return m
}
func (m *ViewsFrameworkBrowserWindow) Component() lcl.IComponent {
return m.component
}
func (m *ViewsFrameworkBrowserWindow) WindowComponent() *TCEFWindowComponent {
return m.windowComponent
}
func (m *ViewsFrameworkBrowserWindow) BrowserViewComponent() *TCEFBrowserViewComponent {
return m.browserViewComponent
}
//ViewsFrameworkBrowserWindow 主窗口初始化
func (m *browser) appContextInitialized(app *TCEFApplication) {
if !common.Args.IsMain() {
......@@ -265,3 +253,151 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
}
})
}
func (m *ViewsFrameworkBrowserWindow) BrowserWindow() *ViewsFrameworkBrowserWindow {
return m
}
func (m *ViewsFrameworkBrowserWindow) AsViewsFrameworkBrowserWindow() IViewsFrameworkBrowserWindow {
return m
}
func (m *ViewsFrameworkBrowserWindow) AsLCLBrowserWindow() ILCLBrowserWindow {
return nil
}
func (m *ViewsFrameworkBrowserWindow) SetTitle(title string) {
m.WindowComponent().SetTitle(title)
}
func (m *ViewsFrameworkBrowserWindow) getAuxTools() *auxTools {
return m.auxTools
}
func (m *ViewsFrameworkBrowserWindow) createAuxTools() {
if m.auxTools == nil {
m.auxTools = &auxTools{}
}
}
func (m *ViewsFrameworkBrowserWindow) Browser() *ICefBrowser {
return m.browser
}
func (m *ViewsFrameworkBrowserWindow) Frames() TCEFFrame {
return m.frames
}
func (m *ViewsFrameworkBrowserWindow) createFrames() {
if m.frames == nil {
m.frames = make(TCEFFrame)
}
}
func (m *ViewsFrameworkBrowserWindow) setBrowser(browser *ICefBrowser) {
m.browser = browser
}
func (m *ViewsFrameworkBrowserWindow) addFrame(frame *ICefFrame) {
m.createFrames()
m.frames[frame.Id] = frame
}
func (m *ViewsFrameworkBrowserWindow) Chromium() IChromium {
return m.chromium
}
func (m *ViewsFrameworkBrowserWindow) Id() int32 {
return m.windowId
}
func (m *ViewsFrameworkBrowserWindow) Show() {
m.WindowComponent().Show()
}
func (m *ViewsFrameworkBrowserWindow) Hide() {
m.WindowComponent().Hide()
}
func (m *ViewsFrameworkBrowserWindow) Close() {
m.WindowComponent().Close()
}
func (m *ViewsFrameworkBrowserWindow) Maximize() {
m.WindowComponent().Maximize()
}
func (m *ViewsFrameworkBrowserWindow) Minimize() {
m.WindowComponent().Minimize()
}
func (m *ViewsFrameworkBrowserWindow) Restore() {
m.WindowComponent().Restore()
}
func (m *ViewsFrameworkBrowserWindow) CloseBrowserWindow() {
m.chromium.CloseBrowser(true)
}
func (m *ViewsFrameworkBrowserWindow) CreateTopLevelWindow() {
m.WindowComponent().CreateTopLevelWindow()
}
func (m *ViewsFrameworkBrowserWindow) CenterWindow(size *TCefSize) {
m.WindowComponent().CenterWindow(size)
}
//返回窗口关闭状态
func (m *ViewsFrameworkBrowserWindow) IsClosing() bool {
return m.isClosing
}
// 返回窗口类型
func (m *ViewsFrameworkBrowserWindow) WindowType() consts.WINDOW_TYPE {
return m.windowType
}
// 设置窗口类型
func (m *ViewsFrameworkBrowserWindow) SetWindowType(windowType consts.WINDOW_TYPE) {
m.windowType = windowType
}
//禁用最小化按钮
func (m *ViewsFrameworkBrowserWindow) DisableMinimize() {
m.WindowComponent().SetOnCanMinimize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = false
})
}
//禁用最大化按钮
func (m *ViewsFrameworkBrowserWindow) DisableMaximize() {
m.WindowComponent().SetOnCanMaximize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = false
})
}
//启用最小化按钮
func (m *ViewsFrameworkBrowserWindow) EnableMinimize() {
m.WindowComponent().SetOnCanMinimize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = true
})
}
//启用最大化按钮
func (m *ViewsFrameworkBrowserWindow) EnableMaximize() {
m.WindowComponent().SetOnCanMaximize(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
*aResult = true
})
}
func (m *ViewsFrameworkBrowserWindow) Component() lcl.IComponent {
return m.component
}
func (m *ViewsFrameworkBrowserWindow) WindowComponent() *TCEFWindowComponent {
return m.windowComponent
}
func (m *ViewsFrameworkBrowserWindow) BrowserViewComponent() *TCEFBrowserViewComponent {
return m.browserViewComponent
}
......@@ -13,8 +13,11 @@ package cef
//只适用于windows的无菜单托盘
func (m *LCLBrowserWindow) NewCefTray(width, height int32, url string) ITray {
if BrowserWindow.mainBrowserWindow.tray == nil {
BrowserWindow.mainBrowserWindow.tray = newCefTray(m, width, height, url)
if BrowserWindow.mainBrowserWindow.AsLCLBrowserWindow() == nil {
return nil
}
return BrowserWindow.mainBrowserWindow.tray
if BrowserWindow.mainBrowserWindow.AsLCLBrowserWindow().BrowserWindow().tray == nil {
BrowserWindow.mainBrowserWindow.AsLCLBrowserWindow().BrowserWindow().tray = newCefTray(m, width, height, url)
}
return BrowserWindow.mainBrowserWindow.AsLCLBrowserWindow().BrowserWindow().tray
}
......@@ -9,6 +9,7 @@
package cef
import (
"github.com/energye/energy/consts"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/types"
)
......@@ -90,20 +91,56 @@ func NewWindow(windowProperty *WindowProperty, owner ...lcl.IComponent) *LCLBrow
}
type IBrowserWindow interface {
Id() int32
Show()
Hide()
Close()
Maximize()
Minimize()
CloseBrowserWindow()
WindowType() consts.WINDOW_TYPE
SetWindowType(windowType consts.WINDOW_TYPE)
Browser() *ICefBrowser
Chromium() IChromium
DisableMaximize()
DisableMinimize()
EnableMaximize()
EnableMinimize()
IsClosing() bool
AsViewsFrameworkBrowserWindow() IViewsFrameworkBrowserWindow
AsLCLBrowserWindow() ILCLBrowserWindow
Frames() TCEFFrame
addFrame(frame *ICefFrame)
setBrowser(browser *ICefBrowser)
createAuxTools()
getAuxTools() *auxTools
SetTitle(title string)
}
type ILCLBrowserWindow interface {
IBrowserWindow
Id() int32
BrowserWindow() *LCLBrowserWindow
EnableDefaultCloseEvent()
EnableAllDefaultEvent()
SetDefaultInTaskBar()
SetShowInTaskBar()
SetNotInTaskBar()
WindowParent() ITCefWindowParent
DisableTransparent()
EnableTransparent(value uint8)
DisableSystemMenu()
DisableHelp()
EnableSystemMenu()
EnableHelp()
}
type IViewsFrameworkBrowserWindow interface {
IBrowserWindow
BrowserWindow() *ViewsFrameworkBrowserWindow
CreateTopLevelWindow()
CenterWindow(size *TCefSize)
Component() lcl.IComponent
WindowComponent() *TCEFWindowComponent
BrowserViewComponent() *TCEFBrowserViewComponent
}
//创建一个 窗口默认属性
......
......@@ -28,11 +28,11 @@ func MainBrowserWindow() {
config.SetEnableDevTools(true)
cef.BrowserWindow.Config.SetChromiumConfig(config)
//创建窗口时的回调函数 对浏览器事件设置,和窗口属性组件等创建和修改
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow *cef.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow cef.ILCLBrowserWindow) {
//设置应用图标 这里加载的图标是内置到执行程序里的资源文件
lcl.Application.Icon().LoadFromFSFile("resources/icon.ico")
//在窗体初始化时创建窗口内的组件
back, forward, stop, refresh, progressLabel, addr := controlUI(browserWindow)
back, forward, stop, refresh, progressLabel, addr := controlUI(browserWindow.BrowserWindow())
//页面加载处理进度
event.SetOnLoadingProgressChange(func(sender lcl.IObject, browser *cef.ICefBrowser, progress float64) {
//linux 更新UI组件必须使用 QueueAsyncCall 主线程异步同步
......@@ -59,7 +59,7 @@ func MainBrowserWindow() {
})
})
//创建窗口之后对对主窗口的属性、组件或子窗口的创建
cef.BrowserWindow.SetBrowserInitAfter(func(browserWindow *cef.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInitAfter(func(browserWindow cef.ILCLBrowserWindow) {
fmt.Println("SetBrowserInitAfter")
})
}
......
......@@ -51,7 +51,7 @@ func main() {
})
})
//在SetBrowserInit中设置cookie事件,这些事件将返回操作后的结果
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow *cef.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow cef.ILCLBrowserWindow) {
//获取cookie时触发
event.SetOnCookiesVisited(func(sender lcl.IObject, cookie *cef.ICefCookie) {
fmt.Printf("SetOnCookiesVisited: %+v\n", cookie)
......
......@@ -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.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow cef.ILCLBrowserWindow) {
//linux 下载文件 系统弹出保存对话框不启作用
//所以 自己调用系统的保存对话框获得保存路径
linuxDlSave := lcl.NewSaveDialog(browserWindow)
linuxDlSave := lcl.NewSaveDialog(browserWindow.BrowserWindow())
linuxDlSave.SetTitle("保存对话框标题")
//下载之前事件
......
......@@ -23,7 +23,7 @@ func main() {
//指定一个URL地址,或本地html文件目录
cef.BrowserWindow.Config.Url = "http://localhost:22022/index.html"
cef.BrowserWindow.Config.IconFS = "resources/icon.png"
cef.BrowserWindow.SetViewFrameBrowserInit(func(event *cef.BrowserEvent, window *cef.ViewsFrameworkBrowserWindow) {
cef.BrowserWindow.SetViewFrameBrowserInit(func(event *cef.BrowserEvent, window cef.IViewsFrameworkBrowserWindow) {
fmt.Println("cef.BrowserWindow.SetViewFrameBrowserInit", window)
fmt.Printf("%+v\n", window)
event.SetOnBeforeContextMenu(func(sender lcl.IObject, browser *cef.ICefBrowser, frame *cef.ICefFrame, params *cef.ICefContextMenuParams, model *cef.ICefMenuModel) {
......
......@@ -142,7 +142,7 @@ func AppBrowserInit() {
browserWindow.SetWidth(800)
browserWindow.SetHeight(600)
browserWindow.SetShowInTaskBar()
browserWindow.EnableDefaultClose()
browserWindow.EnableDefaultCloseEvent()
browserWindow.Chromium().SetOnTitleChange(func(sender lcl.IObject, browser *cef.ICefBrowser, title string) {
fmt.Println(wp.Title, title)
})
......@@ -180,13 +180,13 @@ func AppBrowserInit() {
})
//主窗口初始化回调函数
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow *cef.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, browserWindow cef.ILCLBrowserWindow) {
lcl.Application.SetOnMinimize(func(sender lcl.IObject) {
fmt.Println("minimize")
})
fmt.Println("主窗口初始化回调函数")
lcl.Application.Icon().LoadFromFSFile("resources/icon.ico") //设置应用图标
browserWindow.SetCaption("这里设置应用标题")
browserWindow.SetTitle("这里设置应用标题")
//browserWindow.EnableTransparent(100) //窗口透明
//设置窗口样式,无标题 ,最大化按钮等
//browserWindow.SetBorderStyle(types.BsSingle)
......@@ -200,16 +200,16 @@ func AppBrowserInit() {
//browserWindow.Window.Constraints().SetMinWidth(300)
//browserWindow.Window.Constraints().SetMaxWidth(1600)
//browserWindow.Window.Constraints().SetMaxHeight(900)
browserWindow.Constraints().SetOnChange(func(sender lcl.IObject) {
browserWindow.BrowserWindow().Constraints().SetOnChange(func(sender lcl.IObject) {
fmt.Println("browserWindow SetOnChange")
})
//添加事件,add不会覆盖默认的事件 set会覆盖默认的事件
browserWindow.AddOnClose(func(sender lcl.IObject, action *types.TCloseAction) bool {
browserWindow.BrowserWindow().AddOnClose(func(sender lcl.IObject, action *types.TCloseAction) bool {
fmt.Println("添加onclose事件")
return false
})
//窗口大小改变后触发
browserWindow.AddOnResize(func(sender lcl.IObject) bool {
browserWindow.BrowserWindow().AddOnResize(func(sender lcl.IObject) bool {
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if browserWindow.Browser() != nil {
var target = &cef.EmitTarget{
......@@ -217,10 +217,10 @@ func AppBrowserInit() {
FrameId: browserWindow.Browser().MainFrame().Id,
}
var argumentList = ipc.NewArgumentList()
argumentList.SetInt32(0, browserWindow.Left())
argumentList.SetInt32(1, browserWindow.Top())
argumentList.SetInt32(2, browserWindow.Width())
argumentList.SetInt32(3, browserWindow.Height())
argumentList.SetInt32(0, browserWindow.BrowserWindow().Left())
argumentList.SetInt32(1, browserWindow.BrowserWindow().Top())
argumentList.SetInt32(2, browserWindow.BrowserWindow().Width())
argumentList.SetInt32(3, browserWindow.BrowserWindow().Height())
browserWindow.Chromium().Emit("window-resize", argumentList, target)
browserWindow.Chromium().EmitAndCallback("window-resize", argumentList, target, func(context ipc.IIPCContext) {
fmt.Println("EmitAndCallback AddOnResize")
......@@ -232,7 +232,7 @@ func AppBrowserInit() {
return false
})
//windows下可以使用这个函数,实时触发
browserWindow.SetOnConstrainedResize(func(sender lcl.IObject, minWidth, minHeight, maxWidth, maxHeight *int32) {
browserWindow.BrowserWindow().SetOnConstrainedResize(func(sender lcl.IObject, minWidth, minHeight, maxWidth, maxHeight *int32) {
//Browser是在chromium加载完之后创建, 窗口创建时该对象还不存在
if browserWindow.Browser() != nil {
var target = &cef.EmitTarget{
......@@ -240,10 +240,10 @@ func AppBrowserInit() {
FrameId: browserWindow.Browser().MainFrame().Id,
}
var argumentList = ipc.NewArgumentList()
argumentList.SetInt32(0, browserWindow.Left())
argumentList.SetInt32(1, browserWindow.Top())
argumentList.SetInt32(2, browserWindow.Width())
argumentList.SetInt32(3, browserWindow.Height())
argumentList.SetInt32(0, browserWindow.BrowserWindow().Left())
argumentList.SetInt32(1, browserWindow.BrowserWindow().Top())
argumentList.SetInt32(2, browserWindow.BrowserWindow().Width())
argumentList.SetInt32(3, browserWindow.BrowserWindow().Height())
browserWindow.Chromium().Emit("window-resize", argumentList, target)
//使用EmitAndReturn函数会锁死
// browserWindow.Chromium.EmitAndCallback("window-resize", argumentList, target, func(context cef.IIPCContext) {
......@@ -252,11 +252,11 @@ func AppBrowserInit() {
}
})
//自定义browser窗体
addressBar(browserWindow)
addressBar(browserWindow.BrowserWindow())
//下载文件
//linux系统弹出保存对话框不启作用
//自己调用系统的保存对话框获得保存路径
dlSave := lcl.NewSaveDialog(browserWindow)
dlSave := lcl.NewSaveDialog(browserWindow.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)
......@@ -380,13 +380,13 @@ func AppBrowserInit() {
})
})
//添加子窗口初始化
cef.BrowserWindow.SetBrowserInitAfter(func(browserWindow *cef.LCLBrowserWindow) {
cef.BrowserWindow.SetBrowserInitAfter(func(browserWindow cef.ILCLBrowserWindow) {
//在这里创建 一些子窗口 子组件 等
//托盘
if common.IsWindows() {
cefTray(browserWindow)
cefTray(browserWindow.BrowserWindow())
} else {
tray(browserWindow)
tray(browserWindow.BrowserWindow())
}
})
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册