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