⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writeicondata.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the tools applications of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "writeicondata.h"#include "driver.h"#include "ui4.h"#include "uic.h"#include <QTextStream>static QByteArray unzipXPM(QString data, ulong& length){#ifndef QT_NO_COMPRESS    const int lengthOffset = 4;    int baSize = data.length() / 2 + lengthOffset;    uchar *ba = new uchar[baSize];    for (int i = lengthOffset; i < baSize; ++i) {        char h = data[2 * (i-lengthOffset)].toLatin1();        char l = data[2 * (i-lengthOffset) + 1].toLatin1();        uchar r = 0;        if (h <= '9')            r += h - '0';        else            r += h - 'a' + 10;        r = r << 4;        if (l <= '9')            r += l - '0';        else            r += l - 'a' + 10;        ba[i] = r;    }    // qUncompress() expects the first 4 bytes to be the expected length of the    // uncompressed data    ba[0] = (length & 0xff000000) >> 24;    ba[1] = (length & 0x00ff0000) >> 16;    ba[2] = (length & 0x0000ff00) >> 8;    ba[3] = (length & 0x000000ff);    QByteArray baunzip = qUncompress(ba, baSize);    delete[] ba;    return baunzip;#else    Q_UNUSED(data);    Q_UNUSED(length);    return QByteArray();#endif}WriteIconData::WriteIconData(Uic *uic)    : driver(uic->driver()), output(uic->output()), option(uic->option()){}void WriteIconData::acceptUI(DomUI *node){    TreeWalker::acceptUI(node);}void WriteIconData::acceptImages(DomImages *images){    TreeWalker::acceptImages(images);}void WriteIconData::acceptImage(DomImage *image){    QString img = image->attributeName() + QLatin1String("_data");    QString data = image->elementData()->text();    QString fmt = image->elementData()->attributeFormat();    int size = image->elementData()->attributeLength();    if (fmt == QLatin1String("XPM.GZ")) {        ulong length = size;        QByteArray baunzip = unzipXPM(data, length);        length = baunzip.size();        // shouldn't we test the initial 'length' against the        // resulting 'length' to catch corrupt UIC files?        int a = 0;        int column = 0;        bool inQuote = false;        output << option.indent << "static const char* const " << img << "[] = { \n";        while (baunzip[a] != '\"')            a++;        for (; a < (int) length; a++) {            output << baunzip[a];            if (baunzip[a] == '\n') {                column = 0;            } else if (baunzip[a] == '"') {                inQuote = !inQuote;            }            if (column++ >= 511 && inQuote) {                output << "\"\n\""; // be nice with MSVC & Co.                column = 1;            }        }        if (! baunzip.trimmed ().endsWith ("};"))            output << "};";        output << "\n\n";    } else {        output << option.indent << "static const unsigned char " << img << "[] = { \n";        output << option.indent;        int a ;        for (a = 0; a < (int) (data.length()/2)-1; a++) {            output << "0x" << QString(data[2*a]) << QString(data[2*a+1]) << ",";            if (a % 12 == 11)                output << "\n" << option.indent;            else                output << " ";        }        output << "0x" << QString(data[2*a]) << QString(data[2*a+1]) << "\n";        output << "};\n\n";    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -