This commit is contained in:
Uli Schlachter 2016-04-15 19:35:12 +02:00
commit cd55c57937
2 changed files with 22 additions and 11 deletions

View File

@ -9,18 +9,14 @@ local cairo = require("lgi").cairo
local color = require("gears.color") local color = require("gears.color")
local surface = require("gears.surface") local surface = require("gears.surface")
local timer = require("gears.timer") local timer = require("gears.timer")
local root = root
local wallpaper = { mt = {} } local wallpaper = { mt = {} }
-- The size of the root window local function root_geometry()
local root_geom = { x = 0, y = 0, width = 0, height = 0 } local width, height = root.size()
return { x = 0, y = 0, width = width, height = height }
-- Gears should not depend on awful or C-API, this should be fixed eventually end
require("awful.screen").connect_for_each_screen(function(s)
local g = s.geometry
root_geom.width = math.max(root_geom.width, g.x + g.width)
root_geom.height = math.max(root_geom.height, g.y + g.height)
end)
-- A cairo surface that we still want to set as the wallpaper -- A cairo surface that we still want to set as the wallpaper
local pending_wallpaper = nil local pending_wallpaper = nil
@ -33,14 +29,14 @@ local pending_wallpaper = nil
-- @return[1] The available geometry (table with entries width and height) -- @return[1] The available geometry (table with entries width and height)
-- @return[1] A cairo context that the wallpaper should be drawn to -- @return[1] A cairo context that the wallpaper should be drawn to
function wallpaper.prepare_context(s) function wallpaper.prepare_context(s)
local geom = s and screen[s].geometry or root_geom local geom = s and screen[s].geometry or root_geometry()
local cr local cr
if not pending_wallpaper then if not pending_wallpaper then
-- Prepare a pending wallpaper -- Prepare a pending wallpaper
local wp = surface(root.wallpaper()) local wp = surface(root.wallpaper())
pending_wallpaper = wp:create_similar(cairo.Content.COLOR, root_geom.width, root_geom.height) pending_wallpaper = wp:create_similar(cairo.Content.COLOR, root.size())
-- Copy the old wallpaper to the new one -- Copy the old wallpaper to the new one
cr = cairo.Context(pending_wallpaper) cr = cairo.Context(pending_wallpaper)

15
root.c
View File

@ -428,6 +428,20 @@ luaA_root_wallpaper(lua_State *L)
return 1; return 1;
} }
/** Get the size of the root window.
*
* @return Width of the root window.
* @return height of the root window.
* @function size
*/
static int
luaA_root_size(lua_State *L)
{
lua_pushinteger(L, globalconf.screen->width_in_pixels);
lua_pushinteger(L, globalconf.screen->height_in_pixels);
return 2;
}
/** Get the attached tags. /** Get the attached tags.
* @return A table with all tags. * @return A table with all tags.
* @function tags * @function tags
@ -453,6 +467,7 @@ const struct luaL_Reg awesome_root_lib[] =
{ "fake_input", luaA_root_fake_input }, { "fake_input", luaA_root_fake_input },
{ "drawins", luaA_root_drawins }, { "drawins", luaA_root_drawins },
{ "wallpaper", luaA_root_wallpaper }, { "wallpaper", luaA_root_wallpaper },
{ "size", luaA_root_size },
{ "tags", luaA_root_tags }, { "tags", luaA_root_tags },
{ "__index", luaA_default_index }, { "__index", luaA_default_index },
{ "__newindex", luaA_default_newindex }, { "__newindex", luaA_default_newindex },