feat(tracker): remove axis from NumericUpDown, allow dragging either Y or X

This commit is contained in:
vsariola 2021-02-01 13:53:10 +02:00
parent 98c8d18a3e
commit c667ffb4e1

View File

@ -29,7 +29,6 @@ var defaultNumericDownIcon *widget.Icon
type NumberInput struct { type NumberInput struct {
Value int Value int
drag gesture.Drag
dragStartValue int dragStartValue int
dragStartXY float32 dragStartXY float32
clickDecrease gesture.Click clickDecrease gesture.Click
@ -40,7 +39,6 @@ type NumericUpDownStyle struct {
NumberInput *NumberInput NumberInput *NumberInput
Min int Min int
Max int Max int
Axis layout.Axis
Color color.RGBA Color color.RGBA
Font text.Font Font text.Font
TextSize unit.Value TextSize unit.Value
@ -63,7 +61,6 @@ func NumericUpDown(th *material.Theme, number *NumberInput, min, max int) Numeri
NumberInput: number, NumberInput: number,
Min: min, Min: min,
Max: max, Max: max,
Axis: layout.Horizontal,
Color: white, Color: white,
BorderColor: th.Color.Primary, BorderColor: th.Color.Primary,
IconColor: th.Color.InvText, IconColor: th.Color.InvText,
@ -152,25 +149,18 @@ func (s NumericUpDownStyle) layoutText(gtx C) D {
func (s NumericUpDownStyle) layoutDrag(gtx layout.Context) layout.Dimensions { func (s NumericUpDownStyle) layoutDrag(gtx layout.Context) layout.Dimensions {
{ // handle dragging { // handle dragging
pxPerStep := float32(gtx.Px(s.UnitsPerStep)) pxPerStep := float32(gtx.Px(s.UnitsPerStep))
for _, e := range s.NumberInput.drag.Events(gtx.Metric, gtx, gesture.Axis(s.Axis)) { for _, ev := range gtx.Events(s.NumberInput) {
switch e.Type { if e, ok := ev.(pointer.Event); ok {
case pointer.Press: switch e.Type {
s.NumberInput.dragStartValue = s.NumberInput.Value case pointer.Press:
if s.Axis == layout.Horizontal { s.NumberInput.dragStartValue = s.NumberInput.Value
s.NumberInput.dragStartXY = e.Position.X s.NumberInput.dragStartXY = e.Position.X - e.Position.Y
} else {
s.NumberInput.dragStartXY = e.Position.Y
}
case pointer.Drag: case pointer.Drag:
var deltaCoord float32 var deltaCoord float32
if s.Axis == layout.Horizontal { deltaCoord = e.Position.X - e.Position.Y - s.NumberInput.dragStartXY
deltaCoord = e.Position.X - s.NumberInput.dragStartXY s.NumberInput.Value = s.NumberInput.dragStartValue + int(deltaCoord/pxPerStep+0.5)
} else {
deltaCoord = e.Position.Y - s.NumberInput.dragStartXY
} }
s.NumberInput.Value = s.NumberInput.dragStartValue + int(deltaCoord/pxPerStep+0.5)
} }
} }
@ -179,7 +169,10 @@ func (s NumericUpDownStyle) layoutDrag(gtx layout.Context) layout.Dimensions {
// register for input // register for input
dragRect := image.Rect(0, 0, gtx.Constraints.Min.X, gtx.Constraints.Min.Y) dragRect := image.Rect(0, 0, gtx.Constraints.Min.X, gtx.Constraints.Min.Y)
pointer.Rect(dragRect).Add(gtx.Ops) pointer.Rect(dragRect).Add(gtx.Ops)
s.NumberInput.drag.Add(gtx.Ops) pointer.InputOp{
Tag: s.NumberInput,
Types: pointer.Press | pointer.Drag | pointer.Release,
}.Add(gtx.Ops)
stack.Pop() stack.Pop()
} }
return layout.Dimensions{Size: gtx.Constraints.Min} return layout.Dimensions{Size: gtx.Constraints.Min}