]> Shamusworld >> Repos - architektonas/blobdiff - src/base/rs_snapper.cpp
Beginnings of new render path (Snapper)...
[architektonas] / src / base / rs_snapper.cpp
index 13d76a92da0e4642819569af28793c790a753fcd..542810eb427a2a1b3f8e4daaa953a7b63bf64f0b 100644 (file)
@@ -20,6 +20,7 @@
 #include "graphicview.h"
 #include "rs_grid.h"
 #include "rs_information.h"
+#include "paintintf.h"
 #include "settings.h"
 
 /**
@@ -31,6 +32,12 @@ RS_Snapper::RS_Snapper(RS_EntityContainer & c, GraphicView & gv):
        init();
 }
 
+RS_Snapper::RS_Snapper(void):
+       container(NULL), graphicView(NULL), finished(false)
+{
+       init();
+}
+
 /**
  * Destructor.
  */
@@ -43,8 +50,12 @@ RS_Snapper::~RS_Snapper()
  */
 void RS_Snapper::init()
 {
-       snapMode = graphicView->getDefaultSnapMode();
-       snapRes = graphicView->getSnapRestriction();
+       if (graphicView)
+       {
+               snapMode = graphicView->getDefaultSnapMode();
+               snapRes = graphicView->getSnapRestriction();
+       }
+
        keyEntity = NULL;
        snapSpot = Vector(false);
        snapCoord = Vector(false);
@@ -68,6 +79,17 @@ void RS_Snapper::finish()
        finished = true;
 }
 
+void RS_Snapper::SetContainer(RS_EntityContainer * c)
+{
+       container = c;
+}
+
+//bleh
+void RS_Snapper::SetGraphicView(GraphicView * v)
+{
+       graphicView = v;
+}
+
 /**
  * @return Pointer to the entity which was the key entity for the
  * last successful snapping action. If the snap mode is "end point"
@@ -112,10 +134,10 @@ Vector RS_Snapper::snapPoint(QMouseEvent * e)
 {
        RS_DEBUG->print("RS_Snapper::snapPoint");
 
-       deleteSnapper();
+//meh  deleteSnapper();
        snapSpot = Vector(false);
 
-       if (e == NULL)
+       if (!e)
        {
                RS_DEBUG->print(RS_Debug::D_WARNING, "RS_Snapper::snapPoint: event is NULL");
                return snapSpot;
@@ -180,8 +202,8 @@ Vector RS_Snapper::snapPoint(QMouseEvent * e)
                break;
        }
 
-#warning "!!! THIS IS WHERE THE SNAPPER IS BEING DRAWN... !!!"
-       drawSnapper();
+//#warning "!!! THIS IS WHERE THE SNAPPER IS BEING DRAWN... !!!"
+//     drawSnapper();
 
        if (RS_DIALOGFACTORY)
                RS_DIALOGFACTORY->updateCoordinateWidget(snapCoord, snapCoord - graphicView->getRelativeZero());
@@ -234,7 +256,7 @@ Vector RS_Snapper::snapGrid(Vector coord)
 
        RS_DEBUG->print("RS_Snapper::snapGrid 001");
 
-       if (grid != NULL)
+       if (grid)
        {
                RS_DEBUG->print("RS_Snapper::snapGrid 002");
                Vector * pts = grid->getPoints();
@@ -372,8 +394,9 @@ Vector RS_Snapper::restrictOrthogonal(Vector coord)
 Vector RS_Snapper::restrictHorizontal(Vector coord)
 {
        Vector rz = graphicView->getRelativeZero();
-       Vector ret = Vector(coord.x, rz.y);
-       return ret;
+//     Vector ret = Vector(coord.x, rz.y);
+//     return ret;
+       return Vector(coord.x, rz.y);
 }
 
 /**
@@ -386,8 +409,9 @@ Vector RS_Snapper::restrictHorizontal(Vector coord)
 Vector RS_Snapper::restrictVertical(Vector coord)
 {
        Vector rz = graphicView->getRelativeZero();
-       Vector ret = Vector(rz.x, coord.y);
-       return ret;
+//     Vector ret = Vector(rz.x, coord.y);
+//     return ret;
+       return Vector(rz.x, coord.y);
 }
 
 /**
@@ -444,7 +468,7 @@ RS_Entity * RS_Snapper::catchEntity(QMouseEvent * e, RS2::ResolveLevel level)
 /**
  * Suspends this snapper while another action takes place.
  */
