void OsmNominatimRunner::search( const QString &searchTerm, const GeoDataLatLonBox &preferred ) { QString base = "http://nominatim.openstreetmap.org/search?"; QString query = "q=%1&format=xml&addressdetails=1&accept-language=%2"; QString url = QString(base + query).arg(searchTerm).arg(MarbleLocale::languageCode()); if( !preferred.isEmpty() ) { GeoDataCoordinates::Unit deg = GeoDataCoordinates::Degree; QString viewbox( "&viewbox=%1,%2,%3,%4&bounded=1" ); // left, top, right, bottom url += viewbox.arg(preferred.west(deg)) .arg(preferred.north(deg)) .arg(preferred.east(deg)) .arg(preferred.south(deg)); } m_request.setUrl(QUrl(url)); m_request.setRawHeader("User-Agent", TinyWebBrowser::userAgent("Browser", "OsmNominatimRunner") ); QEventLoop eventLoop; QTimer timer; timer.setSingleShot( true ); timer.setInterval( 15000 ); connect( &timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); connect( this, SIGNAL(searchFinished(QVector<GeoDataPlacemark*>)), &eventLoop, SLOT(quit()) ); // @todo FIXME Must currently be done in the main thread, see bug 257376 QTimer::singleShot( 0, this, SLOT(startSearch()) ); timer.start(); eventLoop.exec(); }
void SVG::renderToTexture(const QRectF& textureRect, QGLFramebufferObjectPtr targetFbo) { saveGLState(); // generate and set view box in logical coordinates QRectF viewbox(svgExtents_.x() + textureRect.x() * svgExtents_.width(), svgExtents_.y() + textureRect.y() * svgExtents_.height(), textureRect.width() * svgExtents_.width(), textureRect.height() * svgExtents_.height()); svgRenderer_.setViewBox(viewbox); // Multisampled FBO for anti-aliased rendering QGLFramebufferObjectFormat format; format.setAttachment(QGLFramebufferObject::CombinedDepthStencil); format.setSamples(MULTI_SAMPLE_ANTI_ALIASING_SAMPLES); QGLFramebufferObjectPtr renderFbo( new QGLFramebufferObject( targetFbo->size(), format )); // Render to multisampled FBO QPainter painter(renderFbo.get()); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); svgRenderer_.render(&painter); painter.end(); // Copy to texture FBO QGLFramebufferObject::blitFramebuffer( targetFbo.get(), QRect(0, 0, renderFbo->width(), renderFbo->height()), renderFbo.get(), QRect(0, 0, renderFbo->width(), renderFbo->height())); glBindTexture(GL_TEXTURE_2D, targetFbo->texture()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); restoreGLState(); }
void MainWindow::documentExport(void) { Canvas *currCanvas = canvas(); QString currFilename = currCanvas->filename(); currFilename.chop(4); if (currFilename.isEmpty()) { // Determine the working directory. QSettings settings; QString workingDir(QDir::homePath()); QVariant workingDirSetting = settings.value("workingDirectory"); if (workingDirSetting.isValid()) { workingDir = workingDirSetting.toString(); } currFilename = workingDir + "/untitled"; } QString filename = QFileDialog::getSaveFileName(this, tr("Export Diagram"), currFilename, tr("SVG (*.svg);;PDF (*.pdf);;Postscript (*.ps)")); if (filename.isEmpty()) { return; } QRectF pageRect = currCanvas->pageRect(); if (pageRect.size().isEmpty()) { // There is no page set, so use a page equal to diagram bounds double padding = 10; pageRect = expandRect(diagramBoundingRect(currCanvas->items()), padding); } QFileInfo file(filename); if (file.suffix() == "svg") { QSvgGenerator generator; generator.setFileName(filename); QRectF targetRect(QPointF(0, 0), currCanvas->sceneRect().size()); QPointF topLeft = pageRect.topLeft() - currCanvas->sceneRect().topLeft(); QRectF viewbox(topLeft, pageRect.size()); generator.setSize(viewbox.size().toSize()); generator.setViewBox(viewbox); generator.setTitle(QFileInfo(filename).fileName()); generator.setDescription(tr("This file was exported from Dunnart. " "http://www.dunnart.org/")); QPainter painter; if (painter.begin(&generator)) { painter.setRenderHint(QPainter::Antialiasing); currCanvas->setRenderingForPrinting(true); currCanvas->render(&painter, targetRect, currCanvas->sceneRect(), Qt::IgnoreAspectRatio); currCanvas->setRenderingForPrinting(false); painter.end(); } else { qDebug("Export SVG painter failed to begin."); } } else { // Use QPrinter for PDF and PS. QPrinter printer; printer.setOutputFileName(filename); printer.setPaperSize(pageRect.size(), QPrinter::Millimeter); QPainter painter; if (painter.begin(&printer)) { painter.setRenderHint(QPainter::Antialiasing); currCanvas->setRenderingForPrinting(true); currCanvas->render(&painter, QRectF(), expandRect(pageRect, -3), Qt::IgnoreAspectRatio); currCanvas->setRenderingForPrinting(false); } else { qDebug("Export PDF/PS painter failed to begin."); } } }