X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Feditwindow.cpp;fp=src%2Feditwindow.cpp;h=e4f7d7b81dd47f2e691ff2548042861845573cbf;hb=3fe885b75511c9fbfe18a5c509260e83bb7ac136;hp=4a3d43f50fc8def35436ee526b222036a837cda0;hpb=1881acb17ed405cdb5aa2cb333a7af77f644a86d;p=ttedit diff --git a/src/editwindow.cpp b/src/editwindow.cpp index 4a3d43f..e4f7d7b 100644 --- a/src/editwindow.cpp +++ b/src/editwindow.cpp @@ -269,46 +269,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; ix(), event->y())); - pts.SetXY(ptHighlight, pt2.x, pt2.y); + + if (tool != TOOLSelect) + { + addPoint = pt2; + // Prolly should move this to the key handlers below... + addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true); + } + else + pts.SetXY(ptHighlight, pt2.x, pt2.y); + update(); } else if (tool == TOOLPolySelect) @@ -667,6 +698,11 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) } ptPrevious = Vector(event->x(), event->y()); + addPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y())); +// addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true); + + if (tool == TOOLAddPoly) + update(); } event->accept(); @@ -753,17 +789,29 @@ void EditWindow::keyPressEvent(QKeyEvent * event) pts.SetXY(ptHighlight, pts.GetX(ptHighlight) + 1, pts.GetY(ptHighlight)); else if (event->key() == Qt::Key_Left) pts.SetXY(ptHighlight, pts.GetX(ptHighlight) - 1, pts.GetY(ptHighlight)); + else if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control)) + { + addPointOnCurve = false; + } else return; - event->accept(); +// event->accept(); update(); ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts); ((TTEdit *)qApp)->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(); }