mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-04 17:05:38 +00:00
io/system: remove resize actions
Allowing clients to initiate resize gestures is a waste: macOS doesn't support them, and the only reason we added them was to implement client-side decorations for Wayland. Now all desktop platforms implement resize gestures as needed, and we no longer need the system.Action actions. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+1
-5
@@ -983,11 +983,7 @@ func (w *Window) decorate(d driver, e system.FrameEvent, o *op.Ops) (size, offse
|
|||||||
w.decorations.Decorations = deco
|
w.decorations.Decorations = deco
|
||||||
}
|
}
|
||||||
allActions := system.ActionMinimize | system.ActionMaximize | system.ActionUnmaximize |
|
allActions := system.ActionMinimize | system.ActionMaximize | system.ActionUnmaximize |
|
||||||
system.ActionClose | system.ActionMove |
|
system.ActionClose | system.ActionMove
|
||||||
system.ActionResizeNorth | system.ActionResizeSouth |
|
|
||||||
system.ActionResizeWest | system.ActionResizeEast |
|
|
||||||
system.ActionResizeNorthWest | system.ActionResizeSouthWest |
|
|
||||||
system.ActionResizeNorthEast | system.ActionResizeSouthEast
|
|
||||||
style := material.Decorations(theme, deco, allActions, w.decorations.Config.Title)
|
style := material.Decorations(theme, deco, allActions, w.decorations.Config.Title)
|
||||||
// Update the decorations based on the current window mode.
|
// Update the decorations based on the current window mode.
|
||||||
var actions system.Action
|
var actions system.Action
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package system
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"gioui.org/io/pointer"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Action is a set of window decoration actions.
|
// Action is a set of window decoration actions.
|
||||||
@@ -31,49 +29,8 @@ const (
|
|||||||
ActionClose
|
ActionClose
|
||||||
// ActionMove moves a window directed by the user.
|
// ActionMove moves a window directed by the user.
|
||||||
ActionMove
|
ActionMove
|
||||||
// ActionResizeNorth resizes the top border of a window (directed by the user).
|
|
||||||
ActionResizeNorth
|
|
||||||
// ActionResizeSouth resizes the bottom border of a window (directed by the user).
|
|
||||||
ActionResizeSouth
|
|
||||||
// ActionResizeWest resizes the right border of a window (directed by the user).
|
|
||||||
ActionResizeWest
|
|
||||||
// ActionResizeEast resizes the left border of a window (directed by the user).
|
|
||||||
ActionResizeEast
|
|
||||||
// ActionResizeNorthWest resizes the top-left corner of a window (directed by the user).
|
|
||||||
ActionResizeNorthWest
|
|
||||||
// ActionResizeSouthWest resizes the bottom-left corner of a window (directed by the user).
|
|
||||||
ActionResizeSouthWest
|
|
||||||
// ActionResizeNorthEast resizes the top-right corner of a window (directed by the user).
|
|
||||||
ActionResizeNorthEast
|
|
||||||
// ActionResizeSouthEast resizes the bottom-right corner of a window (directed by the user).
|
|
||||||
ActionResizeSouthEast
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Cursor returns the cursor for the action.
|
|
||||||
// It must be a single action otherwise the default
|
|
||||||
// cursor is returned.
|
|
||||||
func (a Action) Cursor() pointer.Cursor {
|
|
||||||
switch a {
|
|
||||||
case ActionResizeNorthWest:
|
|
||||||
return pointer.CursorNorthWestResize
|
|
||||||
case ActionResizeSouthEast:
|
|
||||||
return pointer.CursorSouthEastResize
|
|
||||||
case ActionResizeNorthEast:
|
|
||||||
return pointer.CursorNorthEastResize
|
|
||||||
case ActionResizeSouthWest:
|
|
||||||
return pointer.CursorSouthWestResize
|
|
||||||
case ActionResizeWest:
|
|
||||||
return pointer.CursorWestResize
|
|
||||||
case ActionResizeEast:
|
|
||||||
return pointer.CursorEastResize
|
|
||||||
case ActionResizeNorth:
|
|
||||||
return pointer.CursorNorthResize
|
|
||||||
case ActionResizeSouth:
|
|
||||||
return pointer.CursorSouthResize
|
|
||||||
}
|
|
||||||
return pointer.CursorDefault
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a Action) String() string {
|
func (a Action) String() string {
|
||||||
var buf strings.Builder
|
var buf strings.Builder
|
||||||
for b := Action(1); a != 0; b <<= 1 {
|
for b := Action(1); a != 0; b <<= 1 {
|
||||||
@@ -100,22 +57,6 @@ func (a Action) string() string {
|
|||||||
return "ActionClose"
|
return "ActionClose"
|
||||||
case ActionMove:
|
case ActionMove:
|
||||||
return "ActionMove"
|
return "ActionMove"
|
||||||
case ActionResizeNorth:
|
|
||||||
return "ActionResizeNorth"
|
|
||||||
case ActionResizeSouth:
|
|
||||||
return "ActionResizeSouth"
|
|
||||||
case ActionResizeWest:
|
|
||||||
return "ActionResizeWest"
|
|
||||||
case ActionResizeEast:
|
|
||||||
return "ActionResizeEast"
|
|
||||||
case ActionResizeNorthWest:
|
|
||||||
return "ActionResizeNorthWest"
|
|
||||||
case ActionResizeSouthWest:
|
|
||||||
return "ActionResizeSouthWest"
|
|
||||||
case ActionResizeNorthEast:
|
|
||||||
return "ActionResizeNorthEast"
|
|
||||||
case ActionResizeSouthEast:
|
|
||||||
return "ActionResizeSouthEast"
|
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,9 @@ package widget
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
|
||||||
"math/bits"
|
"math/bits"
|
||||||
|
|
||||||
"gioui.org/gesture"
|
"gioui.org/gesture"
|
||||||
"gioui.org/io/pointer"
|
|
||||||
"gioui.org/io/system"
|
"gioui.org/io/system"
|
||||||
"gioui.org/layout"
|
"gioui.org/layout"
|
||||||
"gioui.org/op/clip"
|
"gioui.org/op/clip"
|
||||||
@@ -63,45 +61,6 @@ func (d *Decorations) Clickable(action system.Action) *Clickable {
|
|||||||
return click
|
return click
|
||||||
}
|
}
|
||||||
|
|
||||||
// LayoutResize lays out the resize actions.
|
|
||||||
func (d *Decorations) LayoutResize(gtx layout.Context, actions system.Action) {
|
|
||||||
cs := gtx.Constraints.Max
|
|
||||||
wh := gtx.Dp(10)
|
|
||||||
s := []struct {
|
|
||||||
system.Action
|
|
||||||
image.Rectangle
|
|
||||||
}{
|
|
||||||
{system.ActionResizeNorth, image.Rect(0, 0, cs.X, wh)},
|
|
||||||
{system.ActionResizeSouth, image.Rect(0, cs.Y-wh, cs.X, cs.Y)},
|
|
||||||
{system.ActionResizeWest, image.Rect(cs.X-wh, 0, cs.X, cs.Y)},
|
|
||||||
{system.ActionResizeEast, image.Rect(0, 0, wh, cs.Y)},
|
|
||||||
{system.ActionResizeNorthWest, image.Rect(0, 0, wh, wh)},
|
|
||||||
{system.ActionResizeNorthEast, image.Rect(cs.X-wh, 0, cs.X, wh)},
|
|
||||||
{system.ActionResizeSouthWest, image.Rect(0, cs.Y-wh, wh, cs.Y)},
|
|
||||||
{system.ActionResizeSouthEast, image.Rect(cs.X-wh, cs.Y-wh, cs.X, cs.Y)},
|
|
||||||
}
|
|
||||||
for i, data := range s {
|
|
||||||
action := data.Action
|
|
||||||
if actions&action == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
rsz := &d.resize[i]
|
|
||||||
rsz.Events(gtx.Metric, gtx, gesture.Both)
|
|
||||||
if rsz.Drag.Dragging() {
|
|
||||||
d.actions |= action
|
|
||||||
}
|
|
||||||
st := clip.Rect(data.Rectangle).Push(gtx.Ops)
|
|
||||||
if rsz.Hover.Hovered(gtx) {
|
|
||||||
action.Cursor().Add(gtx.Ops)
|
|
||||||
}
|
|
||||||
rsz.Drag.Add(gtx.Ops)
|
|
||||||
pass := pointer.PassOp{}.Push(gtx.Ops)
|
|
||||||
rsz.Hover.Add(gtx.Ops)
|
|
||||||
pass.Pop()
|
|
||||||
st.Pop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform updates the decorations as if the specified actions were
|
// Perform updates the decorations as if the specified actions were
|
||||||
// performed by the user.
|
// performed by the user.
|
||||||
func (d *Decorations) Perform(actions system.Action) {
|
func (d *Decorations) Perform(actions system.Action) {
|
||||||
|
|||||||
@@ -45,9 +45,6 @@ func (d DecorationsStyle) Layout(gtx layout.Context) layout.Dimensions {
|
|||||||
r := clip.Rect{Max: dims.Size}
|
r := clip.Rect{Max: dims.Size}
|
||||||
paint.FillShape(gtx.Ops, d.Background, r.Op())
|
paint.FillShape(gtx.Ops, d.Background, r.Op())
|
||||||
decos.Add(gtx.Ops)
|
decos.Add(gtx.Ops)
|
||||||
if !d.Decorations.Maximized() {
|
|
||||||
d.Decorations.LayoutResize(gtx, d.Actions)
|
|
||||||
}
|
|
||||||
return dims
|
return dims
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user