1676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org */
8676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
10676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org#ifndef SkClampRange_DEFINED
11676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org#define SkClampRange_DEFINED
12676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
13676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org#include "SkFixed.h"
14676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
15676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org/**
16676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *  Iteration fixed fx by dx, clamping as you go to [0..0xFFFF], this class
17676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *  computes the (up to) 3 spans there are:
18676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *
19676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *  range0: use constant value V0
20676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *  range1: iterate as usual fx += dx
21676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org *  range2: use constant value V1
22676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org */
23676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.orgstruct SkClampRange {
24676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org    int fCount0;    // count for fV0
25676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org    int fCount1;    // count for interpolating (fV0...fV1)
26676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org    int fCount2;    // count for fV1
2763c1ad82fc4232daff1b686cc78bba4c6a42916dreed@google.com    SkFixed fFx1;   // initial fx value for the fCount1 range.
2863c1ad82fc4232daff1b686cc78bba4c6a42916dreed@google.com                    // only valid if fCount1 > 0
29676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org    int fV0, fV1;
30676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
31676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org    void init(SkFixed fx, SkFixed dx, int count, int v0, int v1);
3213659f1f8d2e705c565203d45870b1afcd47cf98reed@google.com
3313659f1f8d2e705c565203d45870b1afcd47cf98reed@google.comprivate:
3413659f1f8d2e705c565203d45870b1afcd47cf98reed@google.com    void initFor1(SkFixed fx);
35676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org};
36676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org
37676d69b82f2e2c6bf743ff8c7fbb436f36a004e2mike@reedtribe.org#endif
38