mirror of https://github.com/mum4k/termdash.git
Allow the caller to reverse the slopes.
This commit is contained in:
parent
4cb90e7c98
commit
e328ba044f
|
@ -60,8 +60,9 @@ type Option interface {
|
||||||
|
|
||||||
// options stores the provided options.
|
// options stores the provided options.
|
||||||
type options struct {
|
type options struct {
|
||||||
cellOpts []cell.Option
|
cellOpts []cell.Option
|
||||||
skipSlopes bool
|
skipSlopes bool
|
||||||
|
reverseSlopes bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// option implements Option.
|
// option implements Option.
|
||||||
|
@ -88,6 +89,24 @@ func SkipSlopes() Option {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReverseSlopes if provided reverses the order in which slopes are drawn.
|
||||||
|
// This only has a visible effect when the horizontal segment has height of two
|
||||||
|
// or the vertical segment has width of two.
|
||||||
|
// Without this option segments with height / width of two look like this:
|
||||||
|
// - |
|
||||||
|
// --- ||
|
||||||
|
// |
|
||||||
|
//
|
||||||
|
// With this option:
|
||||||
|
// --- |
|
||||||
|
// - ||
|
||||||
|
// |
|
||||||
|
func ReverseSlopes() Option {
|
||||||
|
return option(func(opts *options) {
|
||||||
|
opts.reverseSlopes = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// validArea validates the provided area.
|
// validArea validates the provided area.
|
||||||
func validArea(ar image.Rectangle) error {
|
func validArea(ar image.Rectangle) error {
|
||||||
if ar.Min.X < 0 || ar.Min.Y < 0 {
|
if ar.Min.X < 0 || ar.Min.Y < 0 {
|
||||||
|
@ -180,6 +199,9 @@ func nextHorizLine(num int, ar image.Rectangle, opt *options) (image.Point, imag
|
||||||
return start, end
|
return start, end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if height == 2 && opt.reverseSlopes {
|
||||||
|
return adjustHoriz(start, end, width, num)
|
||||||
|
}
|
||||||
|
|
||||||
if num < halfHeight {
|
if num < halfHeight {
|
||||||
adjust := halfHeight - num
|
adjust := halfHeight - num
|
||||||
|
@ -236,6 +258,9 @@ func nextVertLine(num int, ar image.Rectangle, opt *options) (image.Point, image
|
||||||
return start, end
|
return start, end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if width == 2 && opt.reverseSlopes {
|
||||||
|
return adjustVert(start, end, width, num)
|
||||||
|
}
|
||||||
|
|
||||||
if num < halfWidth {
|
if num < halfWidth {
|
||||||
adjust := halfWidth - num
|
adjust := halfWidth - num
|
||||||
|
|
|
@ -310,6 +310,24 @@ func TestHV(t *testing.T) {
|
||||||
return ft
|
return ft
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "horizontal, segment 3x2, reverse slopes",
|
||||||
|
opts: []Option{
|
||||||
|
ReverseSlopes(),
|
||||||
|
},
|
||||||
|
cellCanvas: image.Rect(0, 0, 2, 1),
|
||||||
|
ar: image.Rect(0, 0, 3, 2),
|
||||||
|
st: Horizontal,
|
||||||
|
want: func(size image.Point) *faketerm.Terminal {
|
||||||
|
ft := faketerm.MustNew(size)
|
||||||
|
bc := testbraille.MustNew(ft.Area())
|
||||||
|
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 0}, image.Point{2, 0})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{1, 1}, image.Point{1, 1})
|
||||||
|
testbraille.MustApply(bc, ft)
|
||||||
|
return ft
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "horizontal, segment 3x3",
|
desc: "horizontal, segment 3x3",
|
||||||
cellCanvas: image.Rect(0, 0, 2, 1),
|
cellCanvas: image.Rect(0, 0, 2, 1),
|
||||||
|
@ -326,6 +344,25 @@ func TestHV(t *testing.T) {
|
||||||
return ft
|
return ft
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "horizontal, segment 3x3, reverse slopes has no effect on larger height",
|
||||||
|
opts: []Option{
|
||||||
|
ReverseSlopes(),
|
||||||
|
},
|
||||||
|
cellCanvas: image.Rect(0, 0, 2, 1),
|
||||||
|
ar: image.Rect(0, 0, 3, 3),
|
||||||
|
st: Horizontal,
|
||||||
|
want: func(size image.Point) *faketerm.Terminal {
|
||||||
|
ft := faketerm.MustNew(size)
|
||||||
|
bc := testbraille.MustNew(ft.Area())
|
||||||
|
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{1, 0}, image.Point{1, 0})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 1}, image.Point{2, 1})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{1, 2}, image.Point{1, 2})
|
||||||
|
testbraille.MustApply(bc, ft)
|
||||||
|
return ft
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "horizontal, segment 3x3, skip slopes",
|
desc: "horizontal, segment 3x3, skip slopes",
|
||||||
opts: []Option{
|
opts: []Option{
|
||||||
|
@ -665,6 +702,25 @@ func TestHV(t *testing.T) {
|
||||||
return ft
|
return ft
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "vertical, segment 2x3, reverse slopes",
|
||||||
|
opts: []Option{
|
||||||
|
ReverseSlopes(),
|
||||||
|
},
|
||||||
|
cellCanvas: image.Rect(0, 0, 1, 1),
|
||||||
|
ar: image.Rect(0, 0, 2, 3),
|
||||||
|
st: Vertical,
|
||||||
|
want: func(size image.Point) *faketerm.Terminal {
|
||||||
|
ft := faketerm.MustNew(size)
|
||||||
|
bc := testbraille.MustNew(ft.Area())
|
||||||
|
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 0}, image.Point{0, 0})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 1}, image.Point{1, 1})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 2}, image.Point{0, 2})
|
||||||
|
testbraille.MustApply(bc, ft)
|
||||||
|
return ft
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "vertical, segment 2x4",
|
desc: "vertical, segment 2x4",
|
||||||
cellCanvas: image.Rect(0, 0, 1, 1),
|
cellCanvas: image.Rect(0, 0, 1, 1),
|
||||||
|
@ -745,6 +801,25 @@ func TestHV(t *testing.T) {
|
||||||
return ft
|
return ft
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "vertical, segment 3x3, reverse slopes has no effect on larger width",
|
||||||
|
opts: []Option{
|
||||||
|
ReverseSlopes(),
|
||||||
|
},
|
||||||
|
cellCanvas: image.Rect(0, 0, 2, 1),
|
||||||
|
ar: image.Rect(0, 0, 3, 3),
|
||||||
|
st: Vertical,
|
||||||
|
want: func(size image.Point) *faketerm.Terminal {
|
||||||
|
ft := faketerm.MustNew(size)
|
||||||
|
bc := testbraille.MustNew(ft.Area())
|
||||||
|
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{1, 0}, image.Point{1, 0})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{0, 1}, image.Point{2, 1})
|
||||||
|
testdraw.MustBrailleLine(bc, image.Point{1, 2}, image.Point{1, 2})
|
||||||
|
testbraille.MustApply(bc, ft)
|
||||||
|
return ft
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "vertical, segment 3x3, skips slopes",
|
desc: "vertical, segment 3x3, skips slopes",
|
||||||
opts: []Option{
|
opts: []Option{
|
||||||
|
|
Loading…
Reference in New Issue