1filename = "" 2 3function sk_scrape_startcanvas(c, fileName) 4 filename = fileName 5end 6 7function sk_scrape_endcanvas(c, fileName) 8 9end 10 11LuaDoubleNearlyZero = 1.0 / bit32.lshift(1.0, 12) 12 13function LuaDoubleNearlyEqual(a, b) 14 return math.abs(a-b) <= LuaDoubleNearlyZero 15end 16 17function bounds(rect) 18 local width = rect.right - rect.left 19 local height = rect.bottom - rect.top 20 21 return width, height 22end 23 24gradients = {} 25 26i = 1 27 28function sk_scrape_accumulate(t) 29 local p = t.paint 30 if p then 31 local s = p:getShader() 32 if s then 33 local g = s:asAGradient() 34 if g then 35 gradients[i] = {} 36 37 gradients[i].filename = filename 38 39 local width, height = -1, -1 40 if t.rect then 41 width, height = bounds(t.rect) 42 elseif t.rrect then 43 width, height = bounds(t.rrect:rect()) 44 elseif t.path then 45 width, height = bounds(t.path:getBounds()) 46 end 47 gradients[i].boundsWidth = width 48 gradients[i].boundsHeight = height 49 50 gradients[i].colorCount = g.colorCount 51 gradients[i].type = g.type 52 gradients[i].tile = g.tile 53 54 isEvenlySpaced = true 55 for j = 1, g.colorCount, 1 do 56 if not LuaDoubleNearlyEqual(g.positions[j], (j-1)/(g.colorCount-1)) then 57 isEvenlySpaced = false 58 end 59 end 60 gradients[i].isEvenlySpaced = isEvenlySpaced 61 62 numHardStops = 0 63 for j = 2, g.colorCount, 1 do 64 if LuaDoubleNearlyEqual(g.positions[j], g.positions[j-1]) then 65 numHardStops = numHardStops + 1 66 end 67 end 68 gradients[i].numHardStops = numHardStops 69 70 gradients[i].verb = t.verb 71 72 gradients[i].positions = {} 73 for j = 1, g.colorCount, 1 do 74 gradients[i].positions[j] = g.positions[j] 75 end 76 77 i = i + 1 78 end 79 end 80 end 81end 82 83function sk_scrape_summarize() 84 for k, v in pairs(gradients) do 85 local pos = "" 86 for j = 1, v.colorCount , 1 do 87 pos = pos .. v.positions[j] 88 if j ~= v.colorCount then 89 pos = pos .. "," 90 end 91 end 92 93 io.write(string.format("%s %d %s %s %d %d %s %d %d %s\n", 94 v.filename, 95 v.colorCount, 96 v.type, 97 v.tile, 98 tonumber(v.isEvenlySpaced and 1 or 0), 99 v.numHardStops, 100 v.verb, 101 v.boundsWidth, 102 v.boundsHeight, 103 pos)) 104 end 105end 106 107