Skip to content

Instantly share code, notes, and snippets.

Created November 27, 2011 06:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/1397082 to your computer and use it in GitHub Desktop.
Save anonymous/1397082 to your computer and use it in GitHub Desktop.
DotFont
function setup()
    font = DotFont()
    color = {{255, 0, 0}, {255, 255, 0}}
end
function draw()
    background(7, 7, 7, 255)
    
    rectMode(CORNER)
    fill(232, 231, 234, 255)
    rect(400, 700, 230, 40)
    
    -- example with text, use fill() to set color of the txt
    fill(37, 25, 25, 255)
    -- (text, font_size, x, y)  font_size >=2
    font:draw("Minimum Font Size", 2, 410, 710)
    
    pushMatrix()
    rotate(30)
    fill(178, 184, 201, 255)
    rect(60,80,900,120)
    fill(37, 56, 98, 255)
    -- ASCII chars in text. Some chars can't be printed: (¥£€<\[]
    font:draw("/<>)$?.!,@&;:-1234567890", 10, 100, 100)
    popMatrix()
    
    -- example fith different colors of font points
    -- color - table with color tables, should be 1 or more color tables
    for i = 1, 5 do
        font:draw("Hello word!", i * 5, 20, 700 - i * i * 27 , color)  
    end
   
