mirror of
				https://github.com/Rockbox/rockbox.git
				synced 2025-10-29 00:36:22 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 |