--------------------------------------------------------------------------- --- 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