Make async menu faster

This may cause some visual artefacts, but is about 5 time
faster than the old way.
This commit is contained in:
Emmanuel Lepage Vallee 2014-03-23 19:00:43 -04:00
parent 14c420ac49
commit f746a8b347
2 changed files with 13 additions and 2 deletions

View File

@ -3,6 +3,7 @@ local beautiful = require( "beautiful" )
local color = require( "gears.color" )
local cairo = require( "lgi" ).cairo
local base = require( "radical.base" )
local glib = require("lgi").GLib
local module = {
margins = {
@ -51,7 +52,7 @@ local function do_gen_menu_top(data, width, height, radius,padding,args)
return img
end
local function set_direction(data,direction)
local function _set_direction(data,direction)
local geometry = (direction == "left" or direction == "right") and {width = data.wibox.height, height = data.wibox.width} or {height = data.wibox.height, width = data.wibox.width}
local top_clip_surface = do_gen_menu_top(data,geometry.width,geometry.height,10,data.border_width,{bg=beautiful.fg_normal or "#0000ff",fg=data.bg or "#00ffff"})
local top_bounding_surface = do_gen_menu_top(data,geometry.width,geometry.height,10,0,{bg="#00000000",fg="#ffffffff"})
@ -70,6 +71,15 @@ local function set_direction(data,direction)
end
data.wibox.shape_bounding = top_bounding_surface._native
data.wibox:set_bg(cairo.Pattern.create_for_surface(top_clip_surface))
data._internal._need_direction_reload = false
end
-- Try to avoid useless repaint, this function is heavy
local function set_direction(data,direction)
if not data._internal._need_direction_reload then
glib.idle_add(glib.PRIORITY_HIGH_IDLE, function() _set_direction(data,direction) end)
data._internal._need_direction_reload = true
end
end
local function draw(data,args)

View File

@ -20,7 +20,8 @@ local function draw(self, w, cr, width, height)
end
local function fit(box, w, h)
return box.direction == module.VERTICAL and 5 or w,box.direction == module.VERTICAL and h or 5
local direction = box.direction or w > h and module.HORIZONTAL or module.VERTICAL
return direction == module.VERTICAL and 5 or w,direction == module.VERTICAL and h or 5
end
local function new(menu,direction)