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; }
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; }