Hello Hakki,
Thanks for your answer, and for your bindings !
The way I've done it in python, with pyCairo is like that :
****
i=0
path=ctx.copy_path()
for type, points in ctx.copy_path():
i+=1
if type == cairo.PATH_MOVE_TO:
if first:
ctx.new_path()
first = False
x, y = function(*points)
ctx.move_to(x, y)
elif type == cairo.PATH_LINE_TO:
x, y = function(*points)
ctx.line_to(x, y)
elif type == cairo.PATH_CURVE_TO:
x1, y1, x2, y2, x3, y3 = points
x1, y1 = function(x1, y1)
x2, y2 = function(x2, y2)
x3, y3 = function(x3,
y3)
ctx.curve_to(x1, y1, x2, y2, x3, y3)
elif type == cairo.PATH_CLOSE_PATH:
ctx.close_path()
***
It's inspired from this file :
/usr/share/doc/python-cairo/examples/warpedtext.py
For the previous script, it doesn't work! I think it's because I run it from conky (not with the lua command),so maybe some implementations are missing in conky.
I've got errors at this line (attempt to index global 'cairo' (a nil value)) :
local headertype = cairo.path_data_header_type(path, i)
or with this
local headertype = cairo_path_data_header_type(path, i)
And the beginnig of the script is :
local i = 0
local numdata
= path.num_data
while i < numdata do
-- data = ""> local headertype = cairo_path_data_header_type(path, i)
...
As I said, I run it from conky so the problem can be here . I will try to run it directly with lua next week!
thanks again!
De : Hakki Dogusan <dogusanh@tr.net>
À : lua-l@lists.lua.org
Envoyé le : Mer 20 octobre 2010, 9h 57min 13s
Objet : Re: loop through cairo_path_data_t
Hi,
(Small modification in previous example)
20/10/2010 10:37, Hakki Dogusan wrote:
> Hi,
>
[snip]
>>
>
> Will something like as follows work for you?
>
> -------------------------------------------------------------------------
-- cairo_path_t *path;
-- cairo_path_data_t *data;
local path = cairo.copy_path (cr);
local i = 0
local numdata = cairo.path_num_data(path)
while i < numdata do
-- data = ""> local headertype = cairo.path_data_header_type(path, i)
if headertype == CAIRO.PATH_MOVE_TO then
local x,y = cairo.path_data_point(path, i, 1)
do_move_to_things (x, y);
elseif headertype == CAIRO.PATH_LINE_TO then
local x,y = cairo.path_data_point(path, i, 1)
do_line_to_things (x, y);
elseif headertype == CAIRO.PATH_CURVE_TO
then
local x1,y1 = cairo.path_data_point(path, i, 1)
local x2,y2 = cairo.path_data_point(path, i, 2)
local x3,y3 = cairo.path_data_point(path, i, 3)
do_curve_to_things (x1, y1, x2, y2, x3, y3);
elseif headertype == CAIRO.PATH_CLOSE_PATH then
do_close_path_things ();
end
local headerlength = cairo.path_data_header_length(path, i)
i = i + headerlength
end
cairo.path_destroy (path);
> -------------------------------------------------------------------------
--
Regards,
Hakki Dogusan