-void RS_Snapper::suspend()
+/*virtual*/ void RS_Snapper::suspend()
 {
        deleteSnapper();
        snapSpot = snapCoord = Vector(false);
@@ -453,24 +477,24 @@ void RS_Snapper::suspend()
 /**
  * Resumes this snapper after it has been suspended.
  */
-void RS_Snapper::resume()
+/*virtual*/ void RS_Snapper::resume()
 {
        drawSnapper();
 }
 
 /**
- * Hides the snapper options. Default implementation does nothing.
+ * Hides the snapper options.
  */
-void RS_Snapper::hideOptions()
+/*virtual*/ void RS_Snapper::hideOptions()
 {
        if (snapMode == RS2::SnapDist && RS_DIALOGFACTORY)
                RS_DIALOGFACTORY->requestSnapDistOptions(distance, false);
 }
 
 /**
- * Shows the snapper options. Default implementation does nothing.
+ * Shows the snapper options.
  */
-void RS_Snapper::showOptions()
+/*virtual*/ void RS_Snapper::showOptions()
 {
        if (snapMode == RS2::SnapDist && RS_DIALOGFACTORY)
                RS_DIALOGFACTORY->requestSnapDistOptions(distance, true);
@@ -545,7 +569,7 @@ void RS_Snapper::xorSnapper()
                visible = !visible;
        }
 #else
-       if (finished || !snapSpot.valid || graphicView == NULL)
+       if (finished || !snapSpot.valid || !graphicView)
                return;
 
        graphicView->SetSnapperDraw(true);
@@ -557,14 +581,55 @@ void RS_Snapper::xorSnapper()
 #endif
 }
 
-void RS_Snapper::SetSnapperVisible(bool visibility/*= true*/)
+void RS_Snapper::SetVisible(bool visibility/*= true*/)
 {
-       graphicView->SetSnapperDraw(visibility);
+//     graphicView->SetSnapperDraw(visibility);
+       visible = visibility;
 }
 
-//Hmm, not sure this is necessary...
-#warning "!!! Not sure this is necessary... !!!"
-void RS_Snapper::SetSnapperCoords(Vector snapCoord, Vector snapSpot)
+bool RS_Snapper::Visible(void)
 {
-       graphicView->SetSnapperVars(snapSpot, snapCoord, showCrosshairs);
+//     graphicView->SetSnapperDraw(visibility);
+       return visible;
+}
+
+void RS_Snapper::Draw(GraphicView * view, PaintInterface * painter)
+{
+//printf("RS_Snapper::Draw()...");
+       if (finished || !snapSpot.valid)
+               return;
+//printf("{D}\n");
+
+//meh  painter->setPreviewMode();
+
+//hm, I don't like graphicView kicking around in here, especially since it now
+//lives inside GraphicView... How to !!! FIX !!!?
+//We'll pass it in for now...
+       if (snapCoord.valid)
+       {
+               // snap point
+               painter->drawCircle(view->toGui(snapCoord), 4);
+
+               // crosshairs:
+               if (showCrosshairs)
+               {
+                       painter->setPen(RS_Pen(RS_Color(0, 255, 255), RS2::Width00, RS2::DashLine));
+                       painter->drawLine(Vector(0, view->toGuiY(snapCoord.y)),
+                               Vector(view->getWidth(), view->toGuiY(snapCoord.y)));
+                       painter->drawLine(Vector(view->toGuiX(snapCoord.x), 0),
+                               Vector(view->toGuiX(snapCoord.x), view->getHeight()));
+               }
+       }
+
+       if (snapCoord.valid && snapCoord != snapSpot)
+       {
+               painter->drawLine(view->toGui(snapSpot) + Vector(-5, 0),
+                       view->toGui(snapSpot) + Vector(-1, 4));
+               painter->drawLine(view->toGui(snapSpot) + Vector(0, 5),
+                       view->toGui(snapSpot) + Vector(4, 1));
+               painter->drawLine(view->toGui(snapSpot) + Vector(5, 0),
+                       view->toGui(snapSpot) + Vector(1, -4));
+               painter->drawLine(view->toGui(snapSpot) + Vector(0, -5),
+                       view->toGui(snapSpot) + Vector(-4, -1));
+       }
 }