mirror of https://github.com/mum4k/termdash.git
Braille method that sets cell options in an area.
This commit is contained in:
parent
e3858d93f5
commit
e677c1fe1a
|
@ -225,6 +225,23 @@ func (c *Canvas) SetCellOpts(cellPoint image.Point, opts ...cell.Option) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// SetAreaCellOpts is like SetCellOpts, but sets the specified options on all
|
||||
// the cells within the provided area.
|
||||
func (c *Canvas) SetAreaCellOpts(cellArea image.Rectangle, opts ...cell.Option) error {
|
||||
haveArea := c.regular.Area()
|
||||
if !cellArea.In(haveArea) {
|
||||
return fmt.Errorf("unable to set cell options in area %v, it must fit inside the available cell area is %v", cellArea, haveArea)
|
||||
}
|
||||
for col := haveArea.Min.X; col < haveArea.Max.X; col++ {
|
||||
for row := haveArea.Min.Y; row < haveArea.Max.Y; row++ {
|
||||
if err := c.SetCellOpts(image.Point{col, row}, opts...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Apply applies the canvas to the corresponding area of the terminal.
|
||||
// Guarantees to stay within limits of the area the canvas was created with.
|
||||
func (c *Canvas) Apply(t terminalapi.Terminal) error {
|
||||
|
|
|
@ -286,6 +286,43 @@ func TestBraille(t *testing.T) {
|
|||
return ft
|
||||
},
|
||||
},
|
||||
{
|
||||
desc: "SetAreaCellOptions fails on area too large",
|
||||
ar: image.Rect(0, 0, 1, 1),
|
||||
pixelOps: func(c *Canvas) error {
|
||||
return c.SetAreaCellOpts(image.Rect(0, 0, 2, 2), cell.FgColor(cell.ColorRed), cell.BgColor(cell.ColorBlue))
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
desc: "SetCellOptions sets the cell options",
|
||||
ar: image.Rect(0, 0, 3, 3),
|
||||
pixelOps: func(c *Canvas) error {
|
||||
return c.SetAreaCellOpts(image.Rect(0, 0, 2, 2), cell.FgColor(cell.ColorRed), cell.BgColor(cell.ColorBlue))
|
||||
},
|
||||
want: func(size image.Point) *faketerm.Terminal {
|
||||
ft := faketerm.MustNew(size)
|
||||
cvs := testcanvas.MustNew(ft.Area())
|
||||
|
||||
for _, p := range []image.Point{
|
||||
{0, 0},
|
||||
{0, 1},
|
||||
{0, 2},
|
||||
{1, 0},
|
||||
{1, 1},
|
||||
{1, 2},
|
||||
{2, 0},
|
||||
{2, 1},
|
||||
{2, 2},
|
||||
} {
|
||||
c := testcanvas.MustCell(cvs, p)
|
||||
testcanvas.MustSetCell(cvs, p, c.Rune, cell.FgColor(cell.ColorRed), cell.BgColor(cell.ColorBlue))
|
||||
}
|
||||
testcanvas.MustApply(cvs, ft)
|
||||
return ft
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
desc: "set pixel 0,0",
|
||||
ar: image.Rect(0, 0, 1, 1),
|
||||
|
|
|
@ -68,3 +68,10 @@ func MustSetCellOpts(bc *braille.Canvas, cellPoint image.Point, opts ...cell.Opt
|
|||
panic(fmt.Sprintf("bc.SetCellOpts => unexpected error: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// MustSetAreaCellOpts sets the cell options in the area or panics.
|
||||
func MustSetAreaCellOpts(bc *braille.Canvas, cellArea image.Rectangle, opts ...cell.Option) {
|
||||
if err := bc.SetAreaCellOpts(cellArea, opts...); err != nil {
|
||||
panic(fmt.Sprintf("bc.SetAreaCellOpts => unexpected error: %v", err))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue