Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.88 KB | None | 0 0
  1. settings_table = {
  2. {
  3.         name='time',
  4.         arg='%M.%S',
  5.         max=60,
  6.         bg_colour=0xAAAAAA,
  7.         bg_alpha=0.2,
  8.         fg_colour=0xAAAAAA,
  9.         fg_alpha=0.4,
  10.         x=100, y=120,
  11.         radius=56,
  12.         thickness=5,
  13.         start_angle=0,
  14.         end_angle=360
  15.     },
  16.     {
  17.         name='time',
  18.         arg='%S',
  19.         max=60,
  20.         bg_colour=0xAAAAAA,
  21.         bg_alpha=0.2,
  22.         fg_colour=0xAAAAAA,
  23.         fg_alpha=0.6,
  24.         x=100, y=120,
  25.         radius=62,
  26.         thickness=5,
  27.         start_angle=0,
  28.         end_angle=360
  29.     },
  30.     {
  31.         name='time',
  32.         arg='%d',
  33.         max=31,
  34.         bg_colour=0xAAAAAA,
  35.         bg_alpha=0.2,
  36.         fg_colour=0xAAAAAA,
  37.         fg_alpha=0.8,
  38.         x=100, y=120,
  39.         radius=70,
  40.         thickness=5,
  41.         start_angle=-90,
  42.         end_angle=90
  43.     },
  44.     {
  45.         name='time',
  46.         arg='%m',
  47.         max=12,
  48.         bg_colour=0xAAAAAA,
  49.         bg_alpha=0.2,
  50.         fg_colour=0xAAAAAA,
  51.         fg_alpha=1,
  52.         x=100, y=120,
  53.         radius=76,
  54.         thickness=5,
  55.         start_angle=-90,
  56.         end_angle=90
  57.     },
  58.     {
  59.         name='time',
  60.         arg='%w',
  61.         max=6,
  62.         bg_colour=0xAAAAAA,
  63.         bg_alpha=0.2,
  64.         fg_colour=0xAAAAAA,
  65.         fg_alpha=0.8,
  66.         x=100, y=120,
  67.         radius=70,
  68.         thickness=5,
  69.         start_angle=90,
  70.         end_angle=270
  71.     },
  72.     {
  73.         name='time',
  74.         arg='%U',
  75.         max=52,
  76.         bg_colour=0xAAAAAA,
  77.         bg_alpha=0.2,
  78.         fg_colour=0xAAAAAA,
  79.         fg_alpha=1,
  80.         x=100, y=120,
  81.         radius=76,
  82.         thickness=5,
  83.         start_angle=90,
  84.         end_angle=270
  85.     },
  86. }
  87.  
  88.  
  89. -- Use these settings to define the origin and extent of your clock.
  90.  
  91. clock_r=100
  92.  
  93. -- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.
  94.  
  95. clock_x=100
  96. clock_y=120
  97.  
  98. show_seconds=true
  99.  
  100. require 'cairo'
  101.  
  102. function rgb_to_r_g_b(colour,alpha)
  103.     return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
  104. end
  105.  
  106. function draw_ring(cr,t,pt)
  107.     local w,h=conky_window.width,conky_window.height
  108.    
  109.     local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
  110.     local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
  111.  
  112.     local angle_0=sa*(2*math.pi/360)-math.pi/2
  113.     local angle_f=ea*(2*math.pi/360)-math.pi/2
  114.     local t_arc=t*(angle_f-angle_0)
  115.  
  116.     -- Draw background ring
  117.  
  118.     cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
  119.     cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
  120.     cairo_set_line_width(cr,ring_w)
  121.     cairo_stroke(cr)
  122.    
  123.     -- Draw indicator ring
  124.  
  125.     cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
  126.     cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
  127.     cairo_stroke(cr)        
  128. end
  129.  
  130.  
  131. function draw_clock_hands(cr,xc,yc)
  132.     local secs,mins,hours,secs_arc,mins_arc,hours_arc
  133.     local xh,yh,xm,ym,xs,ys
  134.    
  135.     secs=os.date("%S")    
  136.     mins=os.date("%M")
  137.     hours=os.date("%I")
  138.        
  139.     secs_arc=(2*math.pi/60)*secs
  140.     mins_arc=(2*math.pi/60)*mins+secs_arc/60
  141.     hours_arc=(2*math.pi/12)*hours+mins_arc/12
  142.        
  143.     -- Draw hour hand
  144.    
  145.     xh=xc+0.7*clock_r*math.sin(hours_arc)
  146.     yh=yc-0.7*clock_r*math.cos(hours_arc)
  147.     cairo_move_to(cr,xc,yc)
  148.     cairo_line_to(cr,xh,yh)
  149.    
  150.     cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
  151.     cairo_set_line_width(cr,5)
  152.     cairo_set_source_rgba(cr,0.7,0.7,0.7,0.4)
  153.     cairo_stroke(cr)
  154.    
  155.     -- Draw minute hand
  156.    
  157.     xm=xc+clock_r*math.sin(mins_arc)
  158.     ym=yc-clock_r*math.cos(mins_arc)
  159.     cairo_move_to(cr,xc,yc)
  160.     cairo_line_to(cr,xm,ym)
  161.    
  162.     cairo_set_line_width(cr,3)
  163.     cairo_stroke(cr)
  164.    
  165.     -- Draw seconds hand
  166.    
  167.     if show_seconds then
  168.         xs=xc+clock_r*math.sin(secs_arc)
  169.         ys=yc-clock_r*math.cos(secs_arc)
  170.         cairo_move_to(cr,xc,yc)
  171.         cairo_line_to(cr,xs,ys)
  172.    
  173.         cairo_set_line_width(cr,1)
  174.         cairo_stroke(cr)
  175.     end
  176.  
  177.     cairo_destroy(cr)
  178.     cairo_surface_destroy(cs)
  179. end
  180.  
  181.  
  182.  
  183. function conky_ring_stats()
  184.     local function setup_rings(cr,pt)
  185.         local str=''
  186.         local value=0
  187.        
  188.         str=string.format('${%s %s}',pt['name'],pt['arg'])
  189.         str=conky_parse(str)
  190.        
  191.         value=tonumber(str)
  192.         pct=value/pt['max']
  193.        
  194.         draw_ring(cr,pct,pt)
  195.     end
  196.  
  197.  
  198.     if conky_window==nil then return end
  199.     local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
  200.    
  201.     local cr=cairo_create(cs)  
  202.    
  203.     local updates=conky_parse('${updates}')
  204.     update_num=tonumber(updates)
  205.    
  206.     if update_num>5 then
  207.         for i in pairs(settings_table) do
  208.             setup_rings(cr,settings_table[i])
  209.         end
  210.     end
  211.     draw_clock_hands(cr,clock_x,clock_y)
  212. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement