Switch from oocairo to lgi.cairo
Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
758c4d4972
commit
4f30dfd198
|
@ -132,8 +132,6 @@ pkg_check_modules(AWESOME_REQUIRED REQUIRED
|
|||
glib-2.0
|
||||
cairo
|
||||
x11
|
||||
oocairo
|
||||
oopango
|
||||
xcb-randr
|
||||
xcb-xtest
|
||||
xcb-xinerama
|
||||
|
|
8
draw.c
8
draw.c
|
@ -133,12 +133,10 @@ luaA_surface_from_data(lua_State *L, int width, int height, uint32_t *data)
|
|||
/* This makes sure that buffer will be freed */
|
||||
cairo_surface_set_user_data(surface, &data_key, buffer, &free_data);
|
||||
|
||||
/* This will increase the reference count of the surface */
|
||||
int ret = oocairo_surface_push(globalconf.L, surface);
|
||||
/* So we have to drop our own reference */
|
||||
cairo_surface_destroy(surface);
|
||||
/* lua has to make sure to free the ref or we have a leak */
|
||||
lua_pushlightuserdata(L, surface);
|
||||
|
||||
return ret;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Duplicate the specified image surface.
|
||||
|
|
2
draw.h
2
draw.h
|
@ -23,7 +23,7 @@
|
|||
#define AWESOME_COMMON_DRAW_H
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
#include <oocairo.h>
|
||||
#include <cairo.h>
|
||||
|
||||
#include "common/util.h"
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ local tags = require("awful.tag")
|
|||
local keygrabber = require("awful.keygrabber")
|
||||
local beautiful = require("beautiful")
|
||||
local object = require("gears.object")
|
||||
local surface = require("gears.surface")
|
||||
local cairo = require("lgi").cairo
|
||||
local setmetatable = setmetatable
|
||||
local tonumber = tonumber
|
||||
local string = string
|
||||
|
@ -27,9 +29,7 @@ local capi = {
|
|||
timer = timer,
|
||||
screen = screen,
|
||||
mouse = mouse,
|
||||
client = client,
|
||||
awesome = awesome,
|
||||
oocairo = oocairo }
|
||||
client = client }
|
||||
|
||||
|
||||
module("awful.menu")
|
||||
|
@ -515,7 +515,7 @@ function entry(parent, args)
|
|||
if args.icon then
|
||||
icon = args.icon
|
||||
if type(icon) == "string" then
|
||||
icon = capi.awesome.load_image(icon)
|
||||
icon = surface.load(icon)
|
||||
end
|
||||
end
|
||||
if icon then
|
||||
|
@ -529,10 +529,10 @@ function entry(parent, args)
|
|||
w, h = (args.theme.height / ih) * iw, args.theme.height
|
||||
end
|
||||
-- We need to scale the image to size w x h
|
||||
local img = capi.oocairo.image_surface_create("argb32", w, h)
|
||||
local cr = capi.oocairo.context_create(img)
|
||||
local img = cairo.ImageSurface(cairo.Format.ARGB32, w, h)
|
||||
local cr = cairo.Context(img)
|
||||
cr:scale(w / iw, h / ih)
|
||||
cr:set_source(icon, 0, 0)
|
||||
cr:set_source_surface(icon, 0, 0)
|
||||
cr:paint()
|
||||
icon = img
|
||||
end
|
||||
|
@ -551,9 +551,7 @@ function entry(parent, args)
|
|||
if type(args.cmd) == "table" then
|
||||
if args.theme.submenu_icon then
|
||||
submenu = wibox.widget.imagebox()
|
||||
submenu:set_image(
|
||||
capi.awesome.load_image(
|
||||
args.theme.submenu_icon))
|
||||
submenu:set_image(surface.load(args.theme.submenu_icon))
|
||||
else
|
||||
submenu = wibox.widget.textbox()
|
||||
submenu:set_font(args.theme.font)
|
||||
|
|
|
@ -8,9 +8,9 @@ local setmetatable = setmetatable
|
|||
local type = type
|
||||
local button = require("awful.button")
|
||||
local imagebox = require("wibox.widget.imagebox")
|
||||
local capi = { mouse = mouse,
|
||||
awesome = awesome,
|
||||
oocairo = oocairo }
|
||||
local surface = require("gears.surface")
|
||||
local cairo = require("lgi").cairo
|
||||
local capi = { mouse = mouse }
|
||||
|
||||
module("awful.widget.button")
|
||||
|
||||
|
@ -20,17 +20,10 @@ module("awful.widget.button")
|
|||
-- @return A textbox widget configured as a button.
|
||||
function new(args)
|
||||
if not args or not args.image then return end
|
||||
local img_release
|
||||
if type(args.image) == "string" then
|
||||
img_release = capi.awesome.load_image(args.image)
|
||||
elseif type(args.image) == "userdata" and args.image.type and args.image:type() == "cairo_surface_t" then
|
||||
img_release = args.image
|
||||
elseif type(args.image) == "userdata" and args.image._NAME and args.image._NAME == "cairo surface object" then
|
||||
img_release = args.image
|
||||
end
|
||||
local img_press = capi.oocairo.image_surface_create("argb32", img_release:get_width(), img_release:get_height())
|
||||
local cr = capi.oocairo.context_create(img_press)
|
||||
cr:set_source(img_release, 2, 2)
|
||||
local img_release = surface.load(args.image)
|
||||
local img_press = cairo.ImageSurface(cairo.Format.ARGB32, img_release.width, img_release.height)
|
||||
local cr = cairo.Context(img_press)
|
||||
cr:set_source_surface(img_release, 2, 2)
|
||||
cr:paint()
|
||||
|
||||
local w = imagebox()
|
||||
|
|
|
@ -11,7 +11,6 @@ local layout = require("awful.layout")
|
|||
local tag = require("awful.tag")
|
||||
local beautiful = require("beautiful")
|
||||
local imagebox = require("wibox.widget.imagebox")
|
||||
local capi = { oocairo = oocairo }
|
||||
|
||||
--- Layoutbox widget.
|
||||
module("awful.widget.layoutbox")
|
||||
|
|
|
@ -18,6 +18,7 @@ local util = require("awful.util")
|
|||
local tag = require("awful.tag")
|
||||
local beautiful = require("beautiful")
|
||||
local fixed = require("wibox.layout.fixed")
|
||||
local surface = require("gears.surface")
|
||||
|
||||
--- Taglist widget module for awful
|
||||
module("awful.widget.taglist")
|
||||
|
@ -55,7 +56,7 @@ function taglist_label(t, args)
|
|||
local seltags = sel:tags()
|
||||
for _, v in ipairs(seltags) do
|
||||
if v == t then
|
||||
bg_image = capi.awesome.load_image(taglist_squares_sel)
|
||||
bg_image = surface.load(taglist_squares_sel)
|
||||
bg_resize = taglist_squares_resize == "true"
|
||||
is_selected = true
|
||||
break
|
||||
|
@ -67,7 +68,7 @@ function taglist_label(t, args)
|
|||
local cls = t:clients()
|
||||
if #cls > 0 then
|
||||
if taglist_squares_unsel then
|
||||
bg_image = capi.awesome.load_image(taglist_squares_unsel)
|
||||
bg_image = surface.load(taglist_squares_unsel)
|
||||
bg_resize = taglist_squares_resize == "true"
|
||||
end
|
||||
if bg_occupied then bg_color = bg_occupied end
|
||||
|
@ -93,7 +94,7 @@ function taglist_label(t, args)
|
|||
if tag.geticon(t) and type(tag.geticon(t)) == "image" then
|
||||
icon = tag.geticon(t)
|
||||
elseif tag.geticon(t) then
|
||||
icon = capi.awesome.load_image(tag.geticon(t))
|
||||
icon = surface.load(tag.geticon(t))
|
||||
end
|
||||
|
||||
return text, bg_color, bg_image, icon
|
||||
|
|
|
@ -14,12 +14,14 @@ local type = type
|
|||
local dofile = dofile
|
||||
local setmetatable = setmetatable
|
||||
local util = require("awful.util")
|
||||
local lgi = require("lgi")
|
||||
local cairo = lgi.cairo
|
||||
local Pango = lgi.Pango
|
||||
local PangoCairo = lgi.PangoCairo
|
||||
local capi =
|
||||
{
|
||||
screen = screen,
|
||||
awesome = awesome,
|
||||
oocairo = oocairo,
|
||||
oopango = oopango
|
||||
awesome = awesome
|
||||
}
|
||||
|
||||
--- Theme library.
|
||||
|
@ -40,19 +42,11 @@ local function load_font(name)
|
|||
return fonts[name]
|
||||
end
|
||||
-- load new font
|
||||
local desc = capi.oopango.font_description_from_string(name)
|
||||
local desc = Pango.FontDescription.from_string(name)
|
||||
|
||||
-- Create a temporary surface that we need for computing the size :(
|
||||
local surface = capi.oocairo.image_surface_create("argb32", 1, 1)
|
||||
local cr = capi.oocairo.context_create(surface)
|
||||
local layout
|
||||
-- Api breakage in oopango
|
||||
if capi.oopango.cairo_layout_create then
|
||||
layout = capi.oopango.cairo_layout_create(cr)
|
||||
else
|
||||
layout = capi.oopango.cairo.layout_create(cr)
|
||||
end
|
||||
|
||||
local surface = cairo.ImageSurface(cairo.Format.ARGB32, 1, 1)
|
||||
local layout = PangoCairo.create_layout(cairo.Context(surface))
|
||||
layout:set_font_description(desc)
|
||||
|
||||
local width, height = layout:get_pixel_size()
|
||||
|
|
|
@ -12,10 +12,8 @@ local unpack = unpack
|
|||
local ipairs = ipairs
|
||||
local pairs = pairs
|
||||
local type = type
|
||||
local capi = {
|
||||
awesome = awesome,
|
||||
oocairo = oocairo
|
||||
}
|
||||
local cairo = require("lgi").cairo
|
||||
local surface = require("gears.surface")
|
||||
|
||||
module("gears.color")
|
||||
|
||||
|
@ -60,7 +58,7 @@ function create_solid_pattern(col)
|
|||
elseif type(col) == "table" then
|
||||
col = col.color
|
||||
end
|
||||
return capi.oocairo.pattern_create_rgba(parse_color(col))
|
||||
return cairo.Pattern.create_rgba(parse_color(col))
|
||||
end
|
||||
|
||||
--- Create an image pattern from a png file
|
||||
|
@ -71,8 +69,8 @@ function create_png_pattern(file)
|
|||
if type(file) == "table" then
|
||||
file = file.file
|
||||
end
|
||||
local image = capi.awesome.load_image(file)
|
||||
return capi.oocairo.pattern_create_for_surface(image)
|
||||
local image = surface.load(file)
|
||||
return cairo.Pattern.create_for_surface(image)
|
||||
end
|
||||
|
||||
-- Add stops to the given pattern.
|
||||
|
@ -125,12 +123,12 @@ function create_linear_pattern(arg)
|
|||
local pat
|
||||
|
||||
if type(arg) == "string" then
|
||||
return string_pattern(capi.oocairo.pattern_create_linear, arg)
|
||||
return string_pattern(cairo.Pattern.create_linear, arg)
|
||||
elseif type(arg) ~= "table" then
|
||||
error("Wrong argument type: " .. type(arg))
|
||||
end
|
||||
|
||||
pat = capi.oocairo.pattern_create_linear(arg.from[1], arg.from[2], arg.to[1], arg.to[2])
|
||||
pat = cairo.Pattern.create_linear(arg.from[1], arg.from[2], arg.to[1], arg.to[2])
|
||||
add_stops_table(pat, arg.stops)
|
||||
return pat
|
||||
end
|
||||
|
@ -150,12 +148,12 @@ function create_radial_pattern(arg)
|
|||
local pat
|
||||
|
||||
if type(arg) == "string" then
|
||||
return string_pattern(capi.oocairo.pattern_create_radial, arg)
|
||||
return string_pattern(cairo.Pattern.create_radial, arg)
|
||||
elseif type(arg) ~= "table" then
|
||||
error("Wrong argument type: " .. type(arg))
|
||||
end
|
||||
|
||||
pat = capi.oocairo.pattern_create_radial(arg.from[1], arg.from[2], arg.from[3],
|
||||
pat = cairo.Pattern.create_radial(arg.from[1], arg.from[2], arg.from[3],
|
||||
arg.to[1], arg.to[2], arg.to[3])
|
||||
add_stops_table(pat, arg.stops)
|
||||
return pat
|
||||
|
|
|
@ -8,6 +8,7 @@ require("gears.color")
|
|||
require("gears.debug")
|
||||
require("gears.object")
|
||||
require("gears.sort")
|
||||
require("gears.surface")
|
||||
|
||||
module("gears")
|
||||
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
---------------------------------------------------------------------------
|
||||
-- @author Uli Schlachter
|
||||
-- @copyright 2012 Uli Schlachter
|
||||
-- @release @AWESOME_VERSION@
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
local setmetatable = setmetatable
|
||||
local type = type
|
||||
local capi = { awesome = awesome }
|
||||
local cairo = require("lgi").cairo
|
||||
|
||||
module("gears.surface")
|
||||
|
||||
--- Try to convert the argument into an lgi cairo surface.
|
||||
-- This is usually needed for loading images by file name.
|
||||
function load(surface)
|
||||
-- Nil is not changed
|
||||
if not surface then
|
||||
return nil
|
||||
end
|
||||
-- lgi cairo surfaces don't get changed either
|
||||
if cairo.Surface:is_type_of(surface) then
|
||||
return surface
|
||||
end
|
||||
-- Strings are assumed to be file names and get loaded
|
||||
if type(surface) == "string" then
|
||||
surface = capi.awesome.load_image(surface)
|
||||
end
|
||||
-- Everything else gets forced into a surface
|
||||
return cairo.Surface(surface, true)
|
||||
end
|
||||
|
||||
setmetatable(_M, { __call = function(_, ...) return load(...) end })
|
||||
|
||||
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
|
@ -14,12 +14,13 @@ local capi = { screen = screen,
|
|||
awesome = awesome,
|
||||
dbus = dbus,
|
||||
timer = timer,
|
||||
awesome = awesome,
|
||||
oocairo = oocairo }
|
||||
awesome = awesome }
|
||||
local button = require("awful.button")
|
||||
local util = require("awful.util")
|
||||
local bt = require("beautiful")
|
||||
local wibox = require("wibox")
|
||||
local surface = require("gears.surface")
|
||||
local cairo = require("lgi").cairo
|
||||
|
||||
--- Notification library
|
||||
module("naughty")
|
||||
|
@ -399,17 +400,12 @@ function notify(args)
|
|||
if icon then
|
||||
iconbox = wibox.widget.imagebox()
|
||||
iconmargin = wibox.layout.margin(iconbox, margin, margin, margin, margin)
|
||||
local img = icon
|
||||
if type(icon) == "string" then
|
||||
img = capi.awesome.load_image(icon)
|
||||
else
|
||||
img = icon
|
||||
end
|
||||
local img = surface.load(icon)
|
||||
if icon_size then
|
||||
local scaled = capi.oocairo.image_surface_create("argb32", icon_size, icon_size)
|
||||
local cr = capi.oocairo.context_create(scaled)
|
||||
local scaled = cairo.ImageSurface(cairo.Format.ARGB32, icon_size, icon_size)
|
||||
local cr = cairo.Context(scaled)
|
||||
cr:scale(icon_size / img:get_height(), icon_size / img:get_width())
|
||||
cr:set_source(img, 0, 0)
|
||||
cr:set_source_surface(img, 0, 0)
|
||||
cr:paint()
|
||||
img = scaled
|
||||
end
|
||||
|
@ -543,7 +539,8 @@ if capi.dbus then
|
|||
end
|
||||
end
|
||||
if imgdata then
|
||||
args.icon = capi.oocairo.image_surface_create_from_data(imgdata, "argb32", hints.icon_data[1], hints.icon_data[2], hints.icon_data[1] * 4)
|
||||
args.icon = cairo.ImageSurface.create_for_data(imgdata,
|
||||
cairo.Format.ARGB32, hints.icon_data[1], hints.icon_data[2], hints.icon_data[1] * 4)
|
||||
end
|
||||
end
|
||||
if replaces_id and replaces_id ~= "" and replaces_id ~= 0 then
|
||||
|
|
|
@ -9,7 +9,6 @@ require("wibox.widget")
|
|||
|
||||
local capi = {
|
||||
drawin = drawin,
|
||||
oocairo = oocairo,
|
||||
root = root,
|
||||
awesome = awesome
|
||||
}
|
||||
|
@ -17,11 +16,13 @@ local setmetatable = setmetatable
|
|||
local pairs = pairs
|
||||
local type = type
|
||||
local table = table
|
||||
local string_format = string.format
|
||||
local color = require("gears.color")
|
||||
local object = require("gears.object")
|
||||
local sort = require("gears.sort")
|
||||
local beautiful = require("beautiful")
|
||||
local string_format = string.format
|
||||
local surface = require("gears.surface")
|
||||
local cairo = require("lgi").cairo
|
||||
|
||||
--- This provides widget box windows. Every wibox can also be used as if it were
|
||||
-- a drawin. All drawin functions and properties are also available on wiboxes!
|
||||
|
@ -33,19 +34,19 @@ local function do_redraw(wibox)
|
|||
end
|
||||
|
||||
local geom = wibox.drawin:geometry()
|
||||
local cr = capi.oocairo.context_create(wibox.drawin.surface)
|
||||
local cr = cairo.Context(surface(wibox.drawin.surface))
|
||||
|
||||
-- Draw the background
|
||||
cr:save()
|
||||
-- This is pseudo-transparency: We draw the wallpaper in the background
|
||||
local wallpaper = capi.root.wallpaper()
|
||||
local wallpaper = surface(capi.root.wallpaper())
|
||||
if wallpaper then
|
||||
cr:set_operator("source")
|
||||
cr:set_source(wallpaper, -wibox.drawin.x, -wibox.drawin.y)
|
||||
cr.operator = cairo.Operator.SOURCE
|
||||
cr:set_source_surface(wallpaper, -wibox.drawin.x, -wibox.drawin.y)
|
||||
cr:paint()
|
||||
end
|
||||
|
||||
cr:set_operator("over")
|
||||
cr.operator = cairo.Operator.OVER
|
||||
cr:set_source(wibox.background_color)
|
||||
cr:paint()
|
||||
cr:restore()
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
-- @release @AWESOME_VERSION@
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
local oocairo = require("oocairo")
|
||||
local base = require("wibox.widget.base")
|
||||
local color = require("gears.color")
|
||||
local layout_base = require("wibox.layout.base")
|
||||
local surface = require("gears.surface")
|
||||
local cairo = require("lgi").cairo
|
||||
local setmetatable = setmetatable
|
||||
local pairs = pairs
|
||||
local type = type
|
||||
local awesome = awesome
|
||||
|
||||
module("wibox.widget.background")
|
||||
|
||||
|
@ -28,7 +28,7 @@ function draw(box, wibox, cr, width, height)
|
|||
cr:paint()
|
||||
end
|
||||
if box.bgimage then
|
||||
local pattern = oocairo.pattern_create_for_surface(box.bgimage)
|
||||
local pattern = cairo.Pattern.create_for_surface(box.bgimage)
|
||||
cr:set_source(pattern)
|
||||
cr:paint()
|
||||
end
|
||||
|
@ -89,13 +89,7 @@ end
|
|||
|
||||
--- Set the background image to use
|
||||
function set_bgimage(box, image)
|
||||
local image = image
|
||||
|
||||
if type(image) == "string" then
|
||||
image = awesome.load_image(image)
|
||||
end
|
||||
|
||||
box.bgimage = image
|
||||
box.bgimage = surface.load(image)
|
||||
box._emit_updated()
|
||||
end
|
||||
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
---------------------------------------------------------------------------
|
||||
|
||||
local base = require("wibox.widget.base")
|
||||
local surface = require("gears.surface")
|
||||
local setmetatable = setmetatable
|
||||
local pairs = pairs
|
||||
local type = type
|
||||
local pcall = pcall
|
||||
local print = print
|
||||
local awesome = awesome
|
||||
|
||||
module("wibox.widget.imagebox")
|
||||
|
||||
|
@ -30,7 +30,7 @@ function draw(box, wibox, cr, width, height)
|
|||
|
||||
cr:scale(aspect, aspect)
|
||||
end
|
||||
cr:set_source(box.image)
|
||||
cr:set_source_surface(box.image, 0, 0)
|
||||
cr:paint()
|
||||
|
||||
cr:restore()
|
||||
|
@ -74,7 +74,7 @@ function set_image(box, image)
|
|||
local image = image
|
||||
|
||||
if type(image) == "string" then
|
||||
local success, result = pcall(awesome.load_image, image)
|
||||
local success, result = pcall(surface.load, image)
|
||||
if not success then
|
||||
print("Error while reading '" .. image .. "': " .. result)
|
||||
return false
|
||||
|
@ -82,9 +82,11 @@ function set_image(box, image)
|
|||
image = result
|
||||
end
|
||||
|
||||
image = surface.load(image)
|
||||
|
||||
if image then
|
||||
local w = image:get_width()
|
||||
local h = image:get_height()
|
||||
local w = image.width
|
||||
local h = image.height
|
||||
if w <= 0 or h <= 0 then
|
||||
return false
|
||||
end
|
||||
|
|
|
@ -5,50 +5,30 @@
|
|||
-- @release @AWESOME_VERSION@
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
local oopango = require("oopango")
|
||||
local oocairo = require("oocairo")
|
||||
local base = require("wibox.widget.base")
|
||||
local beautiful = require("beautiful")
|
||||
local lgi = require("lgi")
|
||||
local cairo = lgi.cairo
|
||||
local Pango = lgi.Pango
|
||||
local PangoCairo = lgi.PangoCairo
|
||||
local type = type
|
||||
local unpack = unpack
|
||||
local setmetatable = setmetatable
|
||||
local pairs = pairs
|
||||
local error = error
|
||||
|
||||
module("wibox.widget.textbox")
|
||||
|
||||
local function layout_create(cr)
|
||||
if oopango.cairo_layout_create then
|
||||
return oopango.cairo_layout_create(cr)
|
||||
end
|
||||
return oopango.cairo.layout_create(cr)
|
||||
end
|
||||
|
||||
local function layout_update(cr, layout)
|
||||
if oopango.cairo_update_layout then
|
||||
oopango.cairo_update_layout(cr, layout)
|
||||
else
|
||||
oopango.cairo.update_layout(cr, layout)
|
||||
end
|
||||
end
|
||||
|
||||
local function layout_show(cr, layout)
|
||||
if oopango.cairo_show_layout then
|
||||
oopango.cairo_show_layout(cr, layout)
|
||||
else
|
||||
oopango.cairo.show_layout(cr, layout)
|
||||
end
|
||||
end
|
||||
|
||||
-- Setup a pango layout for the given textbox and cairo context
|
||||
local function setup_layout(box, width, height)
|
||||
local layout = box._layout
|
||||
layout:set_width(oopango.units_from_number(width))
|
||||
layout:set_height(oopango.units_from_number(height))
|
||||
layout.width = Pango.units_from_double(width)
|
||||
layout.height = Pango.units_from_double(height)
|
||||
end
|
||||
|
||||
--- Draw the given textbox on the given cairo context in the given geometry
|
||||
function draw(box, wibox, cr, width, height)
|
||||
layout_update(cr, box._layout)
|
||||
cr:update_layout(box._layout)
|
||||
setup_layout(box, width, height)
|
||||
local ink, logical = box._layout:get_pixel_extents()
|
||||
local offset = 0
|
||||
|
@ -58,7 +38,7 @@ function draw(box, wibox, cr, width, height)
|
|||
offset = height - logical.height
|
||||
end
|
||||
cr:move_to(0, offset)
|
||||
layout_show(cr, box._layout)
|
||||
cr:show_layout(box._layout)
|
||||
end
|
||||
|
||||
--- Fit the given textbox
|
||||
|
@ -70,47 +50,37 @@ end
|
|||
|
||||
-- Return a pango layout which can be used if no cairo context is available
|
||||
local function get_temp_layout()
|
||||
local surface = oocairo.image_surface_create("argb32", 0, 0)
|
||||
local cr = oocairo.context_create(surface)
|
||||
return layout_create(cr)
|
||||
end
|
||||
|
||||
local temp_layout
|
||||
-- Test if a text is valid for a textbox. If it isn't, a lua error will be thrown.
|
||||
local function check_text(text, markup)
|
||||
if not temp_layout then
|
||||
temp_layout = get_temp_layout()
|
||||
end
|
||||
|
||||
if markup then
|
||||
temp_layout:set_markup(text)
|
||||
else
|
||||
temp_layout:set_text(text)
|
||||
end
|
||||
local surface = cairo.ImageSurface(cairo.Format.ARGB32, 0, 0)
|
||||
local cr = cairo.Context(surface)
|
||||
return PangoCairo.create_layout(cr)
|
||||
end
|
||||
|
||||
--- Set a textbox' text.
|
||||
-- @param text The text to set. This can contain pango markup (e.g. <b>bold</b>)
|
||||
function set_markup(box, text)
|
||||
check_text(text, true)
|
||||
box._layout:set_markup(text)
|
||||
local attr, parsed = Pango.parse_markup(text, -1, 0)
|
||||
-- In case of error, attr is false and parsed is an error message
|
||||
if not attr then error(parsed) end
|
||||
|
||||
box._layout.text = parsed
|
||||
box._layout.attributes = attr
|
||||
box:emit_signal("widget::updated")
|
||||
end
|
||||
|
||||
--- Set a textbox' text.
|
||||
-- @param text The text to display. Pango markup is ignored and shown as-is.
|
||||
function set_text(box, text)
|
||||
check_text(text, false)
|
||||
box._layout:set_text(text)
|
||||
box._layout.text = text
|
||||
box._layout.attributes = nil
|
||||
box:emit_signal("widget::updated")
|
||||
end
|
||||
|
||||
--- Set a textbox' ellipsize mode.
|
||||
-- @param mode Where should long lines be shortened? "start", "middle" or "end"
|
||||
function set_ellipsize(box, mode)
|
||||
local allowed = { none = true, start = true, middle = true, ["end"] = true }
|
||||
local allowed = { none = "NONE", start = "START", middle = "MIDDLE", ["end"] = "END" }
|
||||
if allowed[mode] then
|
||||
box._layout:set_ellipsize(mode)
|
||||
box._layout:set_ellipsize(allowed[mode])
|
||||
box:emit_signal("widget::updated")
|
||||
end
|
||||
end
|
||||
|
@ -118,9 +88,9 @@ end
|
|||
--- Set a textbox' wrap mode.
|
||||
-- @param mode Where to wrap? After "word", "char" or "word_char"
|
||||
function set_wrap(box, mode)
|
||||
local allowed = { word = true, char = true, word_char = true }
|
||||
local allowed = { word = "WORD", char = "CHAR", word_char = "WORD_CHAR" }
|
||||
if allowed[mode] then
|
||||
box._layout:set_wrap(mode)
|
||||
box._layout:set_wrap(allowed[mode])
|
||||
box:emit_signal("widget::updated")
|
||||
end
|
||||
end
|
||||
|
@ -138,9 +108,9 @@ end
|
|||
--- Set a textbox' horizontal alignment
|
||||
-- @param mode Where should the textbox be drawn? "left", "center" or "right"
|
||||
function set_align(box, mode)
|
||||
local allowed = { left = true, center = true, right = true }
|
||||
local allowed = { left = "LEFT", center = "CENTER", right = "RIGHT" }
|
||||
if allowed[mode] then
|
||||
box._layout:set_alignment(mode)
|
||||
box._layout:set_alignment(allowed[mode])
|
||||
box:emit_signal("widget::updated")
|
||||
end
|
||||
end
|
||||
|
|
17
luaa.c
17
luaa.c
|
@ -29,9 +29,6 @@
|
|||
|
||||
#include <basedir_fs.h>
|
||||
|
||||
#include <oopango.h>
|
||||
#include <oocairo.h>
|
||||
|
||||
#include "awesome.h"
|
||||
#include "config.h"
|
||||
#include "objects/timer.h"
|
||||
|
@ -637,20 +634,6 @@ luaA_init(xdgHandle* xdg)
|
|||
|
||||
lua_getfield(L, 1, "loaded");
|
||||
|
||||
/* Load oocairo */
|
||||
if (luaopen_oocairo(L) != 1)
|
||||
fatal("Loading oocairo failed");
|
||||
lua_pushvalue(L, 3); /* Copy the module */
|
||||
lua_setglobal(L, "oocairo"); /* Set the global entry */
|
||||
lua_setfield(L, 2, "oocairo"); /* Make it require()able */
|
||||
|
||||
/* Load oopango */
|
||||
if (luaopen_oopango(L) != 1)
|
||||
fatal("Loading oopango failed");
|
||||
lua_pushvalue(L, 3); /* Copy the module */
|
||||
lua_setglobal(L, "oopango"); /* Set the global entry */
|
||||
lua_setfield(L, 2, "oopango"); /* Make it require()able */
|
||||
|
||||
lua_pop(L, 2); /* pop "package" and "package.loaded" */
|
||||
|
||||
signal_add(&global_signals, "debug::error");
|
||||
|
|
|
@ -37,7 +37,7 @@ module("awesome")
|
|||
|
||||
--- Load an image
|
||||
-- @param name The file name
|
||||
-- @return An oocairo image surface
|
||||
-- @return A cairo image surface as light user datum
|
||||
-- @name load_image
|
||||
-- @class function
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ module("drawin")
|
|||
-- @field y The y coordinates.
|
||||
-- @field width The width of the drawin.
|
||||
-- @field height The height of the drawin.
|
||||
-- @field surface A oocairo surface that can be used for drawing.
|
||||
-- @field surface A cairo surface as light user datum that can be used for drawing.
|
||||
-- @class table
|
||||
-- @name drawin
|
||||
|
||||
|
|
|
@ -1043,17 +1043,15 @@ void
|
|||
client_set_icon(lua_State *L, int cidx, int iidx)
|
||||
{
|
||||
client_t *c = luaA_checkudata(L, cidx, &client_class);
|
||||
if(lua_isnil(L, iidx))
|
||||
cairo_surface_t *surf = NULL;
|
||||
if(!lua_isnil(L, iidx))
|
||||
{
|
||||
if(c->icon)
|
||||
cairo_surface_destroy(c->icon);
|
||||
c->icon = NULL;
|
||||
} else {
|
||||
cairo_surface_t **cairo_surface = (cairo_surface_t **)luaL_checkudata(L, iidx, OOCAIRO_MT_NAME_SURFACE);
|
||||
if(c->icon)
|
||||
cairo_surface_destroy(c->icon);
|
||||
c->icon = draw_dup_image_surface(*cairo_surface);
|
||||
cairo_surface_t **cairo_surface = (cairo_surface_t **)lua_touserdata(L, iidx);
|
||||
surf = draw_dup_image_surface(*cairo_surface);
|
||||
}
|
||||
if(c->icon)
|
||||
cairo_surface_destroy(c->icon);
|
||||
c->icon = surf;
|
||||
luaA_object_emit_signal(L, cidx < iidx ? cidx : cidx - 1, "property::icon", 0);
|
||||
}
|
||||
|
||||
|
@ -1431,9 +1429,11 @@ luaA_client_get_screen(lua_State *L, client_t *c)
|
|||
static int
|
||||
luaA_client_get_icon(lua_State *L, client_t *c)
|
||||
{
|
||||
if(c->icon)
|
||||
return oocairo_surface_push(L, c->icon);
|
||||
if(!c->icon)
|
||||
return 0;
|
||||
/* lua gets its own reference which it will have to destroy */
|
||||
lua_pushlightuserdata(L, cairo_surface_reference(c->icon));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -532,7 +532,9 @@ luaA_drawin_set_visible(lua_State *L, drawin_t *drawin)
|
|||
static int
|
||||
luaA_drawin_get_surface(lua_State *L, drawin_t *drawin)
|
||||
{
|
||||
return oocairo_surface_push(L, drawin->surface);
|
||||
/* Lua gets its own reference which it will have to destroy */
|
||||
lua_pushlightuserdata(L, cairo_surface_reference(drawin->surface));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Refresh a drawin's content. This has to be called whenever some drawing to
|
||||
|
|
8
root.c
8
root.c
|
@ -263,7 +263,6 @@ luaA_root_wallpaper(lua_State *L)
|
|||
xcb_get_property_reply_t *prop_r;
|
||||
xcb_pixmap_t *rootpix;
|
||||
cairo_surface_t *surface;
|
||||
int ret;
|
||||
|
||||
prop_c = xcb_get_property_unchecked(globalconf.connection, false,
|
||||
globalconf.screen->root, _XROOTPMAP_ID, XCB_ATOM_PIXMAP, 0, 1);
|
||||
|
@ -282,9 +281,10 @@ luaA_root_wallpaper(lua_State *L)
|
|||
*/
|
||||
surface = cairo_xcb_surface_create(globalconf.connection, *rootpix, globalconf.default_visual,
|
||||
globalconf.screen->width_in_pixels, globalconf.screen->height_in_pixels);
|
||||
ret = oocairo_surface_push(globalconf.L, surface);
|
||||
cairo_surface_destroy(surface);
|
||||
return ret;
|
||||
|
||||
/* lua has to make sure this surface gets destroyed */
|
||||
lua_pushlightuserdata(L, surface);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const struct luaL_reg awesome_root_lib[] =
|
||||
|
|
Loading…
Reference in New Issue