void ShapeView::updateShapeList() { clear(); setWordWrap(true); for (QHash<QString, shapeData>::Iterator it = m_Shapes.begin(); it != m_Shapes.end(); ++it) { int w = it.value().width + 4; int h = it.value().height + 4; QImage Ico(w, h, QImage::Format_ARGB32_Premultiplied); Ico.fill(0); ScPainter *painter = new ScPainter(&Ico, w, h); painter->setBrush(qRgb(0, 0, 0)); painter->setPen(qRgb(0, 0, 0), 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); painter->setFillMode(ScPainter::Solid); painter->setStrokeMode(ScPainter::Solid); painter->translate(2.0, 2.0); painter->setupPolygon(&it.value().path); painter->drawPolygon(); painter->end(); delete painter; QPixmap pm; if (w >= h) pm = QPixmap::fromImage(Ico.scaledToWidth(48, Qt::SmoothTransformation)); else pm = QPixmap::fromImage(Ico.scaledToHeight(48, Qt::SmoothTransformation)); QPixmap pm2(48, 48); pm2.fill(palette().color(QPalette::Base)); QPainter p; p.begin(&pm2); p.drawPixmap(24 - pm.width() / 2, 24 - pm.height() / 2, pm); p.end(); QListWidgetItem *item = new QListWidgetItem(pm2, it.value().name, this); item->setData(Qt::UserRole, it.key()); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); } }
// Leanify the file // and move the file ahead size_leanified bytes // the new location of the file will be file_pointer - size_leanified // it's designed this way to avoid extra memmove or memcpy // return new size size_t LeanifyFile(void *file_pointer, size_t file_size, size_t size_leanified /*= 0*/) { if (!memcmp(file_pointer, Png::header_magic, sizeof(Png::header_magic))) { if (is_verbose) { std::cout << "PNG detected." << std::endl; } return Png(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Jpeg::header_magic, sizeof(Jpeg::header_magic))) { if (is_verbose) { std::cout << "JPEG detected." << std::endl; } return Jpeg(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Lua::header_magic, sizeof(Lua::header_magic))) { if (is_verbose) { std::cout << "Lua detected." << std::endl; } return Lua(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Zip::header_magic, sizeof(Zip::header_magic))) { if (is_verbose) { std::cout << "ZIP detected." << std::endl; } return Zip(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Pe::header_magic, sizeof(Pe::header_magic))) { if (is_verbose) { std::cout << "PE detected." << std::endl; } return Pe(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Gz::header_magic, sizeof(Gz::header_magic))) { if (is_verbose) { std::cout << "GZ detected." << std::endl; } return Gz(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Ico::header_magic, sizeof(Ico::header_magic))) { if (is_verbose) { std::cout << "ICO detected." << std::endl; } return Ico(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Gft::header_magic, sizeof(Gft::header_magic))) { if (is_verbose) { std::cout << "GFT detected." << std::endl; } return Gft(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Rdb::header_magic, sizeof(Rdb::header_magic))) { if (is_verbose) { std::cout << "RDB detected." << std::endl; } return Rdb(file_pointer, file_size).Leanify(size_leanified); } else if (!memcmp(file_pointer, Swf::header_magic, sizeof(Swf::header_magic)) || !memcmp(file_pointer, Swf::header_magic_deflate, sizeof(Swf::header_magic_deflate)) || !memcmp(file_pointer, Swf::header_magic_lzma, sizeof(Swf::header_magic_lzma))) { if (is_verbose) { std::cout << "SWF detected." << std::endl; } return Swf(file_pointer, file_size).Leanify(size_leanified); } else { // tar file does not have header magic // ustar is optional { Tar t(file_pointer, file_size); // checking first record checksum if (t.IsValid()) { if (is_verbose) { std::cout << "tar detected." << std::endl; } return t.Leanify(size_leanified); } } // XML file does not have header magic // have to parse and see if there are any errors. { Xml x(file_pointer, file_size); if (x.IsValid()) { if (is_verbose) { std::cout << "XML detected." << std::endl; } return x.Leanify(size_leanified); } } } if (is_verbose) { std::cout << "Format not supported!" << std::endl; } // for unsupported format, just memmove it. return Format(file_pointer, file_size).Leanify(size_leanified); }