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