X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Feditwindow.cpp;h=ef3d585b2ddd4fd333c2c74759c3a43e3ccf9376;hb=2b16243b0aa693d18ce49a071cdae73cadc37c4f;hp=192c9d2ee30b5bb5736588544af24895a504718c;hpb=faaae13292af283e277b0d1480aad54a6e4a2dd6;p=ttedit diff --git a/src/editwindow.cpp b/src/editwindow.cpp index 192c9d2..ef3d585 100755 --- a/src/editwindow.cpp +++ b/src/editwindow.cpp @@ -117,17 +117,9 @@ void EditWindow::paintEvent(QPaintEvent * /*event*/) QPainter p(this); //hm, causes lockup (or does it???) p.setRenderHint(QPainter::Antialiasing); -//Doesn't do crap! -//dc.SetBackground(*wxWHITE_BRUSH); -// Due to the screwiness of wxWidgets coord system, the origin is ALWAYS -// the upper left corner--regardless of axis orientation, etc... -// int width, height; -// dc.GetSize(&width, &height); QSize winSize = size(); -// dc.SetDeviceOrigin(-offsetX, height - (-offsetY)); -// dc.SetAxisOrientation(true, true); p.translate(QPoint(-offsetX, winSize.height() - (-offsetY))); p.scale(1.0, -1.0); @@ -138,13 +130,10 @@ void EditWindow::paintEvent(QPaintEvent * /*event*/) // Instead, we have to scale EVERYTHING by hand. Crap! // It's not *that* bad, but not as convenient either... -// dc.SetPen(*(wxThePenList->FindOrCreatePen(wxColour(0x00, 0x00, 0xFF), 1, wxDOT))); -//// dc.DrawLine(0, 0, 10, 10); p.setPen(QPen(Qt::blue, 1.0, Qt::DotLine)); // Draw coordinate axes -// dc.CrossHair(0, 0); p.drawLine(0, -16384, 0, 16384); p.drawLine(-16384, 0, 16384, 0); @@ -237,46 +226,89 @@ void EditWindow::DrawGlyph(QPainter & p, GlyphPoints & glyph) { for(int poly=0; poly 2) - { - // Initial move... - // If it's not on curve, then move to it, otherwise move to last point... + if (glyph.GetNumPoints(poly) < 3) + continue; - int x, y; + // 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))); - if (glyph.GetOnCurve(poly, glyph.GetNumPoints(poly) - 1)) - x = (int)glyph.GetX(poly, glyph.GetNumPoints(poly) - 1), y = (int)glyph.GetY(poly, glyph.GetNumPoints(poly) - 1); - else - x = (int)glyph.GetX(poly, 0), y = (int)glyph.GetY(poly, 0); +// Need to add separate color handling here for polys that are being manipulated... - for(int i=0; i 0) + QPoint pt = GetAdjustedMousePosition(event); + IPoint pointToAdd(pt.x(), pt.y(), ((event->modifiers() == Qt::ShiftModifier || event->modifiers() == Qt::ControlModifier) ? false : true)); + + if (pts.GetNumPoints() < 2) { - QPoint pt = GetAdjustedMousePosition(event); - pts.InsertPoint(pts.GetNext(ptHighlight), pt.x(), pt.y(), ((event->modifiers() == Qt::ShiftModifier || event->modifiers() == Qt::ControlModifier) ? false : true)); +// pts += IPoint(pt.x(), pt.y(), ((event->modifiers() == Qt::ShiftModifier || event->modifiers() == Qt::ControlModifier) ? false : true)); + pts += pointToAdd; + ptHighlight = pts.GetNumPoints() - 1; + } + else + { +// QPoint pt = GetAdjustedMousePosition(event); +// pts.InsertPoint(pts.GetNext(ptHighlight), pt.x(), pt.y(), ((event->modifiers() == Qt::ShiftModifier || event->modifiers() == Qt::ControlModifier) ? false : true)); + pts.InsertPoint(pts.GetNext(ptHighlight), pointToAdd); ptHighlight = ptNextHighlight; - update(); +// update(); } + + update(); } else if (tool == TOOLAddPoly) // "Add Poly" tool { @@ -384,18 +428,10 @@ WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumP } else if (tool == TOOLFlipWinding) { -// IPoint centroid = pts.GetPolyCentroid(pts.GetPolyForPointNumber(ptHighlight)); -// rotationCenter = QPoint(centroid.x, centroid.y); -// showRotationCenter = true; pts.InvertPolyDrawSequence(pts.GetPolyForPointNumber(ptHighlight)); pt = GetAdjustedClientPosition(pts.GetX(ptHighlight), pts.GetY(ptHighlight)); QCursor::setPos(mapToGlobal(pt)); -// rotationZeroPoint = QPoint(pts.GetX(ptHighlight), pts.GetY(ptHighlight)); -// haveZeroPoint = true; -// rotationAngle = 0; update(); -// ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts); -// ((TTEdit *)qApp)->charWnd->update(); } } @@ -432,15 +468,13 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) { if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect) { - if (tool != TOOLAddPt || pts.GetNumPoints() > 0)//yecch. - { -//temporary, for testing. BTW, Select drag bug is here...! -#if 1 - QPoint pt2 = GetAdjustedMousePosition(event); - pts.SetXY(ptHighlight, pt2.x(), pt2.y()); - update(); -#endif - } + // Bail out if we have the select tool and no points yet... + if (tool == TOOLSelect && pts.GetNumPoints() == 0) + return; + + QPoint pt2 = GetAdjustedMousePosition(event); + pts.SetXY(ptHighlight, pt2.x(), pt2.y()); + update(); } else if (tool == TOOLPolySelect) { @@ -449,6 +483,8 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event) QPoint pt2 = GetAdjustedMousePosition(event); // Should also set onCurve here as well, depending on keystate //Or should we? +//Would be nice, but we'd need to trap the keyPressEvent() as well, otherwise pressing/releasing +//the hotkey would show no change until the user moved their mouse. pts.OffsetPoly(pts.GetPoly(ptHighlight), pt2.x() - pts.GetX(ptHighlight), pt2.y() - pts.GetY(ptHighlight)); update(); }