#define BACKGROUND_MAX_SIZE 512
+enum { ToolMouseDown, ToolMouseMove, ToolMouseUp };
+
// Class variable
//Container DrawingView::document(Vector(0, 0));
}
-void DrawingView::ToolMouseDown(Point p)
+void DrawingView::ToolMouse(int mode, Point p)
+{
+ if (Global::tool == TTLine)
+ LineHandler(mode, p);
+}
+
+
+void DrawingView::ToolDraw(Painter * painter)
{
if (Global::tool == TTLine)
{
if (Global::toolState == TSNone)
{
- toolPoint[0] = p;
-// toolState = TSPoint1;
-// toolObject = (Object *)(new Line(p, Vector(0, 0)));
+ painter->DrawHandle(toolPoint[0]);
}
- else //if (Global::toolState == TSPoint1)
+ else if ((Global::toolState == TSPoint2) && shiftDown)
{
- toolPoint[1] = p;
+ painter->DrawHandle(toolPoint[1]);
+ }
+ else
+ {
+ painter->DrawLine(toolPoint[0], toolPoint[1]);
+ painter->DrawHandle(toolPoint[1]);
}
}
}
-void DrawingView::ToolMouseMove(Point p)
+void DrawingView::LineHandler(int mode, Point p)
{
- if (Global::tool == TTLine)
+ switch (mode)
{
+ case ToolMouseDown:
if (Global::toolState == TSNone)
toolPoint[0] = p;
else
toolPoint[1] = p;
- }
-}
+ break;
+ case ToolMouseMove:
+ if (Global::toolState == TSNone)
+ toolPoint[0] = p;
+ else
+ toolPoint[1] = p;
-void DrawingView::ToolMouseUp(Point p)
-{
- if (Global::tool == TTLine)
- {
+ break;
+ case ToolMouseUp:
if (Global::toolState == TSNone)
{
Global::toolState = TSPoint2;
// Prevent spurious line from drawing...
toolPoint[1] = toolPoint[0];
}
- else
+ else if ((Global::toolState == TSPoint2) && shiftDown)
{
- Line * l = new Line(toolPoint[0], toolPoint[1]);
- document.objects.push_back(l);
toolPoint[0] = toolPoint[1];
}
- }
-}
-
-
-void DrawingView::ToolDraw(Painter * painter)
-{
- if (Global::tool == TTLine)
- {
- if (Global::toolState == TSNone)
- {
- painter->DrawHandle(toolPoint[0]);
- }
else
{
- painter->DrawLine(toolPoint[0], toolPoint[1]);
- painter->DrawHandle(toolPoint[1]);
+ Line * l = new Line(toolPoint[0], toolPoint[1]);
+ document.objects.push_back(l);
+ toolPoint[0] = toolPoint[1];
}
}
}
// Snap to object point if valid...
- ToolMouseDown(point);
+// ToolMouseDown(point);
+ ToolMouse(ToolMouseDown, point);
//Also, may want to figure out if hovering over a snap point on an object,
//snap to grid if not.
return;
#if 1
// Grid processing... (only snap here is left button is down)
// Umm, WHY??
+ // well, it causes problems with selecting lines that aren't close to a grid line!
+ // THAT'S WHY!
+ // But even still, this is a bad approach, we need to not just do this for every
+ // case because it's WRONG to do it that way! !!! FIX !!!
if (/*(event->buttons() & Qt::LeftButton) &&*/ Global::snapToGrid)
{
point = SnapPointToGrid(point);
if (Global::tool)
{
// Need to do snapping, etc. as well
- ToolMouseMove(point);
+// ToolMouseMove(point);
+ ToolMouse(ToolMouseMove, point);
}
// This is used to draw the tool crosshair...
if (Global::tool)
{
Vector point = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
- ToolMouseUp(point);
+// ToolMouseUp(point);
+ ToolMouse(ToolMouseUp, point);
return;
}
#endif
if (toolAction)
toolAction->KeyDown(event->key());
#endif
+ bool oldShift = shiftDown;
+ bool oldCtrl = ctrlDown;
+
if (event->key() == Qt::Key_Shift)
shiftDown = true;
else if (event->key() == Qt::Key_Control)
ctrlDown = true;
+
+ if ((oldShift != shiftDown) || (oldCtrl != ctrlDown))
+ update();
}
if (toolAction)
toolAction->KeyReleased(event->key());
#endif
+ bool oldShift = shiftDown;
+ bool oldCtrl = ctrlDown;
+
if (event->key() == Qt::Key_Shift)
shiftDown = false;
else if (event->key() == Qt::Key_Control)
ctrlDown = false;
+
+ if ((oldShift != shiftDown) || (oldCtrl != ctrlDown))
+ update();
}
//