Sander Schobers
3c89748eac
- Drop addon is based on WM_DROPFILES, dragdrop addon is based on the OLE IDragDrop interface and thus can registerer more interactions. - The allg5ui implementation will try to fall back on the drop addon (because the dragdrop addon wouldn't work properly). - Drop addon is refactored to use the same interface as the dragdrop addon.
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package ui
|
|
|
|
import "opslag.de/schobers/geom"
|
|
|
|
type DragDropEventTarget interface {
|
|
DragEnter(geom.PointF32, []string)
|
|
DragMove(geom.PointF32)
|
|
DragLeave()
|
|
Drop(geom.PointF32, []string)
|
|
}
|
|
|
|
type DragDropProvider interface {
|
|
Register(windowHandle uintptr, target DragDropEventTarget)
|
|
}
|
|
|
|
var DefaultDragDropProvider DragDropProvider = nil
|
|
|
|
type dragDropEventTarget struct {
|
|
renderer Renderer
|
|
events []Event
|
|
}
|
|
|
|
func (t *dragDropEventTarget) eventBase() EventBase {
|
|
return EventBase{StampInSeconds: t.renderer.Stamp()}
|
|
}
|
|
|
|
func (t *dragDropEventTarget) pushEvent(e Event) {
|
|
t.events = append(t.events, e)
|
|
t.renderer.Refresh()
|
|
}
|
|
|
|
func (t *dragDropEventTarget) DragEnter(pos geom.PointF32, files []string) {
|
|
t.pushEvent(&DisplayDragEnterEvent{EventBase: t.eventBase(), X: pos.X, Y: pos.Y, Files: files})
|
|
}
|
|
|
|
func (t *dragDropEventTarget) DragMove(pos geom.PointF32) {
|
|
t.pushEvent(&DisplayDragMoveEnter{EventBase: t.eventBase(), X: pos.X, Y: pos.Y})
|
|
}
|
|
|
|
func (t *dragDropEventTarget) DragLeave() {
|
|
t.pushEvent(&DisplayDragLeaveEvent{EventBase: t.eventBase()})
|
|
}
|
|
|
|
func (t *dragDropEventTarget) Drop(pos geom.PointF32, files []string) {
|
|
t.pushEvent(&DisplayDropEvent{EventBase: t.eventBase(), X: pos.X, Y: pos.Y, Files: files})
|
|
}
|