94 lines
3.5 KiB
Lua
94 lines
3.5 KiB
Lua
---------------------------------------------------------------------------
|
|
--- Utility function for working with widgets.
|
|
--
|
|
-- @author Uli Schlachter
|
|
-- @copyright 2010 Uli Schlachter
|
|
-- @module wibox.widget
|
|
---------------------------------------------------------------------------
|
|
|
|
local cairo = require("lgi").cairo
|
|
local hierarchy = require("wibox.hierarchy")
|
|
local gcolor = require("gears.color")
|
|
local beautiful = nil
|
|
|
|
local widget = {
|
|
base = require("wibox.widget.base");
|
|
textbox = require("wibox.widget.textbox");
|
|
imagebox = require("wibox.widget.imagebox");
|
|
background = require("wibox.widget.background");
|
|
systray = require("wibox.widget.systray");
|
|
textclock = require("wibox.widget.textclock");
|
|
progressbar = require("wibox.widget.progressbar");
|
|
graph = require("wibox.widget.graph");
|
|
checkbox = require("wibox.widget.checkbox");
|
|
piechart = require("wibox.widget.piechart");
|
|
slider = require("wibox.widget.slider");
|
|
calendar = require("wibox.widget.calendar");
|
|
separator = require("wibox.widget.separator");
|
|
}
|
|
|
|
setmetatable(widget, {
|
|
__call = function(_, args)
|
|
return widget.base.make_widget_declarative(args)
|
|
end
|
|
})
|
|
|
|
--- Draw a widget directly to a given cairo context.
|
|
-- This function creates a temporary `wibox.hierarchy` instance and uses that to
|
|
-- draw the given widget once to the given cairo context.
|
|
-- @tparam widget wdg A widget to draw
|
|
-- @tparam cairo_context cr The cairo context to draw the widget on
|
|
-- @tparam number width The width of the widget
|
|
-- @tparam number height The height of the widget
|
|
-- @tparam[opt={dpi=96}] table context The context information to give to the widget.
|
|
-- @noreturn
|
|
-- @staticfct wibox.widget.draw_to_cairo_context
|
|
function widget.draw_to_cairo_context(wdg, cr, width, height, context)
|
|
local function no_op() end
|
|
context = context or {dpi=96}
|
|
local h = hierarchy.new(context, wdg, width, height, no_op, no_op, {})
|
|
h:draw(context, cr)
|
|
end
|
|
|
|
--- Create an SVG file showing this widget.
|
|
-- @tparam widget wdg A widget
|
|
-- @tparam string path The output file path
|
|
-- @tparam number width The surface width
|
|
-- @tparam number height The surface height
|
|
-- @tparam[opt={dpi=96}] table context The context information to give to the widget.
|
|
-- @noreturn
|
|
-- @staticfct wibox.widget.draw_to_svg_file
|
|
function widget.draw_to_svg_file(wdg, path, width, height, context)
|
|
local img = cairo.SvgSurface.create(path, width, height)
|
|
local cr = cairo.Context(img)
|
|
|
|
beautiful = beautiful or require("beautiful")
|
|
cr:set_source(gcolor(beautiful.fg_normal))
|
|
|
|
widget.draw_to_cairo_context(wdg, cr, width, height, context)
|
|
img:finish()
|
|
end
|
|
|
|
--- Create a cairo image surface showing this widget.
|
|
-- @tparam widget wdg A widget
|
|
-- @tparam number width The surface width
|
|
-- @tparam number height The surface height
|
|
-- @param[opt=cairo.Format.ARGB32] format The surface format
|
|
-- @tparam[opt={dpi=96}] table context The context information to give to the widget.
|
|
-- @return The cairo surface
|
|
-- @staticfct wibox.widget.draw_to_image_surface
|
|
function widget.draw_to_image_surface(wdg, width, height, format, context)
|
|
local img = cairo.ImageSurface(format or cairo.Format.ARGB32, width, height)
|
|
local cr = cairo.Context(img)
|
|
|
|
beautiful = beautiful or require("beautiful")
|
|
cr:set_source(gcolor(beautiful.fg_normal))
|
|
|
|
widget.draw_to_cairo_context(wdg, cr, width, height, context)
|
|
return img
|
|
end
|
|
|
|
return widget
|
|
|
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|