Code

Extensions. Add option to choose dxf output units
[inkscape.git] / src / sp-gradient.h
index 947cc49ccf727fc196d77eabf85f8368a6634d58..fbcc4934ec0f0872a1afc47e4d318985ca395dd9 100644 (file)
@@ -1,5 +1,5 @@
-#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
@@ -7,7 +7,9 @@
  * 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.
@@ -16,6 +18,7 @@
  */
 
 #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,
@@ -67,20 +77,24 @@ struct SPGradient : public SPPaintServer {
     /** 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;
@@ -90,8 +104,54 @@ struct SPGradient : public SPPaintServer {
 
     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();
 
-    bool isSolid() const;
+    friend class SPGradientImpl;
+    friend class SPLGPainter;
+    friend class SPRGPainter;
 };
 
 /**
@@ -104,7 +164,7 @@ struct SPGradientClass {
 
 #include "sp-gradient-fns.h"
 
-#endif /* !__SP_GRADIENT_H__ */
+#endif // SEEN_SP_GRADIENT_H
 
 /*
   Local Variables:
@@ -115,4 +175,4 @@ struct SPGradientClass {
   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 :