* Copyright 2006-2007, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Stephan Aßmus <superstippi@gmx.de>
*/
#ifndef GRADIENT_TRANSFORMABLE_H
#define GRADIENT_TRANSFORMABLE_H
#ifdef ICON_O_MATIC
# include <Archivable.h>
# include <Referenceable.h>
# include "Observable.h"
#endif
#include "IconBuild.h"
#include "Transformable.h"
#include <GraphicsDefs.h>
#include <Gradient.h>
#include <List.h>
class BMessage;
enum gradients_type {
GRADIENT_LINEAR = 0,
GRADIENT_CIRCULAR,
GRADIENT_DIAMOND,
GRADIENT_CONIC,
GRADIENT_XY,
GRADIENT_SQRT_XY
};
enum interpolation_type {
INTERPOLATION_LINEAR = 0,
INTERPOLATION_SMOOTH
};
_BEGIN_ICON_NAMESPACE
#ifdef ICON_O_MATIC
class Gradient : public BArchivable,
public Observable,
public BReferenceable,
public Transformable {
#else
class Gradient : public Transformable {
#endif
public:
Gradient(bool empty = false);
Gradient(BMessage* archive);
Gradient(const Gradient& other);
virtual ~Gradient();
#ifdef ICON_O_MATIC
status_t Archive(BMessage* into, bool deep = true) const;
#else
inline void Notify() {}
#endif
Gradient& operator=(const Gradient& other);
bool operator==(const Gradient& other) const;
bool operator!=(const Gradient& other) const;
bool ColorStepsAreEqual(
const Gradient& other) const;
void SetColors(const Gradient& other);
int32 AddColor(const rgb_color& color, float offset);
bool AddColor(const BGradient::ColorStop& color,
int32 index);
bool RemoveColor(int32 index);
bool SetColor(int32 index,
const BGradient::ColorStop& step);
bool SetColor(int32 index, const rgb_color& color);
bool SetOffset(int32 index, float offset);
int32 CountColors() const;
BGradient::ColorStop* ColorAt(int32 index) const;
BGradient::ColorStop* ColorAtFast(int32 index) const;
void SetType(gradients_type type);
gradients_type Type() const
{ return fType; }
void SetInterpolation(interpolation_type type);
interpolation_type Interpolation() const
{ return fInterpolation; }
void SetInheritTransformation(bool inherit);
bool InheritTransformation() const
{ return fInheritTransformation; }
void MakeGradient(uint32* colors,
int32 count) const;
void FitToBounds(const BRect& bounds);
BRect GradientArea() const;
virtual void TransformationChanged();
void PrintToStream() const;
private:
void _MakeEmpty();
BList fColors;
gradients_type fType;
interpolation_type fInterpolation;
bool fInheritTransformation;
};
_END_ICON_NAMESPACE
#endif