From 7ea4478b380ee95a729fd482e02a69e9f567392e Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Sun, 21 Mar 2010 18:42:21 +0100 Subject: [PATCH] awful.widget: add progressbar ticks property Second implementation of the progressbar ticks. Adds set_ticks, set_ticks_gap and set_ticks_size methods. Default gap is 1, size 4 in respect to the default progressbar width of 100px. Signed-off-by: Adrian C. (anrxc) Signed-off-by: Julien Danjou --- lib/awful/widget/progressbar.lua.in | 56 +++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/lib/awful/widget/progressbar.lua.in b/lib/awful/widget/progressbar.lua.in index c457d8bb..56e2733e 100644 --- a/lib/awful/widget/progressbar.lua.in +++ b/lib/awful/widget/progressbar.lua.in @@ -49,6 +49,24 @@ local data = setmetatable({}, { __mode = "k" }) -- @param progressbar The progressbar. -- @param vertical A boolean value. +--- Set the progressbar to draw ticks. Default is false. +-- @name set_ticks +-- @class function +-- @param progressbar The progressbar. +-- @param ticks A boolean value. + +--- Set the progressbar ticks gap. +-- @name set_ticks_gap +-- @class function +-- @param progressbar The progressbar. +-- @param value The value. + +--- Set the progressbar ticks size. +-- @name set_ticks_size +-- @class function +-- @param progressbar The progressbar. +-- @param value The value. + --- Set the maximum value the progressbar should handle. -- @name set_max_value -- @class function @@ -57,11 +75,14 @@ local data = setmetatable({}, { __mode = "k" }) local properties = { "width", "height", "border_color", "gradient_colors", "color", "background_color", - "vertical", "value", "max_value" } + "vertical", "value", "max_value", + "ticks", "ticks_gap", "ticks_size" } local function update(pbar) local width = data[pbar].width or 100 - local height = data[pbar].height or 20 + local height = data[pbar].height or 20 + local ticks_gap = data[pbar].ticks_gap or 1 + local ticks_size = data[pbar].ticks_size or 4 -- Create new empty image local img = capi.image.argb32(width, height, nil) @@ -107,13 +128,42 @@ local function update(pbar) over_drawn_width, rel_height, true, data[pbar].background_color or "#000000aa") + + -- Place smaller pieces over the gradient if ticks are enabled + if data[pbar].ticks then + for i=0, height / (ticks_size+ticks_gap)-border_width do + local rel_offset = over_drawn_height / 1 - (ticks_size+ticks_gap) * i + + if rel_offset >= rel_height then + img:draw_rectangle(border_width, + rel_offset, + over_drawn_width, + ticks_gap, + true, data[pbar].background_color or "#000000aa") + end + end + end else - local rel_x = math.floor((over_drawn_width * value) + 0.5) + local rel_x = math.ceil(over_drawn_width * value) img:draw_rectangle(border_width + rel_x, border_width, over_drawn_width - rel_x, over_drawn_height, true, data[pbar].background_color or "#000000aa") + + if data[pbar].ticks then + for i=0, width / (ticks_size+ticks_gap)-border_width do + local rel_offset = over_drawn_width / 1 - (ticks_size+ticks_gap) * i + + if rel_offset <= rel_x then + img:draw_rectangle(rel_offset, + border_width, + ticks_gap, + over_drawn_height, + true, data[pbar].background_color or "#000000aa") + end + end + end end -- Update the image