diff --git a/src/sp-gradient.h b/src/sp-gradient.h
index 3a26f5e5a53d618e6738ec6e958d60a4d873abef..fbcc4934ec0f0872a1afc47e4d318985ca395dd9 100644 (file)
--- a/src/sp-gradient.h
+++ b/src/sp-gradient.h
-#ifndef __SP_GRADIENT_H__
-#define __SP_GRADIENT_H__
+#ifndef SEEN_SP_GRADIENT_H
+#define SEEN_SP_GRADIENT_H
/** \file
* SVG <stop> <linearGradient> and <radialGradient> implementation
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>
*
+ * Copyrigt (C) 2010 Jon A. Cruz
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
*/
#include <gdk/gdktypes.h>
+#include <glibmm/ustring.h>
#include "libnr/nr-matrix.h"
#include "sp-paint-server.h"
#include "sp-gradient-spread.h"
struct SPGradientReference;
+
+#define SP_TYPE_GRADIENT (SPGradient::getType())
+#define SP_GRADIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GRADIENT, SPGradient))
+#define SP_GRADIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GRADIENT, SPGradientClass))
+#define SP_IS_GRADIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GRADIENT))
+#define SP_IS_GRADIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GRADIENT))
+
typedef enum {
- SP_GRADIENT_TYPE_UNKNOWN,
- SP_GRADIENT_TYPE_LINEAR,
- SP_GRADIENT_TYPE_RADIAL
+ SP_GRADIENT_TYPE_UNKNOWN,
+ SP_GRADIENT_TYPE_LINEAR,
+ SP_GRADIENT_TYPE_RADIAL
} SPGradientType;
typedef enum {
- SP_GRADIENT_STATE_UNKNOWN,
- SP_GRADIENT_STATE_VECTOR,
- SP_GRADIENT_STATE_PRIVATE
+ SP_GRADIENT_STATE_UNKNOWN,
+ SP_GRADIENT_STATE_VECTOR,
+ SP_GRADIENT_STATE_PRIVATE
} SPGradientState;
typedef enum {
POINT_RG_MID1,
POINT_RG_MID2,
// insert new point types here.
-
+
POINT_G_INVALID
} GrPointType;
* \todo fixme: Implement more here (Lauris)
*/
struct SPGradient : public SPPaintServer {
- /** Reference (href) */
- SPGradientReference *ref;
- /** State in Inkscape gradient system */
- guint state : 2;
- /** gradientUnits attribute */
- SPGradientUnits units;
- guint units_set : 1;
- /** gradientTransform attribute */
- Geom::Matrix gradientTransform;
- guint gradientTransform_set : 1;
- /** spreadMethod attribute */
- SPGradientSpread spread;
- guint spread_set : 1;
- /** Gradient stops */
- guint has_stops : 1;
- /** Composed vector */
- SPGradientVector vector;
- /** Rendered color array (4 * 1024 bytes) */
- guchar *color;
-
- sigc::connection modified_connection;
+
+ /** Reference (href) */
+ SPGradientReference *ref;
+
+ /** State in Inkscape gradient system */
+ guint state : 2;
+
+private:
+ /** gradientUnits attribute */
+ SPGradientUnits units;
+ guint units_set : 1;
+public:
+
+ /** gradientTransform attribute */
+ Geom::Matrix gradientTransform;
+ guint gradientTransform_set : 1;
+
+private:
+ /** spreadMethod attribute */
+ SPGradientSpread spread;
+ guint spread_set : 1;
+
+ /** Gradient stops */
+ guint has_stops : 1;
+public:
+
+ /** Composed vector */
+ SPGradientVector vector;
+
+ /** Rendered color array (4 * 1024 bytes) */
+ guchar *color;
+
+ sigc::connection modified_connection;
+
+ bool hasStops() const;
+
+ SPStop* getFirstStop();
+ int getStopCount() const;
+
+
+ bool isUnitsSet() const;
+ SPGradientUnits getUnits() const;
+ void setUnits(SPGradientUnits units);
+
+
+ bool isSpreadSet() const;
+ SPGradientSpread getSpread() const;
+
+/**
+ * Returns private vector of given gradient (the gradient at the end of the href chain which has
+ * stops), optionally normalizing it.
+ *
+ * \pre SP_IS_GRADIENT(gradient).
+ * \pre There exists a gradient in the chain that has stops.
+ */
+ SPGradient *getVector(bool force_private = false);
+
+ static GType getType();
+
+ /** Forces vector to be built, if not present (i.e. changed) */
+ void ensureVector();
+
+ /** Ensures that color array is populated */
+ void ensureColors();
+
+ /**
+ * Set spread property of gradient and emit modified.
+ */
+ void setSpread(SPGradientSpread spread);
+
+ SPGradientSpread fetchSpread();
+ SPGradientUnits fetchUnits();
+
+ void setSwatch(bool swatch = true);
+
+private:
+ bool invalidateVector();
+ void rebuildVector();
+
+ friend class SPGradientImpl;
+ friend class SPLGPainter;
+ friend class SPRGPainter;
};
/**
* The SPGradient vtable.
*/
struct SPGradientClass {
- SPPaintServerClass parent_class;
+ SPPaintServerClass parent_class;
};
#include "sp-gradient-fns.h"
-#endif /* !__SP_GRADIENT_H__ */
+#endif // SEEN_SP_GRADIENT_H
/*
Local Variables:
fill-column:99
End:
*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :