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

U: lcl customer drag

M: windowProperty enableWebkitAppRegion -> application enableWebkitAppRegion
上级 093421d6
......@@ -26,7 +26,7 @@ func appOnContextCreated(browser *ICefBrowser, frame *ICefFrame, context *ICefV8
ipcRender.registerGoSyncReplayEvent() // render ipc
ipcRender.makeIPC(context) // render ipc make
makeProcess(browser, frame, context) // process make
dragExtensionJS(browser, frame) // drag extension
dragExtensionJS(frame) // drag extension
}
// appMainRunCallback 应用运行 - 默认实现
......
......@@ -76,6 +76,8 @@ func (m *TCEFApplication) initDefaultSettings() {
m.SetExternalMessagePump(false)
m.SetMultiThreadedMessageLoop(true)
}
m.SetEnableWebkitAppRegion(true)
m.SetEnableWebkitAppRegionDClk(true)
}
func libCef() string {
......@@ -103,6 +105,32 @@ func libPath() string {
return ""
}
/*** 自定义属性 ***/
// EnableWebkitAppRegion
// html元素中设置css属性 [-webkit-app-region | --webkit-app-region]: drag/no-drag 是否允许拖拽区域 default: true
func (m *TCEFApplication) EnableWebkitAppRegion() bool {
return m.enableWebkitAppRegion
}
// SetEnableWebkitAppRegion
// 设置html元素中设置css属性 [-webkit-app-region | --webkit-app-region]: drag/no-drag 是否允许拖拽区域 default: true
func (m *TCEFApplication) SetEnableWebkitAppRegion(value bool) {
m.enableWebkitAppRegion = value
}
// EnableWebkitAppRegionDClk
// 拖拽区域是否启用标题栏双击最大化和还原 default: true
func (m *TCEFApplication) EnableWebkitAppRegionDClk() bool {
return m.enableWebkitAppRegionDClk
}
// SetEnableWebkitAppRegionDClk
// 设置拖拽区域是否启用标题栏双击最大化和还原 default: true
func (m *TCEFApplication) SetEnableWebkitAppRegionDClk(value bool) {
m.enableWebkitAppRegionDClk = value
}
/*** 设置 TCefSettings (cef_settings_t) 属性 ***/
func (m *TCEFApplication) NoSandbox() bool {
......
......@@ -27,7 +27,9 @@ var application *TCEFApplication
// TCEFApplication CEF应用对象
type TCEFApplication struct {
instance unsafe.Pointer
instance unsafe.Pointer
enableWebkitAppRegion bool
enableWebkitAppRegionDClk bool
}
// NewApplication 创建CEF应用
......
......@@ -17,11 +17,11 @@ import (
ipcArgument "github.com/energye/energy/v2/cef/ipc/argument"
)
func dragExtensionJS(browser *ICefBrowser, frame *ICefFrame) {
func dragExtensionJS(frame *ICefFrame) {
// MacOS只在LCL窗口中使用自定义窗口拖拽, VF窗口默认已实现
// 在MacOS中LCL窗口没有有效的消息事件
var executeJS = `
energyExtension.drag.setEnableDrag(true);
energyExtension.drag.setEnableDrag(` + strconv.FormatBool(application.EnableWebkitAppRegion()) + `);
energyExtension.drag.setup();`
frame.ExecuteJavaScript(executeJS, "", 0)
}
......@@ -36,7 +36,6 @@ func dragExtensionHandler() {
Name: internalIPCDRAG,
Data: &drag{T: dragUp},
}
//fmt.Println("up")
ipc.RenderChan().IPC().Send(message.Bytes())
return true
} else if name == mouseDown {
......@@ -51,7 +50,6 @@ func dragExtensionHandler() {
v8ValY.Free()
point.Free()
}
//fmt.Println("down xy:", dx, dy)
message := &ipcArgument.List{
Id: -1,
BId: ipc.RenderChan().BrowserId(),
......@@ -72,7 +70,6 @@ func dragExtensionHandler() {
v8ValY.Free()
point.Free()
}
//fmt.Println("move xy:", mx, my)
message := &ipcArgument.List{
Id: -1,
BId: ipc.RenderChan().BrowserId(),
......@@ -117,7 +114,7 @@ func dragExtensionHandler() {
mouseMove({x: e.screenX, y: e.screenY});
}
energyExtension.drag.mouseUp = function (e) {
if (!energyExtension.drag.enableDrag || (energyExtension.drag.goos === "darwin" && !energyExtension.drag.shouldDrag)) {
if (!energyExtension.drag.enableDrag || !energyExtension.drag.shouldDrag) {
return
}
energyExtension.drag.shouldDrag = false;
......@@ -151,7 +148,6 @@ func dragExtensionHandler() {
}
})();
`
// 注册 EnergyExtension JS
RegisterExtension("energyExtension", code, energyExtensionHandler)
}
......
......@@ -12,7 +12,7 @@
package cef
func dragExtensionJS(browser *ICefBrowser, frame *ICefFrame) {
func dragExtensionJS(frame *ICefFrame) {
}
......
......@@ -12,10 +12,16 @@
package cef
func dragExtensionJS(browser *ICefBrowser, frame *ICefFrame) {
import (
"github.com/energye/energy/v2/cef/internal/ipc"
ipcArgument "github.com/energye/energy/v2/cef/ipc/argument"
"strconv"
)
func dragExtensionJS(frame *ICefFrame) {
// Windows2种方式,自定义+webkit 只在LCL窗口中使用自定义窗口拖拽, VF窗口默认已实现
var executeJS = `
energyExtension.drag.setEnableDrag(true);
energyExtension.drag.setEnableDrag(` + strconv.FormatBool(application.EnableWebkitAppRegion()) + `);
energyExtension.drag.setup();`
frame.ExecuteJavaScript(executeJS, "", 0)
}
......@@ -70,7 +76,7 @@ func dragExtensionHandler() {
mouseMove();
}
energyExtension.drag.mouseUp = function (e) {
if (!energyExtension.drag.enableDrag || (energyExtension.drag.goos === "darwin" && !energyExtension.drag.shouldDrag)) {
if (!energyExtension.drag.enableDrag || !energyExtension.drag.shouldDrag) {
return
}
energyExtension.drag.shouldDrag = false;
......@@ -104,7 +110,6 @@ func dragExtensionHandler() {
}
})();
`
// 注册 EnergyExtension JS
RegisterExtension("energyExtension", code, energyExtensionHandler)
}
......
......@@ -837,7 +837,7 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode)
}
})
if m.WindowProperty().EnableWebkitAppRegion {
if application.EnableWebkitAppRegion() {
m.Chromium().SetOnDraggableRegionsChanged(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, regions *TCefDraggableRegions) {
if bwEvent.onDraggableRegionsChanged != nil {
bwEvent.onDraggableRegionsChanged(sender, browser, frame, regions, m)
......
......@@ -184,16 +184,17 @@ func (m *customWindowCaption) onNCLButtonDown(hWND types.HWND, message *types.TM
*lResult = messages.HTCAPTION
m.borderMD = true
*aHandled = true
win.ReleaseCapture()
rtl.PostMessage(hWND, messages.WM_NCLBUTTONDOWN, messages.HTCAPTION, rtl.MakeLParam(uint16(x), uint16(y)))
if win.ReleaseCapture() {
win.PostMessage(hWND, messages.WM_NCLBUTTONDOWN, messages.HTCAPTION, rtl.MakeLParam(uint16(x), uint16(y)))
}
} else if m.canBorder { // 边框
x, y := m.toPoint(message)
*lResult = types.LRESULT(m.borderHT)
m.borderMD = true
*aHandled = true
win.ReleaseCapture()
rtl.PostMessage(hWND, messages.WM_SYSCOMMAND, uintptr(messages.SC_SIZE|m.borderWMSZ), rtl.MakeLParam(uint16(x), uint16(y)))
//rtl.PostMessage(hWND, WM_SYSCOMMAND, uintptr(SC_SIZE|m.borderWMSZ), 0)
if win.ReleaseCapture() {
win.PostMessage(hWND, messages.WM_SYSCOMMAND, uintptr(messages.SC_SIZE|m.borderWMSZ), rtl.MakeLParam(uint16(x), uint16(y)))
}
}
}
......@@ -215,7 +216,7 @@ func (m *customWindowCaption) isCaption(hWND et.HWND, message *types.TMessage) (
winapi.WinScreenToClient(hWND, p)
p.X -= m.bw.WindowParent().Left()
p.Y -= m.bw.WindowParent().Top()
if m.bw.WindowProperty().EnableWebkitAppRegion && m.rgn != nil {
if application.EnableWebkitAppRegion() && m.rgn != nil {
m.canCaption = winapi.WinPtInRegion(m.rgn, p.X, p.Y)
} else {
m.canCaption = false
......@@ -228,17 +229,18 @@ func (m *LCLBrowserWindow) doOnRenderCompMsg(message *types.TMessage, lResult *t
switch message.Msg {
case messages.WM_NCLBUTTONDBLCLK: // 163 NC left dclick
//标题栏拖拽区域 双击最大化和还原
if m.cwcap.canCaption && m.WindowProperty().EnableWebkitAppRegionDClk {
if m.cwcap.canCaption && application.EnableWebkitAppRegionDClk() {
*lResult = messages.HTCAPTION
*aHandled = true
win.ReleaseCapture()
m.windowProperty.windowState = m.WindowState()
if m.windowProperty.windowState == types.WsNormal {
rtl.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_MAXIMIZE, 0)
} else {
rtl.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_RESTORE, 0)
if win.ReleaseCapture() {
m.windowProperty.windowState = m.WindowState()
if m.windowProperty.windowState == types.WsNormal {
win.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_MAXIMIZE, 0)
} else {
win.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_RESTORE, 0)
}
win.SendMessage(m.Handle(), messages.WM_NCLBUTTONUP, messages.HTCAPTION, 0)
}
rtl.SendMessage(m.Handle(), messages.WM_NCLBUTTONUP, messages.HTCAPTION, 0)
}
case messages.WM_NCLBUTTONDOWN: // 161 nc left down
m.cwcap.onNCLButtonDown(m.Handle(), message, lResult, aHandled)
......@@ -308,7 +310,7 @@ func (m *LCLBrowserWindow) registerWindowsCompMsgEvent() {
m.doOnRenderCompMsg(message, lResult, aHandled)
}
})
if m.WindowProperty().EnableWebkitAppRegion && m.WindowProperty().EnableWebkitAppRegionDClk {
if application.EnableWebkitAppRegion() && application.EnableWebkitAppRegionDClk() {
m.windowResize = func(sender lcl.IObject) bool {
if m.WindowState() == types.WsMaximized && (m.WindowProperty().EnableHideCaption || m.BorderStyle() == types.BsNone || m.BorderStyle() == types.BsSingle) {
var monitor = m.Monitor().WorkareaRect()
......@@ -334,12 +336,13 @@ func (m *LCLBrowserWindow) Maximize() {
return
}
QueueAsyncCall(func(id int) {
win.ReleaseCapture()
m.windowProperty.windowState = m.WindowState()
if m.windowProperty.windowState == types.WsNormal {
rtl.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_MAXIMIZE, 0)
} else {
rtl.SendMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_RESTORE, 0)
if win.ReleaseCapture() {
m.windowProperty.windowState = m.WindowState()
if m.windowProperty.windowState == types.WsNormal {
win.PostMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_MAXIMIZE, 0)
} else {
win.SendMessage(m.Handle(), messages.WM_SYSCOMMAND, messages.SC_RESTORE, 0)
}
}
})
}
......@@ -359,7 +362,7 @@ func (m *LCLBrowserWindow) Maximize() {
// win.LWA_ALPHA|win.LWA_COLORKEY)
//}
func (m *LCLBrowserWindow) doDrag(d *drag) {
func (m *LCLBrowserWindow) doDrag() {
// Windows Drag Window
if win.ReleaseCapture() {
win.PostMessage(m.Handle(), messages.WM_NCLBUTTONDOWN, messages.HTCAPTION, 0)
......
......@@ -310,7 +310,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode)
}
})
if m.WindowProperty().EnableWebkitAppRegion {
if application.EnableWebkitAppRegion() {
m.chromium.SetOnDraggableRegionsChanged(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, regions *TCefDraggableRegions) {
if bwEvent.onDraggableRegionsChanged != nil {
bwEvent.onDraggableRegionsChanged(sender, browser, frame, regions, m)
......
......@@ -30,27 +30,25 @@ type auxTools struct {
//
// 部分属性配置并不支持所有平台
type WindowProperty struct {
IsShowModel bool //是否以模态窗口显示
windowState types.TWindowState //窗口 状态
WindowType consts.WINDOW_TYPE //窗口 类型 WINDOW_TYPE default: WT_MAIN_BROWSER
Title string //窗口 标题
Url string //默认打开URL
Icon string //窗口图标 加载本地图标 local > /app/resources/icon.ico, linux使用png
IconFS string //窗口图标 加载emfs内置图标 emfs > resources/icon.ico, linux使用png
EnableHideCaption bool //窗口 是否隐藏标题栏, VF窗口组件Linux下不能动态控制
EnableMinimize bool //窗口 是否启用最小化 default: true
EnableMaximize bool //窗口 是否启用最大化 default: true
EnableResize bool //窗口 是否允许调整大小 default: true
EnableClose bool //窗口 关闭时是否关闭窗口 default: true
EnableCenterWindow bool //窗口 居中显示 default: true
EnableDragFile bool //窗口 是否允许向窗口内拖拽文件
EnableWebkitAppRegion bool //窗口 html元素中设置css属性 -webkit-app-region: drag/no-drag 是否允许拖拽区域 default: true
EnableWebkitAppRegionDClk bool //窗口 拖拽区域是否启用标题栏双击最大化和还原 default: true
AlwaysOnTop bool //窗口 窗口置顶
X int32 //窗口 EnableCenterWindow=false X坐标 default: 100
Y int32 //窗口 EnableCenterWindow=false Y坐标 default: 100
Width int32 //窗口 宽 default: 1024
Height int32 //窗口 高 default: 768
IsShowModel bool //是否以模态窗口显示
windowState types.TWindowState //窗口 状态
WindowType consts.WINDOW_TYPE //窗口 类型 WINDOW_TYPE default: WT_MAIN_BROWSER
Title string //窗口 标题
Url string //默认打开URL
Icon string //窗口图标 加载本地图标 local > /app/resources/icon.ico, linux使用png
IconFS string //窗口图标 加载emfs内置图标 emfs > resources/icon.ico, linux使用png
EnableHideCaption bool //窗口 是否隐藏标题栏, VF窗口组件Linux下不能动态控制
EnableMinimize bool //窗口 是否启用最小化 default: true
EnableMaximize bool //窗口 是否启用最大化 default: true
EnableResize bool //窗口 是否允许调整大小 default: true
EnableClose bool //窗口 关闭时是否关闭窗口 default: true
EnableCenterWindow bool //窗口 居中显示 default: true
EnableDragFile bool //窗口 是否允许向窗口内拖拽文件
AlwaysOnTop bool //窗口 窗口置顶
X int32 //窗口 EnableCenterWindow=false X坐标 default: 100
Y int32 //窗口 EnableCenterWindow=false Y坐标 default: 100
Width int32 //窗口 宽 default: 1024
Height int32 //窗口 高 default: 768
}
// IBrowserWindow
......@@ -152,19 +150,17 @@ type IAuxTools interface {
// 创建一个属性配置器,带有窗口默认属性值
func NewWindowProperty() WindowProperty {
return WindowProperty{
Title: "Energy",
Url: "about:blank",
EnableMinimize: true,
EnableMaximize: true,
EnableResize: true,
EnableClose: true,
EnableCenterWindow: true,
EnableWebkitAppRegion: true,
EnableWebkitAppRegionDClk: true,
X: 100,
Y: 100,
Width: 1024,
Height: 768,
Title: "ENERGY",
Url: "about:blank",
EnableMinimize: true,
EnableMaximize: true,
EnableResize: true,
EnableClose: true,
EnableCenterWindow: true,
X: 100,
Y: 100,
Width: 1024,
Height: 768,
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册