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