Strokes as one object, QPainter set antialiasing

preferencesAboutTextFull
Ilia Ryabokon 11 years ago
commit 49f700c00a
  1. 38
      src/adaptors/UBSvgSubsetAdaptor.cpp
  2. 2
      src/domain/UBGraphicsPolygonItem.cpp
  3. 48
      src/domain/UBGraphicsScene.cpp
  4. 2
      src/domain/UBGraphicsScene.h

@ -1181,9 +1181,20 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
// Get the items from the scene
QList<QGraphicsItem*> items = mScene->items();
int strokes = 0; int polygons = 0;
foreach(QGraphicsItem *item, items) {
if (item->type() == UBGraphicsPolygonItem::Type) {
polygons++;
} else if (item->type() == UBGraphicsStrokesGroup::Type) {
strokes++;
}
}
qDebug() << "---Strokes count" << strokes << "Polygons count" << polygons;
qSort(items.begin(), items.end(), itemZIndexComp);
UBGraphicsStroke *openStroke = 0;
int nextStroke = 0;
bool groupHoldsInfo = false;
@ -1192,18 +1203,35 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
QGraphicsItem *item = items.takeFirst();
// Is the item a strokes group?
UBGraphicsStrokesGroup* strokesGroupItem = qgraphicsitem_cast<UBGraphicsStrokesGroup*>(item);
if(strokesGroupItem && strokesGroupItem->isVisible()){
// Add the polygons
foreach(QGraphicsItem* item, strokesGroupItem->childItems()){
//parsing number of polygons into one polygon
qDebug() << "parsing stroke number" << nextStroke++;
UBGraphicsPolygonItem *resultPoly = 0;
foreach(QGraphicsItem* item, strokesGroupItem->childItems()) {
UBGraphicsPolygonItem* poly = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
if(NULL != poly){
polygonItemToSvgPolygon(poly, true);
items.removeOne(poly);
if (!poly) {
continue;
} else if (!resultPoly) {
resultPoly = poly;
continue;
}
QPolygonF newPolygon = poly->sceneTransform().map(poly->polygon());
QPainterPath strokePainterPath;
strokePainterPath.addPolygon(resultPoly->sceneTransform().map(resultPoly->polygon()));
QPolygonF oldPolygons = strokePainterPath.simplified().toFillPolygon(resultPoly->sceneTransform().inverted());
newPolygon = oldPolygons.united(newPolygon);
resultPoly->setPolygon(newPolygon);
//
items.removeOne(poly);
}
if (resultPoly) {
polygonItemToSvgPolygon(resultPoly, true);
items.removeOne(resultPoly);
}
}

@ -208,6 +208,8 @@ void UBGraphicsPolygonItem::paint ( QPainter * painter, const QStyleOptionGraphi
if(mHasAlpha && scene() && scene()->isLightBackground())
painter->setCompositionMode(QPainter::CompositionMode_Darken);
painter->setRenderHints(QPainter::Antialiasing);
QGraphicsPolygonItem::paint(painter, option, widget);
}

@ -286,6 +286,7 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent, bool enableUndoRedoSta
, magniferDisplayViewWidget(0)
, mZLayerController(new UBZLayerController(this))
, mpLastPolygon(NULL)
, mCurrentPolygon(0)
{
UBCoreGraphicsScene::setObjectName("BoardScene");
#ifdef __ppc__
@ -597,6 +598,7 @@ bool UBGraphicsScene::inputDeviceRelease()
delete mCurrentStroke;
mCurrentStroke = 0;
}
mCurrentPolygon = 0;
}
}
@ -707,7 +709,7 @@ void UBGraphicsScene::drawLineTo(const QPointF &pEndPoint, const qreal &pWidth,
if (mPreviousWidth == -1.0)
mPreviousWidth = pWidth;
// UBGraphicsPolygonItem *polygonItem = lineToPolygonItem(QLineF(mPreviousPoint, pEndPoint), pWidth);
// UBGraphicsPolygonItem *polygonItem = lineToPolygonItem(QLineF(mPreviousPoint, pEndPoint), pWidth);
UBGraphicsPolygonItem *polygonItem = lineToPolygonItem(QLineF(mPreviousPoint, pEndPoint), mPreviousWidth,pWidth);
@ -723,6 +725,7 @@ void UBGraphicsScene::drawLineTo(const QPointF &pEndPoint, const qreal &pWidth,
}
}
if (bLineStyle)
{
QSetIterator<QGraphicsItem*> itItems(mAddedItems);
@ -735,18 +738,45 @@ void UBGraphicsScene::drawLineTo(const QPointF &pEndPoint, const qreal &pWidth,
mAddedItems.clear();
}
mpLastPolygon = polygonItem;
mAddedItems.insert(polygonItem);
// Here we add the item to the scene
addItem(polygonItem);
if (!mCurrentStroke)
mCurrentStroke = new UBGraphicsStroke();
polygonItem->setStroke(mCurrentStroke);
mPreviousPolygonItems.append(polygonItem);
QPolygonF newPolygon = UBGeometryUtils::lineToPolygon(QLineF(mPreviousPoint, pEndPoint), pWidth);
if (!mCurrentPolygon)
{
mCurrentPolygon = new UBGraphicsPolygonItem();
mCurrentPolygon->setPolygon(newPolygon);
initPolygonItem(mCurrentPolygon);
addItem(mCurrentPolygon);
mAddedItems.insert(mCurrentPolygon);
mCurrentPolygon->setStroke(mCurrentStroke);
mpLastPolygon = mCurrentPolygon;
}
//newPolygon = newPolygon.united(mCurrentPolygon->polygon());
QPainterPath strokePainterPath;
strokePainterPath.addPolygon(mCurrentPolygon->sceneTransform().map(mCurrentPolygon->polygon()));
//QList<QPolygonF>
QPolygonF oldPolygons = strokePainterPath.simplified().toFillPolygon(mCurrentPolygon->sceneTransform().inverted());
newPolygon = oldPolygons.united(newPolygon);
/* foreach(QPolygonF polygon, oldPolygons)
{
newPolygon = polygon.united(newPolygon);
}
*/
mpLastPolygon = mCurrentPolygon;
mCurrentPolygon->setPolygon(newPolygon);
if (!bLineStyle)
{

@ -426,7 +426,7 @@ public slots:
UBGraphicsPolygonItem* mpLastPolygon;
bool mDrawWithCompass;
UBGraphicsPolygonItem *mCurrentPolygon;
};

Loading…
Cancel
Save