15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2011 Google Inc.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SkClampRange_DEFINED
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SkClampRange_DEFINED
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkFixed.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  Iteration fixed fx by dx, clamping as you go to [0..0xFFFF], this class
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  computes the (up to) 3 spans there are:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  range0: use constant value V0
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  range1: iterate as usual fx += dx
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  range2: use constant value V1
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SkClampRange {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int fCount0;    // count for fV0
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int fCount1;    // count for interpolating (fV0...fV1)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int fCount2;    // count for fV1
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SkFixed fFx1;   // initial fx value for the fCount1 range.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    // only valid if fCount1 > 0
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int fV0, fV1;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void init(SkFixed fx, SkFixed dx, int count, int v0, int v1);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)private:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void initFor1(SkFixed fx);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)