skipped 23 lines 24 24 "github.com/mum4k/termdash/internal/canvas" 25 25 "github.com/mum4k/termdash/internal/canvas/testcanvas" 26 26 "github.com/mum4k/termdash/internal/faketerm" 27 + "github.com/mum4k/termdash/internal/segdisp" 28 + "github.com/mum4k/termdash/internal/segdisp/dotseg" 29 + "github.com/mum4k/termdash/internal/segdisp/dotseg/testdotseg" 27 30 "github.com/mum4k/termdash/internal/segdisp/sixteen" 28 31 "github.com/mum4k/termdash/internal/segdisp/sixteen/testsixteen" 29 32 "github.com/mum4k/termdash/terminal/terminalapi" skipped 1 lines 31 34 ) 32 35 33 36 // mustDrawChar draws the provided character in the area of the canvas or panics. 34 - func mustDrawChar(cvs *canvas.Canvas, char rune, ar image.Rectangle, opts ...sixteen .Option) { 35 - d := sixteen.New() 36 - testsixteen.MustSetCharacter(d, char) 37 + func mustDrawChar(cvs *canvas.Canvas, char rune, ar image.Rectangle, cOpts ...cell .Option) { 37 38 c := testcanvas.MustNew(ar) 38 - testsixteen.MustDraw(d, c, opts...) 39 + switch { 40 + case char == '.' || char == ':': 41 + d := dotseg.New() 42 + testdotseg.MustSetCharacter(d, char) 43 + testdotseg.MustDraw(d, c, dotseg.CellOpts(cOpts...)) 44 + 45 + default: 46 + d := sixteen.New() 47 + testsixteen.MustSetCharacter(d, char) 48 + testsixteen.MustDraw(d, c, sixteen.CellOpts(cOpts...)) 49 + } 50 + 39 51 testcanvas.MustCopyTo(c, cvs) 40 52 } 41 53 skipped 15 lines 57 69 opts: []Option{ 58 70 GapPercent(-1), 59 71 }, 60 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 72 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 61 73 wantNewErr: true, 62 74 }, 63 75 { skipped 1 lines 65 77 opts: []Option{ 66 78 GapPercent(101), 67 79 }, 68 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 80 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 69 81 wantNewErr: true, 70 82 }, 71 83 { 72 84 desc: "write fails on invalid GapPercent (too low)", 73 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 85 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 74 86 update: func(sd *SegmentDisplay) error { 75 87 return sd.Write( 76 88 []*TextChunk{NewChunk("1")}, skipped 4 lines 81 93 }, 82 94 { 83 95 desc: "write fails on invalid GapPercent (too high)", 84 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 96 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 85 97 update: func(sd *SegmentDisplay) error { 86 98 return sd.Write( 87 99 []*TextChunk{NewChunk("1")}, skipped 4 lines 92 104 }, 93 105 { 94 106 desc: "fails on area too small for a segment", 95 - canvas: image.Rect(0, 0, sixteen .MinCols-1, sixteen .MinRows), 107 + canvas: image.Rect(0, 0, segdisp .MinCols-1, segdisp .MinRows), 96 108 update: func(sd *SegmentDisplay) error { 97 109 return sd.Write([]*TextChunk{NewChunk("1")}) 98 110 }, skipped 1 lines 100 112 }, 101 113 { 102 114 desc: "write fails without chunks", 103 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 115 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 104 116 update: func(sd *SegmentDisplay) error { 105 117 return sd.Write(nil) 106 118 }, skipped 1 lines 108 120 }, 109 121 { 110 122 desc: "write fails with an empty chunk", 111 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 123 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 112 124 update: func(sd *SegmentDisplay) error { 113 125 return sd.Write([]*TextChunk{NewChunk("")}) 114 126 }, skipped 1 lines 116 128 }, 117 129 { 118 130 desc: "write fails on unsupported characters when requested", 119 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 131 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 120 132 update: func(sd *SegmentDisplay) error { 121 - return sd.Write([]*TextChunk{NewChunk(". ", WriteErrOnUnsupported())}) 133 + return sd.Write([]*TextChunk{NewChunk("← ", WriteErrOnUnsupported())}) 122 134 }, 123 135 wantUpdateErr: true, 124 136 }, 125 137 { 126 138 desc: "draws empty without text", 127 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 139 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 128 140 wantCapacity: 1, 129 141 }, 130 142 { skipped 1 lines 132 144 opts: []Option{ 133 145 GapPercent(0), 134 146 }, 135 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows), 147 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows), 136 148 update: func(sd *SegmentDisplay) error { 137 149 return sd.Write([]*TextChunk{NewChunk("123")}) 138 150 }, skipped 5 lines 144 156 char rune 145 157 area image.Rectangle 146 158 }{ 147 - {'1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 148 - {'2', image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows)}, 149 - {'3', image.Rect(sixteen .MinCols*2, 0, sixteen .MinCols*3, sixteen .MinRows)}, 159 + {'1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 160 + {'2', image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows)}, 161 + {'3', image.Rect(segdisp .MinCols*2, 0, segdisp .MinCols*3, segdisp .MinRows)}, 162 + } { 163 + mustDrawChar(cvs, tc.char, tc.area) 164 + } 165 + 166 + testcanvas.MustApply(cvs, ft) 167 + return ft 168 + }, 169 + wantCapacity: 3, 170 + }, 171 + { 172 + desc: "uses the dot segment for a colon", 173 + opts: []Option{ 174 + GapPercent(0), 175 + }, 176 + canvas: image.Rect(0, 0, segdisp.MinCols*3, segdisp.MinRows), 177 + update: func(sd *SegmentDisplay) error { 178 + return sd.Write([]*TextChunk{NewChunk("1:3")}) 179 + }, 180 + want: func(size image.Point) *faketerm.Terminal { 181 + ft := faketerm.MustNew(size) 182 + cvs := testcanvas.MustNew(ft.Area()) 183 + 184 + for _, tc := range []struct { 185 + char rune 186 + area image.Rectangle 187 + }{ 188 + {'1', image.Rect(0, 0, segdisp.MinCols, segdisp.MinRows)}, 189 + {':', image.Rect(segdisp.MinCols, 0, segdisp.MinCols*2, segdisp.MinRows)}, 190 + {'3', image.Rect(segdisp.MinCols*2, 0, segdisp.MinCols*3, segdisp.MinRows)}, 191 + } { 192 + mustDrawChar(cvs, tc.char, tc.area) 193 + } 194 + 195 + testcanvas.MustApply(cvs, ft) 196 + return ft 197 + }, 198 + wantCapacity: 3, 199 + }, 200 + { 201 + desc: "uses the dot segment for a dot", 202 + opts: []Option{ 203 + GapPercent(0), 204 + }, 205 + canvas: image.Rect(0, 0, segdisp.MinCols*3, segdisp.MinRows), 206 + update: func(sd *SegmentDisplay) error { 207 + return sd.Write([]*TextChunk{NewChunk("1.3")}) 208 + }, 209 + want: func(size image.Point) *faketerm.Terminal { 210 + ft := faketerm.MustNew(size) 211 + cvs := testcanvas.MustNew(ft.Area()) 212 + 213 + for _, tc := range []struct { 214 + char rune 215 + area image.Rectangle 216 + }{ 217 + {'1', image.Rect(0, 0, segdisp.MinCols, segdisp.MinRows)}, 218 + {'.', image.Rect(segdisp.MinCols, 0, segdisp.MinCols*2, segdisp.MinRows)}, 219 + {'3', image.Rect(segdisp.MinCols*2, 0, segdisp.MinCols*3, segdisp.MinRows)}, 150 220 } { 151 221 mustDrawChar(cvs, tc.char, tc.area) 152 222 } skipped 8 lines 161 231 opts: []Option{ 162 232 GapPercent(0), 163 233 }, 164 - canvas: image.Rect(0, 0, sixteen .MinCols*2, sixteen .MinRows), 234 + canvas: image.Rect(0, 0, segdisp .MinCols*2, segdisp .MinRows), 165 235 update: func(sd *SegmentDisplay) error { 166 - return sd.Write([]*TextChunk{NewChunk(". 1")}) 236 + return sd.Write([]*TextChunk{NewChunk("← 1")}) 167 237 }, 168 238 want: func(size image.Point) *faketerm.Terminal { 169 239 ft := faketerm.MustNew(size) 170 240 cvs := testcanvas.MustNew(ft.Area()) 171 241 172 - mustDrawChar(cvs, '1', image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows)) 242 + mustDrawChar(cvs, '1', image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows)) 173 243 174 244 testcanvas.MustApply(cvs, ft) 175 245 return ft skipped 5 lines 181 251 opts: []Option{ 182 252 GapPercent(0), 183 253 }, 184 - canvas: image.Rect(0, 0, sixteen .MinCols*2, sixteen .MinRows), 254 + canvas: image.Rect(0, 0, segdisp .MinCols*2, segdisp .MinRows), 185 255 update: func(sd *SegmentDisplay) error { 186 - return sd.Write([]*TextChunk{NewChunk(". 1", WriteSanitize())}) 256 + return sd.Write([]*TextChunk{NewChunk("← 1", WriteSanitize())}) 187 257 }, 188 258 want: func(size image.Point) *faketerm.Terminal { 189 259 ft := faketerm.MustNew(size) 190 260 cvs := testcanvas.MustNew(ft.Area()) 191 261 192 - mustDrawChar(cvs, '1', image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows)) 262 + mustDrawChar(cvs, '1', image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows)) 193 263 194 264 testcanvas.MustApply(cvs, ft) 195 265 return ft skipped 2 lines 198 268 }, 199 269 { 200 270 desc: "aligns segment vertical middle by default", 201 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 271 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 202 272 update: func(sd *SegmentDisplay) error { 203 273 return sd.Write([]*TextChunk{NewChunk("1")}) 204 274 }, skipped 1 lines 206 276 ft := faketerm.MustNew(size) 207 277 cvs := testcanvas.MustNew(ft.Area()) 208 278 209 - mustDrawChar(cvs, '1', image.Rect(0, 1, sixteen .MinCols, sixteen .MinRows+1)) 279 + mustDrawChar(cvs, '1', image.Rect(0, 1, segdisp .MinCols, segdisp .MinRows+1)) 210 280 211 281 testcanvas.MustApply(cvs, ft) 212 282 return ft skipped 2 lines 215 285 }, 216 286 { 217 287 desc: "subsequent calls to write overwrite previous text", 218 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 288 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 219 289 update: func(sd *SegmentDisplay) error { 220 290 if err := sd.Write([]*TextChunk{NewChunk("123")}); err != nil { 221 291 return err skipped 4 lines 226 296 ft := faketerm.MustNew(size) 227 297 cvs := testcanvas.MustNew(ft.Area()) 228 298 229 - mustDrawChar(cvs, '4', image.Rect(0, 1, sixteen .MinCols, sixteen .MinRows+1)) 299 + mustDrawChar(cvs, '4', image.Rect(0, 1, segdisp .MinCols, segdisp .MinRows+1)) 230 300 231 301 testcanvas.MustApply(cvs, ft) 232 302 return ft skipped 5 lines 238 308 opts: []Option{ 239 309 GapPercent(0), 240 310 }, 241 - canvas: image.Rect(0, 0, sixteen .MinCols*2, sixteen .MinRows), 311 + canvas: image.Rect(0, 0, segdisp .MinCols*2, segdisp .MinRows), 242 312 update: func(sd *SegmentDisplay) error { 243 313 return sd.Write( 244 314 []*TextChunk{ skipped 13 lines 258 328 259 329 mustDrawChar( 260 330 cvs, '1', 261 - image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 262 - sixteen.CellOpts( 263 - cell.FgColor(cell.ColorRed), 264 - cell.BgColor(cell.ColorBlue), 265 - ), 331 + image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 332 + cell.FgColor(cell.ColorRed), 333 + cell.BgColor(cell.ColorBlue), 266 334 ) 267 335 mustDrawChar( 268 336 cvs, '2', 269 - image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows), 270 - sixteen.CellOpts( 271 - cell.FgColor(cell.ColorGreen), 272 - cell.BgColor(cell.ColorYellow), 273 - ), 337 + image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows), 338 + cell.FgColor(cell.ColorGreen), 339 + cell.BgColor(cell.ColorYellow), 274 340 ) 275 341 276 342 testcanvas.MustApply(cvs, ft) skipped 6 lines 283 349 opts: []Option{ 284 350 MaximizeDisplayedText(), 285 351 }, 286 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows+2), 352 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows+2), 287 353 update: func(sd *SegmentDisplay) error { 288 354 if err := sd.Write([]*TextChunk{NewChunk("123")}); err != nil { 289 355 return err skipped 9 lines 299 365 GapPercent(0), 300 366 MaximizeDisplayedText(), 301 367 }, 302 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows+2), 368 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows+2), 303 369 update: func(sd *SegmentDisplay) error { 304 370 if err := sd.Write([]*TextChunk{NewChunk("123")}); err != nil { 305 371 return err skipped 8 lines 314 380 opts: []Option{ 315 381 MaximizeSegmentHeight(), 316 382 }, 317 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows+2), 383 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows+2), 318 384 update: func(sd *SegmentDisplay) error { 319 385 if err := sd.Write([]*TextChunk{NewChunk("123")}); err != nil { 320 386 return err skipped 9 lines 330 396 GapPercent(0), 331 397 MaximizeSegmentHeight(), 332 398 }, 333 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows+2), 399 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows+2), 334 400 update: func(sd *SegmentDisplay) error { 335 401 if err := sd.Write([]*TextChunk{NewChunk("123")}); err != nil { 336 402 return err skipped 5 lines 342 408 }, 343 409 { 344 410 desc: "reset resets provided cell options", 345 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows), 411 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows), 346 412 update: func(sd *SegmentDisplay) error { 347 413 if err := sd.Write( 348 414 []*TextChunk{ skipped 11 lines 360 426 ft := faketerm.MustNew(size) 361 427 cvs := testcanvas.MustNew(ft.Area()) 362 428 363 - mustDrawChar(cvs, '1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)) 429 + mustDrawChar(cvs, '1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)) 364 430 365 431 testcanvas.MustApply(cvs, ft) 366 432 return ft skipped 5 lines 372 438 opts: []Option{ 373 439 AlignVertical(align.VerticalMiddle), 374 440 }, 375 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 441 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 376 442 update: func(sd *SegmentDisplay) error { 377 443 return sd.Write([]*TextChunk{NewChunk("1")}) 378 444 }, skipped 1 lines 380 446 ft := faketerm.MustNew(size) 381 447 cvs := testcanvas.MustNew(ft.Area()) 382 448 383 - mustDrawChar(cvs, '1', image.Rect(0, 1, sixteen .MinCols, sixteen .MinRows+1)) 449 + mustDrawChar(cvs, '1', image.Rect(0, 1, segdisp .MinCols, segdisp .MinRows+1)) 384 450 385 451 testcanvas.MustApply(cvs, ft) 386 452 return ft skipped 5 lines 392 458 opts: []Option{ 393 459 AlignVertical(align.VerticalTop), 394 460 }, 395 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 461 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 396 462 update: func(sd *SegmentDisplay) error { 397 463 return sd.Write([]*TextChunk{NewChunk("1")}) 398 464 }, skipped 1 lines 400 466 ft := faketerm.MustNew(size) 401 467 cvs := testcanvas.MustNew(ft.Area()) 402 468 403 - mustDrawChar(cvs, '1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)) 469 + mustDrawChar(cvs, '1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)) 404 470 405 471 testcanvas.MustApply(cvs, ft) 406 472 return ft skipped 5 lines 412 478 opts: []Option{ 413 479 AlignVertical(align.VerticalBottom), 414 480 }, 415 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 481 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 416 482 update: func(sd *SegmentDisplay) error { 417 483 return sd.Write( 418 484 []*TextChunk{NewChunk("1")}, skipped 4 lines 423 489 ft := faketerm.MustNew(size) 424 490 cvs := testcanvas.MustNew(ft.Area()) 425 491 426 - mustDrawChar(cvs, '1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)) 492 + mustDrawChar(cvs, '1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)) 427 493 428 494 testcanvas.MustApply(cvs, ft) 429 495 return ft skipped 5 lines 435 501 opts: []Option{ 436 502 AlignVertical(align.VerticalBottom), 437 503 }, 438 - canvas: image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows+2), 504 + canvas: image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows+2), 439 505 update: func(sd *SegmentDisplay) error { 440 506 return sd.Write([]*TextChunk{NewChunk("1")}) 441 507 }, skipped 1 lines 443 509 ft := faketerm.MustNew(size) 444 510 cvs := testcanvas.MustNew(ft.Area()) 445 511 446 - mustDrawChar(cvs, '1', image.Rect(0, 2, sixteen .MinCols, sixteen .MinRows+2)) 512 + mustDrawChar(cvs, '1', image.Rect(0, 2, segdisp .MinCols, segdisp .MinRows+2)) 447 513 448 514 testcanvas.MustApply(cvs, ft) 449 515 return ft skipped 2 lines 452 518 }, 453 519 { 454 520 desc: "aligns segment horizontal center by default", 455 - canvas: image.Rect(0, 0, sixteen .MinCols+2, sixteen .MinRows), 521 + canvas: image.Rect(0, 0, segdisp .MinCols+2, segdisp .MinRows), 456 522 update: func(sd *SegmentDisplay) error { 457 523 return sd.Write([]*TextChunk{NewChunk("8")}) 458 524 }, skipped 1 lines 460 526 ft := faketerm.MustNew(size) 461 527 cvs := testcanvas.MustNew(ft.Area()) 462 528 463 - mustDrawChar(cvs, '8', image.Rect(1, 0, sixteen .MinCols+1, sixteen .MinRows)) 529 + mustDrawChar(cvs, '8', image.Rect(1, 0, segdisp .MinCols+1, segdisp .MinRows)) 464 530 465 531 testcanvas.MustApply(cvs, ft) 466 532 return ft skipped 5 lines 472 538 opts: []Option{ 473 539 AlignHorizontal(align.HorizontalCenter), 474 540 }, 475 - canvas: image.Rect(0, 0, sixteen .MinCols+2, sixteen .MinRows), 541 + canvas: image.Rect(0, 0, segdisp .MinCols+2, segdisp .MinRows), 476 542 update: func(sd *SegmentDisplay) error { 477 543 return sd.Write([]*TextChunk{NewChunk("8")}) 478 544 }, skipped 1 lines 480 546 ft := faketerm.MustNew(size) 481 547 cvs := testcanvas.MustNew(ft.Area()) 482 548 483 - mustDrawChar(cvs, '8', image.Rect(1, 0, sixteen .MinCols+1, sixteen .MinRows)) 549 + mustDrawChar(cvs, '8', image.Rect(1, 0, segdisp .MinCols+1, segdisp .MinRows)) 484 550 485 551 testcanvas.MustApply(cvs, ft) 486 552 return ft skipped 5 lines 492 558 opts: []Option{ 493 559 AlignHorizontal(align.HorizontalLeft), 494 560 }, 495 - canvas: image.Rect(0, 0, sixteen .MinCols+2, sixteen .MinRows), 561 + canvas: image.Rect(0, 0, segdisp .MinCols+2, segdisp .MinRows), 496 562 update: func(sd *SegmentDisplay) error { 497 563 return sd.Write([]*TextChunk{NewChunk("8")}) 498 564 }, skipped 1 lines 500 566 ft := faketerm.MustNew(size) 501 567 cvs := testcanvas.MustNew(ft.Area()) 502 568 503 - mustDrawChar(cvs, '8', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)) 569 + mustDrawChar(cvs, '8', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)) 504 570 505 571 testcanvas.MustApply(cvs, ft) 506 572 return ft skipped 5 lines 512 578 opts: []Option{ 513 579 AlignHorizontal(align.HorizontalRight), 514 580 }, 515 - canvas: image.Rect(0, 0, sixteen .MinCols+2, sixteen .MinRows), 581 + canvas: image.Rect(0, 0, segdisp .MinCols+2, segdisp .MinRows), 516 582 update: func(sd *SegmentDisplay) error { 517 583 return sd.Write([]*TextChunk{NewChunk("8")}) 518 584 }, skipped 1 lines 520 586 ft := faketerm.MustNew(size) 521 587 cvs := testcanvas.MustNew(ft.Area()) 522 588 523 - mustDrawChar(cvs, '8', image.Rect(2, 0, sixteen .MinCols+2, sixteen .MinRows)) 589 + mustDrawChar(cvs, '8', image.Rect(2, 0, segdisp .MinCols+2, segdisp .MinRows)) 524 590 525 591 testcanvas.MustApply(cvs, ft) 526 592 return ft skipped 6 lines 533 599 MaximizeSegmentHeight(), 534 600 GapPercent(0), 535 601 }, 536 - canvas: image.Rect(0, 0, sixteen .MinCols*2, sixteen .MinRows), 602 + canvas: image.Rect(0, 0, segdisp .MinCols*2, segdisp .MinRows), 537 603 update: func(sd *SegmentDisplay) error { 538 604 return sd.Write([]*TextChunk{NewChunk("123")}) 539 605 }, skipped 5 lines 545 611 char rune 546 612 area image.Rectangle 547 613 }{ 548 - {'1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 549 - {'2', image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows)}, 614 + {'1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 615 + {'2', image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows)}, 550 616 } { 551 617 mustDrawChar(cvs, tc.char, tc.area) 552 618 } skipped 8 lines 561 627 opts: []Option{ 562 628 GapPercent(0), 563 629 }, 564 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows*4), 630 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows*4), 565 631 update: func(sd *SegmentDisplay) error { 566 632 return sd.Write([]*TextChunk{NewChunk("123")}) 567 633 }, skipped 22 lines 590 656 opts: []Option{ 591 657 GapPercent(0), 592 658 }, 593 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows*4), 659 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows*4), 594 660 update: func(sd *SegmentDisplay) error { 595 661 return sd.Write([]*TextChunk{NewChunk("1234")}) 596 662 }, skipped 23 lines 620 686 MaximizeDisplayedText(), 621 687 GapPercent(0), 622 688 }, 623 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows*4), 689 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows*4), 624 690 update: func(sd *SegmentDisplay) error { 625 691 return sd.Write([]*TextChunk{NewChunk("123")}) 626 692 }, skipped 19 lines 646 712 }, 647 713 { 648 714 desc: "draws multiple segments with a gap by default", 649 - canvas: image.Rect(0, 0, sixteen .MinCols*3+2, sixteen .MinRows), 715 + canvas: image.Rect(0, 0, segdisp .MinCols*3+2, segdisp .MinRows), 650 716 update: func(sd *SegmentDisplay) error { 651 717 return sd.Write([]*TextChunk{NewChunk("123")}) 652 718 }, skipped 5 lines 658 724 char rune 659 725 area image.Rectangle 660 726 }{ 661 - {'1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 662 - {'2', image.Rect(sixteen .MinCols+1, 0, sixteen .MinCols*2+1, sixteen .MinRows)}, 663 - {'3', image.Rect(sixteen .MinCols*2+2, 0, sixteen .MinCols*3+2, sixteen .MinRows)}, 727 + {'1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 728 + {'2', image.Rect(segdisp .MinCols+1, 0, segdisp .MinCols*2+1, segdisp .MinRows)}, 729 + {'3', image.Rect(segdisp .MinCols*2+2, 0, segdisp .MinCols*3+2, segdisp .MinRows)}, 664 730 } { 665 731 mustDrawChar(cvs, tc.char, tc.area) 666 732 } skipped 8 lines 675 741 opts: []Option{ 676 742 GapPercent(20), 677 743 }, 678 - canvas: image.Rect(0, 0, sixteen .MinCols*3+2, sixteen .MinRows), 744 + canvas: image.Rect(0, 0, segdisp .MinCols*3+2, segdisp .MinRows), 679 745 update: func(sd *SegmentDisplay) error { 680 746 return sd.Write([]*TextChunk{NewChunk("123")}) 681 747 }, skipped 5 lines 687 753 char rune 688 754 area image.Rectangle 689 755 }{ 690 - {'1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 691 - {'2', image.Rect(sixteen .MinCols+1, 0, sixteen .MinCols*2+1, sixteen .MinRows)}, 692 - {'3', image.Rect(sixteen .MinCols*2+2, 0, sixteen .MinCols*3+2, sixteen .MinRows)}, 756 + {'1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 757 + {'2', image.Rect(segdisp .MinCols+1, 0, segdisp .MinCols*2+1, segdisp .MinRows)}, 758 + {'3', image.Rect(segdisp .MinCols*2+2, 0, segdisp .MinCols*3+2, segdisp .MinRows)}, 693 759 } { 694 760 mustDrawChar(cvs, tc.char, tc.area) 695 761 } skipped 8 lines 704 770 opts: []Option{ 705 771 GapPercent(40), 706 772 }, 707 - canvas: image.Rect(0, 0, sixteen .MinCols*3+2, sixteen .MinRows), 773 + canvas: image.Rect(0, 0, segdisp .MinCols*3+2, segdisp .MinRows), 708 774 update: func(sd *SegmentDisplay) error { 709 775 return sd.Write([]*TextChunk{NewChunk("123")}) 710 776 }, skipped 21 lines 732 798 opts: []Option{ 733 799 GapPercent(20), 734 800 }, 735 - canvas: image.Rect(0, 0, sixteen .MinCols*3+2, sixteen .MinRows), 801 + canvas: image.Rect(0, 0, segdisp .MinCols*3+2, segdisp .MinRows), 736 802 update: func(sd *SegmentDisplay) error { 737 803 return sd.Write([]*TextChunk{NewChunk("8888")}) 738 804 }, skipped 5 lines 744 810 char rune 745 811 area image.Rectangle 746 812 }{ 747 - {'8', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 748 - {'8', image.Rect(sixteen .MinCols+1, 0, sixteen .MinCols*2+1, sixteen .MinRows)}, 749 - {'8', image.Rect(sixteen .MinCols*2+2, 0, sixteen .MinCols*3+2, sixteen .MinRows)}, 813 + {'8', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 814 + {'8', image.Rect(segdisp .MinCols+1, 0, segdisp .MinCols*2+1, segdisp .MinRows)}, 815 + {'8', image.Rect(segdisp .MinCols*2+2, 0, segdisp .MinCols*3+2, segdisp .MinRows)}, 750 816 } { 751 817 mustDrawChar(cvs, tc.char, tc.area) 752 818 } skipped 8 lines 761 827 opts: []Option{ 762 828 GapPercent(20), 763 829 }, 764 - canvas: image.Rect(0, 0, sixteen .MinCols*4+2, sixteen .MinRows), 830 + canvas: image.Rect(0, 0, segdisp .MinCols*4+2, segdisp .MinRows), 765 831 update: func(sd *SegmentDisplay) error { 766 832 return sd.Write([]*TextChunk{NewChunk("8888")}) 767 833 }, skipped 23 lines 791 857 MaximizeSegmentHeight(), 792 858 GapPercent(20), 793 859 }, 794 - canvas: image.Rect(0, 0, sixteen .MinCols*5, sixteen .MinRows*2), 860 + canvas: image.Rect(0, 0, segdisp .MinCols*5, segdisp .MinRows*2), 795 861 update: func(sd *SegmentDisplay) error { 796 862 return sd.Write([]*TextChunk{NewChunk("123")}) 797 863 }, skipped 21 lines 819 885 opts: []Option{ 820 886 GapPercent(0), 821 887 }, 822 - canvas: image.Rect(0, 0, sixteen .MinCols*3, sixteen .MinRows), 888 + canvas: image.Rect(0, 0, segdisp .MinCols*3, segdisp .MinRows), 823 889 update: func(sd *SegmentDisplay) error { 824 890 chunks := []*TextChunk{NewChunk("123")} 825 891 if err := sd.Write(chunks); err != nil { skipped 11 lines 837 903 char rune 838 904 area image.Rectangle 839 905 }{ 840 - {'1', image.Rect(0, 0, sixteen .MinCols, sixteen .MinRows)}, 841 - {'2', image.Rect(sixteen .MinCols, 0, sixteen .MinCols*2, sixteen .MinRows)}, 842 - {'3', image.Rect(sixteen .MinCols*2, 0, sixteen .MinCols*3, sixteen .MinRows)}, 906 + {'1', image.Rect(0, 0, segdisp .MinCols, segdisp .MinRows)}, 907 + {'2', image.Rect(segdisp .MinCols, 0, segdisp .MinCols*2, segdisp .MinRows)}, 908 + {'3', image.Rect(segdisp .MinCols*2, 0, segdisp .MinCols*3, segdisp .MinRows)}, 843 909 } { 844 910 mustDrawChar(cvs, tc.char, tc.area) 845 911 } skipped 92 lines 938 1004 } 939 1005 got := sd.Options() 940 1006 want := widgetapi.Options{ 941 - MinimumSize: image.Point{sixteen .MinCols, sixteen .MinRows}, 1007 + MinimumSize: image.Point{segdisp .MinCols, segdisp .MinRows}, 942 1008 WantKeyboard: widgetapi.KeyScopeNone, 943 1009 WantMouse: widgetapi.MouseScopeNone, 944 1010 } skipped 6 lines