помогите привести круговые диаграммы или как их, к такому же виду как и бар занятого места на жд

вот конфиг от коньков с home
require 'cairo'
--[[Начальная функция вызываемая из Conky]]--
function conky_startlua()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(cs)
cairo_scale (cr, 1, 1)
fSimpleSkin(0, 0, 200, 45, 5, 0x555555, 0x222222, 0x000000, 0.5)
fDrawText (16, 21, 'HOME', 'ubuntu', 20, 0, 1, 0x000000, 0.8, 0)
fDrawText (15, 20, 'HOME', 'ubuntu', 20, 0, 1, 0xFFFFFF, 1, 0)
fDrawTextCenter (131, 21, conky_parse('${fs_used /home}') .. '/' .. conky_parse('${fs_size /home}'), 'ubuntu', 12, 0, 0, 0x000000, 0.8, 0)
fDrawTextCenter (130, 20, conky_parse('${fs_used /home}') .. '/' .. conky_parse('${fs_size /home}'), 'ubuntu', 12, 0, 0, 0xFFFFFF, 1, 0)
local nPerc = tonumber(conky_parse('${fs_used_perc /home}'))
fRoundRect (10, 26, 180, 13, 3)
cairo_set_line_width (cr, 3)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, 0.3))
cairo_stroke(cr)
fRoundRect (10, 26, 180, 13, 3)
cairo_set_line_width (cr, 1)
cairo_set_source_rgba(cr, fRGBtoARGB(0xffffff, 0.3))
cairo_fill(cr)
fRoundRect (10, 26, fLineScale (180, 0, 100, nPerc), 13, 3)
local nColor1 = 0x00ff00
local nColor2 = 0x009900
local nColor3 = 0x005500
if nPerc >= 50 then
nColor1 = 0xffff00
nColor2 = 0x999900
nColor3 = 0x555500
end
if nPerc >= 80 then
nColor1 = 0xff0000
nColor2 = 0x990000
nColor3 = 0x550000
end
local pLin = cairo_pattern_create_linear (10, 26, 10, 40)
cairo_pattern_add_color_stop_rgba (pLin, 0.0, fRGBtoARGB(nColor1, 1))
cairo_pattern_add_color_stop_rgba (pLin, 0.5, fRGBtoARGB(nColor2, 1))
cairo_pattern_add_color_stop_rgba (pLin, 1, fRGBtoARGB(nColor3, 1))
cairo_set_source (cr, pLin)
cairo_fill(cr)
cairo_pattern_destroy (pLin)
cairo_destroy(cr)
end
function fLineScale (nScaleLength, nScaleMin, nScaleMax, nValueScale)
if nValueScale < nScaleMin then nValueScale = nScaleMin end
if nValueScale > nScaleMax then nValueScale = nScaleMax end
nAbsScaleLength = nScaleMax - nScaleMin
nDivScale = nScaleLength/nAbsScaleLength
nAbsValueScale = (nValueScale - nScaleMin) * nDivScale
if nValueScale == nScaleMax then nAbsValueScale = nScaleLength end
return nAbsValueScale
end
function fRoundRect (nXCoord, nYCoord, nWidth, nHeight, nRadius)
cairo_move_to(cr, nXCoord+nRadius, nYCoord)
cairo_line_to(cr, nXCoord+nWidth-nRadius, nYCoord)
cairo_arc (cr, nXCoord+nWidth-nRadius, nYCoord+nRadius, nRadius, math.rad(270), math.rad(360))
cairo_line_to(cr, nXCoord+nWidth, nYCoord+nHeight-nRadius)
cairo_arc (cr, nXCoord+nWidth-nRadius, nYCoord+nHeight-nRadius, nRadius, math.rad(0), math.rad(90))
cairo_line_to(cr, nXCoord+nRadius, nYCoord+nHeight)
cairo_arc (cr, nXCoord+nRadius, nYCoord+nHeight-nRadius, nRadius, math.rad(90), math.rad(180))
cairo_line_to(cr, nXCoord, nYCoord+nRadius)
cairo_arc (cr, nXCoord+nRadius, nYCoord+nRadius, nRadius, math.rad(180), math.rad(270))
end
--[[ Подложка ]]--
function fSimpleSkin(nXSkin, nYSkin, nWidth, nHeight, nRadius, nColor1, nColor2, nColor3, nAlpha)
--nXSkin - x-координата
--nYSkin - y-координата
--nHeight - высота
--nWidth - ширина
--nRadius - радиус скругления углов
--nColor1 - начальный цвет градиентной заливки
--nColor2 - средний цвет градиентной заливки
--nColor3 - конечный цвет градиентной заливки
--nAlpha - степень прозрачности, от 0 до 1
cairo_move_to(cr, nXSkin+nRadius, nYSkin)
cairo_line_to(cr, nXSkin+nWidth-nRadius, nYSkin)
cairo_arc (cr, nXSkin+nWidth-nRadius, nYSkin+nRadius, nRadius, math.rad(270), math.rad(360))
cairo_line_to(cr, nXSkin+nWidth, nYSkin+nHeight-nRadius)
cairo_arc (cr, nXSkin+nWidth-nRadius, nYSkin+nHeight-nRadius, nRadius, math.rad(0), math.rad(90))
cairo_line_to(cr, nXSkin+nRadius, nYSkin+nHeight)
cairo_arc (cr, nXSkin+nRadius, nYSkin+nHeight-nRadius, nRadius, math.rad(90), math.rad(180))
cairo_line_to(cr, nXSkin, nYSkin+nRadius)
cairo_arc (cr, nXSkin+nRadius, nYSkin+nRadius, nRadius, math.rad(180), math.rad(270))
local pPath=cairo_copy_path (cr)
local pLin = cairo_pattern_create_linear (nXSkin, nYSkin, nWidth,nYSkin+nHeight)
cairo_pattern_add_color_stop_rgba (pLin, 0.0, ((nColor1 / 0x10000) % 0x100) / 255, ((nColor1 / 0x100) % 0x100) / 255, (nColor1 % 0x100) / 255, nAlpha)
cairo_pattern_add_color_stop_rgba (pLin, 0.6, ((nColor2 / 0x10000) % 0x100) / 255, ((nColor2 / 0x100) % 0x100) / 255, (nColor2 % 0x100) / 255, nAlpha)
cairo_pattern_add_color_stop_rgba (pLin, 1, ((nColor3 / 0x10000) % 0x100) / 255, ((nColor3 / 0x100) % 0x100) / 255, (nColor3 % 0x100) / 255, nAlpha)
cairo_set_source (cr, pLin)
cairo_fill (cr)
cairo_append_path(cr, pPath)
cairo_set_source_rgba(cr, fRGBtoARGB(nColor3, 0.5))
cairo_set_line_width (cr, 0.3)
cairo_stroke(cr)
end
--[[Функция перевода цвета из RGB в ARGB]]--
function fRGBtoARGB (nColor, nAlpha)
-- nColor - цвет RGB (0x000000)
-- nAlpha - степень прозрачности, от 0 до 1
return ((nColor / 0x10000) % 0x100) / 255., ((nColor / 0x100) % 0x100) / 255., (nColor % 0x100) / 255., nAlpha
end
--[[Функция вывода текста]]--
function fDrawText (nXCoord, nYCoord, sText, sFontName, sFontSize, nFontSlant, nFontWeight, nColor, nAlpha, nRotate)
-- nXCoord, nYCoord - координаты для вывода
-- sText - отображаемый текст
-- sFontName - название шрифта
-- sFontSize - размер шрифта
-- nFontSlant - стиль шрифта (0 - normal, 1 - italic, 2 - oblique)
-- nFontWeight - толщина шрифта (0 - normal, 1 - bold)
-- nColor - цвет шрифта в формате 0×000000
-- nAlpha - степень прозрачности, от 0 до 1
-- nRotate - угол поворота
cairo_select_font_face (cr, sFontName, nFontSlant, nFontWeight)
cairo_set_font_size (cr, sFontSize)
cairo_move_to (cr, nXCoord, nYCoord)
cairo_set_source_rgba(cr, fRGBtoARGB (nColor, nAlpha))
cairo_rotate (cr, nRotate*math.pi/180)
cairo_show_text(cr, sText)
cairo_rotate (cr, (0-nRotate)*math.pi/180)
end
--[[Функция вывода текста с выравниванием по центру]]--
function fDrawTextCenter (nXCenter, nYCenter, sText, sFontName, sFontSize, nFontSlant, nFontWeight, nColor, nAlpha, nRotate)
-- nXCenter, nYCenter - координаты центра для вывода
-- sText - отображаемый текст
-- sFontName - название шрифта
-- sFontSize - размер шрифта
-- nFontSlant - стиль шрифта (0 - normal, 1 - italic, 2 - oblique)
-- nFontWeight - толщина шрифта (0 - normal, 1 - bold)
-- nColor - цвет шрифта в формате 0×000000
-- nAlpha - степень прозрачности, от 0 до 1
-- nRotate - угол поворота
local extents = cairo_text_extents_t:create()
cairo_select_font_face (cr, sFontName, nFontSlant, nFontWeight)
cairo_set_font_size (cr, sFontSize)
cairo_text_extents (cr, sText, extents)
local nXSpace = nXCenter-(extents.width/2)-- + extents.x_bearing)
local nYSpace = nYCenter
cairo_move_to (cr, nXSpace, nYSpace)
cairo_set_source_rgba(cr, fRGBtoARGB (nColor, nAlpha))
cairo_rotate (cr, nRotate*math.pi/180)
cairo_show_text(cr, sText)
cairo_rotate (cr, (0-nRotate)*math.pi/180)
end
и вот конфиг с cpu
require 'cairo'
--[[Начальная функция вызываемая из Conky]]--
function conky_startlua()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(cs)
cairo_scale (cr, 1, 1)
--fSimpleSkin(0, 0, 200, 200, 5, 0x555555, 0x222222, 0x000000, 0.5)
cairo_arc (cr, 70, 70, 70, math.rad(0), math.rad(360))
local pLin = cairo_pattern_create_linear (0, 0, 140, 140)
cairo_pattern_add_color_stop_rgba (pLin, 0.0, ((0x555555 / 0x10000) % 0x100) / 255, ((0x555555 / 0x100) % 0x100) / 255, (0x555555 % 0x100) / 255, 0.5)
cairo_pattern_add_color_stop_rgba (pLin, 0.6, ((0x222222 / 0x10000) % 0x100) / 255, ((0x222222 / 0x100) % 0x100) / 255, (0x222222 % 0x100) / 255, 0.5)
cairo_pattern_add_color_stop_rgba (pLin, 1, ((0x000000 / 0x10000) % 0x100) / 255, ((0x000000 / 0x100) % 0x100) / 255, (0x000000 % 0x100) / 255, 0.5)
cairo_set_source (cr, pLin)
cairo_fill(cr)
fDrawTextCenter (71, 66, 'CPU', 'ubuntu', 28, 0, 1, 0x000000, 0.8, 0)
fDrawTextCenter (70, 65, 'CPU', 'ubuntu', 28, 0, 1, 0xFFFFFF, 1, 0)
fDrawTextCenter (71, 96, tonumber(conky_parse('${cpu cpu0}')) .. ' %', 'ubuntu', 20, 0, 0, 0x000000, 0.8, 0)
fDrawTextCenter (70, 95, tonumber(conky_parse('${cpu cpu0}')) .. ' %', 'ubuntu', 20, 0, 0, 0xFFFFFF, 1, 0)
fDrawTextCenter (70, 115, conky_parse('${hwmon temp 1}') .. '°C', 'ubuntu', 12, 0, 0, 0x000000, 0.8, 0)
fDrawTextCenter (70, 115, conky_parse('${hwmon temp 1}') .. '°C', 'ubuntu', 12, 0, 0, 0xFFFFFF, 1, 0)
fRoundIndicator(tonumber(conky_parse('${cpu cpu0}')), 0xFFFFFF, 1)
cairo_destroy(cr)
end
--[[ Подложка ]]--
function fSimpleSkin(nXSkin, nYSkin, nWidth, nHeight, nRadius, nColor1, nColor2, nColor3, nAlpha)
--nXSkin - x-координата
--nYSkin - y-координата
--nHeight - высота
--nWidth - ширина
--nRadius - радиус скругления углов
--nColor1 - начальный цвет градиентной заливки
--nColor2 - средний цвет градиентной заливки
--nColor3 - конечный цвет градиентной заливки
--nAlpha - степень прозрачности, от 0 до 1
cairo_move_to(cr, nXSkin+nRadius, nYSkin)
cairo_line_to(cr, nXSkin+nWidth-nRadius, nYSkin)
cairo_arc (cr, nXSkin+nWidth-nRadius, nYSkin+nRadius, nRadius, math.rad(270), math.rad(360))
cairo_line_to(cr, nXSkin+nWidth, nYSkin+nHeight-nRadius)
cairo_arc (cr, nXSkin+nWidth-nRadius, nYSkin+nHeight-nRadius, nRadius, math.rad(0), math.rad(90))
cairo_line_to(cr, nXSkin+nRadius, nYSkin+nHeight)
cairo_arc (cr, nXSkin+nRadius, nYSkin+nHeight-nRadius, nRadius, math.rad(90), math.rad(180))
cairo_line_to(cr, nXSkin, nYSkin+nRadius)
cairo_arc (cr, nXSkin+nRadius, nYSkin+nRadius, nRadius, math.rad(180), math.rad(270))
local pPath=cairo_copy_path (cr)
local pLin = cairo_pattern_create_linear (nXSkin, nYSkin, nWidth,nYSkin+nHeight)
cairo_pattern_add_color_stop_rgba (pLin, 0.0, ((nColor1 / 0x10000) % 0x100) / 255, ((nColor1 / 0x100) % 0x100) / 255, (nColor1 % 0x100) / 255, nAlpha)
cairo_pattern_add_color_stop_rgba (pLin, 0.6, ((nColor2 / 0x10000) % 0x100) / 255, ((nColor2 / 0x100) % 0x100) / 255, (nColor2 % 0x100) / 255, nAlpha)
cairo_pattern_add_color_stop_rgba (pLin, 1, ((nColor3 / 0x10000) % 0x100) / 255, ((nColor3 / 0x100) % 0x100) / 255, (nColor3 % 0x100) / 255, nAlpha)
cairo_set_source (cr, pLin)
cairo_fill (cr)
cairo_append_path(cr, pPath)
cairo_set_source_rgba(cr, fRGBtoARGB(nColor3, 0.5))
cairo_set_line_width (cr, 0.3)
cairo_stroke(cr)
end
--[[Функция перевода цвета из RGB в ARGB]]--
function fRGBtoARGB (nColor, nAlpha)
-- nColor - цвет RGB (0x000000)
-- nAlpha - степень прозрачности, от 0 до 1
return ((nColor / 0x10000) % 0x100) / 255., ((nColor / 0x100) % 0x100) / 255., (nColor % 0x100) / 255., nAlpha
end
--[[Функция вывода текста с выравниванием по центру]]--
function fDrawTextCenter (nXCenter, nYCenter, sText, sFontName, sFontSize, nFontSlant, nFontWeight, nColor, nAlpha, nRotate)
-- nXCenter, nYCenter - координаты центра для вывода
-- sText - отображаемый текст
-- sFontName - название шрифта
-- sFontSize - размер шрифта
-- nFontSlant - стиль шрифта (0 - normal, 1 - italic, 2 - oblique)
-- nFontWeight - толщина шрифта (0 - normal, 1 - bold)
-- nColor - цвет шрифта в формате 0×000000
-- nAlpha - степень прозрачности, от 0 до 1
-- nRotate - угол поворота
local extents = cairo_text_extents_t:create()
cairo_select_font_face (cr, sFontName, nFontSlant, nFontWeight)
cairo_set_font_size (cr, sFontSize)
cairo_text_extents (cr, sText, extents)
local nXSpace = nXCenter-(extents.width/2)-- + extents.x_bearing)
local nYSpace = nYCenter
cairo_move_to (cr, nXSpace, nYSpace)
cairo_set_source_rgba(cr, fRGBtoARGB (nColor, nAlpha))
cairo_rotate (cr, nRotate*math.pi/180)
cairo_show_text(cr, sText)
cairo_rotate (cr, (0-nRotate)*math.pi/180)
end
--[[ функция отрисовки дуги ]]--
function fArc(nXCoord, nYCoord, nRadius, noDegrees, nDegrees, nColor, nAlpha, nWidthLine)
-- nXCoord, nYCoord - координаты центра дуги
-- nRadius - радиус дуги
-- noDegrees - начальный радиус
-- nDegrees - конечный радиус
-- nColor - цвет линии в формате 0×000000
-- nAlpha - степень прозрачности, от 0 до 1
-- nWidthLine - толщина линии
cairo_set_source_rgba(cr, fRGBtoARGB(nColor, nAlpha))
cairo_set_line_width (cr, nWidthLine)
cairo_move_to(cr, nXCoord, nYCoord)
cairo_new_sub_path(cr)
cairo_arc (cr, nXCoord, nYCoord, nRadius, math.rad(noDegrees), math.rad(nDegrees))
cairo_stroke(cr)
end
--[[ функция расчета значения по шкале ]]--
function fScale (nScaleLength, nScaleMin, nScaleMax, nValueScale)
-- nScaleLength - длина шкалы
-- nScaleMin - минимальное значение шкалы
-- nScaleMax - максимальное значение шкалы
-- nValueScale - текущее значение по шкале
if nValueScale < nScaleMin then nValueScale = nScaleMin end
if nValueScale > nScaleMax then nValueScale = nScaleMax end
nAbsScaleLength = nScaleMax - nScaleMin
nDivScale = nScaleLength/nAbsScaleLength
nAbsValueScale = (nValueScale - nScaleMin) * nDivScale
if nValueScale == nScaleMax then nAbsValueScale = nScaleLength end
return nAbsValueScale
end
function fRoundIndicator(nValue, nColor, nAlpha)
-- sLabel - подпись
-- nValue - значение для индикатора
-- sLabelValue - значение для подписи
-- sFont - шрифт
-- nColor - цвет индикатора в формате 0×000000
-- nAlpha - степень прозрачности, от 0 до 1
if nValue == nil then nValue = 0 end
--fArc(70, 70, 62, 0, 360, 0x000000, 0.6, 13)
fArc(70, 70, 63, 0, 360, nColor, 0.2, 12)
fArc(70, 70, 63, 270, 270+fScale (360, 0, 100, nValue), nColor, nAlpha, 12)
end
просто с круговой никак не могу разобраться(
как ее сделать такой же трехцветной и чтоб выглядела объемно