added 1-quadrants

cpsdqs/unified-input
Ondřej Hruška 7 years ago
parent e60f94cdae
commit b33695e543
  1. 58
      js/term_screen.js

@ -718,11 +718,15 @@ window.TermScreen = class TermScreen extends EventEmitter {
ctx.fillStyle = this.getColor(fg) ctx.fillStyle = this.getColor(fg)
let codePoint = text.codePointAt(0) let codePoint = text.codePointAt(0)
if (codePoint >= 0x2580 && codePoint <= 0x2595) { if (codePoint >= 0x2580 && codePoint <= 0x259F) {
// block elements // block elements
ctx.beginPath() ctx.beginPath()
let left = x * cellWidth const left = x * cellWidth
let top = y * cellHeight const top = y * cellHeight
const cw = cellWidth
const ch = cellHeight
const c2w = cellWidth / 2
const c2h = cellHeight / 2
// http://www.fileformat.info/info/unicode/block/block_elements/utf8test.htm // http://www.fileformat.info/info/unicode/block/block_elements/utf8test.htm
// 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F // 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
@ -731,18 +735,30 @@ window.TermScreen = class TermScreen extends EventEmitter {
if (codePoint === 0x2580) { if (codePoint === 0x2580) {
// upper half block >▀< // upper half block >▀<
ctx.rect(left, top, cellWidth, cellHeight / 2) ctx.rect(left, top, cw, c2h)
} else if (codePoint <= 0x2588) { } else if (codePoint <= 0x2588) {
// lower n eighth block (increasing) >▁< to >█< // lower n eighth block (increasing) >▁< to >█<
let offset = (1 - (codePoint - 0x2580) / 8) * cellHeight let offset = (1 - (codePoint - 0x2580) / 8) * ch
ctx.rect(left, top + offset, cellWidth, cellHeight - offset) ctx.rect(left, top + offset, cw, ch - offset)
} else if (codePoint <= 0x258F) { } else if (codePoint <= 0x258F) {
// left n eighth block (decreasing) >▉< to >▏< // left n eighth block (decreasing) >▉< to >▏<
let offset = (codePoint - 0x2588) / 8 * cellWidth let offset = (codePoint - 0x2588) / 8 * cw
ctx.rect(left, top, cellWidth - offset, cellHeight) ctx.rect(left, top, cw - offset, ch)
} else if (codePoint === 0x2590) { } else if (codePoint === 0x2590) {
// right half block >▐< // right half block >▐<
ctx.rect(left + cellWidth / 2, top, cellWidth / 2, cellHeight) ctx.rect(left + c2w, top, c2w, ch)
} else if (codePoint === 0x2596) {
// left bottom quadrant >▖<
ctx.rect(left, top + c2h, c2w, c2h)
} else if (codePoint === 0x2597) {
// right bottom quadrant >▗<
ctx.rect(left + c2w, top + c2h, c2w, c2h)
} else if (codePoint === 0x2598) {
// left top quadrant >▘<
ctx.rect(left, top, c2w, c2h)
} else if (codePoint === 0x259D) {
// right top quadrant >▝<
ctx.rect(left + c2w, top, c2w, c2h)
} else if (codePoint <= 0x2593) { } else if (codePoint <= 0x2593) {
// shading >░< >▒< >▓< // shading >░< >▒< >▓<
@ -752,34 +768,34 @@ window.TermScreen = class TermScreen extends EventEmitter {
// take over the world, which is not within the scope of this project. // take over the world, which is not within the scope of this project.
let dotSpacingX, dotSpacingY, dotSize let dotSpacingX, dotSpacingY, dotSize
if (codePoint === 0x2591) { if (codePoint === 0x2591) {
dotSpacingX = cellWidth / 4 dotSpacingX = cw / 4
dotSpacingY = cellHeight / 10 dotSpacingY = ch / 10
dotSize = 1 dotSize = 1
} else if (codePoint === 0x2592) { } else if (codePoint === 0x2592) {
dotSpacingX = cellWidth / 6 dotSpacingX = cw / 6
dotSpacingY = cellWidth / 10 dotSpacingY = cw / 10
dotSize = 1 dotSize = 1
} else if (codePoint === 0x2593) { } else if (codePoint === 0x2593) {
dotSpacingX = cellWidth / 4 dotSpacingX = cw / 4
dotSpacingY = cellWidth / 7 dotSpacingY = cw / 7
dotSize = 2 dotSize = 2
} }
let alignRight = false let alignRight = false
for (let dy = 0; dy < cellHeight; dy += dotSpacingY) { for (let dy = 0; dy < ch; dy += dotSpacingY) {
for (let dx = 0; dx < cellWidth; dx += dotSpacingX) { for (let dx = 0; dx < cw; dx += dotSpacingX) {
// prevent overflow // prevent overflow
let dotSizeY = Math.min(dotSize, cellHeight - dy) let dotSizeY = Math.min(dotSize, ch - dy)
ctx.rect(x * cellWidth + (alignRight ? cellWidth - dx - dotSize : dx), y * cellHeight + dy, dotSize, dotSizeY) ctx.rect(x * cw + (alignRight ? cw - dx - dotSize : dx), y * ch + dy, dotSize, dotSizeY)
} }
alignRight = !alignRight alignRight = !alignRight
} }
} else if (codePoint === 0x2594) { } else if (codePoint === 0x2594) {
// upper one eighth block >▔< // upper one eighth block >▔<
ctx.rect(x * cellWidth, y * cellHeight, cellWidth, cellHeight / 8) ctx.rect(x * cw, y * ch, cw, ch / 8)
} else if (codePoint === 0x2595) { } else if (codePoint === 0x2595) {
// right one eighth block >▕< // right one eighth block >▕<
ctx.rect((x + 7 / 8) * cellWidth, y * cellHeight, cellWidth / 8, cellHeight) ctx.rect((x + 7 / 8) * cw, y * ch, cw / 8, ch)
} }
ctx.fill() ctx.fill()

Loading…
Cancel
Save