Advertisement
Guest User

Untitled

a guest
Jun 17th, 2011
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.58 KB | None | 0 0
  1. settings_table = {
  2. {
  3. -- В этом разделе редактируются выводимые кольца
  4. -- "name" название элемента, в данном случае выводим часы
  5. name='time',
  6. -- "arg" название элемента который выводим, в данном случае часовое кольцо
  7. arg='%I.%M',
  8. -- "max" максимальное значение выводимого элемента
  9. max=12,
  10. -- "bg_colour" цвет фона
  11. bg_colour=0x006fff,
  12. -- "bg_alpha" прозрачность фона
  13. bg_alpha=0.2,
  14. -- "fg_colour" основной цвет
  15. fg_colour=0x006fff,
  16. -- "fg_alpha" прозрачность основного цвета
  17. fg_alpha=0.8,
  18. -- "x" and "y" координаты центра кольца
  19. x=155, y=350,
  20. -- "radius" радиус кольца
  21. radius=90,
  22. -- "thickness" толщина кольца
  23. thickness=1,
  24. -- "start_angle" с какого значения начинается вывод кольца
  25. start_angle=0,
  26. -- "end_angle" на каком значении заканчивается вывод кольца
  27. end_angle=360
  28. },
  29. {
  30. name='time',
  31. -- минутное кольцо
  32. arg='%M.%S',
  33. max=60,
  34. bg_colour=0x006fff,
  35. bg_alpha=0.2,
  36. fg_colour=0x006fff,
  37. fg_alpha=0.8,
  38. x=155, y=350,
  39. radius=125,
  40. thickness=1,
  41. start_angle=0,
  42. end_angle=360
  43. },
  44. {
  45. name='time',
  46. -- секундное кольцо
  47. arg='%S',
  48. max=60,
  49. bg_colour=0x006ff0,
  50. bg_alpha=0.2,
  51. fg_colour=0x006ff0,
  52. fg_alpha=0.8,
  53. x=155, y=350,
  54. radius=137,
  55. thickness=1,
  56. start_angle=0,
  57. end_angle=360
  58. },
  59. }
  60.  
  61. -- радиус часов, задается по длине минутной стрелки
  62. clock_r=260
  63.  
  64. -- "clock_x" and "clock_y" координаты центра часов, должен совпадать с центром колец
  65. clock_x=355
  66. clock_y=490
  67.  
  68. -- цвет и прозрачность стрелок часов
  69. hour_colour=0x006fff
  70. minute_colour=0x006fff
  71. second_colour=0x006fff
  72. clock_alpha=0.6
  73.  
  74. -- показывать секундную стрелку?
  75. show_seconds=true
  76.  
  77. -- далее следует программа на языке cairo, которое это все и выводит в окно conky
  78.  
  79. require 'cairo'
  80.  
  81. function rgb_to_r_g_b(colour,alpha)
  82. return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
  83. end
  84.  
  85. function draw_ring(cr,t,pt)
  86. local w,h=conky_window.width,conky_window.height
  87.  
  88. local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
  89. local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
  90.  
  91. local angle_0=sa*(2*math.pi/360)-math.pi/2
  92. local angle_f=ea*(2*math.pi/360)-math.pi/2
  93. local t_arc=t*(angle_f-angle_0)
  94.  
  95. -- загрузка фона кольца
  96.  
  97. cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
  98. cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
  99. cairo_set_line_width(cr,ring_w)
  100. cairo_stroke(cr)
  101.  
  102. -- загрузка кольца
  103.  
  104. cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
  105. cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
  106. cairo_stroke(cr)
  107. end
  108.  
  109. function conky_ring_stats()
  110. local function setup_rings(cr,pt)
  111. local str=''
  112. local value=0
  113.  
  114. str=string.format('${%s %s}',pt['name'],pt['arg'])
  115. str=conky_parse(str)
  116.  
  117. value=tonumber(str)
  118. if value == nil then value = 0 end
  119. pct=value/pt['max']
  120.  
  121. draw_ring(cr,pct,pt)
  122. end
  123.  
  124. if conky_window==nil then return end
  125. local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
  126.  
  127. local cr=cairo_create(cs)
  128.  
  129. local updates=conky_parse('${updates}')
  130. update_num=tonumber(updates)
  131.  
  132. if update_num>5 then
  133. for i in pairs(settings_table) do
  134. setup_rings(cr,settings_table[i])
  135. end
  136. end
  137. end
  138.  
  139. function draw_clock_hands(cr,xc,yc)
  140. local secs,mins,hours,secs_arc,mins_arc,hours_arc
  141. local xh,yh,xm,ym,xs,ys
  142.  
  143. secs=os.date("%S")
  144. mins=os.date("%M")
  145. hours=os.date("%I")
  146.  
  147. secs_arc=(2*math.pi/60)*secs
  148. mins_arc=(2*math.pi/60)*mins+secs_arc/60
  149. hours_arc=(2*math.pi/12)*hours+mins_arc/12
  150.  
  151. -- вывод часовой стрелки
  152. -- изменение yh изменяет длину часовой стрелки относительно минутной
  153.  
  154. xh=xc+1*clock_r*math.sin(hours_arc)
  155. yh=yc-1*clock_r*math.cos(hours_arc)
  156. --[[cairo_move_to(cr,xc,yc)
  157. cairo_line_to(cr,xh,yh)
  158.  
  159. cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
  160. cairo_set_line_width(cr,5)
  161. cairo_set_source_rgba(cr,rgb_to_r_g_b(hour_colour,clock_alpha))
  162. cairo_stroke(cr)]]
  163.  
  164. cairo_set_source_rgba(cr,rgb_to_r_g_b(0x000000,1))
  165. cairo_arc (cr, xh, yh, 25, 0 , 6.4)
  166. cairo_set_line_width(cr,50)
  167. cairo_stroke(cr)
  168.  
  169.  
  170.  
  171. -- вывод минутной стрелки
  172.  
  173.  
  174. xm=xc+clock_r*math.sin(mins_arc)
  175. ym=yc-clock_r*math.cos(mins_arc)
  176. --[[cairo_move_to(cr,xc,yc)
  177. cairo_line_to(cr,xm,ym)
  178.  
  179. cairo_set_line_width(cr,3)
  180. cairo_set_source_rgba(cr,rgb_to_r_g_b(minute_colour,clock_alpha))
  181. cairo_stroke(cr)]]
  182.  
  183. --Электрон
  184. cairo_set_source_rgba(cr,rgb_to_r_g_b(0x000000,1))
  185. cairo_arc (cr, xm, ym, 25, 0 , 6.4)
  186. cairo_set_line_width(cr,45)
  187. cairo_stroke(cr)
  188.  
  189. -- вывод секундной стрелки
  190. -- изменение ys изменяет длину секундной стрелки относительно минутной
  191.  
  192. --if show_seconds then
  193. if false then
  194. xs=xc+1.1*clock_r*math.sin(secs_arc)
  195. ys=yc-1.1*clock_r*math.cos(secs_arc)
  196. cairo_move_to(cr,xc,yc)
  197. cairo_line_to(cr,xs,ys)
  198.  
  199. cairo_set_line_width(cr,1)
  200. cairo_set_source_rgba(cr,rgb_to_r_g_b(second_colour,clock_alpha))
  201. cairo_stroke(cr)
  202. end
  203. end
  204.  
  205. function conky_clock_rings()
  206. local function setup_rings(cr,pt)
  207. local str=''
  208. local value=0
  209.  
  210. str=string.format('${%s %s}',pt['name'],pt['arg'])
  211. str=conky_parse(str)
  212.  
  213. value=tonumber(str)
  214. pct=value/pt['max']
  215.  
  216. draw_ring(cr,pct,pt)
  217. end
  218.  
  219. -- Проверка, что conky работают последнии 5 секунд
  220.  
  221. if conky_window==nil then return end
  222. local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
  223.  
  224. local cr=cairo_create(cs)
  225.  
  226. local updates=conky_parse('${updates}')
  227. update_num=tonumber(updates)
  228.  
  229. --[[if update_num>5 then
  230. for i in pairs(settings_table) do
  231. setup_rings(cr,settings_table[i])
  232. end
  233. end]]
  234. draw_clock_hands(cr,clock_x,clock_y)
  235. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement