summaryrefslogtreecommitdiff
path: root/apps/plugins/lua/include_lua/print.lua
diff options
context:
space:
mode:
authorWilliam Wilgus <me.theuser@yahoo.com>2018-07-22 18:43:04 +0200
committerWilliam Wilgus <me.theuser@yahoo.com>2018-07-22 18:43:04 +0200
commitef210b5fe4f72a102dcaa1f752d3022d62da8bc4 (patch)
tree54f00fe62f23ca6fc387b6f8702cf6737f795032 /apps/plugins/lua/include_lua/print.lua
parent2daec3d3c3d84e7176a22bc073ca5530e8e44c6d (diff)
downloadrockbox-ef210b5fe4f72a102dcaa1f752d3022d62da8bc4.zip
rockbox-ef210b5fe4f72a102dcaa1f752d3022d62da8bc4.tar.gz
rockbox-ef210b5fe4f72a102dcaa1f752d3022d62da8bc4.tar.bz2
rockbox-ef210b5fe4f72a102dcaa1f752d3022d62da8bc4.tar.xz
Revert "Rocklua -- Extend / Fix rliImage"
This reverts commit 2daec3d3c3d84e7176a22bc073ca5530e8e44c6d. Change-Id: I53ea1f491e3c6d6fb759f426f203f927bd26b1e9
Diffstat (limited to 'apps/plugins/lua/include_lua/print.lua')
-rw-r--r--apps/plugins/lua/include_lua/print.lua377
1 files changed, 0 insertions, 377 deletions
diff --git a/apps/plugins/lua/include_lua/print.lua b/apps/plugins/lua/include_lua/print.lua
deleted file mode 100644
index 0e9be37..0000000
--- a/apps/plugins/lua/include_lua/print.lua
+++ /dev/null
@@ -1,377 +0,0 @@
---[[ Lua Print functions
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id$
- *
- * Copyright (C) 2017 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
-
- _print.clear
- _print.f
- _print.opt
- _print.opt.area
- _print.opt.autoupdate
- _print.opt.color
- _print.opt.column
- _print.opt.defaults
- _print.opt.get
- _print.opt.justify
- _print.opt.line
- _print.opt.overflow
- _print.opt.sel_line
- _print.opt.set
-
-]]
-
-if not rb.lcd_framebuffer then rb.splash(rb.HZ, "No Support!") return nil end
-
-local _print = {} do
-
- -- internal constants
- local _clr = require("color") -- _clr functions required
-
- local _NIL = nil -- _NIL placeholder
- local _LCD = rb.lcd_framebuffer()
- local LCD_W, LCD_H = rb.LCD_WIDTH, rb.LCD_HEIGHT
- local WHITE = _clr.set(-1, 255, 255, 255)
- local BLACK = _clr.set(0, 0, 0, 0)
- local DRMODE_SOLID = 3
- local col_buf, s_lines = {}, {}
- local _p_opts = _NIL
-
--- print internal helper functions
---------------------------------------------------------------------------------
- -- clamps value to >= min and <= max
- local function clamp(val, min, max)
- -- Warning doesn't check if min < max
- if val < min then
- return min
- elseif val < max then
- return val
- end
- return max
- end
-
- -- updates screen in specified rectangle
- local function update_rect(x, y, w, h)
- rb.lcd_update_rect(x - 1, y - 1,
- clamp(x + w, 1, LCD_W) - 1,
- clamp(y + h, 1, LCD_H) - 1)
- end
-
- -- Gets size of text
- local function text_extent(msg, font)
- font = font or rb.FONT_UI
- -- res, w, h
- return rb.font_getstringsize(msg, font)
- end
-
- -- Sets viewport size
- local function set_viewport(vp)
- if not vp then rb.set_viewport() return end
-
- if rb.LCD_DEPTH == 2 then -- invert 2-bit screens
- --vp.drawmode = bit.bxor(vp.drawmode, 4)
- vp.fg_pattern = 3 - vp.fg_pattern
- vp.bg_pattern = 3 - vp.bg_pattern
- end
- rb.set_viewport(vp)
- end
-
- -- shallow copy of table
- function table_clone(t)
- local copy = {}
- for k, v in pairs(t) do
- copy[k] = v
- end
- return copy
- end
-
- -- Updates a single line on the screen
- local function update_line(enabled, opts, line, h)
- if enabled ~= true then return end
- local o = opts or _p_opts
- update_rect(o.x, o.y + line * h + 1, o.width, h)
- end
-
- -- Clears a single line on the screen
- local function clear_line(opts, line, h)
- local o = opts or _p_opts
- _LCD:clear(o.bg_pattern, o.x, o.y + line * h + 1,
- o.x + o.width, line * h + h + o.y)
- end
-
- -- Sets the maximum number of lines on the screen
- local function max_lines(opts)
- local h = opts.height
- local _, _, th = text_extent("W", opts.font)
- return h / th
- end
-
- --saves the items displayed for side to side scroll
- local function col_buf_insert(msg, line, _p_opts)
- --if _p_opts.line <= 1 then col_buf = {} end
- if not col_buf[line] then
- table.insert(col_buf, line, msg) end
- end
-
- --replaces / strips escape characters
- local function check_escapes(o, msg)
- local tabsz = 2
- local tabstr = string.rep(" ", tabsz)
-
- local function repl(esc)
- local ret = ""
- if esc:sub(1,1) == "\t" then ret = string.rep(tabstr, esc:len()) end
- return ret
- end
-
- msg = msg:gsub("(%c+)", repl)
-
- local res, w, h = text_extent(msg, o.font)
- return w, h, msg
- end
---------------------------------------------------------------------------------
-
- -- set defaults for print view
- local function set_defaults()
- _p_opts = { x = 1,
- y = 1,
- width = LCD_W - 1,
- height = LCD_H - 1,
- font = rb.FONT_UI,
- drawmode = DRMODE_SOLID,
- fg_pattern = WHITE,
- bg_pattern = BLACK,
- sel_pattern = WHITE,
- line = 1,
- max_line = _NIL,
- col = 0,
- ovfl = "auto",
- justify = "left",
- autoupdate = true,
- }
- _p_opts.max_line = max_lines(_p_opts)
-
- s_lines, col_buf = {}, {}
- return _p_opts
- end
-
- -- returns table with settings for print
- -- if bByRef is _NIL or false then a copy is returned
- local function get_settings(bByRef)
- _p_opts = _p_opts or set_defaults()
- if not bByRef then return table_clone(_p_opts) end
- return _p_opts
- end
-
- -- sets the settings for print with your passed table
- local function set_settings(t_opts)
- _p_opts = t_opts or set_defaults()
- if t_opts then
- _p_opts.max_line = max_lines(_p_opts)
- col_buf = {}
- end
- end
-
- -- sets colors for print
- local function set_color(fgclr, bgclr, selclr)
- local o = get_settings(true)
-
- if fgclr ~= _NIL then
- o.fg_pattern, o.sel_pattern = fgclr, fgclr
- end
- o.sel_pattern = selclr or o.sel_pattern
- o.bg_pattern = bgclr or o.bg_pattern
- end
-
- -- helper function sets up colors/marker for selected items
- local function show_selected(iLine, msg)
- local o = get_settings() -- using a copy of opts so changes revert
-
- if s_lines[iLine] == true then
- if not rb.lcd_set_background then
- o.drawmode = bit.bxor(o.drawmode, 4)
- else
- o.fg_pattern = o.bg_pattern
- o.bg_pattern = o.sel_pattern
- end
- -- alternative selection method
- --msg = "> " .. msg
- end
- set_viewport(o)
- o = _NIL
- end
-
- -- sets line explicitly or increments line if line is _NIL
- local function set_line(iLine)
- local o = get_settings(true)
-
- o.line = iLine or o.line + 1
-
- if(o.line < 1 or o.line > o.max_line) then
- o.line = 1
- end
- end
-
- -- clears the set print area
- local function clear()
- local o = get_settings(true)
- _LCD:clear(o.bg_pattern, o.x, o.y, o.x + o.width, o.y + o.height)
- if o.autoupdate == true then rb.lcd_update() end
- set_line(1)
- for i=1, #col_buf do col_buf[i] = _NIL end
- s_lines = {}
- collectgarbage("collect")
- end
-
- -- screen update after each call to print.f
- local function set_update(bAutoUpdate)
- local o = get_settings(true)
- o.autoupdate = bAutoUpdate or false
- end
-
- -- sets print area
- local function set_area(x, y, w, h)
- local o = get_settings(true)
- o.x, o.y = clamp(x, 1, LCD_W), clamp(y, 1, LCD_H)
- o.width, o.height = clamp(w, 1, LCD_W - o.x), clamp(h, 1, LCD_H - o.y)
- o.max_line = max_lines(_p_opts)
-
- clear()
- return o.line, o.max_line
- end
-
- -- when string is longer than print width scroll -- "auto", "manual", "none"
- local function set_overflow(str_mode)
- -- "auto", "manual", "none"
- local str_mode = str_mode or "auto"
- local o = get_settings(true)
- o.ovfl = str_mode:lower()
- col_buf = {}
- end
-
- -- aligns text to: "left", "center", "right"
- local function set_justify(str_mode)
- -- "left", "center", "right"
- local str_mode = str_mode or "left"
- local o = get_settings(true)
- o.justify = str_mode:lower()
- end
-
- -- selects line
- local function select_line(iLine)
- s_lines[iLine] = true
- end
-
- -- Internal print function
- local function print_internal(t_opts, x, w, h, msg)
-
- local o = t_opts
- if o.justify == "center" then
- x = x + (o.width - w) / 2
- elseif o.justify == "right" then
- x = x + (o.width - w)
- end
-
- local line = o.line - 1 -- rb is 0-based lua is 1-based
- if(o.ovfl == "auto" and w >= o.width) then -- -o.x
- rb.lcd_puts_scroll(0, line, msg)
- else
- rb.lcd_putsxy(x, line * h, msg)
- if o.ovfl == "manual" then --save msg for later side scroll
- col_buf_insert(msg, o.line, o)
- end
- end
-
- --only update the line we changed
- update_line(o.autoupdate, o, line, h)
-
- set_line(_NIL) -- increments line counter
- end
-
- -- Helper function that acts mostly like a normal printf() would
- local function printf(...)
- local o = get_settings(true)
- local w, h, msg
- local line = o.line - 1 -- rb is 0-based lua is 1-based
- if not (...) or (...) == "\n" then -- handles blank line / single '\n'
- local res, w, h = text_extent(" ", o.font)
-
- clear_line(o, line, h)
- update_line(o.autoupdate, o, line, h)
-
- if (...) then set_line(_NIL) end
-
- return o.line, o.max_line, o.width, h
- end
-
- msg = string.format(...)
-
- show_selected(o.line, msg)
-
- w, h, msg = check_escapes(o, msg)
-
- print_internal(o, o.col, w, h, msg)
-
- return o.line, o.max_line, w, h
- end
-
- -- x > 0 scrolls right x < 0 scrolls left
- local function set_column(x)
- local o = get_settings()
- if o.ovfl ~= "manual" then return end -- no buffer stored to scroll
- local res, w, h, str, line
-
- for key, value in pairs(col_buf) do
- line = key - 1 -- rb is 0-based lua is 1-based
- o.line = key
-
- if value then
- show_selected(key, value)
- res, w, h = text_extent(value, o.font)
- clear_line(o, line, h)
-
- print_internal(o, x + o.col, w, h, value)
- update_line(o.autoupdate, o, line, h)
- end
- end
- o = _NIL
- end
-
- --expose functions to the outside through _print table
- _print.opt = {}
- _print.opt.column = set_column
- _print.opt.color = set_color
- _print.opt.area = set_area
- _print.opt.set = set_settings
- _print.opt.get = get_settings
- _print.opt.defaults = set_defaults
- _print.opt.overflow = set_overflow
- _print.opt.justify = set_justify
- _print.opt.sel_line = select_line
- _print.opt.line = set_line
- _print.opt.autoupdate = set_update
- _print.clear = clear
- _print.f = printf
-
-end --_print functions
-
-return _print