Gradient/ru

Введение
Наши глаза воспринимают графическую информацию намного быстрее, чем цифровую. Следующие две функции позволяют вам конвертировать цифровые данне в шестнадцатеричный цветовой графдиент, функции получают 3 значения {min, val, max} с отношением : min <= val <= max. Актуальный цветовой градиент выглядит так:

Градиент
Следующая функция преобразует значение между min и max в шестнадцатиричное значение цвета. function gradient(min, max, val) if (val > max) then val = max end if (val < min) then val = min end

local v = val - min local d = (max - min) * 0.5 local red, green

if (v <= d) then red = (255 * v) / d   green = 255 else red = 255 green = 255 - (255 * (v-d)) / (max - min - d) end

return string.format("#%02x%02x00", red, green) end

Пример
Следующий пример показывает температуру ядра процессора в цветовом градиенте, используя библиотеку Wicked. --

Градиент 2
Следующая функция не ограничивается градиентом от зеленого до красного. Ана работает также как и обычный градиент, но вы можете определить начальный и конечный цвета.

function gradient(color, to_color, min, max, value) local function color2dec(c) return tonumber(c:sub(2,3),16), tonumber(c:sub(4,5),16), tonumber(c:sub(6,7),16) end

local factor = 0 if (value >= max ) then factor = 1 elseif (value > min ) then factor = (value - min) / (max - min) end

local red, green, blue = color2dec(color) local to_red, to_green, to_blue = color2dec(to_color)

red  = red   + (factor * (to_red   - red)) green = green + (factor * (to_green - green)) blue = blue  + (factor * (to_blue  - blue))

-- dec2color return string.format("#%02x%02x%02x", red, green, blue) end

Пример
Здесь мы расчитываем цвет между белым и черным. (Т.е. получаем градации серого) > = print(gradient("#000000","#ffffff",0,100,50))
 * 1) 7f7f7f

Этот сложный пример взят из библиотеки vicious/ru. Он показывает все ядра вашего процессора cpu1%/cpu2%/cpuX%. Если использование ядра выше 50%, функция градиента начинает подсвечивать его. Выбранные цвета оптимизированны для темы по умолчанию. Если нужно, отредактируйти под свои нужды. local cpuwidget = widget({ type = "textbox" })

vicious.register(cpuwidget, vicious.widgets.cpu, function (widget, args) local text  -- список только реально существующих ядер(без виртуальных)  for i=1,#args do    -- Предупреждение, если система перегружена    if args[i] > 50 then      -- от светло зеленого до светло красного      local color = gradient("#AECF96","#FF5656",50,100,args[i])      args[i] = string.format(" %s ", color, args[i])    end

-- Добавляем в список if i > 2 then text = text.."/"..args[i].."%" else text = args[i].."%" end end

return text end )