You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.0 KiB
106 lines
3.0 KiB
filename = "" |
|
|
|
function sk_scrape_startcanvas(c, fileName) |
|
filename = fileName |
|
end |
|
|
|
function sk_scrape_endcanvas(c, fileName) |
|
|
|
end |
|
|
|
LuaDoubleNearlyZero = 1.0 / bit32.lshift(1.0, 12) |
|
|
|
function LuaDoubleNearlyEqual(a, b) |
|
return math.abs(a-b) <= LuaDoubleNearlyZero |
|
end |
|
|
|
function bounds(rect) |
|
local width = rect.right - rect.left |
|
local height = rect.bottom - rect.top |
|
|
|
return width, height |
|
end |
|
|
|
gradients = {} |
|
|
|
i = 1 |
|
|
|
function sk_scrape_accumulate(t) |
|
local p = t.paint |
|
if p then |
|
local s = p:getShader() |
|
if s then |
|
local g = s:asAGradient() |
|
if g then |
|
gradients[i] = {} |
|
|
|
gradients[i].filename = filename |
|
|
|
local width, height = -1, -1 |
|
if t.rect then |
|
width, height = bounds(t.rect) |
|
elseif t.rrect then |
|
width, height = bounds(t.rrect:rect()) |
|
elseif t.path then |
|
width, height = bounds(t.path:getBounds()) |
|
end |
|
gradients[i].boundsWidth = width |
|
gradients[i].boundsHeight = height |
|
|
|
gradients[i].colorCount = g.colorCount |
|
gradients[i].type = g.type |
|
gradients[i].tile = g.tile |
|
|
|
isEvenlySpaced = true |
|
for j = 1, g.colorCount, 1 do |
|
if not LuaDoubleNearlyEqual(g.positions[j], (j-1)/(g.colorCount-1)) then |
|
isEvenlySpaced = false |
|
end |
|
end |
|
gradients[i].isEvenlySpaced = isEvenlySpaced |
|
|
|
numHardStops = 0 |
|
for j = 2, g.colorCount, 1 do |
|
if LuaDoubleNearlyEqual(g.positions[j], g.positions[j-1]) then |
|
numHardStops = numHardStops + 1 |
|
end |
|
end |
|
gradients[i].numHardStops = numHardStops |
|
|
|
gradients[i].verb = t.verb |
|
|
|
gradients[i].positions = {} |
|
for j = 1, g.colorCount, 1 do |
|
gradients[i].positions[j] = g.positions[j] |
|
end |
|
|
|
i = i + 1 |
|
end |
|
end |
|
end |
|
end |
|
|
|
function sk_scrape_summarize() |
|
for k, v in pairs(gradients) do |
|
local pos = "" |
|
for j = 1, v.colorCount , 1 do |
|
pos = pos .. v.positions[j] |
|
if j ~= v.colorCount then |
|
pos = pos .. "," |
|
end |
|
end |
|
|
|
io.write(string.format("%s %d %s %s %d %d %s %d %d %s\n", |
|
v.filename, |
|
v.colorCount, |
|
v.type, |
|
v.tile, |
|
tonumber(v.isEvenlySpaced and 1 or 0), |
|
v.numHardStops, |
|
v.verb, |
|
v.boundsWidth, |
|
v.boundsHeight, |
|
pos)) |
|
end |
|
end |
|
|
|
|