diff options
author | fmenozzi <fmenozzi@google.com> | 2016-06-28 14:03:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-28 14:03:03 -0700 |
commit | b4f254e051b375c098c3f1c943b2b0886fec60e1 (patch) | |
tree | 35cad47ab3027782f4f3682ec62506ce5407cb31 /src/utils/SkLua.cpp | |
parent | d66110f5972169dbcda8932c3a9a001adff23df4 (diff) |
Changes to Lua gradient scraping
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2103973002
Review-Url: https://codereview.chromium.org/2103973002
Diffstat (limited to 'src/utils/SkLua.cpp')
-rw-r--r-- | src/utils/SkLua.cpp | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp index 98880d0154..e6d5d4c5ff 100644 --- a/src/utils/SkLua.cpp +++ b/src/utils/SkLua.cpp @@ -1268,24 +1268,37 @@ static int lshader_asAGradient(lua_State* L) { SkShader::GradientInfo info; sk_bzero(&info, sizeof(info)); - SkColor colors[3]; // hacked in for extracting info on 3 color case. - SkScalar pos[3]; - - info.fColorCount = 3; - info.fColors = &colors[0]; - info.fColorOffsets = &pos[0]; - SkShader::GradientType t = shader->asAGradient(&info); if (SkShader::kNone_GradientType != t) { + SkAutoTArray<SkScalar> pos(info.fColorCount); + info.fColorOffsets = pos.get(); + shader->asAGradient(&info); + + bool containsHardStops = false; + bool isEvenlySpaced = true; + for (int i = 1; i < info.fColorCount; i++) { + if (SkScalarNearlyEqual(info.fColorOffsets[i], info.fColorOffsets[i-1])) { + containsHardStops = true; + } + if (!SkScalarNearlyEqual(info.fColorOffsets[i], i/(info.fColorCount - 1.0f))) { + isEvenlySpaced = false; + } + } + lua_newtable(L); - setfield_string(L, "type", gradtype2string(t)); - setfield_number(L, "colorCount", info.fColorCount); - setfield_string(L, "tile", mode2string(info.fTileMode)); + setfield_string(L, "type", gradtype2string(t)); + setfield_string(L, "tile", mode2string(info.fTileMode)); + setfield_number(L, "colorCount", info.fColorCount); + setfield_boolean(L, "containsHardStops", containsHardStops); + setfield_boolean(L, "isEvenlySpaced", isEvenlySpaced); - if (info.fColorCount == 3){ - setfield_number(L, "midPos", pos[1]); + lua_newtable(L); + for (int i = 0; i < info.fColorCount; i++) { + // Lua uses 1-based indexing + setarray_scalar(L, i+1, pos[i]); } + lua_setfield(L, -2, "positions"); return 1; } |