bool QgsComposerPictureWidget::testSvgFile( const QString& filename ) const { //QSvgRenderer crashes with some (non-svg) xml documents. //So at least we try to sort out the ones with different suffixes if ( !filename.endsWith( ".svg" ) ) { return false; } QSvgRenderer svgRenderer( filename ); return svgRenderer.isValid(); }
QPixmap* MainWindow::fromSvgToPixmap(const QSize &ImageSize, const QString &SvgFile) { const qreal PixelRatio = this->devicePixelRatio(); QSvgRenderer svgRenderer(SvgFile); QPixmap *img = new QPixmap(ImageSize*PixelRatio); QPainter Painter; img->fill(Qt::transparent); Painter.begin(img); svgRenderer.render(&Painter); Painter.end(); img->setDevicePixelRatio(PixelRatio); return img; }
QSizeF HbIconSource::defaultSize() { // If the default size has not been fetched yet, do it now. if (!mDefaultSize.isValid()) { type(); // make sure type is initialized if (mType == "NVG") { #ifndef HB_BOOTSTRAPPED #ifdef HB_NVG_CS_ICON if (!mByteArray) { QFile file(mFilename); if (!file.open(QIODevice::NotOpen | QIODevice::ReadOnly)) { return QSizeF(); } mByteArray = new QByteArray(file.readAll()); } HbNvgEngine nvgEngine; mDefaultSize = nvgEngine.contentDimensions(*mByteArray); #endif // HB_NVG_CS_ICON #else // HB_BOOTSTRAPPED if (!mByteArray) { QFile file(mFilename); if (!file.open(QIODevice::NotOpen | QIODevice::ReadOnly)) { return QSizeF(); } mByteArray = new QByteArray(file.readAll()); } mDefaultSize = nvgContentDimensions(*mByteArray); #endif } else if (mType == "SVG") { QSvgRenderer *renderer = svgRenderer(); if (renderer) { // isValid() is already checked in svgRenderer() mDefaultSize = renderer->defaultSize(); } releaseSvgRenderer(); } else if (mType == "PIC") { if (!mPicture) { mPicture = new QPicture; mPicture->load(mFilename); } mDefaultSize = mPicture->boundingRect().size(); } // Image reader supports getting the default size without rasterizing the image so // using it with the formats that it supports. else if (mType == "MNG" || mType == "GIF" || mType == "JPG" || mType == "PNG") { // Note that QImageReader::canRead() results in opening the file and so the // file will be locked until the QImageReader instance is // destroyed. Therefore the image reader instance must be destroyed as soon // as possible and must not be kept for later use. // Exception: Files on Z drive on Symbian. See canKeepOpen() and releaseImageReader(). QImageReader *reader = imageReader(); if (reader) { // canRead() is already checked in imageReader() if (mType != "MNG") { mDefaultSize = reader->size(); } else { // MNG handler does not support size query so have to render it to get the size QImage img = reader->read(); mDefaultSize = img.size(); } } releaseImageReader(); } else if (mType != "BLOB") { if (!mPixmap) { mPixmap = new QPixmap(mFilename); } mDefaultSize = mPixmap->size(); } } return QSizeF(mDefaultSize); }
QPixmap ImageRegistry::pixmap( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, float opacity, QColor tint ) { if ( size.width() < 0 || size.height() < 0 ) { Q_ASSERT( false ); return QPixmap(); } QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; if ( s_cache.contains( image ) ) { subcache = s_cache.value( image ); if ( subcache.contains( mode ) ) { subsubcache = subcache.value( mode ); const qint64 ck = cacheKey( size, opacity, tint ); if ( subsubcache.contains( ck ) ) { return subsubcache.value( ck ); } } } // Image not found in cache. Let's load it. QPixmap pixmap; if ( image.toLower().endsWith( ".svg" ) ) { QSvgRenderer svgRenderer( image ); QPixmap p( size.isNull() || size.height() == 0 || size.width() == 0 ? svgRenderer.defaultSize() : size ); p.fill( Qt::transparent ); QPainter pixPainter( &p ); pixPainter.setOpacity( opacity ); svgRenderer.render( &pixPainter ); pixPainter.end(); if ( tint.alpha() > 0 ) p = TomahawkUtils::tinted( p, tint ); pixmap = p; } else pixmap = QPixmap( image ); if ( !pixmap.isNull() ) { switch ( mode ) { case TomahawkUtils::RoundedCorners: pixmap = TomahawkUtils::createRoundedImage( pixmap, size ); break; default: break; } if ( !size.isNull() && pixmap.size() != size ) { if ( size.width() == 0 ) { pixmap = pixmap.scaledToHeight( size.height(), Qt::SmoothTransformation ); } else if ( size.height() == 0 ) { pixmap = pixmap.scaledToWidth( size.width(), Qt::SmoothTransformation ); } else pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } putInCache( image, size, mode, opacity, pixmap, tint ); } return pixmap; }