void KivioBaseTargetStencil::paintConnectorTargets( KivioIntraStencilData *pData ) { QPixmap *targetPic; KivioPainter *painter; double x, y; // We don't draw these if we are selected!!! if( isSelected() == true ) return; // Obtain the graphic used for KivioConnectorTargets targetPic = KivioConfig::config()->connectorTargetPixmap(); KoZoomHandler* zoomHandler = pData->zoomHandler; painter = pData->painter; KivioConnectorTarget *pTarget; pTarget = m_pTargets->first(); while( pTarget ) { x = zoomHandler->zoomItX(pTarget->x()); y = zoomHandler->zoomItY(pTarget->y()); painter->drawPixmap( x-3, y-3, *targetPic ); pTarget = m_pTargets->next(); } }
QImage SvgPatternHelper::generateImage( const QRectF &objectBound, const QList<KoShape*> content ) { KoZoomHandler zoomHandler; QSizeF patternSize = size( objectBound ); QSizeF tileSize = zoomHandler.documentToView( patternSize ); QMatrix viewMatrix; if( ! m_patternContentViewbox.isNull() ) { viewMatrix.translate( -m_patternContentViewbox.x(), -m_patternContentViewbox.y() ); const qreal xScale = patternSize.width() / m_patternContentViewbox.width(); const qreal yScale = patternSize.height() / m_patternContentViewbox.height(); viewMatrix.scale( xScale, yScale ); } // setup the tile image QImage tile( tileSize.toSize(), QImage::Format_ARGB32 ); tile.fill( QColor( Qt::transparent ).rgba() ); // setup the painter to paint the tile content QPainter tilePainter( &tile ); tilePainter.setClipRect( tile.rect() ); tilePainter.setWorldMatrix( viewMatrix ); //tilePainter.setRenderHint(QPainter::Antialiasing); // paint the content into the tile image KoShapePainter shapePainter; shapePainter.setShapes( content ); shapePainter.paintShapes( tilePainter, zoomHandler ); return tile; }
KoFilter::ConversionStatus PngExport::convert( const QByteArray& from, const QByteArray& to ) { if ( to != "image/png" || from != "application/vnd.oasis.opendocument.graphics" ) { return KoFilter::NotImplemented; } KoDocument * document = m_chain->inputDocument(); if( ! document ) return KoFilter::ParsingError; KarbonPart * karbonPart = dynamic_cast<KarbonPart*>( document ); if( ! karbonPart ) return KoFilter::WrongFormat; KoShapePainter painter; painter.setShapes( karbonPart->document().shapes() ); // get the bounding rect of the content QRectF shapesRect = painter.contentRect(); // get the size on point QSizeF pointSize = shapesRect.size(); // get the size in pixel (100% zoom) KoZoomHandler zoomHandler; QSize pixelSize = zoomHandler.documentToView( pointSize ).toSize(); QColor backgroundColor( Qt::white ); if( ! m_chain->manager()->getBatchMode() ) { PngExportOptionsWidget * widget = new PngExportOptionsWidget( pointSize ); widget->setUnit( karbonPart->unit() ); widget->setBackgroundColor( backgroundColor ); KDialog dlg; dlg.setCaption( i18n("PNG Export Options") ); dlg.setButtons( KDialog::Ok | KDialog::Cancel ); dlg.setMainWidget( widget ); if( dlg.exec() != QDialog::Accepted ) return KoFilter::UserCancelled; pixelSize = widget->pixelSize(); backgroundColor = widget->backgroundColor(); } QImage image( pixelSize, QImage::Format_ARGB32 ); // draw the background of the image image.fill( backgroundColor.rgba() ); // paint the shapes if( ! painter.paintShapes( image ) ) return KoFilter::CreationError; image.save( m_chain->outputFile(), "PNG" ); return KoFilter::OK; }
void SimpleParagraphWidget::fillListButtons() { KoZoomHandler zoomHandler; zoomHandler.setZoom(1.2); zoomHandler.setDpi(72, 72); KoInlineTextObjectManager itom; KoTextRangeManager tlm; TextShape textShape(&itom, &tlm); textShape.setSize(QSizeF(300, 100)); QTextCursor cursor (textShape.textShapeData()->document()); foreach(const Lists::ListStyleItem &item, Lists::genericListStyleItems()) { QPixmap pm(48,48); pm.fill(Qt::transparent); QPainter p(&pm); p.translate(0, -1.5); p.setRenderHint(QPainter::Antialiasing); if(item.style != KoListStyle::None) { KoListStyle listStyle; KoListLevelProperties llp = listStyle.levelProperties(1); llp.setStyle(item.style); if (KoListStyle::isNumberingStyle(item.style)) { llp.setStartValue(1); llp.setListItemSuffix("."); } listStyle.setLevelProperties(llp); cursor.select(QTextCursor::Document); QTextCharFormat textCharFormat=cursor.blockCharFormat(); textCharFormat.setFontPointSize(11); textCharFormat.setFontWeight(QFont::Normal); cursor.setCharFormat(textCharFormat); QTextBlock cursorBlock = cursor.block(); KoTextBlockData data(cursorBlock); cursor.insertText("----"); listStyle.applyStyle(cursor.block(),1); cursorBlock = cursor.block(); KoTextBlockData data1(cursorBlock); cursor.insertText("\n----"); cursorBlock = cursor.block(); KoTextBlockData data2(cursorBlock); cursor.insertText("\n----"); cursorBlock = cursor.block(); KoTextBlockData data3(cursorBlock); KoTextDocumentLayout *lay = dynamic_cast<KoTextDocumentLayout*>(textShape.textShapeData()->document()->documentLayout()); if(lay) lay->layout(); KoShapePaintingContext paintContext; //FIXME textShape.paintComponent(p, zoomHandler, paintContext); widget.bulletListButton->addItem(pm, static_cast<int> (item.style)); } }
void SimpleStyleWidget::fillListsCombobox() { if (widget.listType->count() > 0 && (m_comboboxHasBidiItems || !m_tool->isBidiDocument())) return; widget.listType->clear(); KoZoomHandler zoomHandler; zoomHandler.setZoomAndResolution(100, 72, 72); TextShape textShape; textShape.setSize(QSizeF(300, 100)); KTextDocumentLayout *layouter = qobject_cast<KTextDocumentLayout*> (textShape.textShapeData()->document()->documentLayout()); Q_ASSERT(layouter); KParagraphStyle ps; ps.characterStyle()->setFontPointSize(12); ps.applyStyle(textShape.textShapeData()->document()->begin()); foreach(const Lists::ListStyleItem &item, Lists::genericListStyleItems()) { if (item.style == KListStyle::None) { widget.listType->addItem(item.name, static_cast<int>(item.style)); continue; } QPixmap pixmap(16, 16); // can we get the actual size from the style? pixmap.fill(Qt::transparent); QPainter p(&pixmap); KListStyle listStyle; KListLevelProperties llp = listStyle.levelProperties(1); llp.setStyle(item.style); if (KListStyle::isNumberingStyle(item.style)) { llp.setStartValue(1); } else { p.setRenderHint(QPainter::Antialiasing); } listStyle.setLevelProperties(llp); listStyle.applyStyle(textShape.textShapeData()->document()->begin(), 1); layouter->layout(); textShape.paintComponent(p, zoomHandler); p.end(); widget.listType->addItem(QIcon(pixmap), item.name, static_cast<int>(item.style)); if (item.style == m_quickApplyListStyle) { widget.listStyleAgain->setIcon(QIcon(pixmap)); } } if (m_tool->isBidiDocument()) { foreach(const Lists::ListStyleItem &item, Lists::otherListStyleItems()) widget.listType->addItem(item.name, static_cast<int>(item.style)); m_comboboxHasBidiItems = true; }
QVariant CQSpreadsheetListModel::data(const QModelIndex& index, int role) const { if (!index.isValid() || !d->map) { return QVariant(); } switch(role) { case SheetNameRole: return d->map->sheet(index.row())->sheetName(); case ThumbnailRole: { if (d->thumbnails.contains(index.row())) { return d->thumbnails.value(index.row()); } QPixmap thumbnail(d->thumbnailSize); QRect rect(QPoint(0,0), d->thumbnailSize); QPainter p(&thumbnail); p.fillRect(rect, Qt::white); Calligra::Sheets::SheetView sheetView(d->map->sheet(index.row())); qreal zoom = 0.5; KoZoomHandler zoomHandler; zoomHandler.setZoom(zoom); p.setClipRect(rect); p.scale(zoom, zoom); sheetView.setViewConverter(&zoomHandler); QRectF area = zoomHandler.viewToDocument(rect); QRect range = sheetView.sheet()->documentToCellCoordinates(area).adjusted(0, 0, 2, 2); sheetView.setPaintCellRange(range); sheetView.paintCells(p, area, QPointF(0,0)); d->thumbnails.insert(index.row(), thumbnail); return thumbnail; } default: break; } return QVariant(); }
void zoomhandler_test::testConstruction() { KoZoomHandler * zoomHandler = new KoZoomHandler(); QCOMPARE( zoomHandler->zoomFactorX(), 1. ); QCOMPARE( zoomHandler->zoomFactorY(), 1. ); QCOMPARE( ( int )INCH_TO_POINT( zoomHandler->resolutionX() ), ( int )KoDpi::dpiX() ); QCOMPARE( ( int )INCH_TO_POINT( zoomHandler->resolutionY() ), ( int )KoDpi::dpiY() ); QCOMPARE( ( int )INCH_TO_POINT( zoomHandler->zoomedResolutionX() ), ( int )KoDpi::dpiX() ); QCOMPARE( ( int )INCH_TO_POINT( zoomHandler->zoomedResolutionY() ), ( int )KoDpi::dpiY() ); QCOMPARE( zoomHandler->zoomMode(), KoZoomMode::ZOOM_CONSTANT ); QCOMPARE( zoomHandler->zoomInPercent(), 100 ); delete zoomHandler; }
void KPrPdfPrintJob::startPrinting(RemovePolicy removePolicy) { int fromPage = m_printer.fromPage() > 0 ? m_printer.fromPage() - 1: 0; int toPage = m_printer.toPage() > 0 ? m_printer.toPage() - 1: m_pages.size() - 1; Q_ASSERT( fromPage >= 0 && fromPage < m_pages.size() ); Q_ASSERT( toPage >= 0 && toPage < m_pages.size() ); KoZoomHandler zoomHandler; zoomHandler.setResolution( m_printer.resolution(), m_printer.resolution() ); m_printer.setFullPage(true); const KoPageLayout & firstLayout = m_pages.at(fromPage)->pageLayout(); m_printer.setPaperSize(QSizeF(firstLayout.width,firstLayout.height),QPrinter::Millimeter); QPainter painter( &m_printer ); for ( int i = fromPage; i <= toPage; ++i ) { KoPAPageBase *page = m_pages.at(i); const KoPageLayout & layout = page->pageLayout(); m_printer.setPaperSize(QSizeF(layout.width,layout.height),QPrinter::Millimeter); QSize size = m_printer.pageRect().size(); painter.save(); if (i != fromPage) { m_printer.newPage(); } KoPAUtil::setZoom(layout, size, zoomHandler); QRect pageRect(KoPAUtil::pageRect( layout, size, zoomHandler)); painter.setClipRect( pageRect ); painter.setRenderHint( QPainter::Antialiasing ); painter.translate( pageRect.topLeft() ); m_pageProvider->setPageData(i + 1, page); page->paintPage( painter, zoomHandler ); painter.restore(); } if ( removePolicy == DeleteWhenDone ) { deleteLater(); } }
void zoomhandler_test::testDocumentToView() { KoZoomHandler zoomHandler; zoomHandler.setZoom( 1.0 ); zoomHandler.setDpi( 100, 100 ); QCOMPARE( zoomHandler.documentToView( QPointF( 0,0 ) ), QPointF( 0, 0 ) ); QCOMPARE( zoomHandler.documentToView( QRectF( 0, 0, 72, 72 ) ), QRectF( 0, 0, 100, 100) ); QCOMPARE( zoomHandler.documentToViewX( 72 ), 100. ); QCOMPARE( zoomHandler.documentToViewY( 72 ), 100. ); }
void TestViewMode::testPageSetupChanged() { KWPageManager pageManager; //set up as a page spread; KoPageLayout pageLayout = pageManager.defaultPageStyle().pageLayout(); pageLayout.leftMargin = -1; pageLayout.rightMargin = -1; pageLayout.pageEdge = 20; pageLayout.bindingSide = 25; pageManager.defaultPageStyle().setPageLayout(pageLayout); KoZoomHandler zoomer; zoomer.setZoom(1.0); zoomer.setDpi(72, 72); // BORING :) MyViewModeNormal viewMode; viewMode.setPageManager(&pageManager); viewMode.setViewConverter(&zoomer); pageManager.appendPage(); // page 1 pageManager.appendPage(); // page 2 & 3 QCOMPARE(pageManager.pageCount(), 3); viewMode.pageSetupChanged(); QCOMPARE(viewMode.pageTops().count(), 3); QCOMPARE(viewMode.pageSpreadMode(), true); KWPage lastPage = pageManager.appendPage(); // page 4 & 5 viewMode.pageSetupChanged(); QCOMPARE(viewMode.pageTops().count(), 5); QCOMPARE(viewMode.pageSpreadMode(), true); pageManager.removePage(lastPage); viewMode.pageSetupChanged(); QCOMPARE(viewMode.pageTops().count(), 3); QCOMPARE(viewMode.pageSpreadMode(), true); }
void zoomhandler_test::testViewToDocument() { KoZoomHandler zoomHandler; zoomHandler.setZoom( 1.0 ); zoomHandler.setDpi( 100, 100 ); QCOMPARE( zoomHandler.viewToDocument( QPointF( 0, 0 ) ), QPointF( 0, 0 ) ); // 100 view pixels are 72 postscript points at 100% zoom, 100ppi. QCOMPARE( zoomHandler.viewToDocument( QRectF( 0, 0, 100, 100 ) ), QRectF( 0, 0, 72, 72 ) ); QCOMPARE( zoomHandler.viewToDocumentX( 0 ), 0. ); QCOMPARE( zoomHandler.viewToDocumentY( 0 ), 0. ); }
// TODO create a lot of fancy options for printing // e.g. print also notes // For now we print to the center of the page honoring the margins // The page is zoomed to be as big as possible void KoPAPrintJob::startPrinting(RemovePolicy removePolicy) { int fromPage = m_printer.fromPage() ? m_printer.fromPage() - 1: 0; int toPage = m_printer.toPage() ? m_printer.toPage() - 1: m_pages.size() - 1; Q_ASSERT( fromPage >= 0 && fromPage < m_pages.size() ); Q_ASSERT( toPage >= 0 && toPage < m_pages.size() ); KoZoomHandler zoomHandler; zoomHandler.setResolution( m_printer.resolution(), m_printer.resolution() ); QSize size = m_printer.pageRect().size(); QPainter painter( &m_printer ); for ( int i = fromPage; i <= toPage; ++i ) { painter.save(); if (i != fromPage) { m_printer.newPage(); } KoPAPageBase * page = m_pages.at(i); const KoPageLayout & layout = page->pageLayout(); KoPAUtil::setZoom( layout, size, zoomHandler ); QRect pageRect( KoPAUtil::pageRect( layout, size, zoomHandler ) ); painter.setClipRect( pageRect ); painter.setRenderHint( QPainter::Antialiasing ); painter.translate( pageRect.topLeft() ); page->paintPage( painter, zoomHandler ); painter.restore(); } if ( removePolicy == DeleteWhenDone ) { deleteLater(); } }
void MusicShape::saveOdf( KoShapeSavingContext & context ) const { KoXmlWriter& writer = context.xmlWriter(); writer.startElement("draw:frame"); saveOdfAttributes(context, OdfAllAttributes); writer.startElement("music:shape"); writer.addAttribute("xmlns:music", "http://www.koffice.org/music"); MusicXmlWriter().writeSheet(writer, m_sheet, false); writer.endElement(); // music:shape // Save a preview image qreal previewDPI = 150; QSizeF imgSize = size(); // in points imgSize *= previewDPI / 72; QImage img(imgSize.toSize(), QImage::Format_ARGB32); QPainter painter(&img); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::TextAntialiasing); KoZoomHandler converter; converter.setZoomAndResolution(100, previewDPI, previewDPI); constPaint(painter, converter); writer.startElement("draw:image"); // In the spec, only the xlink:href attribute is marked as mandatory, cool :) QString name = context.imageHref(img); writer.addAttribute("xlink:type", "simple" ); writer.addAttribute("xlink:show", "embed" ); writer.addAttribute("xlink:actuate", "onLoad"); writer.addAttribute("xlink:href", name); writer.endElement(); // draw:image // TODO: Save a preview svg saveOdfCommonChildElements(context); writer.endElement(); // draw:frame }
void zoomhandler_test::testApi() { KoZoomHandler zoomHandler; qreal x, y; zoomHandler.setResolution( 128, 129 ); QCOMPARE( zoomHandler.resolutionX(), 128. ); QCOMPARE( zoomHandler.resolutionY(), 129. ); zoomHandler.setZoomedResolution( 50, 60 ); QCOMPARE( zoomHandler.zoomedResolutionX(), 50.); QCOMPARE( zoomHandler.zoomedResolutionY(), 60.); zoomHandler.setZoom( 0.2 ); // is 20% QCOMPARE( zoomHandler.zoomInPercent(), 20); QCOMPARE( zoomHandler.resolutionX(), 128. ); QCOMPARE( zoomHandler.resolutionY(), 129. ); QCOMPARE( zoomHandler.zoomedResolutionX(), 25.6 ); QCOMPARE( zoomHandler.zoomedResolutionY(), 25.8 ); zoomHandler.zoom( &x, &y ); QVERIFY( x == 25.6 && y == 25.8 ); zoomHandler.setZoom( 1. ); zoomHandler.setZoom( 0.2 ); QCOMPARE( zoomHandler.zoomInPercent(), 20 ); QCOMPARE( zoomHandler.resolutionX(), 128. ); QCOMPARE( zoomHandler.resolutionY(), 129. ); QCOMPARE( zoomHandler.zoomedResolutionX(), 25.6 ); QCOMPARE( zoomHandler.zoomedResolutionY(), 25.8 ); zoomHandler.zoom( &x, &y ); QVERIFY( x == 25.6 && y == 25.8 ); zoomHandler.setZoomMode( KoZoomMode::ZOOM_CONSTANT ); QCOMPARE( zoomHandler.zoomMode(), KoZoomMode::ZOOM_CONSTANT ); zoomHandler.setZoomMode( KoZoomMode::ZOOM_WIDTH ); QCOMPARE( zoomHandler.zoomMode(), KoZoomMode::ZOOM_WIDTH ); zoomHandler.setZoomMode( KoZoomMode::ZOOM_PAGE ); QCOMPARE( zoomHandler.zoomMode(), KoZoomMode::ZOOM_PAGE ); }
void SimpleTableWidget::fillBorderButton(const QColor &color) { ItemChooserAction *chooser = widget.border->addItemChooser(9); qDeleteAll(m_cellStyles); m_cellStyles.clear(); qreal thickness[9] = {0.25, 0.5, 0.75, 1.0, 1.5, 2.25, 3.0, 4.5, 6.0}; KoTableCellStyle cellStyle; qDeleteAll(m_cellStyles); m_cellStyles.append(KoTableCellStyle().clone()); for (int i=8; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDoubleWave, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=6; i<8; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderWave, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=4; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDouble, thickness[i]*1.5, color); cellStyle.setEdgeDoubleBorderValues(KoBorder::TopBorder, thickness[i], thickness[i]/4); m_cellStyles.append(cellStyle.clone()); } for (int i=6; i<7; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderSlash, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } m_cellStyles.append(0); for (int i=0; i<7; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDouble, thickness[i]*3, color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDouble, thickness[i]*2, color); cellStyle.setEdgeDoubleBorderValues(KoBorder::TopBorder, thickness[i]/2, thickness[i]/2); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderSolid, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDotted, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDashed, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDashedLong, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDashDot, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } for (int i=0; i<9; i++) { cellStyle.setEdge(KoBorder::TopBorder, KoBorder::BorderDashDotDot, thickness[i], color); m_cellStyles.append(cellStyle.clone()); } int i=1; KoZoomHandler zoomHandler; foreach(KoTableCellStyle *style, m_cellStyles) { if (style == 0) { widget.border->addBlanks(chooser, 1); i++; continue; } QPixmap pm(48,16); pm.fill(Qt::transparent); QPainter p(&pm); p.setRenderHint(QPainter::Antialiasing); if(style->hasBorders()) { p.scale(zoomHandler.zoomedResolutionX(),zoomHandler.zoomedResolutionY()); KoTextLayoutCellHelper cellStyleHelper(*style); qreal width = style->topBorderWidth(); cellStyleHelper.drawTopHorizontalBorder(p, 0, 8/zoomHandler.zoomedResolutionY() - width/2, pm.width()/zoomHandler.zoomedResolutionX(), 0); widget.border->addItem(chooser, pm, i, KoUnit().toUserStringValue(style->topBorderWidth())+"pt"); } else { p.drawText(0, 0, 48, 16, Qt::AlignCenter, i18nc("No border - has to fit in 48pixels","None")); widget.border->addItem(chooser, pm, i, i18n("No Border")); } i++; } widget.border->setItemsBackground(chooser, QColor(Qt::white)); // widget.borderType->addItem("None"); widget.border->addSeparator(); /* //TODO: Uncomment the below line when the string freeze is over //action->setToolTip(i18n("Change the level the list is at")); QMenu *listLevelMenu = new QMenu(); const int levelIndent = 13; for (int level = 0; level < 10; ++level) { QWidgetAction *wa = new QWidgetAction(listLevelMenu); ListLevelChooser *chooserWidget = new ListLevelChooser((levelIndent * level) + 5); wa->setDefaultWidget(chooserWidget); listLevelMenu->addAction(wa); m_mapper->setMapping(wa,level + 1); connect(chooserWidget, SIGNAL(clicked()), wa, SLOT(trigger())); connect(wa, SIGNAL(triggered()), m_mapper, SLOT(map())); } action->setMenu(listLevelMenu); */ }
void TestViewMode::testBasicConversion() { const int A4_HEIGHT = 842; KWPageManager pageManager; KoZoomHandler zoomer; zoomer.setZoom(1); zoomer.setDpi(72, 72); // BORING :) MyViewModeNormal viewMode; viewMode.setPageManager(&pageManager); viewMode.setViewConverter(&zoomer); QCOMPARE(viewMode.pageTops().count(), 0); QCOMPARE(viewMode.pageSpreadMode(), false); QCOMPARE(viewMode.contents(), QSizeF(0, 0)); pageManager.appendPage(); //one A4 page. viewMode.pageSetupChanged(); QCOMPARE(viewMode.pageTops().count(), 1); QCOMPARE(viewMode.pageSpreadMode(), false); QCOMPARE(viewMode.contents().toSize(), QSize(595, A4_HEIGHT)); // approximate size is ok QCOMPARE(viewMode.documentToView(QPointF()).toPoint(), QPoint()); QCOMPARE(viewMode.documentToView(QPointF(10, 10)).toPoint(), QPoint(10, 10)); QCOMPARE(viewMode.documentToView(QPointF(590, 10)).toPoint(), QPoint(590, 10)); QCOMPARE(viewMode.documentToView(QPointF(590, 840)).toPoint(), QPoint(590, 840)); QCOMPARE(viewMode.documentToView(QPointF(600, 840)).toPoint(), QPoint(600, 840)); // no clipping horizontally QCOMPARE(viewMode.documentToView(QPointF(50, 1000)).toPoint(), QPoint(50, 1000)); // no clipping vertically QCOMPARE(viewMode.viewToDocument(QPointF()).toPoint(), QPoint()); QCOMPARE(viewMode.viewToDocument(QPointF(10, 10)).toPoint(), QPoint(10, 10)); QCOMPARE(viewMode.viewToDocument(QPointF(590, 10)).toPoint(), QPoint(590, 10)); QCOMPARE(viewMode.viewToDocument(QPointF(590, 840)).toPoint(), QPoint(590, 840)); QCOMPARE(viewMode.viewToDocument(QPointF(600, 840)).toPoint(), QPoint(600, 840)); // no clipping horizontally QCOMPARE(viewMode.viewToDocument(QPointF(50, 1000)).toPoint(), QPoint(50, 1000)); // no clipping vertically KWPage page2 = pageManager.appendPage(); page2.setPageSide(KWPage::PageSpread); viewMode.pageSetupChanged(); QCOMPARE(viewMode.pageTops().count(), 3); QCOMPARE(viewMode.pageSpreadMode(), true); QCOMPARE(viewMode.contents().toSize(), QSize(1191, A4_HEIGHT * 2 + PAGEGAP)); // just A4 times 2, plus the PAGEGAP px gap between pages QCOMPARE(viewMode.pageTops()[0], 0.0); QCOMPARE(qRound(viewMode.pageTops()[1]), A4_HEIGHT + PAGEGAP); QCOMPARE(qRound(viewMode.pageTops()[2]), A4_HEIGHT + PAGEGAP); // for a pageSpread we don't move the top of page QCOMPARE(viewMode.documentToView(QPointF()).toPoint(), QPoint()); QCOMPARE(viewMode.documentToView(QPointF(10, 10)).toPoint(), QPoint(10, 10)); QCOMPARE(viewMode.documentToView(QPointF(590, 10)).toPoint(), QPoint(590, 10)); QCOMPARE(viewMode.documentToView(QPointF(590, 840)).toPoint(), QPoint(590, 840)); QCOMPARE(viewMode.documentToView(QPointF(600, 840)).toPoint(), QPoint(600, 840)); QCOMPARE(viewMode.documentToView(QPointF(50, 1000)).toPoint(), QPoint(50, 1000 + PAGEGAP)); QCOMPARE(viewMode.documentToView(QPointF(1000, 1000)).toPoint(), QPoint(1000, 1000 + PAGEGAP)); // no clipping vertically QCOMPARE(viewMode.viewToDocument(QPointF()).toPoint(), QPoint()); QCOMPARE(viewMode.viewToDocument(QPointF(10, 10)).toPoint(), QPoint(10, 10)); QCOMPARE(viewMode.viewToDocument(QPointF(590, 10)).toPoint(), QPoint(590, 10)); QCOMPARE(viewMode.viewToDocument(QPointF(590, 840)).toPoint(), QPoint(590, 840)); QCOMPARE(viewMode.viewToDocument(QPointF(600, 840)).toPoint(), QPoint(600, 840)); QCOMPARE(viewMode.viewToDocument(QPointF(50, 1000 + PAGEGAP)).toPoint(), QPoint(50, 1000)); QCOMPARE(viewMode.viewToDocument(QPointF(1000, 1000 + PAGEGAP)).toPoint(), QPoint(1000, 1000)); // no clipping vertically // rectangles are more tricky ;) QList<KWViewMode::ViewMap> answer; answer = viewMode.mapExposedRects(QRect(10, 10, 10, 10)); QCOMPARE(answer.count(), 1); QCOMPARE(answer[0].clipRect, QRect(10, 10, 10, 10)); QCOMPARE(answer[0].distance, QPointF()); answer = viewMode.mapExposedRects(QRect(10, 10, 10, 1000)); QCOMPARE(answer.count(), 2); QCOMPARE(answer[0].clipRect, QRect(10, 10, 10, A4_HEIGHT - 10)); QCOMPARE(answer[0].distance, QPointF()); QCOMPARE(answer[1].clipRect, QRect(10, A4_HEIGHT, 10, 1000 - A4_HEIGHT + PAGEGAP)); QCOMPARE(answer[1].distance, QPointF(0, PAGEGAP)); }
KoFilter::ConversionStatus ImageExport::convert(const QByteArray& from, const QByteArray& to) { if(from != "application/x-kivio") { return KoFilter::BadMimeType; } QString format; if(to == "image/png") { format = "PNG"; } else if(to == "image/jpeg") { format = "JPEG"; } else if(to == "image/bmp") { format = "BMP"; } else if(to == "image/x-eps") { format = "EPS"; } else if(to == "image/x-portable-bitmap") { format = "PBM"; } else if(to == "image/x-pcx") { format = "PCX"; } else if(to == "image/x-portable-pixmap") { format = "PPM"; } else if(to == "image/x-rgb") { format = "RGB"; } else if(to == "image/x-xpixmap") { format = "XPM"; } else if(to == "image/jpeg2000") { format = "JP2"; } else { return KoFilter::BadMimeType; } KoStoreDevice* storeIn = m_chain->storageFile("root", KoStore::Read); if (!storeIn) { KMessageBox::error(0, i18n("Failed to read data."), i18n( "Export Error" )); return KoFilter::FileNotFound; } // Get the XML tree. QDomDocument domIn; domIn.setContent(storeIn); KivioDoc doc; if(!doc.loadXML(0, domIn)) { KMessageBox::error(0, i18n("Malformed XML data."), i18n("Export Error")); return KoFilter::WrongFormat; } ImageExportDialog dlg; QStringList pageNames; Q3PtrList<KivioPage> pageList = doc.map()->pageList(); Q3PtrListIterator<KivioPage> it(pageList); for(; it.current() != 0; ++it) { pageNames.append(it.current()->pageName()); } KoZoomHandler zoom; dlg.setPageList(pageNames); KivioPage* page = doc.map()->firstPage(); QSize size = QSize(zoom.zoomItX(page->paperLayout().ptWidth), zoom.zoomItY(page->paperLayout().ptHeight)); dlg.setInitialCustomSize(size); if(dlg.exec() != QDialog::Accepted) { return KoFilter::UserCancelled; } page = doc.map()->findPage(dlg.selectedPage()); if(!page) { kDebug() <<"The page named" << dlg.selectedPage() <<" wasn't found!!"; return KoFilter::InternalError; } if(dlg.usePageBorders()) { size = QSize(zoom.zoomItX(page->paperLayout().ptWidth), zoom.zoomItY(page->paperLayout().ptHeight)); } else { size = zoom.zoomSize(page->getRectForAllStencils().size()); } if(dlg.useCustomSize()) { QSize customSize = dlg.customSize(); float zw = (float)customSize.width() / (float)size.width(); float zh = (float)customSize.height() / (float)size.height(); float z = qMin(zw, zh); zoom.setZoomAndResolution(qRound(z * 100), KoGlobal::dpiX(), KoGlobal::dpiY()); size = customSize; } int border = dlg.margin(); size.setWidth(size.width() + (border * 2)); size.setHeight(size.height() + (border * 2)); QPixmap pixmap = QPixmap(size); pixmap.fill(Qt::white); KivioScreenPainter kpainter; kpainter.start(&pixmap); int translationX = border; int translationY = border; if(!dlg.usePageBorders()) { QPoint point = zoom.zoomPoint(page->getRectForAllStencils().topLeft()); translationX += point.x(); translationY += point.y(); } kpainter.setTranslation(-translationX, -translationY); page->printContent(kpainter, &zoom); if(!pixmap.save(m_chain->outputFile(), format.local8Bit())) { return KoFilter::CreationError; } return KoFilter::OK; }
void TestViewMode::testClipRectForPageSpread() { KWPageManager pageManager; //set up as a page spread; KoPageLayout pageLayout = pageManager.defaultPageStyle().pageLayout(); pageLayout.leftMargin = -1; pageLayout.rightMargin = -1; pageLayout.pageEdge = 20; pageLayout.bindingSide = 25; pageLayout.height = 200; pageLayout.width = 300; pageManager.defaultPageStyle().setPageLayout(pageLayout); KoZoomHandler zoomer; zoomer.setZoom(1.0); zoomer.setDpi(72, 72); // BORING :) MyViewModeNormal viewMode; viewMode.setPageManager(&pageManager); viewMode.setViewConverter(&zoomer); pageManager.appendPage(); // page 1 pageManager.appendPage(); // page 2 & 3 QCOMPARE(pageManager.pageCount(), 3); viewMode.pageSetupChanged(); QList<KWViewMode::ViewMap> answer; answer = viewMode.mapExposedRects(QRect(50, 180, 300, 100)); QCOMPARE(answer.count(), 2); QCOMPARE(answer[0].clipRect, QRect(50, 180, 250, 20)); // page 1 QCOMPARE(answer[0].distance, QPointF()); QCOMPARE(answer[1].clipRect, QRect(50, 200, 300, 75)); // page 2 & 3 QCOMPARE(answer[1].distance, QPointF(0, PAGEGAP)); answer = viewMode.mapExposedRects(QRect(0, 250, 1000, 50)); QCOMPARE(answer.count(), 1); QCOMPARE(answer[0].clipRect, QRect(0, 245, 600, 50)); // page 2&3 QCOMPARE(answer[0].distance, QPointF(0, PAGEGAP)); pageManager.appendPage(); // page 4 & 5 QCOMPARE(pageManager.pageCount(), 5); viewMode.pageSetupChanged(); answer = viewMode.mapExposedRects(QRect(0, 250, 1000, 50)); QCOMPARE(answer.count(), 1); QCOMPARE(answer[0].clipRect, QRect(0, 245, 600, 50)); // page 2&3 QCOMPARE(answer[0].distance, QPointF(0, PAGEGAP)); answer = viewMode.mapExposedRects(QRect(0, 450, 1000, 50)); QCOMPARE(answer.count(), 1); QCOMPARE(answer[0].clipRect, QRect(0, 440, 600, 50)); // page 4&5 QCOMPARE(answer[0].distance, QPointF(0, PAGEGAP * 2)); answer = viewMode.mapExposedRects(QRect(0, 250, 1000, 500)); QCOMPARE(answer.count(), 2); QCOMPARE(answer[0].clipRect, QRect(0, 245, 600, 155)); // page 2&3 QCOMPARE(answer[0].distance, QPointF(0, PAGEGAP)); QCOMPARE(answer[1].clipRect, QRect(0, 400, 600, 200)); // page 4&5 QCOMPARE(answer[1].distance, QPointF(0, PAGEGAP * 2)); }
void KivioStencil::paintSelectionHandles( KivioIntraStencilData *pData ) { int newX, newY, newW, newH; // Handle Width //const double HW = 6.0f; //const double HWP1 = HW+1.0f; // Handle Width Over 2 //const double HWo2 = HW/2.0f; KoZoomHandler* zoomHandler = pData->zoomHandler; KivioPainter *painter = pData->painter; newX = zoomHandler->zoomItX(m_x - qRound(lineWidth() / 2)); newY = zoomHandler->zoomItY(m_y - qRound(lineWidth() / 2)); newW = zoomHandler->zoomItX(m_w + lineWidth() + 1); newH = zoomHandler->zoomItY(m_h + lineWidth() + 1); painter->saveState(); painter->setTranslation(newX, newY); rotatePainter(pData); // Rotate the painter if needed painter->drawSelectionBox(QRect(0, 0, newW, newH)); // top left, top right, bottom left, bottom right if( m_pProtection->at( kpWidth ) || m_pProtection->at( kpHeight ) ) { painter->drawHandle( 0, 0, KivioPainter::cpfLock ); painter->drawHandle( newW, 0, KivioPainter::cpfLock ); painter->drawHandle( 0, newH, KivioPainter::cpfLock ); painter->drawHandle( newW, newH, KivioPainter::cpfLock ); } else { painter->drawHandle( 0, 0, 0 ); painter->drawHandle( newW, 0, 0 ); painter->drawHandle( 0, newH, 0 ); painter->drawHandle( newW, newH, 0 ); } // Top/bottom if( m_pProtection->at( kpHeight ) || m_pProtection->at( kpAspect ) ) { painter->drawHandle( newW / 2, 0, KivioPainter::cpfLock ); painter->drawHandle( newW / 2, newH, KivioPainter::cpfLock ); } else { painter->drawHandle( newW / 2, 0, 0 ); painter->drawHandle( newW / 2, newH, 0 ); } // left, right if( m_pProtection->at( kpWidth ) || m_pProtection->at( kpAspect ) ) { painter->drawHandle( 0, newH / 2, KivioPainter::cpfLock ); painter->drawHandle( newW, newH / 2, KivioPainter::cpfLock ); } else { painter->drawHandle( 0, newH / 2, 0 ); painter->drawHandle( newW, newH / 2, 0 ); } painter->restoreState(); }