294 lines
6.6 KiB
Lua
294 lines
6.6 KiB
Lua
--- Test if the wallpaper function do not cause errors
|
|
|
|
local runner = require("_runner")
|
|
local wp = require("gears.wallpaper")
|
|
local color = require("gears.color")
|
|
local cairo = require( "lgi" ).cairo
|
|
local surface = require("gears.surface")
|
|
local awall = require("awful.wallpaper")
|
|
local beautiful = require("beautiful")
|
|
local wibox = require("wibox")
|
|
|
|
local steps = {}
|
|
|
|
local colors = {
|
|
"#000030",
|
|
{
|
|
type = "linear" ,
|
|
from = { 0, 0 },
|
|
to = { 0, 100 },
|
|
stops = {
|
|
{ 0, "#ff0000" },
|
|
{ 1, "#0000ff" }
|
|
}
|
|
},
|
|
color("#043000"),
|
|
"#302E00",
|
|
"#002C30",
|
|
color("#300030AA"),
|
|
"#301C00",
|
|
"#140030",
|
|
}
|
|
|
|
-- Dummy wallpaper
|
|
local img = cairo.ImageSurface.create(cairo.Format.ARGB32, 100, 100)
|
|
local cr = cairo.Context(img)
|
|
cr:set_source(color(colors[2]))
|
|
cr:rectangle(0,0,100,100)
|
|
cr:fill()
|
|
cr:paint()
|
|
|
|
table.insert(steps, function()
|
|
assert(img)
|
|
assert(surface.load_uncached(img))
|
|
|
|
local w, h = surface.get_size(surface.load_uncached(img))
|
|
|
|
assert(w == 100)
|
|
assert(h == 100)
|
|
|
|
wp.fit(img, nil, nil)
|
|
|
|
wp.fit(img, screen[1], nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.fit(img, screen[1], "#00ff00")
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.centered(img, nil, nil)
|
|
wp.centered(img, screen[1], nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.centered(img, screen[1], "#00ff00")
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.maximized(img, nil, nil, nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.maximized(img, screen[1], nil, nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.maximized(img, screen[1], false, nil)
|
|
wp.maximized(img, screen[1], true, nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.maximized(img, screen[1], false, {x=10, y= 10})
|
|
wp.maximized(img, screen[1], true, {x=10, y= 10})
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.tiled(img, nil, nil)
|
|
wp.tiled(img, screen[1], nil)
|
|
|
|
-- There is a delayed call for the last call, let it be processed before
|
|
-- adding more
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
wp.tiled(img, screen[1], {x=10, y= 10})
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
for _, c in ipairs(colors) do
|
|
wp.set(c)
|
|
end
|
|
|
|
return true
|
|
end)
|
|
|
|
-- Make sure passing `nil` doesn't crash Awesome.
|
|
table.insert(steps, function()
|
|
root._wallpaper(nil)
|
|
root.wallpaper(nil)
|
|
|
|
return true
|
|
end)
|
|
|
|
local walls = setmetatable({}, {__mode = "v"})
|
|
|
|
-- Test awful.wallpaper garbage collection.
|
|
table.insert(steps, function()
|
|
walls["first"] = awall {
|
|
screen = screen[1],
|
|
widget = {
|
|
{
|
|
image = beautiful.wallpaper,
|
|
upscale = true,
|
|
downscale = true,
|
|
widget = wibox.widget.imagebox,
|
|
},
|
|
valign = "center",
|
|
halign = "center",
|
|
tiled = false,
|
|
widget = wibox.container.tile,
|
|
}
|
|
}
|
|
|
|
collectgarbage("collect")
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function(count)
|
|
if count < 3 then
|
|
collectgarbage("collect")
|
|
return
|
|
end
|
|
|
|
assert(walls["first"])
|
|
|
|
walls["second"] = awall {
|
|
screen = screen[1],
|
|
widget = {
|
|
{
|
|
image = beautiful.wallpaper,
|
|
upscale = true,
|
|
downscale = true,
|
|
widget = wibox.widget.imagebox,
|
|
},
|
|
valign = "center",
|
|
halign = "center",
|
|
tiled = false,
|
|
widget = wibox.container.tile,
|
|
}
|
|
}
|
|
|
|
return true
|
|
end)
|
|
|
|
local repaint_called, paint_width, paint_height = false, nil, nil
|
|
|
|
-- Test setting "after the fact"
|
|
table.insert(steps, function(count)
|
|
if count < 3 then
|
|
collectgarbage("collect")
|
|
return
|
|
end
|
|
|
|
assert(walls["second"])
|
|
assert(not walls["first"])
|
|
|
|
local real_repaint = walls["second"].repaint
|
|
|
|
walls["second"].repaint = function(self)
|
|
repaint_called = true
|
|
real_repaint(self)
|
|
end
|
|
|
|
walls["second"].widget = wibox.widget {
|
|
fit = function(_, w, h)
|
|
return w, h
|
|
end,
|
|
draw = function(self, ctx, cr2, width, height)
|
|
cr2:set_source_rgba(1, 0, 0, 0.5)
|
|
cr2:rectangle(0, 0, width/2, height/2)
|
|
cr2:fill()
|
|
paint_width, paint_height = width, height
|
|
assert((not self.dpi) and ctx.dpi)
|
|
end
|
|
}
|
|
|
|
walls["second"].bg = "#0000ff"
|
|
walls["second"].fg = "#00ff00"
|
|
|
|
assert(repaint_called)
|
|
|
|
-- This needs to happen after this event loop to avoid
|
|
-- painting the wallpaper many time in a row.
|
|
assert(not paint_width)
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function()
|
|
assert(walls["second"])
|
|
|
|
assert(paint_width == screen[1].geometry.width)
|
|
assert(paint_height == screen[1].geometry.height)
|
|
|
|
repaint_called = false
|
|
paint_width, paint_height = nil, nil
|
|
|
|
-- Disable new wallpaper creation to prevent request::wallpaper from
|
|
-- replacing the wall.
|
|
local constructor = getmetatable(awall).__call
|
|
setmetatable(awall, {__call = function() end})
|
|
|
|
screen[1]:fake_resize(
|
|
10, 10, math.floor(screen[1].geometry.width/2), math.floor(screen[1].geometry.height/2)
|
|
)
|
|
|
|
assert(paint_height ~= screen[1].geometry.height)
|
|
assert(repaint_called)
|
|
setmetatable(awall, {__call = constructor})
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function(count)
|
|
if count == 1 then return end
|
|
|
|
print(paint_width, paint_height, screen[1].geometry.width, screen[1].geometry.height)
|
|
assert(paint_width == screen[1].geometry.width)
|
|
assert(paint_height == screen[1].geometry.height)
|
|
|
|
walls["second"].dpi = 123
|
|
assert(walls["second"].dpi == 123)
|
|
walls["second"]:detach()
|
|
|
|
return true
|
|
end)
|
|
|
|
table.insert(steps, function(count)
|
|
if count < 3 then
|
|
collectgarbage("collect")
|
|
return
|
|
end
|
|
|
|
assert(not walls["second"])
|
|
|
|
return true
|
|
end)
|
|
|
|
runner.run_steps(steps)
|
|
|
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|