b99d4d7fa9
Change-Id: Id36e765f18234f5a4f3092d090c0adffa3da1612
115 lines
4 KiB
Lua
115 lines
4 KiB
Lua
--[[ Lua draw number function
|
|
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2019 William Wilgus
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
]]
|
|
|
|
--[[ Exposed Functions
|
|
_draw_nums.print; binary (base = 2) , octal (base = 8), hexadecimal (base = 16)
|
|
_draw_nums.nums; table of number characters
|
|
]]
|
|
|
|
if not rb.lcd_framebuffer then rb.splash(rb.HZ, "No Support!") return nil end
|
|
|
|
local _draw_nums = {} do
|
|
local _poly = require "draw_poly"
|
|
|
|
-- every 2 elements is an x, y coord pair
|
|
-- n[?] = {x,y,x,y,x,y}
|
|
local nums = {
|
|
["b"] = {0,1,0,7,0,5,1,4,1,4,2,4,3,5,3,6,2,7,1,7,0,6,0,5},
|
|
["o"] = {1,4,0,5,0,6,1,7,2,7,3,6,3,5,2,4,1,4},
|
|
["x"] = {0,3,4,7,2,5,4,3,0,7},
|
|
[-1] = {1,4, 3,4},
|
|
[0] = {1,2,1,6,2,7,3,7,4,6,4,2,3,1,2,1,1,2},
|
|
[1] = {3,1,3,7},
|
|
[2] = {1,1,3,1,4,2,4,3,3,4,1,5,1,7,4,7},
|
|
[3] = {1,1,3,1,4,2,4,3,3,4,2,4,3,4,4,5,4,6,3,7,1,7},
|
|
[4] = {1,1,1,3,2,4,4,4,4,1,4,7},
|
|
[5] = {1,1,4,1,1,1,1,4,3,4,4,5,4,7,1,7},
|
|
[6] = {1,2,1,4,1,6,2,7,3,7,4,6,4,4,1,4,1,2,2,1,4,1},
|
|
[7] = {1,1,4,1,4,2,1,7},
|
|
[8] = {1,2,1,6,2,7,3,7,4,6,4,4,1,4,4,4,4,2,3,1,2,1,1,2},
|
|
[9] = {4,6,4,4,4,2,3,1,2,1,1,2,1,4,4,4,4,6,3,7,1,7},
|
|
[10] = {1,7,1,4,4,4,4,7,4,2,3,1,2,1,1,2,1,4},
|
|
[11] = {1,1,1,7,3,7,4,6,4,5,3,4,1,4,3,4,4,3,4,2,3,1,1,1},
|
|
[12] = {4,2,3,1,2,1,1,2,1,6,2,7,3,7,4,6},
|
|
[13] = {1,1,1,7,3,7,4,6,4,2,3,1,1,1},
|
|
[14] = {4,1,1,1,1,4,3,4,1,4,1,7,4,7},
|
|
[15] = {4,1,1,1,1,4,3,4,1,4,1,7},
|
|
}
|
|
_draw_nums.nums = nums
|
|
|
|
|
|
_draw_nums.print = function(img, num, x, y, chrw, color, base, prefix, bClip, scale_x, scale_y, t_nums)
|
|
scale_x = scale_x or 1
|
|
scale_y = scale_y or 1
|
|
chrw = chrw * scale_x
|
|
prefix = (prefix == nil or prefix == true) and true or false
|
|
t_nums = t_nums or nums
|
|
local max_x, max_y, digits = 0, 0, {}
|
|
|
|
if num <= 0 then
|
|
if num < 0 then
|
|
digits[-3] = -1
|
|
num = -num
|
|
else
|
|
digits[0] = 0
|
|
end
|
|
end
|
|
|
|
if not prefix and (base == 2 or base == 8 or base == 16) then
|
|
-- no prefix
|
|
elseif base == 2 then
|
|
digits[-1] = "b"
|
|
elseif base == 8 then
|
|
digits[-1] = "o"
|
|
elseif base == 10 then
|
|
-- no prefix
|
|
elseif base == 16 then
|
|
digits[-2] = 0
|
|
digits[-1] = "x"
|
|
elseif base == nil then -- default
|
|
base = 10
|
|
else
|
|
error("unknown number base: " .. base)
|
|
return nil
|
|
end
|
|
|
|
while num > 0 do -- get each digit (LeastSignificant)
|
|
digits[#digits + 1] = num % base;
|
|
num=num/base;
|
|
end
|
|
|
|
digits[#digits + 1] = digits[0] -- zero
|
|
digits[#digits + 1] = digits[-1] -- base prefix
|
|
digits[#digits + 1] = digits[-2] -- base prefix (hex)
|
|
digits[#digits + 1] = digits[-3] -- neg sign
|
|
|
|
for i = #digits, 1, -1 do
|
|
max_x, max_y = _poly.polyline(img, x, y, t_nums[digits[i]],
|
|
color, false, bClip, scale_x, scale_y)
|
|
x = x + chrw
|
|
end
|
|
|
|
return x, y + max_y, chrw
|
|
end
|
|
end
|
|
return _draw_nums
|