summaryrefslogtreecommitdiffstats
path: root/pkg/draw/quarter.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/draw/quarter.go')
-rw-r--r--pkg/draw/quarter.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/pkg/draw/quarter.go b/pkg/draw/quarter.go
new file mode 100644
index 0000000..b7748f4
--- /dev/null
+++ b/pkg/draw/quarter.go
@@ -0,0 +1,37 @@
+package draw
+
+var _ Pixels = &Quarter{}
+
+const (
+ quarterScaleX = 2
+ quarterScaleY = 2
+)
+
+type Quarter struct{ *Buffer }
+
+func (b *Quarter) Size() Box {
+ return Box{
+ Width: b.Width * quarterScaleX,
+ Height: b.Height * quarterScaleY,
+ }
+}
+
+func (b *Quarter) Set(y, x int) {
+ ry, cy := y/2, 1-y%2
+ rx, cx := x/2, x%2
+ i := index(b.Get(ry, rx))
+ b.Buffer.Set(ry, rx, runes[i|(1<<uint(cx+2*cy))])
+}
+
+func (b *Quarter) Clear() { b.Fill(runes[0]) }
+
+var runes = []rune(" ▘▝▀▖▌▞▛▗▚▐▜▄▙▟█")
+
+func index(r rune) int {
+ for i := range runes {
+ if runes[i] == r {
+ return i
+ }
+ }
+ return 0
+}