io/pointer: unify area ops into a single AreaOp

Make Rect and Ellipse constructors of AreaOp.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-11-18 14:59:50 +01:00
parent 3edd9dd8be
commit 16cc51ee8a
6 changed files with 21 additions and 33 deletions
+1 -1
View File
@@ -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
+15 -27
View File
@@ -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)
+1 -1
View File
@@ -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}
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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)
}