end
-- Chars tables from http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1203747843/21#21 
-- Scrolling 8x8 or 5x7 characters on a 8x8 grid by asteronimo 
DotFont = class()
function DotFont:init()
    self.data = {
  {0x00, 0x00, 0x00, 0x00, 0x00},--  0: (space)
  {0x00, 0x00, 0x5F, 0x00, 0x00},--  1: !
  {0x00, 0x07, 0x00, 0x07, 0x00},--  2: "
  {0x14, 0x7F, 0x14, 0x7F, 0x14},--  3: #
  {0x24, 0x2A, 0x7F, 0x2A, 0x12},--  4: $
  {0x23, 0x13, 0x08, 0x64, 0x62},--  5: %
  {0x36, 0x49, 0x55, 0x22, 0x50},--  6: &
  {0x00, 0x05, 0x03, 0x00, 0x00},-- '
  {0x00, 0x1C, 0x22, 0x41, 0x00},-- (    !
  {0x00, 0x41, 0x22, 0x1C, 0x00},-- )
  {0x08, 0x2A, 0x1C, 0x2A, 0x08},-- 10: *
  {0x08, 0x08, 0x3E, 0x08, 0x08},-- +
  {0x00, 0x50, 0x30, 0x00, 0x00},-- ,
  {0x08, 0x08, 0x08, 0x08, 0x08},-- -
  {0x00, 0x60, 0x60, 0x00, 0x00},-- .
  {0x20, 0x10, 0x08, 0x04, 0x02},-- 15: /
  {0x3E, 0x51, 0x49, 0x45, 0x3E},-- 0
  {0x00, 0x42, 0x7F, 0x40, 0x00},-- 1
  {0x42, 0x61, 0x51, 0x49, 0x46},-- 2
  {0x21, 0x41, 0x45, 0x4B, 0x31},-- 3
  {0x18, 0x14, 0x12, 0x7F, 0x10},-- 20: 4
  {0x27, 0x45, 0x45, 0x45, 0x39},-- 5
  {0x3C, 0x4A, 0x49, 0x49, 0x30},-- 6
  {0x01, 0x71, 0x09, 0x05, 0x03},-- 7 
  {0x36, 0x49, 0x49, 0x49, 0x36},-- 8
  {0x06, 0x49, 0x49, 0x29, 0x1E},-- 25: 9
  {0x00, 0x36, 0x36, 0x00, 0x00},-- :
  {0x00, 0x56, 0x36, 0x00, 0x00},-- ;
  {0x00, 0x08, 0x14, 0x22, 0x41},-- <
  {0x14, 0x14, 0x14, 0x14, 0x14},-- =
  {0x41, 0x22, 0x14, 0x08, 0x00},-- 30: >
  {0x02, 0x01, 0x51, 0x09, 0x06},-- ?
  {0x32, 0x49, 0x79, 0x41, 0x3E},-- @
  {0x7E, 0x11, 0x11, 0x11, 0x7E},-- A
  {0x7F, 0x49, 0x49, 0x49, 0x36},-- B
  {0x3E, 0x41, 0x41, 0x41, 0x22},-- 35: C
  {0x7F, 0x41, 0x41, 0x22, 0x1C},-- D
  {0x7F, 0x49, 0x49, 0x49, 0x41},-- E
  {0x7F, 0x09, 0x09, 0x01, 0x01},-- F
  {0x3E, 0x41, 0x41, 0x51, 0x32},-- G  
  {0x7F, 0x08, 0x08, 0x08, 0x7F},-- 40: H
  {0x00, 0x41, 0x7F, 0x41, 0x00},-- I
  {0x20, 0x40, 0x41, 0x3F, 0x01},-- J
  {0x7F, 0x08, 0x14, 0x22, 0x41},-- K
  {0x7F, 0x40, 0x40, 0x40, 0x40},-- L
  {0x7F, 0x02, 0x04, 0x02, 0x7F},-- 45: M
  {0x7F, 0x04, 0x08, 0x10, 0x7F},-- N
  {0x3E, 0x41, 0x41, 0x41, 0x3E},-- O
  {0x7F, 0x09, 0x09, 0x09, 0x06},-- P
  {0x3E, 0x41, 0x51, 0x21, 0x5E},-- Q
  {0x7F, 0x09, 0x19, 0x29, 0x46},-- 50: R
  {0x46, 0x49, 0x49, 0x49, 0x31},-- S
  {0x01, 0x01, 0x7F, 0x01, 0x01},-- T
  {0x3F, 0x40, 0x40, 0x40, 0x3F},-- U
  {0x1F, 0x20, 0x40, 0x20, 0x1F},-- V
  {0x7F, 0x20, 0x18, 0x20, 0x7F},-- 55: W
  {0x63, 0x14, 0x08, 0x14, 0x63},-- X
  {0x03, 0x04, 0x78, 0x04, 0x03},-- Y
  {0x61, 0x51, 0x49, 0x45, 0x43},-- Z
  {0x00, 0x00, 0x7F, 0x41, 0x41},-- [   !
  {0x02, 0x04, 0x08, 0x10, 0x20},-- 60: "\"  !
  {0x41, 0x41, 0x7F, 0x00, 0x00},-- ]  !
  {0x04, 0x02, 0x01, 0x02, 0x04},-- ^
  {0x40, 0x40, 0x40, 0x40, 0x40},-- _
  {0x00, 0x01, 0x02, 0x04, 0x00},-- `
  {0x20, 0x54, 0x54, 0x54, 0x78},-- 65: a
  {0x7F, 0x48, 0x44, 0x44, 0x38},-- b
  {0x38, 0x44, 0x44, 0x44, 0x20},-- c
  {0x38, 0x44, 0x44, 0x48, 0x7F},-- d
  {0x38, 0x54, 0x54, 0x54, 0x18},-- e
  {0x08, 0x7E, 0x09, 0x01, 0x02},-- 70: f
  {0x08, 0x14, 0x54, 0x54, 0x3C},-- g   
  {0x7F, 0x08, 0x04, 0x04, 0x78},-- h
  {0x00, 0x44, 0x7D, 0x40, 0x00},-- i
  {0x20, 0x40, 0x44, 0x3D, 0x00},-- j
  {0x00, 0x7F, 0x10, 0x28, 0x44},-- 75: k
  {0x00, 0x41, 0x7F, 0x40, 0x00},-- l
  {0x7C, 0x04, 0x18, 0x04, 0x78},-- m
  {0x7C, 0x08, 0x04, 0x04, 0x78},-- n
  {0x38, 0x44, 0x44, 0x44, 0x38},-- o
  {0x7C, 0x14, 0x14, 0x14, 0x08},-- 80: p
  {0x08, 0x14, 0x14, 0x18, 0x7C},-- q
  {0x7C, 0x08, 0x04, 0x04, 0x08},-- r
  {0x48, 0x54, 0x54, 0x54, 0x20},-- s
  {0x04, 0x3F, 0x44, 0x40, 0x20},-- t
  {0x3C, 0x40, 0x40, 0x20, 0x7C},-- 85: u
  {0x1C, 0x20, 0x40, 0x20, 0x1C},-- v
  {0x3C, 0x40, 0x30, 0x40, 0x3C},-- w
  {0x44, 0x28, 0x10, 0x28, 0x44},-- x
  {0x0C, 0x50, 0x50, 0x50, 0x3C},-- y
  {0x44, 0x64, 0x54, 0x4C, 0x44},-- 90: z
  {0x00, 0x08, 0x36, 0x41, 0x00},-- {  
  {0x00, 0x00, 0x7F, 0x00, 0x00},-- |
  {0x00, 0x41, 0x36, 0x08, 0x00},-- }
  {0x08, 0x08, 0x2A, 0x1C, 0x08},-- ->
  {0x08, 0x1C, 0x2A, 0x08, 0x08} -- 95: <-
    }
end
function DotFont:dec2bin(n)
    bin = ""
    while n > 0 do
        b = math.fmod(n, 2)
        bin = b .. bin
        n = math.floor(n / 2)
    end
    while string.len(bin) < 8 do bin = "0" .. bin end
    return bin   
end
function DotFont:draw(line, step, fromX, fromY, color) 
    if color then
        pushStyle()
        iColor = 0
        ellipseMode(CENTER)
        noStroke()
    end
    for i = 1, string.len(line) do
        char = string.sub(line, i, i)
        k = string.byte(char) - 31
        tab = self.data[k]
        points = {}
        for j = 1, 5 do points[j] = self:dec2bin(tab[j]) end
        for j = 1, 8 do
            y = (8 - j) * step + fromY
            for k = 1, 5 do
                if color then 
                    iColor = iColor + 1
                    if iColor > #color then iColor = 1 end
                    fill(unpack(color[iColor])) 
                end
                point = string.sub(points[k], 9  - j, 9 - j)
                x = (k - 1) * step + fromX + (i - 1) * 6 * step
                if point == "1" then ellipse(x, y, step) end
            end
        end
    end
    if color then popStyle() end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment