conky-config/drawing/common.lua

675 lines
17 KiB
Lua
Raw Normal View History

local M = {}
2021-07-18 23:45:16 -04:00
local F = require 'Fundamental'
2021-07-11 14:48:51 -04:00
local Util = require 'Util'
local theme = require 'theme'
2021-07-18 19:55:59 -04:00
local Dial = require 'Dial'
2021-07-18 20:22:30 -04:00
local Rect = require 'Rect'
local FillRect = require 'FillRect'
2021-07-18 19:55:59 -04:00
local CompoundDial = require 'CompoundDial'
local Arc = require 'Arc'
local Text = require 'Text'
2021-07-18 21:10:59 -04:00
local Table = require 'Table'
2021-07-11 23:57:56 -04:00
local CompoundBar = require 'CompoundBar'
2021-07-19 01:07:39 -04:00
local ThresholdText = require 'ThresholdText'
local TextColumn = require 'TextColumn'
local Line = require 'Line'
2021-07-18 23:45:16 -04:00
local Timeseries = require 'Timeseries'
local ScaledTimeseries = require 'ScaledTimeseries'
2021-07-24 00:32:56 -04:00
local s = require 'style'
2021-07-11 21:11:38 -04:00
--------------------------------------------------------------------------------
-- constants
local FONT = 'Neuropolitical'
local NORMAL_FONT_SIZE = 13
local PLOT_LABEL_FONT_SIZE = 8
local TABLE_FONT_SIZE = 11
local HEADER_FONT_SIZE = 15
2021-07-11 21:11:38 -04:00
local HEADER_HEIGHT = 45
local HEADER_UNDERLINE_CAP = CAIRO_LINE_CAP_ROUND
2021-07-11 21:11:38 -04:00
local HEADER_UNDERLINE_OFFSET = 26
local HEADER_UNDERLINE_THICKNESS = 3
2021-07-11 21:11:38 -04:00
local SEPARATOR_THICKNESS = 1
local TABLE_BODY_FORMAT = 8
local TABLE_VERT_PAD = 15
local TABLE_HORZ_PAD = 5
local TABLE_HEADER_PAD = 20
local TABLE_LINE_THICKNESS = 1
local PLOT_NUM_POINTS = 90
local PLOT_GRID_X_N = 9
local PLOT_GRID_Y_N = 4
local ARC_WIDTH = 2
2021-07-11 23:10:35 -04:00
local DIAL_THETA0 = 90
local DIAL_THETA1 = 360
2021-07-11 21:11:38 -04:00
--------------------------------------------------------------------------------
-- helper functions
local make_font_spec = function(f, s, bold)
2021-07-06 00:11:00 -04:00
return {
family = f,
size = s,
weight = bold and CAIRO_FONT_WEIGHT_BOLD or CAIRO_FONT_WEIGHT_NORMAL,
slant = CAIRO_FONT_WEIGHT_NORMAL,
}
end
local normal_font_spec = make_font_spec(FONT, NORMAL_FONT_SIZE, false)
local label_font_spec = make_font_spec(FONT, PLOT_LABEL_FONT_SIZE, false)
2021-07-06 00:11:00 -04:00
2021-07-11 23:57:56 -04:00
local _text_row_style = function(x_align, color)
return Text.style(normal_font_spec, color, x_align, 'center')
2021-07-11 23:57:56 -04:00
end
2021-07-10 17:13:17 -04:00
local left_text_style = _text_row_style('left', theme.INACTIVE_TEXT_FG)
local right_text_style = _text_row_style('right', theme.PRIMARY_FG)
2021-07-10 17:13:17 -04:00
local _bare_text = function(pt, text, style)
2021-07-18 21:10:59 -04:00
return Text.build_plain(pt, text, style)
2021-07-10 17:13:17 -04:00
end
local _left_text = function(pt, text)
return _bare_text(pt, text, left_text_style)
2021-07-10 17:13:17 -04:00
end
local _right_text = function(pt, text)
return _bare_text(pt, text, right_text_style)
2021-07-10 17:13:17 -04:00
end
--------------------------------------------------------------------------------
-- header
2021-07-24 01:29:02 -04:00
M.Header = function(x, y, w, text)
local bottom_y = y + HEADER_HEIGHT
2021-07-11 21:11:38 -04:00
local underline_y = y + HEADER_UNDERLINE_OFFSET
return {
2021-07-18 21:10:59 -04:00
text = Text.build_plain(
2021-07-18 23:45:16 -04:00
F.make_point(x, y),
2021-07-24 01:29:02 -04:00
text,
2021-07-18 21:10:59 -04:00
Text.style(
make_font_spec(FONT, HEADER_FONT_SIZE, true),
theme.HEADER_FG,
'left',
'top'
2021-07-10 19:28:49 -04:00
)
2021-07-09 00:10:59 -04:00
),
bottom_y = bottom_y,
2021-07-18 20:14:00 -04:00
underline = Line.build(
2021-07-18 23:45:16 -04:00
F.make_point(x, underline_y),
F.make_point(x + w, underline_y),
2021-07-24 01:29:02 -04:00
Line.config(
s.line(HEADER_UNDERLINE_THICKNESS, HEADER_UNDERLINE_CAP),
theme.HEADER_FG,
2021-07-24 01:29:02 -04:00
true
2021-07-10 23:07:27 -04:00
)
)
}
end
M.drawHeader = function(cr, header)
Text.draw(header.text, cr)
Line.draw(header.underline, cr)
end
--------------------------------------------------------------------------------
-- label plot
local default_grid_config = Timeseries.grid_config(
2021-07-11 21:11:38 -04:00
PLOT_GRID_X_N,
PLOT_GRID_Y_N,
theme.PLOT_GRID_FG
2021-07-11 21:11:38 -04:00
)
2021-07-11 14:48:51 -04:00
local default_plot_config = Timeseries.config(
2021-07-11 21:11:38 -04:00
PLOT_NUM_POINTS,
theme.PLOT_OUTLINE_FG,
theme.PLOT_FILL_BORDER_PRIMARY,
theme.PLOT_FILL_BG_PRIMARY,
default_grid_config
2021-07-11 14:48:51 -04:00
)
2021-07-24 01:02:12 -04:00
M.percent_label_config = Timeseries.label_config(
theme.INACTIVE_TEXT_FG,
label_font_spec,
2021-07-18 19:18:14 -04:00
function(_) return function(z) return Util.round_to_string(z * 100)..'%' end end
2021-07-11 14:48:51 -04:00
)
M.initthemedLabelPlot = function(x, y, w, h, label_config, update_freq)
2021-07-18 23:45:16 -04:00
return Timeseries.build(
F.make_box(x, y, w, h),
update_freq,
default_plot_config,
2021-07-24 01:02:12 -04:00
label_config
2021-07-11 14:48:51 -04:00
)
end
--------------------------------------------------------------------------------
-- percent plot (label plot with percent signs and some indicator data above it)
M.initPercentPlot_formatted = function(x, y, w, h, spacing, label, update_freq, format)
return {
2021-07-18 23:45:16 -04:00
label = _left_text(F.make_point(x, y), label),
2021-07-19 01:07:39 -04:00
value = ThresholdText.build_formatted(
2021-07-18 23:45:16 -04:00
F.make_point(x + w, y),
2021-07-09 22:22:49 -04:00
nil,
right_text_style,
2021-07-13 00:14:04 -04:00
format,
ThresholdText.style(theme.CRITICAL_FG, 80)
2021-07-09 22:22:49 -04:00
),
plot = M.initthemedLabelPlot(
2021-07-11 14:48:51 -04:00
x,
y + spacing,
w,
h,
2021-07-24 01:02:12 -04:00
M.percent_label_config,
update_freq
2021-07-11 14:48:51 -04:00
),
}
end
M.initPercentPlot = function(x, y, w, h, spacing, label, update_freq)
return M.initPercentPlot_formatted(x, y, w, h, spacing, label, update_freq, '%s%%')
2021-07-13 00:14:04 -04:00
end
M.percent_plot_draw_static = function(pp, cr)
Text.draw(pp.label, cr)
2021-07-18 23:45:16 -04:00
Timeseries.draw_static(pp.plot, cr)
end
M.percent_plot_draw_dynamic = function(pp, cr)
2021-07-19 01:07:39 -04:00
ThresholdText.draw(pp.value, cr)
2021-07-18 23:45:16 -04:00
Timeseries.draw_dynamic(pp.plot, cr)
end
2021-07-13 00:14:04 -04:00
-- TODO this is pretty confusing, nil means -1 which gets fed to any text
-- formatting functions
2021-07-26 23:45:54 -04:00
M.percent_plot_set = function(pp, value)
2021-07-13 00:14:04 -04:00
local t = -1
local p = 0
if value ~= nil then
t = math.floor(value)
p = value * 0.01
end
2021-07-23 00:16:18 -04:00
Text.set(pp.value, t)
2021-07-18 23:45:16 -04:00
Timeseries.update(pp.plot, p)
end
--------------------------------------------------------------------------------
-- scaled plot
2021-07-18 19:18:14 -04:00
-- Generate a format string for labels on y axis of plots. If the max of the
-- plot if numerically less than the number of grid lines, this means that
-- some number of decimal places are necessary to accurately display the number.
-- Note that this for now only works when the number of y grid lines if 4, as
-- it gives enough resolution for 1, 0.75, 0.5, and 0.25 but no more
M.y_label_format_string = function(plot_max, unit)
local num_fmt
if plot_max < 2 then
num_fmt = '%.2f'
elseif plot_max < 4 then
num_fmt = '%.1f'
else
num_fmt = '%.0f'
end
return string.format('%s %s', num_fmt, unit)
end
M.converted_y_label_format_generator = function(unit)
return function(plot_max)
local new_prefix, new_max = Util.convert_data_val(plot_max)
local conversion_factor = plot_max / new_max
local fmt = M.y_label_format_string(new_max, new_prefix..unit..'/s')
return function(bytes)
return string.format(fmt, bytes / conversion_factor)
end
end
end
2021-07-13 22:54:41 -04:00
M.base_2_scale_data = function(m)
2021-07-18 23:45:16 -04:00
return ScaledTimeseries.scaling_parameters(2, m, 0.9)
2021-07-13 22:54:41 -04:00
end
2021-07-11 14:48:51 -04:00
M.initthemedScalePlot = function(x, y, w, h, f, min_domain, update_freq)
2021-07-18 23:45:16 -04:00
return ScaledTimeseries.build(
F.make_box(x, y, w, h),
update_freq,
default_plot_config,
2021-07-24 01:02:12 -04:00
Timeseries.label_config(
theme.INACTIVE_TEXT_FG,
label_font_spec,
2021-07-11 19:47:21 -04:00
f
2021-07-11 14:48:51 -04:00
),
2021-07-13 22:54:41 -04:00
M.base_2_scale_data(min_domain)
2021-07-11 14:48:51 -04:00
)
end
--------------------------------------------------------------------------------
-- scaled plot (with textual data above it)
2021-07-13 22:54:41 -04:00
M.initLabeledScalePlot = function(x, y, w, h, format_fun, label_fun, spacing,
label, min_domain, update_freq)
return {
2021-07-18 23:45:16 -04:00
label = _left_text(F.make_point(x, y), label),
2021-07-18 21:10:59 -04:00
value = Text.build_formatted(
2021-07-18 23:45:16 -04:00
F.make_point(x + w, y),
0,
right_text_style,
format_fun
2021-07-09 23:53:21 -04:00
),
plot = M.initthemedScalePlot(x, y + spacing, w, h, label_fun, min_domain, update_freq),
}
end
M.annotated_scale_plot_draw_static = function(asp, cr)
Text.draw(asp.label, cr)
end
M.annotated_scale_plot_draw_dynamic = function(asp, cr)
Text.draw(asp.value, cr)
2021-07-18 23:45:16 -04:00
ScaledTimeseries.draw_dynamic(asp.plot, cr)
end
2021-07-26 23:45:54 -04:00
M.annotated_scale_plot_set = function(asp, value)
2021-07-23 00:16:18 -04:00
Text.set(asp.value, value)
ScaledTimeseries.update(asp.plot, value)
end
2021-07-19 23:58:58 -04:00
--------------------------------------------------------------------------------
-- rate timecourse plots
M.compute_derivative = function(x0, x1, update_frequency)
-- mask overflow
if x1 > x0 then
return (x1 - x0) * update_frequency
else
return 0
end
end
local build_differential = function(update_frequency)
return function(x0, x1)
-- mask overflow
if x1 > x0 then
return (x1 - x0) * update_frequency
else
return 0
end
end
end
M.build_rate_timeseries = function(x, y, w, h, format_fun, label_fun, spacing,
label, min_domain, update_freq, init)
return {
label = _left_text(F.make_point(x, y), label),
value = Text.build_formatted(
F.make_point(x + w, y),
0,
right_text_style,
2021-07-19 23:58:58 -04:00
format_fun
),
plot = M.initthemedScalePlot(x, y + spacing, w, h, label_fun, min_domain, update_freq),
2021-07-19 23:58:58 -04:00
prev_value = init,
derive = build_differential(update_freq),
}
end
2021-07-26 23:45:54 -04:00
M.update_rate_timeseries = function(obj, value)
2021-07-19 23:58:58 -04:00
local rate = obj.derive(obj.prev_value, value)
2021-07-23 00:16:18 -04:00
Text.set(obj.value, rate)
ScaledTimeseries.update(obj.plot, rate)
2021-07-19 23:58:58 -04:00
obj.prev_value = value
end
2021-07-11 23:57:56 -04:00
--------------------------------------------------------------------------------
-- arc (TODO this is just a dummy now to make everything organized
-- TODO perhaps implement this is a special case of compound dial where
-- I have multiple layers on top of each other
M.arc = function(x, y, r, thickness, pattern)
2021-07-18 19:55:59 -04:00
return Arc.build(
2021-07-18 23:45:16 -04:00
F.make_semicircle(x, y, r, 90, 360),
2021-07-24 00:55:45 -04:00
Arc.config(s.line(thickness, CAIRO_LINE_CAP_BUTT), pattern)
2021-07-11 23:57:56 -04:00
)
end
--------------------------------------------------------------------------------
-- ring
M.initRing = function(x, y, r)
2021-07-18 19:55:59 -04:00
return Arc.build(
2021-07-18 23:45:16 -04:00
F.make_semicircle(x, y, r, 0, 360),
Arc.config(s.line(ARC_WIDTH, CAIRO_LINE_CAP_BUTT), theme.BORDER_FG)
2021-07-08 22:57:35 -04:00
)
end
--------------------------------------------------------------------------------
-- ring with text data in the center
M.initTextRing = function(x, y, r, fmt, limit)
return {
ring = M.initRing(x, y, r),
2021-07-19 01:07:39 -04:00
value = ThresholdText.build_formatted(
2021-07-18 23:45:16 -04:00
F.make_point(x, y),
2021-07-19 01:37:47 -04:00
0,
2021-07-18 21:10:59 -04:00
Text.style(
normal_font_spec,
theme.PRIMARY_FG,
'center',
'center'
2021-07-10 17:13:17 -04:00
),
fmt,
ThresholdText.style(theme.CRITICAL_FG, limit)
2021-07-09 22:22:49 -04:00
),
}
end
M.text_ring_draw_static = function(tr, cr)
Arc.draw(tr.ring, cr)
end
M.text_ring_draw_dynamic = function(tr, cr)
2021-07-19 01:07:39 -04:00
ThresholdText.draw(tr.value, cr)
end
2021-07-26 23:45:54 -04:00
M.text_ring_set = function(tr, value)
2021-07-23 00:16:18 -04:00
ThresholdText.set(tr.value, value)
end
--------------------------------------------------------------------------------
2021-07-11 23:02:45 -04:00
-- dial
2021-07-11 23:57:56 -04:00
local threshold_indicator = function(threshold)
2021-07-18 23:45:16 -04:00
return F.threshold_style(
theme.INDICATOR_FG_PRIMARY,
theme.INDICATOR_FG_CRITICAL,
2021-07-11 23:57:56 -04:00
threshold
)
end
2021-07-19 21:14:38 -04:00
M.dial = function(x, y, radius, thickness, threshold, format)
return {
dial = Dial.build(
F.make_semicircle(x, y, radius, DIAL_THETA0, DIAL_THETA1),
Arc.config(s.line(thickness, CAIRO_LINE_CAP_BUTT), theme.INDICATOR_BG),
2021-07-19 21:14:38 -04:00
threshold_indicator(threshold)
),
text_ring = M.initTextRing(x, y, radius - thickness / 2 - 2, format, threshold),
}
end
2021-07-26 23:45:54 -04:00
M.dial_set = function(dl, value)
2021-07-19 21:14:38 -04:00
Dial.set(dl.dial, value)
2021-07-26 23:45:54 -04:00
M.text_ring_set(dl.text_ring, value)
2021-07-19 21:14:38 -04:00
end
M.dial_draw_static = function(dl, cr)
Dial.draw_static(dl.dial, cr)
M.text_ring_draw_static(dl.text_ring, cr)
end
M.dial_draw_dynamic = function(dl, cr)
Dial.draw_dynamic(dl.dial, cr)
M.text_ring_draw_dynamic(dl.text_ring, cr)
2021-07-11 23:02:45 -04:00
end
2021-07-11 23:10:35 -04:00
--------------------------------------------------------------------------------
-- compound dial
M.compound_dial = function(x, y, outer_radius, inner_radius, thickness,
threshold, num_dials)
2021-07-18 19:55:59 -04:00
return CompoundDial.build(
2021-07-18 23:45:16 -04:00
F.make_semicircle(x, y, outer_radius, DIAL_THETA0, DIAL_THETA1),
Arc.config(s.line(thickness, CAIRO_LINE_CAP_BUTT), theme.INDICATOR_BG),
2021-07-11 23:57:56 -04:00
threshold_indicator(threshold),
2021-07-11 23:10:35 -04:00
inner_radius,
num_dials
)
end
2021-07-11 23:57:56 -04:00
--------------------------------------------------------------------------------
-- annotated compound bar
M.compound_bar = function(x, y, w, pad, labels, spacing, thickness, threshold)
return {
2021-07-18 21:10:59 -04:00
labels = TextColumn.build(
2021-07-18 23:45:16 -04:00
F.make_point(x, y),
2021-07-11 23:57:56 -04:00
labels,
left_text_style,
2021-07-11 23:57:56 -04:00
nil,
spacing
),
2021-07-18 20:14:00 -04:00
bars = CompoundBar.build(
2021-07-18 23:45:16 -04:00
F.make_point(x + pad, y),
2021-07-11 23:57:56 -04:00
w - pad,
2021-07-24 01:29:02 -04:00
Line.config(
s.line(thickness, CAIRO_LINE_CAP_BUTT),
theme.INDICATOR_BG,
2021-07-22 01:50:15 -04:00
true
2021-07-11 23:57:56 -04:00
),
threshold_indicator(threshold),
spacing,
#labels,
false
)
}
end
M.compound_bar_draw_static = function(cb, cr)
TextColumn.draw(cb.labels, cr)
CompoundBar.draw_static(cb.bars, cr)
end
M.compound_bar_draw_dynamic = function(cb, cr)
CompoundBar.draw_dynamic(cb.bars, cr)
end
M.compound_bar_set = function(cb, i, value)
CompoundBar.set(cb.bars, i, value)
end
2021-07-11 23:02:45 -04:00
--------------------------------------------------------------------------------
-- separator (eg a horizontal line)
2021-07-11 21:11:38 -04:00
M.initSeparator = function(x, y, w)
2021-07-18 20:14:00 -04:00
return Line.build(
2021-07-18 23:45:16 -04:00
F.make_point(x, y),
F.make_point(x + w, y),
2021-07-24 01:29:02 -04:00
Line.config(
s.line(SEPARATOR_THICKNESS, CAIRO_LINE_CAP_BUTT),
theme.BORDER_FG,
2021-07-24 01:29:02 -04:00
true
2021-07-10 23:07:27 -04:00
)
)
end
--------------------------------------------------------------------------------
-- text row (label with a value, aligned as far apart as possible)
M.initTextRow = function(x, y, w, label)
return {
2021-07-18 23:45:16 -04:00
label = _left_text(F.make_point(x, y), label),
value = _right_text(F.make_point(x + w, y), nil),
}
end
M.text_row_draw_static = function(row, cr)
Text.draw(row.label, cr)
end
M.text_row_draw_dynamic = function(row, cr)
Text.draw(row.value, cr)
end
2021-07-26 23:45:54 -04:00
M.text_row_set = function(row, value)
2021-07-23 00:16:18 -04:00
Text.set(row.value, value)
end
--------------------------------------------------------------------------------
-- text row with critical indicator
2021-07-06 18:56:24 -04:00
M.initTextRowCrit = function(x, y, w, label, append_end, limit)
return{
2021-07-18 23:45:16 -04:00
label = _left_text(F.make_point(x, y), label),
2021-07-19 01:07:39 -04:00
value = ThresholdText.build_formatted(
2021-07-18 23:45:16 -04:00
F.make_point(x + w, y),
2021-07-09 22:22:49 -04:00
nil,
2021-07-18 21:10:59 -04:00
Text.style(
normal_font_spec,
theme.PRIMARY_FG,
'right',
'center'
2021-07-10 17:13:17 -04:00
),
2021-07-11 21:11:38 -04:00
append_end,
ThresholdText.style(theme.CRITICAL_FG, limit)
2021-07-09 22:22:49 -04:00
)
}
end
M.text_row_crit_draw_static = M.text_row_draw_static
M.text_row_crit_draw_dynamic = function(row, cr)
2021-07-19 01:07:39 -04:00
ThresholdText.draw(row.value, cr)
end
2021-07-26 23:45:54 -04:00
M.text_row_crit_set = function(row, value)
2021-07-23 00:16:18 -04:00
ThresholdText.set(row.value, value)
end
2021-07-11 23:57:56 -04:00
--------------------------------------------------------------------------------
-- text column
M.text_column = function(x, y, spacing, labels, x_align, color)
2021-07-18 23:45:16 -04:00
return TextColumn.build(
F.make_point(x, y),
2021-07-11 23:57:56 -04:00
labels,
_text_row_style(x_align, color),
nil,
spacing
)
end
--------------------------------------------------------------------------------
-- multiple text row separated by spacing
2021-07-11 23:57:56 -04:00
M.initTextRows_color = function(x, y, w, spacing, labels, color, format)
return {
2021-07-18 21:10:59 -04:00
labels = TextColumn.build(
2021-07-18 23:45:16 -04:00
F.make_point(x, y),
2021-07-10 17:13:17 -04:00
labels,
left_text_style,
nil,
2021-07-10 17:13:17 -04:00
spacing
2021-07-09 22:22:49 -04:00
),
2021-07-18 21:10:59 -04:00
values = TextColumn.build_n(
2021-07-18 23:45:16 -04:00
F.make_point(x + w, y),
2021-07-10 17:13:17 -04:00
#labels,
2021-07-11 23:57:56 -04:00
_text_row_style('right', color),
format,
2021-07-19 01:34:03 -04:00
spacing,
0
2021-07-09 22:22:49 -04:00
)
}
end
2021-07-18 14:38:41 -04:00
M.initTextRows_formatted = function(x, y, w, spacing, labels, format)
2021-07-11 23:57:56 -04:00
return M.initTextRows_color(
x,
y,
w,
spacing,
labels,
theme.PRIMARY_FG,
2021-07-18 14:38:41 -04:00
format
)
end
M.initTextRows = function(x, y, w, spacing, labels)
return M.initTextRows_formatted(
x,
y,
w,
spacing,
labels,
2021-07-11 23:57:56 -04:00
nil
)
end
M.text_rows_draw_static = function(rows, cr)
TextColumn.draw(rows.labels, cr)
end
M.text_rows_draw_dynamic = function(rows, cr)
TextColumn.draw(rows.values, cr)
end
2021-07-26 23:45:54 -04:00
M.text_rows_set = function(rows, i, value)
2021-07-23 00:16:18 -04:00
TextColumn.set(rows.values, i, value)
end
--------------------------------------------------------------------------------
-- table
local default_table_font_spec = make_font_spec(FONT, TABLE_FONT_SIZE, false)
2021-07-11 16:53:25 -04:00
local default_table_style = Table.style(
2021-07-24 00:32:56 -04:00
Rect.config(
s.closed_poly(TABLE_LINE_THICKNESS, CAIRO_LINE_JOIN_MITER),
theme.BORDER_FG
2021-07-11 16:53:25 -04:00
),
2021-07-24 01:29:02 -04:00
Line.config(
s.line(TABLE_LINE_THICKNESS, CAIRO_LINE_CAP_BUTT),
theme.BORDER_FG,
2021-07-24 01:29:02 -04:00
true
2021-07-11 16:53:25 -04:00
),
2021-07-24 01:29:02 -04:00
Table.header_config(
default_table_font_spec,
theme.PRIMARY_FG,
2021-07-11 21:11:38 -04:00
TABLE_HEADER_PAD
2021-07-11 16:53:25 -04:00
),
2021-07-24 01:29:02 -04:00
Table.body_config(
default_table_font_spec,
theme.INACTIVE_TEXT_FG,
2021-07-11 21:11:38 -04:00
TABLE_BODY_FORMAT
2021-07-11 16:53:25 -04:00
),
2021-07-18 23:45:16 -04:00
F.padding(
2021-07-11 21:11:38 -04:00
TABLE_HORZ_PAD,
TABLE_VERT_PAD,
TABLE_HORZ_PAD,
TABLE_VERT_PAD
)
2021-07-11 16:53:25 -04:00
)
M.initTable = function(x, y, w, h, n, labels)
2021-07-18 21:10:59 -04:00
return Table.build(
2021-07-18 23:45:16 -04:00
F.make_box(x, y, w, h),
2021-07-11 16:53:25 -04:00
n,
labels,
default_table_style
2021-07-11 16:53:25 -04:00
)
end
--------------------------------------------------------------------------------
-- panel
M.initPanel = function(x, y, w, h, thickness)
2021-07-18 20:22:30 -04:00
return FillRect.build(
2021-07-18 23:45:16 -04:00
F.make_box(x, y, w, h),
2021-07-24 00:32:56 -04:00
Rect.config(
s.closed_poly(thickness, CAIRO_LINE_JOIN_MITER),
theme.BORDER_FG
2021-07-24 00:32:56 -04:00
),
theme.PANEL_BG
2021-07-10 00:22:02 -04:00
)
end
return M