void ReOrderText(ScribusDoc *currentDoc, ScribusView *view) { double savScale = view->scale(); view->setScale(1.0); currentDoc->RePos = true; QImage pgPix(10, 10, QImage::Format_ARGB32_Premultiplied); QRect rd; // = QRect(0,0,9,9); ScPainter *painter = new ScPainter(&pgPix, pgPix.width(), pgPix.height()); for (int azz=0; azz<currentDoc->MasterItems.count(); ++azz) { PageItem *currItem = currentDoc->MasterItems.at(azz); if (currItem->itemType() == PageItem::PathText) currItem->DrawObj(painter, rd); } for (int azz=0; azz<currentDoc->Items->count(); ++azz) { PageItem *currItem = currentDoc->Items->at(azz); currItem->layout(); if (currItem->itemType() == PageItem::PathText) currItem->DrawObj(painter, rd); //FIXME: this should be replaced by code in layout() } currentDoc->RePos = false; view->setScale(savScale); delete painter; }
void ScPattern::createPreview() { double sc = 500.0 / qMax(width, height); bool savedFlag = doc->guidesPrefs().framesShown; bool savedDoDrawing = doc->DoDrawing; doc->guidesPrefs().framesShown = false; doc->DoDrawing = true; pattern = QImage(qRound(width * sc), qRound(height * sc), QImage::Format_ARGB32_Premultiplied); pattern.fill( qRgba(0, 0, 0, 0) ); ScPainter *painter = new ScPainter(&pattern, pattern.width(), pattern.height(), 1, 0); painter->setZoomFactor(sc); for (int i = 0; i < items.count(); ++i) { PageItem* embedded = items.at(i); painter->save(); painter->translate(embedded->gXpos, embedded->gYpos); embedded->isEmbedded = true; embedded->invalid = true; embedded->DrawObj(painter, QRectF()); embedded->isEmbedded = false; painter->restore(); } painter->end(); delete painter; doc->DoDrawing = savedDoDrawing; doc->guidesPrefs().framesShown = savedFlag; }
void PageItem_Group::DrawObj_Item(ScPainter *p, QRectF /*e*/) { if (m_Doc->RePos) return; if (groupItemList.isEmpty()) { if (m_Doc->guidesPrefs().framesShown) { p->save(); p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); p->drawLine(FPoint(0, 0), FPoint(m_width, m_height)); p->drawLine(FPoint(0, m_height), FPoint(m_width, 0)); p->setFont(QApplication::font()); p->drawLine(FPoint(0, 0), FPoint(m_width, 0)); p->drawLine(FPoint(m_width, 0), FPoint(m_width, m_height)); p->drawLine(FPoint(m_width, m_height), FPoint(0, m_height)); p->drawLine(FPoint(0, m_height), FPoint(0, 0)); p->setBrush(QColor(255, 255, 255)); p->setBrushOpacity(0.0); p->drawText(QRectF(0.0, 0.0, m_width, m_height), "Empty Group"); p->restore(); } return; } p->save(); if (imageFlippedH()) { p->translate(m_width, 0); p->scale(-1, 1); } if (imageFlippedV()) { p->translate(0, m_height); p->scale(1, -1); } if ((maskType() == 1) || (maskType() == 2) || (maskType() == 4) || (maskType() == 5)) { if ((maskType() == 1) || (maskType() == 2)) p->setMaskMode(1); else p->setMaskMode(3); if ((!gradientMask().isEmpty()) && (!m_Doc->docGradients.contains(gradientMask()))) gradientMaskVal = ""; if (!(gradientMask().isEmpty()) && (m_Doc->docGradients.contains(gradientMask()))) mask_gradient = m_Doc->docGradients[gradientMask()]; p->mask_gradient = mask_gradient; if ((maskType() == 1) || (maskType() == 4)) p->setGradientMask(VGradient::linear, FPoint(GrMaskStartX, GrMaskStartY), FPoint(GrMaskEndX, GrMaskEndY), FPoint(GrMaskStartX, GrMaskStartY), GrMaskScale, GrMaskSkew); else p->setGradientMask(VGradient::radial, FPoint(GrMaskStartX, GrMaskStartY), FPoint(GrMaskEndX, GrMaskEndY), FPoint(GrMaskFocalX, GrMaskFocalY), GrMaskScale, GrMaskSkew); } else if ((maskType() == 3) || (maskType() == 6) || (maskType() == 7) || (maskType() == 8)) { if ((patternMask().isEmpty()) || (!m_Doc->docPatterns.contains(patternMask()))) p->setMaskMode(0); else { double scw = m_width / groupWidth; double sch = m_height / groupHeight; p->setPatternMask(&m_Doc->docPatterns[patternMask()], patternMaskScaleX * scw, patternMaskScaleY * sch, patternMaskOffsetX, patternMaskOffsetY, patternMaskRotation, patternMaskSkewX, patternMaskSkewY, patternMaskMirrorX, patternMaskMirrorY); if (maskType() == 3) p->setMaskMode(2); else if (maskType() == 6) p->setMaskMode(4); else if (maskType() == 7) p->setMaskMode(5); else p->setMaskMode(6); } } else p->setMaskMode(0); p->setFillRule(fillRule); if (m_groupClips) p->beginLayer(1.0 - fillTransparency(), fillBlendmode(), &PoLine); else p->beginLayer(1.0 - fillTransparency(), fillBlendmode()); p->setMaskMode(0); p->scale(m_width / groupWidth, m_height / groupHeight); for (int em = 0; em < groupItemList.count(); ++em) { PageItem* embedded = groupItemList.at(em); p->save(); p->translate(embedded->gXpos, embedded->gYpos); embedded->isEmbedded = true; embedded->invalidateLayout(); embedded->DrawObj(p, QRectF()); embedded->isEmbedded = false; p->restore(); if (m_Doc->guidesPrefs().framesShown) { p->save(); double x = embedded->xPos(); double y = embedded->yPos(); embedded->setXYPos(embedded->gXpos, embedded->gYpos, true); embedded->DrawObj_Decoration(p); embedded->setXYPos(x, y, true); p->restore(); } if (m_Doc->layerOutline(LayerID)) { p->save(); p->setPen(m_Doc->layerMarker(LayerID), 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); p->setFillMode(ScPainter::None); p->setBrushOpacity(1.0); p->setPenOpacity(1.0); p->setupPolygon(&PoLine); p->strokePath(); p->restore(); } } p->endLayer(); p->restore(); }
void PageItem_Symbol::DrawObj_Item(ScPainter *p, QRectF /*e*/) { if (!m_Doc->RePos) { if ((!patternVal.isEmpty()) && (m_Doc->docPatterns.contains(patternVal))) { p->save(); if (imageFlippedH()) { p->translate(Width, 0); p->scale(-1, 1); } if (imageFlippedV()) { p->translate(0, Height); p->scale(1, -1); } if ((maskType() == 1) || (maskType() == 2) || (maskType() == 4) || (maskType() == 5)) { if ((maskType() == 1) || (maskType() == 2)) p->setMaskMode(1); else p->setMaskMode(3); if ((!gradientMask().isEmpty()) && (!m_Doc->docGradients.contains(gradientMask()))) gradientMaskVal = ""; if (!(gradientMask().isEmpty()) && (m_Doc->docGradients.contains(gradientMask()))) mask_gradient = m_Doc->docGradients[gradientMask()]; p->mask_gradient = mask_gradient; if ((maskType() == 1) || (maskType() == 4)) p->setGradientMask(VGradient::linear, FPoint(GrMaskStartX, GrMaskStartY), FPoint(GrMaskEndX, GrMaskEndY), FPoint(GrMaskStartX, GrMaskStartY), GrMaskScale, GrMaskSkew); else p->setGradientMask(VGradient::radial, FPoint(GrMaskStartX, GrMaskStartY), FPoint(GrMaskEndX, GrMaskEndY), FPoint(GrMaskFocalX, GrMaskFocalY), GrMaskScale, GrMaskSkew); } else if ((maskType() == 3) || (maskType() == 6)) { if ((patternMask().isEmpty()) || (!m_Doc->docPatterns.contains(patternMask()))) p->setMaskMode(0); else { p->setPatternMask(&m_Doc->docPatterns[patternMask()], patternMaskScaleX, patternMaskScaleY, patternMaskOffsetX + xPos(), patternMaskOffsetY + yPos(), patternMaskRotation, patternMaskSkewX, patternMaskSkewY, patternMaskMirrorX, patternMaskMirrorY); if (maskType() == 3) p->setMaskMode(2); else p->setMaskMode(4); } } else p->setMaskMode(0); p->beginLayer(1.0 - fillTransparency(), fillBlendmode(), &PoLine); p->setMaskMode(0); ScPattern pat = m_Doc->docPatterns[patternVal]; p->scale(Width / pat.width, Height / pat.height); p->translate(pat.items.at(0)->gXpos, pat.items.at(0)->gYpos); for (int em = 0; em < pat.items.count(); ++em) { PageItem* embedded = pat.items.at(em); p->save(); p->translate(embedded->gXpos, embedded->gYpos); embedded->isEmbedded = true; embedded->invalid = true; embedded->DrawObj(p, QRectF()); embedded->isEmbedded = false; p->restore(); } for (int em = 0; em < pat.items.count(); ++em) { PageItem* embedded = pat.items.at(em); if (!embedded->isTableItem) continue; p->save(); p->translate(embedded->gXpos, embedded->gYpos); p->rotate(embedded->rotation()); embedded->isEmbedded = true; embedded->invalid = true; if ((embedded->lineColor() != CommonStrings::None) && (embedded->lineWidth() != 0.0)) { QColor tmp; embedded->SetQColor(&tmp, embedded->lineColor(), embedded->lineShade()); if ((embedded->TopLine) || (embedded->RightLine) || (embedded->BottomLine) || (embedded->LeftLine)) { p->setPen(tmp, embedded->lineWidth(), embedded->PLineArt, Qt::SquareCap, embedded->PLineJoin); if (embedded->TopLine) p->drawLine(FPoint(0.0, 0.0), FPoint(embedded->width(), 0.0)); if (embedded->RightLine) p->drawLine(FPoint(embedded->width(), 0.0), FPoint(embedded->width(), embedded->height())); if (embedded->BottomLine) p->drawLine(FPoint(embedded->width(), embedded->height()), FPoint(0.0, embedded->height())); if (embedded->LeftLine) p->drawLine(FPoint(0.0, embedded->height()), FPoint(0.0, 0.0)); } } embedded->isEmbedded = false; p->restore(); } p->endLayer(); p->restore(); } else { if (m_Doc->guidesPrefs().framesShown) { p->save(); p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); p->drawLine(FPoint(0, 0), FPoint(Width, Height)); p->drawLine(FPoint(0, Height), FPoint(Width, 0)); p->setFont(QApplication::font()); p->drawLine(FPoint(0, 0), FPoint(Width, 0)); p->drawLine(FPoint(Width, 0), FPoint(Width, Height)); p->drawLine(FPoint(Width, Height), FPoint(0, Height)); p->drawLine(FPoint(0, Height), FPoint(0, 0)); p->setBrush(QColor(255, 255, 255)); p->setBrushOpacity(0.0); p->drawText(QRectF(0.0, 0.0, Width, Height), "Empty Symbol"); p->restore(); } } } }
void CollapsedTablePainter::paintTable(ScPainter* p) { p->save(); p->translate(table()->gridOffset()); // Paint table fill. paintTableFill(p); /* * We paint the table in five passes: * * 1) Cell fills. * 2) Vertical borders. * 3) Horizontal borders * 4) Decorative grid lines. * 5) Cell content. */ // Pass 1: Paint cell fills. for (int row = 0; row < table()->rows(); ++row) { int colSpan = 0; for (int col = 0; col < table()->columns(); col += colSpan) { TableCell cell = table()->cellAt(row, col); if (row == cell.row()) paintCellFill(cell, p); colSpan = cell.columnSpan(); } } // Pass 2: Paint vertical borders. for (int row = 0; row < table()->rows(); ++row) { int colSpan = 0; for (int col = 0; col < table()->columns(); col += colSpan) { TableCell cell = table()->cellAt(row, col); if (row == cell.row()) { paintCellRightBorders(cell, p); if (col == 0) paintCellLeftBorders(cell, p); } colSpan = cell.columnSpan(); } } // Pass 3: Paint horizontal borders. for (int row = 0; row < table()->rows(); ++row) { int colSpan = 0; for (int col = 0; col < table()->columns(); col += colSpan) { TableCell cell = table()->cellAt(row, col); if (row == cell.row()) { paintCellBottomBorders(cell, p); if (row == 0) paintCellTopBorders(cell, p); } colSpan = cell.columnSpan(); } } // Pass 4: Paint grid lines. if (table()->m_Doc->guidesPrefs().framesShown) { for (int row = 0; row < table()->rows(); ++row) { int colSpan = 0; for (int col = 0; col < table()->columns(); col += colSpan) { TableCell cell = table()->cellAt(row, col); if (row == cell.row()) { int endCol = col + cell.columnSpan() - 1; int endRow = row + cell.rowSpan() - 1; qreal left = table()->columnPosition(col); qreal right = table()->columnPosition(endCol) + table()->columnWidth(endCol); qreal top = table()->rowPosition(row); qreal bottom = table()->rowPosition(endRow) + table()->rowHeight(endRow); // Paint right and bottom grid line. paintGridLine(QPointF(right, top), QPointF(right, bottom), p); paintGridLine(QPointF(left, bottom), QPointF(right, bottom), p); // Paint left and top grid line. if (col == 0) paintGridLine(QPointF(left, top), QPointF(left, bottom), p); if (row == 0) paintGridLine(QPointF(left, top), QPointF(right, top), p); } colSpan = cell.columnSpan(); } } } // Pass 5: Paint cell content. for (int row = 0; row < table()->rows(); ++row) { for (int col = 0; col < table()->columns(); col ++) { TableCell cell = table()->cellAt(row, col); if (cell.row() == row && cell.column() == col) { PageItem* textFrame = cell.textFrame(); textFrame->DrawObj(p, QRectF()); textFrame->DrawObj_Decoration(p); } } } p->restore(); }
QString ScriXmlDoc::WriteElem(ScribusDoc *doc, Selection* selection) { if (selection->count()==0) return ""; double xp, yp, wp, hp; PageItem *item; QString documentStr = ""; item = selection->itemAt(0); QList<PageItem*> emG; QMap<int, PageItem*> emMap; emG.clear(); for (int cor = 0; cor < selection->count(); ++cor) { emMap.insert(doc->Items->indexOf(selection->itemAt(cor)), selection->itemAt(cor)); } emG = emMap.values(); double selectionWidth = 0; double selectionHeight = 0; if (selection->isMultipleSelection()) { double gx, gy, gw, gh; selection->getGroupRect(&gx, &gy, &gw, &gh); xp = gx; yp = gy; wp = gw; hp = gh; selection->getVisualGroupRect(&gx, &gy, &selectionWidth, &selectionHeight); } else { double minx = std::numeric_limits<double>::max(); double miny = std::numeric_limits<double>::max(); double maxx = -std::numeric_limits<double>::max(); double maxy = -std::numeric_limits<double>::max(); double x1, x2, y1, y2; item->getVisualBoundingRect(&x1, &y1, &x2, &y2); xp = qMin(minx, x1); yp = qMin(miny, y1); selectionWidth = wp = qMax(maxx, x2) - xp; selectionHeight = hp = qMax(maxy, y2) - yp; } double scaleI = 50.0 / qMax(selectionWidth, selectionHeight); QImage retImg = QImage(50, 50, QImage::Format_ARGB32_Premultiplied); retImg.fill( qRgba(0, 0, 0, 0) ); ScPainter *painter = new ScPainter(&retImg, retImg.width(), retImg.height(), 1, 0); painter->setZoomFactor(scaleI); for (int em = 0; em < emG.count(); ++em) { PageItem* embedded = emG.at(em); painter->save(); painter->translate(-xp, -yp); embedded->invalid = true; embedded->DrawObj(painter, QRectF()); painter->restore(); } int pg = doc->OnPage(xp + wp / 2.0, yp + hp / 2.0); if (pg > -1) { xp = xp - doc->getXOffsetForPage(pg); yp = yp - doc->getYOffsetForPage(pg); } delete painter; QBuffer buffer; buffer.open(QIODevice::WriteOnly); retImg.save(&buffer, "PNG"); QByteArray ba = buffer.buffer().toBase64(); buffer.close(); const FileFormat *fmt = LoadSavePlugin::getFormatById(FORMATID_SLA150EXPORT); if (fmt) { fmt->setupTargets(doc, 0, doc->scMW(), 0, &(PrefsManager::instance()->appPrefs.fontPrefs.AvailFonts)); documentStr = fmt->saveElements(xp, yp, wp, hp, selection, ba); } return documentStr; }