X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Feditwindow.cpp;h=dac63c28c736d5d3b2cf8bb8d9e8f151684bccec;hb=refs%2Fheads%2Fmaster;hp=4a3d43f50fc8def35436ee526b222036a837cda0;hpb=1881acb17ed405cdb5aa2cb333a7af77f644a86d;p=ttedit diff --git a/src/editwindow.cpp b/src/editwindow.cpp index 4a3d43f..dac63c2 100644 --- a/src/editwindow.cpp +++ b/src/editwindow.cpp @@ -38,6 +38,7 @@ #include "debug.h" #include "global.h" #include "mainwindow.h" +#include "mathconstants.h" #include "ttedit.h" #include "vector.h" @@ -186,6 +187,23 @@ void EditWindow::paintEvent(QPaintEvent * /*event*/) } } + // Draw highlighted point on poly add tool + if (tool == TOOLAddPoly) + { + painter.SetPen(QPen(Qt::red, 1.0, Qt::SolidLine)); + + if (addPointOnCurve) + { + painter.DrawSquareDotN(addPoint, 7); + painter.DrawSquareDotN(addPoint, 9); + } + else + { + painter.DrawRoundDotN(addPoint, 7); + painter.DrawRoundDotN(addPoint, 9); + } + } + // Draw curve formed by points painter.SetPen(QPen(Qt::black, 1.0, Qt::SolidLine)); @@ -269,46 +287,68 @@ void EditWindow::DrawGlyph(Painter & p, GlyphPoints & glyph) } +/* +So, to make it draw the point the pointer is pointing at, we need to do something. Either patch the GlyphPoints to handle it, or insert the point into the GlyphPoints and delete it if the user changes tools. Either way, need +to change the color of the line(s) drawn to the point to signal to the user +that it isn't finalized until they click the button. +*/ void EditWindow::DrawGlyphPoly(Painter & p, GlyphPoints & glyph, uint16_t poly) { // Sanity check if (glyph.GetNumPoints(poly) < 3) return; - // Initial move: If our start point is on curve, then go to it. Otherwise, - // check previous point. If it's on curve, go to it otherwise go the - // midpoint between start point and previous (since it's between two curve - // control points). - IPoint pt = (glyph.GetOnCurve(poly, 0) - ? glyph.GetPoint(poly, 0) : (glyph.GetPrevOnCurve(poly, 0) - ? glyph.GetPrevPoint(poly, 0) : glyph.GetMidpointToPrev(poly, 0))); + IPoint p1 = glyph.GetPrevPoint(poly, 0); + IPoint p2 = glyph.GetPoint(poly, 0); + + // Inject the new poly point into the current polygon + if ((tool == TOOLAddPoly) && (poly == (glyph.GetNumPolys() - 1))) + { + p1 = IPoint(addPoint.x, addPoint.y, addPointOnCurve); + } for(int i=0; i [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints()); #endif } +#endif else if (tool == TOOLSelect || tool == TOOLPolySelect) { if (pts.GetNumPoints() > 0) @@ -494,12 +537,23 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect) { // Bail out if we have the select tool and no points yet... - if (tool == TOOLSelect && pts.GetNumPoints() == 0) + if ((tool == TOOLSelect) && (pts.GetNumPoints() == 0)) return; // QPoint pt2 = GetAdjustedMousePosition(event); Vector pt2 = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); - pts.SetXY(ptHighlight, pt2.x, pt2.y); + + if (tool != TOOLSelect) + { + addPoint = pt2; + ptHighlight = -1; + // Prolly should move this to the key handlers below... +//now we do! :-D +// addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true); + } + else + pts.SetXY(ptHighlight, pt2.x, pt2.y); + update(); } else if (tool == TOOLPolySelect) @@ -528,8 +582,9 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) } else { - // Figure out the angle between the "zero" vector and the current one, - // then rotate all points relative to the "zero" vector (done by paint()) + // Figure out the angle between the "zero" vector and the + // current one, then rotate all points relative to the + // "zero" vector (done by paint()) // QPoint currentPoint = GetAdjustedMousePosition(event); Vector currentPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); Vector v1(rotationZeroPoint.x, rotationZeroPoint.y, 0, @@ -540,8 +595,8 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) rotationAngle = v2.Angle(v1); QString s; - s.sprintf("%.3f degrees", rotationAngle * 180.0 / 3.14159265358979323); - ((TTEdit *)qApp)->mainWindow->statusBar()->showMessage(s); + s.sprintf("%.3f degrees", rotationAngle * RADIANS_TO_DEGREES); + Global::mainWindow->statusBar()->showMessage(s); } update(); @@ -667,6 +722,12 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) } ptPrevious = Vector(event->x(), event->y()); + addPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); +//handled by real key handlers now... +// addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true); + + if (tool == TOOLAddPoly) + update(); } event->accept(); @@ -717,20 +778,42 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event) } update(); - ((TTEdit *)qApp)->mainWindow->statusBar()->showMessage(""); + Global::mainWindow->statusBar()->showMessage(""); } // if (tool == TOOLScroll || tool == TOOLZoom) // ReleaseMouse(); //this is prolly too much - ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts); - ((TTEdit *)qApp)->charWnd->update(); + Global::charWnd->MakePathFromPoints(&pts); + Global::charWnd->update(); if (tool == TOOLMultiSelect) { selectionInProgress = false; update(); } + else if (tool == TOOLAddPoly) // "Add Poly" tool + { +#ifdef DEBUGFOO +WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.GetNumPoints()); +#endif + if (polyFirstPoint) + { + polyFirstPoint = false; + pts.AddNewPolyAtEnd(); + } + +// QPoint pt = GetAdjustedMousePosition(event); + Vector pt = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); +//printf("GetAdjustedMousePosition = %i, %i\n", pt.x(), pt.y()); + // Append a point to the end of the structure + pts += IPoint(pt.x, pt.y, addPointOnCurve); +// ptHighlight = pts.GetNumPoints() - 1; + update(); +#ifdef DEBUGFOO +WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints()); +#endif + } } event->accept(); @@ -739,6 +822,15 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event) void EditWindow::keyPressEvent(QKeyEvent * event) { + // We do this here because of the ptHighlight nonsense. If we're in + // the add poly tool, we'll never see this if it's under the 'sanity' + // check (which is needed for the arrow key shite, but still...) + if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control)) + { + addPointOnCurve = false; + update(); + } + // Sanity checking... if (ptHighlight == -1) return; @@ -756,14 +848,23 @@ void EditWindow::keyPressEvent(QKeyEvent * event) else return; - event->accept(); +//Not need but you need to call the base class for some reason?? +// event->accept(); update(); - ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts); - ((TTEdit *)qApp)->charWnd->update(); + Global::charWnd->MakePathFromPoints(&pts); + Global::charWnd->update(); } -void EditWindow::keyReleaseEvent(QKeyEvent * /*event*/) +void EditWindow::keyReleaseEvent(QKeyEvent * event) { + if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control)) + { + addPointOnCurve = true; + } + else + return; + + update(); }