github.com/jmigpin/editor@v1.6.0/ui/rowseparator.go (about)

     1  package ui
     2  
     3  import (
     4  	"image"
     5  
     6  	"github.com/jmigpin/editor/util/uiutil/event"
     7  	"github.com/jmigpin/editor/util/uiutil/widget"
     8  )
     9  
    10  type RowSeparator struct {
    11  	*widget.Separator
    12  	row *Row
    13  }
    14  
    15  func NewRowSeparator(row *Row) *RowSeparator {
    16  	sep := widget.NewSeparator(row.ui, row.Col.Cols.Root.MultiLayer)
    17  	sep.Size.Y = separatorWidth
    18  	sep.Handle.Top = 3
    19  	sep.Handle.Bottom = 3
    20  	sep.Handle.Cursor = event.MoveCursor
    21  
    22  	rsep := &RowSeparator{Separator: sep, row: row}
    23  	rsep.SetThemePaletteNamePrefix("rowseparator_")
    24  	return rsep
    25  }
    26  func (sh *RowSeparator) OnInputEvent(ev0 interface{}, p image.Point) event.Handled {
    27  	switch ev := ev0.(type) {
    28  	case *event.MouseDragMove:
    29  		switch {
    30  		case ev.Buttons.Is(event.ButtonLeft):
    31  			p.Y += sh.Handle.DragPad.Y
    32  			sh.row.resizeWithMoveToPoint(&p)
    33  		}
    34  	case *event.MouseDown:
    35  		m := ev.Mods.ClearLocks()
    36  		if m.Is(event.ModNone) {
    37  			switch ev.Button {
    38  			case event.ButtonWheelUp:
    39  				sh.row.resizeWithPushJump(true, &p)
    40  			case event.ButtonWheelDown:
    41  				sh.row.resizeWithPushJump(false, &p)
    42  			}
    43  		}
    44  	case *event.MouseClick:
    45  		switch ev.Button {
    46  		case event.ButtonMiddle:
    47  			sh.row.Close()
    48  		}
    49  	}
    50  	return true //no other widget will get the event
    51  }