aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/lua/gradients.lua
blob: fb43017b1d8c6cb20d72d467d56c7b74fa7ad26e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function sk_scrape_startcanvas(c, fileName) end
function sk_scrape_endcanvas(c, fileName) end

SkScalarNearlyZero = 1.0 / bit32.lshift(1.0, 12)

function SkScalarNearlyEqual(a, b)
    return math.abs(a,b) <= SkScalarNearlyZero
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].colorCount = g.colorCount
                gradients[i].type       = g.type
                gradients[i].tile       = g.tile

                numHardStops   = 0
                isEvenlySpaced = true
                for j = 2, g.colorCount, 1 do
                    if not SkScalarNearlyEqual(g.positions[j], j/(g.colorCount-1)) then
                        isEvenlySpaced = false
                    end

                    if SkScalarNearlyEqual(g.positions[j], g.positions[j-1]) then
                        numHardStops = numHardStops + 1
                    end
                end

                gradients[i].isEvenlySpaced = isEvenlySpaced
                gradients[i].numHardStops   = numHardStops;

                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("%d %s %s %d %d %s\n",
                                v.colorCount,
                                v.type,
                                v.tile,
                                tonumber(v.isEvenlySpaced and 1 or 0),
                                v.numHardStops,
                                pos))
    end
end