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; }
QPixmap SampleItem::getSample(int width, int height) { // if it's false => the used font will be removed from used fonts // after sample creating bool previouslyUsedFont = false; if (tmpStyle.charStyle().font().isNone()) return QPixmap(); UndoManager::instance()->setUndoEnabled(false); // disable undo PageItem_TextFrame *previewItem = new PageItem_TextFrame(m_Doc, 0, 0, width, height, 0, "__whiteforpreviewbg__", "__whiteforpreview__"); QImage pm(width, height, QImage::Format_ARGB32); ScPainter *painter = new ScPainter(&pm, width, height, 1.0, 0); painter->setZoomFactor(PrefsManager::instance()->appPrefs.displayPrefs.displayScale); if (m_Doc->UsedFonts.contains(tmpStyle.charStyle().font().scName())) previouslyUsedFont = true; m_Doc->AddFont(tmpStyle.charStyle().font().scName(), qRound(m_Doc->itemToolPrefs().textSize / 10.0)); previewItem->FrameType = PageItem::TextFrame; previewItem->itemText.clear(); // previewItem->setFont(tmpStyle.charStyle().font()->scName()); previewItem->Cols = 1; text.replace(QChar(10),QChar(13)).replace(QChar(5),QChar(13)); previewItem->itemText.insertChars(0, text); previewItem->itemText.setDefaultStyle(tmpStyle); previewItem->setFillColor("__whiteforpreviewbg__"); previewItem->setFillShade(bgShade); previewItem->SetRectFrame(); previewItem->Frame = false; previewItem->DrawObj(painter, QRect()); painter->end(); delete(painter); delete previewItem; // cleanups and resets if (!previouslyUsedFont) { QString fontName = tmpStyle.charStyle().font().scName(); (*m_Doc->AllFonts)[fontName].decreaseUsage(); // was increased by AddFont() m_Doc->UsedFonts.remove(fontName); } // m_Doc->docParagraphStyles.remove(tmpIndex); UndoManager::instance()->setUndoEnabled(true); return QPixmap::fromImage(pm); }
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; }