Advertisement
lswest

ring-mpd.lua

May 6th, 2013
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.39 KB | None | 0 0
  1. -- Change these settings to affect your background.
  2. -- "corner_r" is the radius, in pixels, of the rounded corners. If you don't want rounded corners, use 0.
  3. corner_r=35
  4. -- Set the colour and transparency (alpha) of your background.
  5. bg_colour=0x000000
  6. bg_alpha=0.4
  7.  
  8. settings_table = {
  9.     {
  10.         name='mpd_percent',
  11.         arg='',
  12.         max=100,
  13.         bg_colour=0xffffff,
  14.         bg_alpha=0.2,
  15.         fg_colour=0xffffff,
  16.         fg_alpha=0.7,
  17.         x=70, y=90,
  18.         radius=60,
  19.         thickness=7,
  20.         start_angle=0,
  21.         end_angle=360
  22.     },
  23. }
  24. require 'cairo'
  25.  
  26. function conky_my_flag(my_arg)
  27.     flag = my_arg
  28.     return ""
  29. end
  30.  
  31. function rgb_to_r_g_b(colour,alpha)
  32.     return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
  33. end
  34.  
  35. function draw_ring(cr,t,pt)
  36.     local w,h=conky_window.width,conky_window.height
  37.     local port=pt['max']
  38.     local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
  39.     local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
  40.  
  41.     local arc_w = 2*math.pi/port -- Sets width of arc to 1/"max"nth of a circle
  42.     local angle_0 = sa*(2*math.pi/360)-math.pi/2 -- Converts the starting angle to radians & translates to starting from the top
  43.     local angle_f = ea*(2*math.pi/360)-math.pi/2
  44.     local t_arc = angle_0 + t*2*math.pi -- Converts the percentage to a part of 2*pi radians & adds the starting angle
  45.  
  46.     -- Draw background ring
  47.     cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
  48.     cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
  49.     cairo_set_line_width(cr,ring_w)
  50.     cairo_stroke(cr)
  51.     -- Draw indicator ring
  52.     cairo_arc(cr, xc, yc, ring_r, angle_0, t_arc+arc_w)
  53.     cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
  54.     cairo_stroke(cr)
  55. end
  56. function conky_ring_stats()
  57.     local function setup_rings(cr,pt)
  58.         local str=''
  59.         local value=0
  60.  
  61.         str=string.format('${%s %s}',pt['name'],pt['arg'])
  62.         str=conky_parse(str)
  63.         value=tonumber(str)
  64.         pct=value/pt['max']
  65.     draw_ring(cr,pct,pt)
  66.     end
  67.     local function draw_bg()
  68.         if conky_window==nil then return end
  69.         local w=conky_window.width
  70.         local h=conky_window.height
  71.         local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, w, h)
  72.         cr=cairo_create(cs)
  73.        
  74.         cairo_move_to(cr,corner_r,0)
  75.         cairo_line_to(cr,w-corner_r,0)
  76.         cairo_curve_to(cr,w,0,w,0,w,corner_r)
  77.         cairo_line_to(cr,w,h-corner_r)
  78.         cairo_curve_to(cr,w,h,w,h,w-corner_r,h)
  79.         cairo_line_to(cr,corner_r,h)
  80.         cairo_curve_to(cr,0,h,0,h,0,h-corner_r)
  81.         cairo_line_to(cr,0,corner_r)
  82.         cairo_curve_to(cr,0,0,0,0,corner_r,0)
  83.         cairo_close_path(cr)
  84.        
  85.         cairo_set_source_rgba(cr,rgb_to_r_g_b(bg_colour,bg_alpha))
  86.         cairo_fill(cr)
  87.     end
  88.  
  89.     if conky_window==nil then return end
  90.     local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
  91.  
  92.     local cr=cairo_create(cs)
  93. if tonumber(flag) == 1 then
  94.     local updates=conky_parse('${updates}')
  95.     update_num=tonumber(updates)
  96.  
  97.     if update_num>5 then
  98.         for i in pairs(settings_table) do
  99.             draw_bg()
  100.             setup_rings(cr,settings_table[i])
  101.         end
  102.     end
  103. end
  104. cairo_destroy(cr)
  105. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement