/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE  AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE:  you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import * as tslib_1 from "tslib";
import { Base, BaseError, markType } from "igniteui-react-core/ES5/type";
import { truncate, isNaN_ } from "igniteui-react-core/ES5/number";
/**
 * @hidden
 */
var TriangleRasterizer = /** @class */ (function (_super) {
    tslib_1.__extends(TriangleRasterizer, _super);
    function TriangleRasterizer(a, b, c, d, e, f, g) {
        var _this = _super.call(this) || this;
        _this.a = null;
        _this.k = 0;
        _this.j = 0;
        _this.g = 0;
        _this.f = 0;
        _this.b = null;
        _this.d = null;
        if (a == null || b == null || e == null) {
            throw new BaseError(0);
        }
        _this.a = a;
        _this.c = b;
        _this.e = e;
        _this.m = f;
        _this.l = g;
        _this.g = c;
        _this.f = d;
        return _this;
    }
    Object.defineProperty(TriangleRasterizer.prototype, "m", {
        get: function () {
            return this.k;
        },
        set: function (a) {
            this.k = a;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(TriangleRasterizer.prototype, "l", {
        get: function () {
            return this.j;
        },
        set: function (a) {
            this.j = a;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(TriangleRasterizer.prototype, "i", {
        get: function () {
            return this.g;
        },
        set: function (a) {
            this.g = a;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(TriangleRasterizer.prototype, "h", {
        get: function () {
            return this.f;
        },
        set: function (a) {
            this.f = a;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(TriangleRasterizer.prototype, "c", {
        get: function () {
            return this.b;
        },
        set: function (a) {
            this.b = a;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(TriangleRasterizer.prototype, "e", {
        get: function () {
            return this.d;
        },
        set: function (a) {
            this.d = a;
        },
        enumerable: true,
        configurable: true
    });
    TriangleRasterizer.prototype.p = function (a, b, c, d, e, f, g, h) {
        var i = this.k;
        var j = this.j;
        var k;
        var l;
        if (d.y > e.y) {
            k = d;
            d = e;
            e = k;
            l = g;
            g = h;
            h = l;
        }
        if (c.y > e.y) {
            k = c;
            c = e;
            e = k;
            l = f;
            f = h;
            h = l;
        }
        if (c.y > d.y) {
            k = c;
            c = d;
            d = k;
            l = f;
            f = g;
            g = l;
        }
        var m = truncate(Math.round(c.y));
        var n = truncate(Math.round(d.y));
        var o = truncate(Math.round(e.y));
        if (o == m) {
            return;
        }
        if (isNaN_(f) || isNaN_(g) || isNaN_(h)) {
            return;
        }
        var p = (d.x - c.x) * (e.y - c.y) - (e.x - c.x) * (d.y - c.y) >= 0;
        var q = Math.max(0, m);
        var r = Math.min(j - 1, n);
        for (var s = q; s < r; ++s) {
            var t = (s - m) / (n - m);
            var u = c.x + t * (d.x - c.x);
            var v = f + t * (g - f);
            var w = (s - m) / (o - m);
            var x = c.x + w * (e.x - c.x);
            var y = f + w * (h - f);
            if (p) {
                this.o(a, b, s, truncate(Math.floor(x)), truncate(Math.ceil(u)), y, v);
            }
            else {
                this.o(a, b, s, truncate(Math.floor(u)), truncate(Math.ceil(x)), v, y);
            }
        }
        {
            var z = Math.min(j - 1, Math.max(0, n));
            var aa = Math.min(j - 1, o);
            var ab = 0;
            var ac = d.x + ab * (e.x - d.x);
            var ad = g + ab * (h - g);
            var ae = z;
            var af = (o - m);
            var ag = (ae - m) / af;
            var ah = c.x + ag * (e.x - c.x);
            var ai = f + ag * (h - f);
            do {
                if (p) {
                    this.o(a, b, ae, truncate(Math.floor(ah)), truncate(Math.ceil(ac)), ai, ad);
                }
                else {
                    this.o(a, b, ae, truncate(Math.floor(ac)), truncate(Math.ceil(ah)), ad, ai);
                }
                ++ae;
                ab = (ae - n) / (o - n);
                ac = d.x + ab * (e.x - d.x);
                ad = g + ab * (h - g);
                ag = (ae - m) / af;
                ah = c.x + ag * (e.x - c.x);
                ai = f + ag * (h - f);
            } while (ae < aa);
        }
    };
    TriangleRasterizer.prototype.o = function (a, b, c, d, e, f, g) {
        var h = this.k;
        var i = d > 0 ? d : 0;
        var j = e < h - 1 ? e : h - 1;
        var k = c * h * 4 + (i * 4);
        var l = g - f;
        var m = 1 / (e - d);
        var n = this.d;
        var o = this.g;
        var p = this.f;
        var q = c * h;
        for (var r = i; r <= j; r++) {
            var s = f + l * (r - d) * m;
            var color_ = this.b.getColor(s, o, p, n);
            this.a[k] = (color_._r);
            this.a[k + 1] = (color_._g);
            this.a[k + 2] = (color_._b);
            this.a[k + 3] = (color_._a);
            b[q + r] = a + 1;
            k += 4;
        }
    };
    TriangleRasterizer.prototype.n = function () {
    };
    TriangleRasterizer.$t = markType(TriangleRasterizer, 'TriangleRasterizer');
    return TriangleRasterizer;
}(Base));
export { TriangleRasterizer };
