Code

make spcurve::first_point and last_point boost::optional
[inkscape.git] / src / selection.h
index d8427108f344eece726a6846e5e5b66f2ded30ed..f02aeb456725e951382625b077d9e6d8b14b8f42 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <vector>
 #include <map>
+#include <list>
 #include <sigc++/sigc++.h>
 
 #include "libnr/nr-rect.h"
@@ -31,6 +32,8 @@
 #include "sp-item.h"
 
 class SPItem;
+class SPBox3D;
+class Persp3D;
 
 namespace Inkscape {
 namespace XML {
@@ -225,6 +228,12 @@ public:
     ///      method for that
     GSList const *reprList();
 
+    /* list of all perspectives which have a 3D box in the current selection
+       (these may also be nested in groups) */
+    std::list<Persp3D *> const perspList();
+
+    std::list<SPBox3D *> const box3DList();
+
     /** @brief Returns the number of layers in which there are selected objects */
     guint numberOfLayers();
 
@@ -234,7 +243,7 @@ public:
     /** @brief Returns the bounding rectangle of the selection */
     NRRect *bounds(NRRect *dest, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
     /** @brief Returns the bounding rectangle of the selection */
-    NR::Maybe<NR::Rect> bounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
+    boost::optional<NR::Rect> bounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
 
     /**
      * @brief Returns the bounding rectangle of the selection
@@ -248,18 +257,18 @@ public:
      *
      * \todo how is this different from bounds()?
      */
-    NR::Maybe<NR::Rect> boundsInDocument(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
+    boost::optional<NR::Rect> boundsInDocument(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
 
     /**
      * @brief Returns the rotation/skew center of the selection
      */
-    NR::Maybe<NR::Point> center() const;
+    boost::optional<NR::Point> center() const;
 
     /**
      * @brief Gets the selection's snap points.
      * @return Selection's snap points
      */
-    std::vector<NR::Point> getSnapPoints() const;
+    std::vector<NR::Point> getSnapPoints(bool includeItemCenter) const;
 
     /**
      * @brief Gets the snap points of a selection that form a convex hull.
@@ -336,6 +345,14 @@ private:
     mutable GSList *_reprs;
     mutable GSList *_items;
 
+    void add_box_perspective(SPBox3D *box);
+    void add_3D_boxes_recursively(SPObject *obj);
+    void remove_box_perspective(SPBox3D *box);
+    void remove_3D_boxes_recursively(SPObject *obj);
+
+    std::map<Persp3D *, unsigned int> _persps;
+    std::list<SPBox3D *> _3dboxes;
+
     GC::soft_ptr<SPDesktop> _desktop;
     SPObject* _selection_context;
     guint _flags;