mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 15:30:37 +08:00

* fix: fix go test errors * Add flags to mac test * Run on all branches * Update PR workflow Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
217 lines
4.1 KiB
Go
217 lines
4.1 KiB
Go
//go:build windows
|
|
|
|
/*
|
|
* Copyright (C) 2019 The Winc Authors. All Rights Reserved.
|
|
*/
|
|
|
|
package winc
|
|
|
|
import (
|
|
"github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc/w32"
|
|
)
|
|
|
|
type VResizer struct {
|
|
ControlBase
|
|
|
|
control1 Dockable
|
|
control2 Dockable
|
|
dir Direction
|
|
|
|
mouseLeft bool
|
|
drag bool
|
|
}
|
|
|
|
func NewVResizer(parent Controller) *VResizer {
|
|
sp := new(VResizer)
|
|
|
|
RegClassOnlyOnce("winc_VResizer")
|
|
sp.hwnd = CreateWindow("winc_VResizer", parent, w32.WS_EX_CONTROLPARENT, w32.WS_CHILD|w32.WS_VISIBLE)
|
|
sp.parent = parent
|
|
sp.mouseLeft = true
|
|
RegMsgHandler(sp)
|
|
|
|
sp.SetFont(DefaultFont)
|
|
sp.SetText("")
|
|
sp.SetSize(20, 100)
|
|
return sp
|
|
}
|
|
|
|
func (sp *VResizer) SetControl(control1, control2 Dockable, dir Direction, minSize int) {
|
|
sp.control1 = control1
|
|
sp.control2 = control2
|
|
if dir != Left && dir != Right {
|
|
panic("invalid direction")
|
|
}
|
|
sp.dir = dir
|
|
|
|
// TODO(vi): ADDED
|
|
/*internalTrackMouseEvent(control1.Handle())
|
|
internalTrackMouseEvent(control2.Handle())
|
|
|
|
control1.OnMouseMove().Bind(func(e *Event) {
|
|
if sp.drag {
|
|
x := e.Data.(*MouseEventData).X
|
|
sp.update(x)
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_SIZEWE))
|
|
|
|
}
|
|
fmt.Println("control1.OnMouseMove")
|
|
})
|
|
|
|
control2.OnMouseMove().Bind(func(e *Event) {
|
|
if sp.drag {
|
|
x := e.Data.(*MouseEventData).X
|
|
sp.update(x)
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_SIZEWE))
|
|
|
|
}
|
|
fmt.Println("control2.OnMouseMove")
|
|
})
|
|
|
|
control1.OnLBUp().Bind(func(e *Event) {
|
|
sp.drag = false
|
|
sp.mouseLeft = true
|
|
fmt.Println("control1.OnLBUp")
|
|
})
|
|
|
|
control2.OnLBUp().Bind(func(e *Event) {
|
|
sp.drag = false
|
|
sp.mouseLeft = true
|
|
fmt.Println("control2.OnLBUp")
|
|
})*/
|
|
|
|
// ---- finish ADDED
|
|
|
|
}
|
|
|
|
func (sp *VResizer) update(x int) {
|
|
pos := x - 10
|
|
|
|
w1, h1 := sp.control1.Width(), sp.control1.Height()
|
|
if sp.dir == Left {
|
|
w1 += pos
|
|
} else {
|
|
w1 -= pos
|
|
}
|
|
sp.control1.SetSize(w1, h1)
|
|
fm := sp.parent.(*Form)
|
|
fm.UpdateLayout()
|
|
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_ARROW))
|
|
}
|
|
|
|
func (sp *VResizer) WndProc(msg uint32, wparam, lparam uintptr) uintptr {
|
|
switch msg {
|
|
case w32.WM_CREATE:
|
|
internalTrackMouseEvent(sp.hwnd)
|
|
|
|
case w32.WM_MOUSEMOVE:
|
|
if sp.drag {
|
|
x, _ := genPoint(lparam)
|
|
sp.update(x)
|
|
} else {
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_SIZEWE))
|
|
}
|
|
|
|
if sp.mouseLeft {
|
|
internalTrackMouseEvent(sp.hwnd)
|
|
sp.mouseLeft = false
|
|
}
|
|
|
|
case w32.WM_MOUSELEAVE:
|
|
sp.drag = false
|
|
sp.mouseLeft = true
|
|
|
|
case w32.WM_LBUTTONUP:
|
|
sp.drag = false
|
|
|
|
case w32.WM_LBUTTONDOWN:
|
|
sp.drag = true
|
|
}
|
|
return w32.DefWindowProc(sp.hwnd, msg, wparam, lparam)
|
|
}
|
|
|
|
type HResizer struct {
|
|
ControlBase
|
|
|
|
control1 Dockable
|
|
control2 Dockable
|
|
dir Direction
|
|
mouseLeft bool
|
|
drag bool
|
|
}
|
|
|
|
func NewHResizer(parent Controller) *HResizer {
|
|
sp := new(HResizer)
|
|
|
|
RegClassOnlyOnce("winc_HResizer")
|
|
sp.hwnd = CreateWindow("winc_HResizer", parent, w32.WS_EX_CONTROLPARENT, w32.WS_CHILD|w32.WS_VISIBLE)
|
|
sp.parent = parent
|
|
sp.mouseLeft = true
|
|
RegMsgHandler(sp)
|
|
|
|
sp.SetFont(DefaultFont)
|
|
sp.SetText("")
|
|
sp.SetSize(100, 20)
|
|
|
|
return sp
|
|
}
|
|
|
|
func (sp *HResizer) SetControl(control1, control2 Dockable, dir Direction, minSize int) {
|
|
sp.control1 = control1
|
|
sp.control2 = control2
|
|
if dir != Top && dir != Bottom {
|
|
panic("invalid direction")
|
|
}
|
|
sp.dir = dir
|
|
|
|
}
|
|
|
|
func (sp *HResizer) update(y int) {
|
|
pos := y - 10
|
|
|
|
w1, h1 := sp.control1.Width(), sp.control1.Height()
|
|
if sp.dir == Top {
|
|
h1 += pos
|
|
} else {
|
|
h1 -= pos
|
|
}
|
|
sp.control1.SetSize(w1, h1)
|
|
|
|
fm := sp.parent.(*Form)
|
|
fm.UpdateLayout()
|
|
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_ARROW))
|
|
}
|
|
|
|
func (sp *HResizer) WndProc(msg uint32, wparam, lparam uintptr) uintptr {
|
|
switch msg {
|
|
case w32.WM_CREATE:
|
|
internalTrackMouseEvent(sp.hwnd)
|
|
|
|
case w32.WM_MOUSEMOVE:
|
|
if sp.drag {
|
|
_, y := genPoint(lparam)
|
|
sp.update(y)
|
|
} else {
|
|
w32.SetCursor(w32.LoadCursorWithResourceID(0, w32.IDC_SIZENS))
|
|
}
|
|
|
|
if sp.mouseLeft {
|
|
internalTrackMouseEvent(sp.hwnd)
|
|
sp.mouseLeft = false
|
|
}
|
|
|
|
case w32.WM_MOUSELEAVE:
|
|
sp.drag = false
|
|
sp.mouseLeft = true
|
|
|
|
case w32.WM_LBUTTONUP:
|
|
sp.drag = false
|
|
|
|
case w32.WM_LBUTTONDOWN:
|
|
sp.drag = true
|
|
}
|
|
return w32.DefWindowProc(sp.hwnd, msg, wparam, lparam)
|
|
}
|