energy/cef/types-view-delegate.go
2023-07-03 21:41:05 +08:00

212 lines
6.1 KiB
Go

//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under Apache License Version 2.0, January 2004
//
// https://www.apache.org/licenses/LICENSE-2.0
//
//----------------------------------------
package cef
import (
"github.com/energye/energy/v2/cef/internal/def"
"github.com/energye/energy/v2/common/imports"
"github.com/energye/energy/v2/consts"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/api"
"unsafe"
)
// ViewDelegateRef -> ICefViewDelegate
var ViewDelegateRef viewDelegate
type viewDelegate uintptr
func (*viewDelegate) New() *ICefViewDelegate {
var result uintptr
imports.Proc(def.ViewDelegateRef_Create).Call(uintptr(unsafe.Pointer(&result)))
if result != 0 {
return &ICefViewDelegate{instance: getInstance(result)}
}
return nil
}
func (*viewDelegate) NewForCustom(viewComponent *TCEFViewComponent) *ICefViewDelegate {
if !viewComponent.IsValid() {
return nil
}
var result uintptr
imports.Proc(def.ViewDelegateRef_CreateForCustom).Call(viewComponent.Instance(), uintptr(unsafe.Pointer(&result)))
if result != 0 {
return &ICefViewDelegate{instance: getInstance(result), ct: consts.CtOther}
}
return nil
}
func (m *ICefViewDelegate) IsSelfOwnEvent() bool {
return m.ct == consts.CtSelfOwn
}
func (m *ICefViewDelegate) IsOtherEvent() bool {
return m.ct == consts.CtOther
}
// Instance 实例
func (m *ICefViewDelegate) Instance() uintptr {
if m == nil {
return 0
}
return uintptr(m.instance)
}
func (m *ICefViewDelegate) IsValid() bool {
if m == nil || m.instance == nil {
return false
}
return m.instance != nil
}
func (m *ICefViewDelegate) Free() {
if m.instance != nil {
m.base.Free(m.Instance())
m.instance = nil
}
}
func (m *ICefViewDelegate) SetOnGetPreferredSize(fn onGetPreferredSize) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnGetPreferredSize).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnGetMinimumSize(fn onGetMinimumSize) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnGetMinimumSize).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnGetMaximumSize(fn onGetMaximumSize) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnGetMaximumSize).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnGetHeightForWidth(fn onGetHeightForWidth) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnGetHeightForWidth).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnParentViewChanged(fn onParentViewChanged) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnParentViewChanged).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnChildViewChanged(fn onChildViewChanged) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnChildViewChanged).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnWindowChanged(fn onWindowChanged) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnWindowChanged).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnLayoutChanged(fn onLayoutChanged) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnLayoutChanged).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnFocus(fn onFocus) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnFocus).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
func (m *ICefViewDelegate) SetOnBlur(fn onBlur) {
if !m.IsValid() || m.IsOtherEvent() {
return
}
imports.Proc(def.ViewDelegate_SetOnBlur).Call(m.Instance(), api.MakeEventDataPtr(fn))
}
type onGetPreferredSize func(view *ICefView, result *TCefSize)
type onGetMinimumSize func(view *ICefView, result *TCefSize)
type onGetMaximumSize func(view *ICefView, result *TCefSize)
type onGetHeightForWidth func(view *ICefView, width int32) int32
type onParentViewChanged func(view *ICefView, added bool, parent *ICefView)
type onChildViewChanged func(view *ICefView, added bool, child *ICefView)
type onWindowChanged func(view *ICefView, added bool)
type onLayoutChanged func(view *ICefView, newBounds *TCefRect)
type onFocus func(view *ICefView)
type onBlur func(view *ICefView)
func init() {
lcl.RegisterExtEventCallback(func(fn interface{}, getVal func(idx int) uintptr) bool {
getPtr := func(i int) unsafe.Pointer {
return unsafe.Pointer(getVal(i))
}
switch fn.(type) {
case onGetPreferredSize:
view := &ICefView{instance: getPtr(0)}
resultSize := (*TCefSize)(getPtr(1))
fn.(onGetPreferredSize)(view, resultSize)
case onGetMinimumSize:
view := &ICefView{instance: getPtr(0)}
resultSize := (*TCefSize)(getPtr(1))
fn.(onGetMinimumSize)(view, resultSize)
case onGetMaximumSize:
view := &ICefView{instance: getPtr(0)}
resultSize := (*TCefSize)(getPtr(1))
fn.(onGetMaximumSize)(view, resultSize)
case onGetHeightForWidth:
view := &ICefView{instance: getPtr(0)}
width := int32(getVal(1))
resultPtr := (*int32)(getPtr(2))
*resultPtr = fn.(onGetHeightForWidth)(view, width)
case onParentViewChanged:
view := &ICefView{instance: getPtr(0)}
added := api.GoBool(getVal(1))
parent := &ICefView{instance: getPtr(2)}
fn.(onParentViewChanged)(view, added, parent)
case onChildViewChanged:
view := &ICefView{instance: getPtr(0)}
added := api.GoBool(getVal(1))
child := &ICefView{instance: getPtr(2)}
fn.(onChildViewChanged)(view, added, child)
case onWindowChanged:
view := &ICefView{instance: getPtr(0)}
added := api.GoBool(getVal(1))
fn.(onWindowChanged)(view, added)
case onLayoutChanged:
view := &ICefView{instance: getPtr(0)}
newBounds := (*TCefRect)(getPtr(1))
fn.(onLayoutChanged)(view, newBounds)
case onFocus:
view := &ICefView{instance: getPtr(0)}
fn.(onFocus)(view)
case onBlur:
view := &ICefView{instance: getPtr(0)}
fn.(onBlur)(view)
default:
return false
}
return true
})
}