diff --git a/ui/views/channels.go b/ui/views/channels.go index a6feacc..d9da85b 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -37,63 +37,19 @@ func (c *Channels) Wrap(v *gocui.View) view { } func (c *Channels) CursorDown() error { - if c.view != nil { - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx, cy+1) - if err != nil { - ox, oy := c.view.Origin() - err := c.view.SetOrigin(ox, oy+1) - if err != nil { - return err - } - } - } - return nil + return cursorDown(c.view, 1) } func (c *Channels) CursorUp() error { - if c.view != nil { - ox, oy := c.view.Origin() - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx, cy-1) - if err != nil && oy > 0 { - err := c.view.SetOrigin(ox, oy-1) - if err != nil { - return err - } - } - } - return nil + return cursorUp(c.view, 1) } func (c *Channels) CursorRight() error { - if c.view != nil { - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx+2, cy) - if err != nil { - ox, oy := c.view.Origin() - err := c.view.SetOrigin(ox+2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorRight(c.view, 2) } func (c *Channels) CursorLeft() error { - if c.view != nil { - ox, oy := c.view.Origin() - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx-2, cy) - if err != nil && ox > 1 { - err := c.view.SetOrigin(ox-2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorLeft(c.view, 2) } func (c *Channels) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { @@ -247,63 +203,19 @@ func (c *Channel) Wrap(v *gocui.View) view { } func (c *Channel) CursorDown() error { - if c.view != nil { - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx, cy+1) - if err != nil { - ox, oy := c.view.Origin() - err := c.view.SetOrigin(ox, oy+1) - if err != nil { - return err - } - } - } - return nil + return cursorDown(c.view, 1) } func (c *Channel) CursorUp() error { - if c.view != nil { - ox, oy := c.view.Origin() - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx, cy-1) - if err != nil && oy > 0 { - err := c.view.SetOrigin(ox, oy-1) - if err != nil { - return err - } - } - } - return nil + return cursorUp(c.view, 1) } func (c *Channel) CursorRight() error { - if c.view != nil { - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx+2, cy) - if err != nil { - ox, oy := c.view.Origin() - err := c.view.SetOrigin(ox+2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorRight(c.view, 1) } func (c *Channel) CursorLeft() error { - if c.view != nil { - ox, oy := c.view.Origin() - cx, cy := c.view.Cursor() - err := c.view.SetCursor(cx-2, cy) - if err != nil && ox > 1 { - err := c.view.SetOrigin(ox-2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorLeft(c.view, 1) } func (c *Channel) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { diff --git a/ui/views/cursor.go b/ui/views/cursor.go new file mode 100644 index 0000000..634fe62 --- /dev/null +++ b/ui/views/cursor.go @@ -0,0 +1,67 @@ +package views + +import "github.com/jroimartin/gocui" + +func cursorDown(v *gocui.View, speed int) error { + if v == nil { + return nil + } + cx, cy := v.Cursor() + err := v.SetCursor(cx, cy+speed) + if err != nil { + ox, oy := v.Origin() + err := v.SetOrigin(ox, oy+speed) + if err != nil { + return err + } + } + return nil +} + +func cursorUp(v *gocui.View, speed int) error { + if v == nil { + return nil + } + ox, oy := v.Origin() + cx, cy := v.Cursor() + err := v.SetCursor(cx, cy-speed) + if err != nil && oy >= speed { + err := v.SetOrigin(ox, oy-speed) + if err != nil { + return err + } + } + return nil +} + +func cursorRight(v *gocui.View, speed int) error { + if v == nil { + return nil + } + cx, cy := v.Cursor() + err := v.SetCursor(cx+speed, cy) + if err != nil { + ox, oy := v.Origin() + err := v.SetOrigin(ox+speed, oy) + if err != nil { + return err + } + } + return nil +} + +func cursorLeft(v *gocui.View, speed int) error { + if v == nil { + return nil + } + ox, oy := v.Origin() + cx, cy := v.Cursor() + err := v.SetCursor(cx-speed, cy) + if err != nil && ox >= speed { + err := v.SetOrigin(ox-speed, oy) + if err != nil { + return err + } + } + return nil +} diff --git a/ui/views/help.go b/ui/views/help.go index 082b2ad..6975bcf 100644 --- a/ui/views/help.go +++ b/ui/views/help.go @@ -26,63 +26,19 @@ func (h *Help) Wrap(v *gocui.View) view { } func (h *Help) CursorDown() error { - if h.view != nil { - cx, cy := h.view.Cursor() - err := h.view.SetCursor(cx, cy+1) - if err != nil { - ox, oy := h.view.Origin() - err := h.view.SetOrigin(ox, oy+1) - if err != nil { - return err - } - } - } - return nil + return cursorDown(h.view, 1) } func (h *Help) CursorUp() error { - if h.view != nil { - ox, oy := h.view.Origin() - cx, cy := h.view.Cursor() - err := h.view.SetCursor(cx, cy-1) - if err != nil && oy > 0 { - err := h.view.SetOrigin(ox, oy-1) - if err != nil { - return err - } - } - } - return nil + return cursorUp(h.view, 1) } func (h *Help) CursorRight() error { - if h.view != nil { - cx, cy := h.view.Cursor() - err := h.view.SetCursor(cx+2, cy) - if err != nil { - ox, oy := h.view.Origin() - err := h.view.SetOrigin(ox+2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorRight(h.view, 1) } func (h *Help) CursorLeft() error { - if h.view != nil { - ox, oy := h.view.Origin() - cx, cy := h.view.Cursor() - err := h.view.SetCursor(cx-2, cy) - if err != nil && ox > 1 { - err := h.view.SetOrigin(ox-2, oy) - if err != nil { - return err - } - } - } - return nil + return cursorLeft(h.view, 1) } func (h Help) Set(g *gocui.Gui, x0, y0, x1, y1 int) error {