12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #ifndef _GRADIENT_H
- #define _GRADIENT_H
- #include <bfc/wasabi_std.h>
- #include <bfc/string/StringW.h>
- #include <tataki/color/filteredcolor.h>
- class GradientPoint
- {
- public:
- GradientPoint(float p, ARGB32 c, const wchar_t *group=L"") : pos(p), dist(0), color(c, group), x(0), y(0) { }
- float pos;
- double dist;
- FilteredColor color;
- float x, y;
- static int compareItem(GradientPoint *p1, GradientPoint* p2) {
- int r = CMP3(p1->pos, p2->pos);
- if (r == 0) return CMP3(p1, p2);
- else return r;
- }
- };
- class Gradient
- {
- public:
- Gradient();
- virtual ~Gradient();
- void setX1(float x1);
- void setY1(float y1);
- void setX2(float x2);
- void setY2(float y2);
-
- void clearPoints();
- void addPoint(float pos, ARGB32 color);
- // "pos=color;pos=color" "0.25=34,45,111"
- void setPoints(const wchar_t *str);
- void setReverseColors(int c);
- void setAntialias(int c);
- void setMode(const wchar_t *mode);
- void setGammaGroup(const wchar_t *group);
- // note: this will automatically premultiply against alpha
- void renderGradient(ARGB32 *bits, int width, int height, int pitch=0);
- protected:
- virtual void onParamChange() { }
- ARGB32 getPixelCirc(double x, double y);
- private:
- float gradient_x1, gradient_y1, gradient_x2, gradient_y2;
- class GradientList : public PtrListQuickSorted<GradientPoint, GradientPoint> { };
- GradientList list;
- void renderGrad(ARGB32 *bits, int len, int *positions);
- int reverse_colors;
- int antialias;
- StringW mode, gammagroup;
- };
- #endif
|