diff options
Diffstat (limited to 'widgets/hourly.lua')
| -rw-r--r-- | widgets/hourly.lua | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/widgets/hourly.lua b/widgets/hourly.lua index 9566823..82f7585 100644 --- a/widgets/hourly.lua +++ b/widgets/hourly.lua @@ -12,8 +12,8 @@ local M = {} -- The band, top to bottom: glyph line, temperature line, curve, hour line. -- Every third hour is labelled; all 24 shape the curve. local function draw_curve(cr, x, y, w, h, colors, hours, S) - local n = #hours - local label = math.max(9, math.min(S * 0.30, h * 0.11)) + local n = math.min(#hours, 24) + local label = math.max(9, math.min(h * 0.11, w / 8 * 0.22)) local glyph = label * 1.5 local slot = w / n local function px(i) return x + (i - 0.5) * slot end @@ -22,7 +22,8 @@ local function draw_curve(cr, x, y, w, h, colors, hours, S) if base - top < label * 2 then return end -- no room: no curve beats a broken one local lo, hi = math.huge, -math.huge - for _, hr in ipairs(hours) do + for i = 1, n do + local hr = hours[i] if hr.temp then lo, hi = math.min(lo, hr.temp), math.max(hi, hr.temp) end end if lo > hi then return end @@ -31,10 +32,11 @@ local function draw_curve(cr, x, y, w, h, colors, hours, S) local function py(t) return base - (base - top) * (0.15 + 0.7 * (t - lo) / span) end -- Rain chance as bars rising from the baseline, under the curve. - card.rgba(cr, colors.rule, 0.5) - for i, hr in ipairs(hours) do - if hr.precip and hr.precip > 0 then - local bh = (base - top) * 0.5 * hr.precip / 100 + card.rgba(cr, colors.value, 0.3) + for i = 1, n do + local p = math.min(hours[i].precip or 0, 100) + if p > 0 then + local bh = (base - top) * 0.5 * p / 100 cairo_rectangle(cr, px(i) - slot * 0.3, base - bh, slot * 0.6, bh) end end @@ -50,7 +52,8 @@ local function draw_curve(cr, x, y, w, h, colors, hours, S) card.rgba(cr, colors.highlight) cairo_set_line_width(cr, math.max(1.5, label * 0.15)) local pen = false - for i, hr in ipairs(hours) do + for i = 1, n do + local hr = hours[i] if hr.temp then if pen then cairo_line_to(cr, px(i), py(hr.temp)) else cairo_move_to(cr, px(i), py(hr.temp)) end @@ -71,7 +74,7 @@ local function draw_curve(cr, x, y, w, h, colors, hours, S) card.text_centre(cr, px(i), y + glyph + label * 1.3, weather.deg(hr.temp)) card.rgba(cr, colors.label) card.text_centre(cr, px(i), y + h - label * 0.2, - hr.t and os.date('%H', hr.t) or '--') + weather.clock(hr.t, '%H')) end end @@ -85,7 +88,7 @@ function M.draw(cr, rect, colors) -- hours[1] is the current hour, so the big value is the one after it. local y, S = card.standard(cr, inner, colors, { icon = card.ICON.hourly, title = 'NEXT 24H', - big = weather.deg((w.hours[2] or {}).temp), share = 0.3, + big = weather.deg((w.hours[2] or {}).temp), share = 0.4, }) draw_curve(cr, inner.x, y, inner.w, inner.y + inner.h - y, colors, w.hours, S) end |
