X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=data%2Fbox.lua;fp=data%2Fbox.lua;h=4eda7734fd55e797e5d11f0eaedc788deab8809c;hb=bd8c0fc134e004eebb40d6b0e74c2c860c24fb91;hp=0000000000000000000000000000000000000000;hpb=2d2a163728283108eb78c11d7b02bf5c54d88ea4;p=monky diff --git a/data/box.lua b/data/box.lua new file mode 100644 index 0000000..4eda773 --- /dev/null +++ b/data/box.lua @@ -0,0 +1,309 @@ +--[[BOX WIDGET v1.0 by Wlourf 19/12/2010 +This widget can drawn some boxes, even circles in your conky window +http://u-scripts.blogspot.com/ (HowTo coming soon) + +Inspired by Background by londonali1010 (2009) + +The parameters (all optionals) are : +x - x coordinate of top-left corner of the box, default = 0 = (top-left corner of conky window) +y - y coordinate of top-left corner of the box, default = 0 = (top-left corner of conky window) +w - width of the box, default = width of the conky window +h - height of the box, default = width of the conky window +radius - radius of the corner, default = 0 = no radius +mode - mode for drawing the radius, possible values are "circle" or "curve", default ="curve" +linear_gradient - table with the coordinates of two points to define a linear gradient, + points are relative to top-left corner of the box, (not the conky window) + {x1,y1,x2,y2} +radial_gradient - table with the coordinates of two circle to define a radial gradient, + colour={{0,0xCCCCCC,1},{1,0xCCCCCC,0}} points are relative to top-left corner of the box, (not the conky window) + {x1,y1,r1,x2,y2,r2} (r=radius) +colour - table of colours, default = plain white {{1,0xFFFFFF,1}} + this table contains one or more tables with format {P,C,A} + P=position of gradient (0 = start of the gradient, 1= end of the gradient) + C=hexadecimal colour + A=alpha (opacity) of color (0=invisible,1=opacity 100%) + Examples : + for a plain color {{1,0x00FF00,0.5}} + for a gradient with two colours {{0,0x00FF00,0.5},{1,0x000033,1}} + or {{0.5,0x00FF00,1},{1,0x000033,1}} -with this one, gradient will start in the middle + for a gradient with three colours {{0,0x00FF00,0.5},{0.5,0x000033,1},{1,0x440033,1}} + and so on ... + + + +To call this script in Conky, use (assuming you have saved this script to ~/scripts/): + lua_load ~/scripts/draw_bg.lua + lua_draw_hook_pre main_box + +And leave one line blank or not after TEXT + +Changelog: ++ v1.0 -- Original release (19.12.2010) +]] + +-- Change these settings to affect your background. + +table_settings={ + { + x=5, + y=57, + h=40, + w=650, + linear_gradient = {300,200,550,350}, + colour = {{0,0x000000,0.5},{1,0x000000,0.5}}, + radius=20, + }, + { + x=315, + y=100, + h=90, + w=485, + linear_gradient = {300,200,550,350}, + colour = {{0,0x000000,0.2},{1,0x000000,0.1}}, + radius=20, + }, + { + x=5, + y=192, + h=44, + w=795, + linear_gradient = {300,200,550,350}, + colour = {{0,0x000000,0.4},{1,0x000000,0.1}}, + radius=20, + }, + { + x=5, + y=355, + h=125, + w=795, + colour = {{0,0x000000,0.25}}, + radius=20, + }, + { + x=5, + y=240, + h=110, + w=795, + colour = {{0,0x000000,0.4}}, + radius=20, + }, + +--[[ + { --backgound with gradient + radius=25, + mode="circle", + linear_gradient = {300,200,550,350}, + colour={{0,0xCCCCCC,1},{1,0xCCCCCC,0}} + }, + + + + + { --pink rounded box + x=25, + y=150, + h=200, + w=100, + colour = {{O,0xff00ff,0.5}}, + radius=30, + mode="circle" + }, + { --border for pink rounded box + x=25, + y=150, + h=200, + w=100, + radius=30, + border=3, + mode="circle", + colour={ + {0,0x0000CC,1}, + }, + }, + + { --box with linear gradient + x=150, + y=150, + h=100, + w=100, + linear_gradient = {50,0,50,100 }, + colour={ + {0,0xffff00,1}, + {0.5,0xff0000,1}, + {1,0xff00ff,1}, + }, + }, + + { --box with radial gradient + x=150, + y=270, + h=100, + w=100, + radius=10, + radial_gradient = {20,20,0,20,20,100 }, + colour={ + {0,0xff0000,1}, + {1,0xffff00,1}, + }, + mode="circle", + border=0 + }, + { --border for above box --gradient are inversed + x=150, + y=270, + h=100, + w=100, + radius=10, + radial_gradient = {20,20,0,20,20,100 }, + colour={ + {1,0xff0000,1}, + {0,0xffff00,1}, + }, + mode="circle", + border=5 + }, + + + { --oh my god, a circle with radial gradient + x=300, y=30, + w=100,h=100, + mode="circle", + radius=50, + radial_gradient = {50,50,0,50,50,50 }, + colour={ + {0,0xff0000,1}, + {1,0xffff00,1}, + }, + }, + + { --no name for this one ! radius > w or h ! + x=300, y=250, + w=100,h=100, + mode="circle", + radius=100, + radial_gradient = {50,50,0,50,50,50 }, + colour={ + {0,0xff0000,1}, + {0.5,0x0000ff,1}, + {1,0xffff00,1}, + }, + }, +]] + + + } + +---------END OF PARAMETERS + +require 'cairo' + + + +function conky_main_box() + 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) + + for i in pairs(table_settings) do + draw_bg (table_settings[i]) + end + + cairo_destroy(cr) + cairo_surface_destroy(cs) +end + +function draw_bg(t) + function rgba_to_r_g_b_a(tc) + --tc={position,colour,alpha} + local colour = tc[2] + local alpha = tc[3] + return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha + end + + local PI = math.pi + + --check values and set default values + if t.x == nil then t.x = 0 end + if t.y == nil then t.y = 0 end + if t.w == nil then t.w = conky_window.width end + if t.h == nil then t.h = conky_window.height end + if t.radius == nil then t.radius = 0 end + if t.border == nil then t.border = 0 end + if t.colour==nil then t.colour={{1,0xFFFFFF,1}} end + if t.linear_gradient ~= nil then + if #t.linear_gradient ~= 4 then + t.linear_gradient = {t.x,t.y,t.width,t.height} + end + end + if t.radial_gradient ~= nil then + if #t.radial_gradient ~= 6 then + t.radial_gradient = {t.x,t.y,0, t.x,t.y, t.width} + end + end + + for i=1, #t.colour do + if #t.colour[i]~=3 then + print ("error in color table") + t.colour[i]={1,0xFFFFFF,1} + end + end + + --for better reading + t.linear = t.linear_gradient + t.radial = t.radial_gradient + t.no_gradient = (t.linear == nil ) and (t.radial == nil ) + + cairo_save(cr) + cairo_translate(cr, t.x, t.y) + + if t.radius>0 then + if t.mode=="circle" then + cairo_arc(cr, t.radius, t.radius, t.radius, -PI, -PI/2) + cairo_line_to(cr,t.w-t.radius,0) + cairo_arc(cr, t.w-t.radius, t.radius, t.radius, -PI/2,0) + cairo_line_to(cr,t.w,t.h-t.radius) + cairo_arc(cr, t.w-t.radius, t.h-t.radius, t.radius, 0,PI/2) + cairo_line_to(cr,t.radius,t.h) + cairo_arc(cr, t.radius, t.h-t.radius, t.radius, PI/2,-PI) + cairo_line_to(cr,0,t.radius) + else + cairo_move_to(cr, t.radius, 0) + cairo_line_to(cr, t.w-t.radius, 0) + cairo_curve_to(cr, t.w, 0, t.w, 0, t.w, t.radius) + cairo_line_to(cr, t.w, t.h-t.radius) + cairo_curve_to(cr, t.w, t.h, t.w, t.h, t.w - t.radius, t.h) + cairo_line_to(cr, t.radius, t.h) + cairo_curve_to(cr, 0, t.h, 0, t.h, 0, t.h-t.radius) + cairo_line_to(cr, 0, t.radius) + cairo_curve_to(cr, 0, 0, 0, 0, t.radius,0) + end + cairo_close_path(cr) + else + cairo_rectangle(cr,0,0,t.w,t.h) + end + + if t.no_gradient then + cairo_set_source_rgba(cr,rgba_to_r_g_b_a(t.colour[1])) + else + if t.linear ~= nil then + pat = cairo_pattern_create_linear (t.linear[1],t.linear[2],t.linear[3],t.linear[4]) + elseif t.radial ~= nil then + pat = cairo_pattern_create_radial (t.radial[1],t.radial[2],t.radial[3],t.radial[4],t.radial[5],t.radial[6]) + end + for i=1, #t.colour do + cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgba_to_r_g_b_a(t.colour[i])) + end + cairo_set_source (cr, pat) + cairo_pattern_destroy(pat) + end + + if t.border>0 then + cairo_set_line_width(cr,t.border) + cairo_stroke(cr) + else + cairo_fill(cr) + end + + cairo_restore(cr) +end +