diff --git a/io/pointer/doc.go b/io/pointer/doc.go index 91cdb716..2b08d5d1 100644 --- a/io/pointer/doc.go +++ b/io/pointer/doc.go @@ -19,7 +19,7 @@ For example, to set up a rectangular hit area: var h *Handler = ... r := image.Rectangle{...} - pointer.RectAreaOp{Rect: r}.Add(ops) + pointer.Rect().Add(ops) pointer.InputOp{Key: h}.Add(ops) Note that areas compound: the effective area of multiple area diff --git a/io/pointer/pointer.go b/io/pointer/pointer.go index 1dcde674..7aeda81d 100644 --- a/io/pointer/pointer.go +++ b/io/pointer/pointer.go @@ -42,24 +42,10 @@ type Event struct { Scroll f32.Point } -// RectAreaOp updates the hit area to the intersection -// of the current hit area with a rectangular area. -type RectAreaOp struct { - // Rect defines the rectangle. The current transform - // is applied to it. - Rect image.Rectangle -} - -// EllipseAreaOp updates the hit area to the intersection -// of the current hit area with an elliptical area. -type EllipseAreaOp struct { - // Rect is the bounds for the ellipse. The current transform - // is applied to the rectangle. - Rect image.Rectangle -} - -// Must match the structure in input.areaOp -type areaOp struct { +// AreaOp updates the hit area to the intersection of the current +// hit area and the area. The area is transformed before applying +// it. +type AreaOp struct { kind areaKind rect image.Rectangle } @@ -133,21 +119,23 @@ const ( areaEllipse ) -func (op RectAreaOp) Add(ops *op.Ops) { - areaOp{ +// Rect constructs a rectangular hit area. +func Rect(size image.Rectangle) AreaOp { + return AreaOp{ kind: areaRect, - rect: op.Rect, - }.add(ops) + rect: size, + } } -func (op EllipseAreaOp) Add(ops *op.Ops) { - areaOp{ +// Ellipse constructs an ellipsoid hit area. +func Ellipse(size image.Rectangle) AreaOp { + return AreaOp{ kind: areaEllipse, - rect: op.Rect, - }.add(ops) + rect: size, + } } -func (op areaOp) add(o *op.Ops) { +func (op AreaOp) Add(o *op.Ops) { data := o.Write(opconst.TypeAreaLen) data[0] = byte(opconst.TypeArea) data[1] = byte(op.kind) diff --git a/layout/list.go b/layout/list.go index 4f7624d7..bd4d08a2 100644 --- a/layout/list.go +++ b/layout/list.go @@ -263,7 +263,7 @@ func (l *List) layout() Dimensions { l.beforeEnd = !atEnd dims := axisPoint(l.Axis, mainc.Constrain(pos), maxCross) l.macro.Stop() - pointer.RectAreaOp{Rect: image.Rectangle{Max: dims}}.Add(ops) + pointer.Rect(image.Rectangle{Max: dims}).Add(ops) l.scroll.Add(ops) l.macro.Add(ops) return Dimensions{Size: dims} diff --git a/widget/editor.go b/widget/editor.go index 6e63f925..8ae14ae3 100644 --- a/widget/editor.go +++ b/widget/editor.go @@ -258,7 +258,7 @@ func (e *Editor) layout(gtx *layout.Context, sh *text.Shaper) { r.Min.Y -= pointerPadding r.Max.X += pointerPadding r.Max.X += pointerPadding - pointer.RectAreaOp{Rect: r}.Add(gtx.Ops) + pointer.Rect(r).Add(gtx.Ops) e.scroller.Add(gtx.Ops) e.clicker.Add(gtx.Ops) e.caretOn = false diff --git a/widget/material/button.go b/widget/material/button.go index 7f615ff6..17c9810b 100644 --- a/widget/material/button.go +++ b/widget/material/button.go @@ -72,7 +72,7 @@ func (b Button) Layout(gtx *layout.Context, button *widget.Button) { widget.Label{}.Layout(gtx, b.shaper, b.Font, b.Text) }) }) - pointer.RectAreaOp{Rect: image.Rectangle{Max: gtx.Dimensions.Size}}.Add(gtx.Ops) + pointer.Rect(image.Rectangle{Max: gtx.Dimensions.Size}).Add(gtx.Ops) button.Layout(gtx) }) bg := st.Expand(gtx, func() { @@ -105,7 +105,7 @@ func (b IconButton) Layout(gtx *layout.Context, button *widget.Button) { Size: image.Point{X: size, Y: size}, } }) - pointer.EllipseAreaOp{Rect: image.Rectangle{Max: gtx.Dimensions.Size}}.Add(gtx.Ops) + pointer.Ellipse(image.Rectangle{Max: gtx.Dimensions.Size}).Add(gtx.Ops) button.Layout(gtx) }) bgcol := b.Background diff --git a/widget/material/checkable.go b/widget/material/checkable.go index ed3e7b17..1137b8a4 100644 --- a/widget/material/checkable.go +++ b/widget/material/checkable.go @@ -63,5 +63,5 @@ func (c *checkable) layout(gtx *layout.Context, checked bool) { }) flex.Layout(gtx, ico, lbl) - pointer.RectAreaOp{Rect: image.Rectangle{Max: gtx.Dimensions.Size}}.Add(gtx.Ops) + pointer.Rect(image.Rectangle{Max: gtx.Dimensions.Size}).Add(gtx.Ops) }