cef-views-framework-browser-window.go 3.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under GNU General Public License v3.0
//
//----------------------------------------

package cef

import (
	"fmt"
13
	"github.com/energye/energy/common"
14 15 16 17
	"github.com/energye/energy/consts"
	"github.com/energye/golcl/lcl"
)

18 19 20 21 22
//基于CEF views framework窗口
//
//该窗口使用CEF内部实现,在linux下107.xx以后版本默认使用GTK3,但无法使用lcl组件集成到窗口中
//
//当创建应用配置时 MultiThreadedMessageLoop 和 ExternalMessagePump 属性同时为false(linux系统默认强制false)时启用ViewsFramework窗口
23
type ViewsFrameworkBrowserWindow struct {
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
	component            lcl.IComponent            //
	windowComponent      *TCEFWindowComponent      //
	browserViewComponent *TCEFBrowserViewComponent //
}

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
39 40 41
}

func (m *browserWindow) appContextInitialized(app *TCEFApplication) {
42 43 44
	if !common.Args.IsMain() {
		return
	}
45
	app.SetOnContextInitialized(func() {
46 47
		m.vFrameBrowserWindow = &ViewsFrameworkBrowserWindow{}
		m.vFrameBrowserWindow.component = lcl.NewComponent(nil)
48 49 50 51 52 53 54
		if BrowserWindow.Config.chromiumConfig == nil {
			BrowserWindow.Config.chromiumConfig = NewChromiumConfig()
			BrowserWindow.Config.chromiumConfig.SetEnableMenu(true)
			BrowserWindow.Config.chromiumConfig.SetEnableDevTools(true)
			BrowserWindow.Config.chromiumConfig.SetEnableOpenUrlTab(true)
			BrowserWindow.Config.chromiumConfig.SetEnableWindowPopup(true)
		}
55
		m.chromium = NewChromium(m.vFrameBrowserWindow.component, BrowserWindow.Config.chromiumConfig)
56
		m.chromium.SetEnableMultiBrowserMode(true)
57 58
		m.vFrameBrowserWindow.browserViewComponent = NewBrowserViewComponent(m.vFrameBrowserWindow.component)
		m.vFrameBrowserWindow.windowComponent = NewWindowComponent(m.vFrameBrowserWindow.component)
59 60 61 62 63 64

		m.chromium.SetOnBeforePopup(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, beforePopupInfo *BeforePopupInfo, client *ICefClient, noJavascriptAccess *bool) bool {
			fmt.Println("OnBeforePopup TargetUrl:", beforePopupInfo.TargetUrl)

			return false
		})
65 66 67 68
		m.vFrameBrowserWindow.windowComponent.SetOnWindowCreated(func(sender lcl.IObject, window *ICefWindow) {
			if m.chromium.CreateBrowserByBrowserViewComponent(BrowserWindow.Config.DefaultUrl, m.vFrameBrowserWindow.browserViewComponent) {
				m.vFrameBrowserWindow.windowComponent.AddChildView(m.vFrameBrowserWindow.browserViewComponent)
				m.vFrameBrowserWindow.windowComponent.SetTitle(BrowserWindow.Config.Title)
69
				window.CenterWindow(NewCefSize(BrowserWindow.Config.Width, BrowserWindow.Config.Height))
70
				m.vFrameBrowserWindow.browserViewComponent.RequestFocus()
71 72 73
				if BrowserWindow.Config.Icon != "" {
					window.SetWindowAppIconFS(1, BrowserWindow.Config.Icon)
				}
74
				if BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback != nil {
75
					BrowserWindow.browserEvent.chromium = m.chromium
76
					BrowserWindow.Config.viewsFrameBrowserWindowOnEventCallback(BrowserWindow.browserEvent, m.vFrameBrowserWindow)
77 78 79 80
				}
				window.Show()
			}
		})
81
		m.vFrameBrowserWindow.windowComponent.SetOnCanClose(func(sender lcl.IObject, window *ICefWindow, aResult *bool) {
82 83
			fmt.Println("OnCanClose")
			*aResult = true
84
			app.QuitMessageLoop()
85
		})
86
		m.vFrameBrowserWindow.windowComponent.SetOnGetInitialBounds(func(sender lcl.IObject, window *ICefWindow, aResult *TCefRect) {
87 88
			fmt.Println("OnGetInitialBounds")
		})
89
		m.vFrameBrowserWindow.windowComponent.SetOnGetInitialShowState(func(sender lcl.IObject, window *ICefWindow, aResult *consts.TCefShowState) {
90 91
			fmt.Println("OnGetInitialShowState", *aResult)
		})
92
		m.vFrameBrowserWindow.windowComponent.CreateTopLevelWindow()
93 94
	})
}