forked from joejulian/gio
3f38e67ce0
The app.Window.Perform(ActionMove) is the wrong abstraction for initiating a move gesture: Windows needs to know the move gesture area at pointer move, and macOS needs to know the pointer button down event that triggers the move gesture. This change replaces Perform(ActionMove) with a new system.ActionInputOp that marks an area movable. Signed-off-by: Elias Naur <mail@eliasnaur.com>
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package system
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"gioui.org/internal/ops"
|
|
"gioui.org/op"
|
|
)
|
|
|
|
// ActionAreaOp makes the current clip area available for
|
|
// system gestures.
|
|
//
|
|
// Note: only ActionMove is supported.
|
|
type ActionInputOp Action
|
|
|
|
// Action is a set of window decoration actions.
|
|
type Action uint
|
|
|
|
const (
|
|
// ActionMinimize minimizes a window.
|
|
ActionMinimize Action = 1 << iota
|
|
// ActionMaximize maximizes a window.
|
|
ActionMaximize
|
|
// ActionUnmaximize restores a maximized window.
|
|
ActionUnmaximize
|
|
// ActionFullscreen makes a window fullscreen.
|
|
ActionFullscreen
|
|
// ActionRaise requests that the platform bring this window to the top of all open windows.
|
|
// Some platforms do not allow this except under certain circumstances, such as when
|
|
// a window from the same application already has focus. If the platform does not
|
|
// support it, this method will do nothing.
|
|
ActionRaise
|
|
// ActionCenter centers the window on the screen.
|
|
// It is ignored in Fullscreen mode and on Wayland.
|
|
ActionCenter
|
|
// ActionClose closes a window.
|
|
// Only applicable on macOS, Windows, X11 and Wayland.
|
|
ActionClose
|
|
// ActionMove moves a window directed by the user.
|
|
ActionMove
|
|
)
|
|
|
|
func (op ActionInputOp) Add(o *op.Ops) {
|
|
data := ops.Write(&o.Internal, ops.TypeActionInputLen)
|
|
data[0] = byte(ops.TypeActionInput)
|
|
data[1] = byte(op)
|
|
}
|
|
|
|
func (a Action) String() string {
|
|
var buf strings.Builder
|
|
for b := Action(1); a != 0; b <<= 1 {
|
|
if a&b != 0 {
|
|
if buf.Len() > 0 {
|
|
buf.WriteByte('|')
|
|
}
|
|
buf.WriteString(b.string())
|
|
a &^= b
|
|
}
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
func (a Action) string() string {
|
|
switch a {
|
|
case ActionMinimize:
|
|
return "ActionMinimize"
|
|
case ActionMaximize:
|
|
return "ActionMaximize"
|
|
case ActionUnmaximize:
|
|
return "ActionUnmaximize"
|
|
case ActionClose:
|
|
return "ActionClose"
|
|
case ActionMove:
|
|
return "ActionMove"
|
|
}
|
|
return ""
|
|
}
|