energy/cef/cef-tray-commponent.go

90 lines
2.8 KiB
Go
Raw Normal View History

//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under GNU General Public License v3.0
//
//----------------------------------------
package cef
import (
2023-01-25 14:59:28 +08:00
"energye/systray"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/types"
2023-01-25 17:47:55 +08:00
"sync"
)
2023-01-24 18:21:49 +08:00
//TMouseEvent 鼠标事件
type TMouseEvent func(sender lcl.IObject, button types.TMouseButton, shift types.TShiftState, x, y int32) bool
2023-01-24 18:21:49 +08:00
//TrayICONClick 托盘图标鼠标事件
type TrayICONClick func()
2023-01-24 18:21:49 +08:00
//ITray 托盘接口
2023-01-24 23:08:39 +08:00
//
//实现4种系统托盘 1: LCLTray LCL组件, 2: CEFTray CEF基于LCL组件+html, 3: ViewsFrameTray VF(views framework)组件+html, 4: SysTray 系统原生
//
//1. LCLTray 对Windows、MacOSX支持较好linux由于gtk2与gtk3原因目前无法正常使用
//
//2. CEFTray Windows
//
//3. ViewsFrameTray Windows
//
//4. SysTray 对Windows、MacOSX和Linux支持较好
type ITray interface {
2023-01-25 17:47:55 +08:00
SetTitle(title string) //SetTitle 设置标题
Show() //Show 显示/启动 托盘
close() //
SetOnClick(fn TrayICONClick) //SetOnClick 单击事件
SetOnDblClick(fn TrayICONClick) //SetOnDblClick 双击事件
SetIconFS(iconResourcePath string) //SetIconFS 设置托盘图标
SetIcon(iconResourcePath string) //SetIcon 设置托盘图标
SetHint(value string) //SetHint 设置托盘hint(鼠标移动到托盘图标显示的文字)
AsSysTray() *SysTray //AsSysTray 尝试转换为 SysTray 组件托盘如果创建的是其它类型托盘返回nil
AsViewsFrameTray() *ViewsFrameTray //AsViewsFrameTray 尝试转换为 views framework 组件托盘, 如果创建的是其它类型托盘返回nil
AsCEFTray() *CEFTray //AsCEFTray 尝试转换为 LCL+CEF 组件托盘, 如果创建的是其它类型托盘返回nil
AsLCLTray() *LCLTray //AsLCLTray 尝试转换为 LCL 组件托盘, 如果创建的是其它类型托盘返回nil
}
2023-01-24 23:08:39 +08:00
//LCLTray LCL组件 托盘
type LCLTray struct {
owner lcl.IComponent
trayIcon *lcl.TTrayIcon
popupMenu *lcl.TPopupMenu
}
2023-01-24 23:08:39 +08:00
//ViewsFrameTray VF(views framework)组件+html 托盘
type ViewsFrameTray struct {
trayWindow *ViewsFrameworkBrowserWindow
trayIcon *lcl.TTrayIcon
x, y, w, h int32
mouseUp TMouseEvent
isClosing bool
}
2023-01-24 23:08:39 +08:00
//CEFTray CEF基于LCL组件+html 托盘
type CEFTray struct {
*lcl.TForm
owner lcl.IComponent
trayIcon *lcl.TTrayIcon
chromium IChromium
windowParent ITCefWindowParent
x, y, w, h int32
mouseUp TMouseEvent
isClosing bool
url string
}
2023-01-24 18:21:49 +08:00
2023-01-24 23:08:39 +08:00
//SysTray 系统原生
2023-01-24 18:21:49 +08:00
type SysTray struct {
2023-01-25 17:47:55 +08:00
once sync.Once
2023-01-25 14:59:28 +08:00
menu *SysMenu
icon []byte
title, tooltip string
click TrayICONClick
dClick TrayICONClick
rClick func(menu systray.IMenu)
start, stop func()
2023-01-24 18:21:49 +08:00
}