qt 6.5.1 original

This commit is contained in:
kleuter
2023-10-29 23:33:08 +01:00
parent 71d22ab6b0
commit 85d238dfda
21202 changed files with 5499099 additions and 0 deletions

View File

@ -0,0 +1,25 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
# QTBUG-87669
if(TARGET Qt::Network AND NOT ANDROID)
add_subdirectory(qimagereader)
endif()
if(QT_FEATURE_ico)
add_subdirectory(qicoimageformat)
endif()
add_subdirectory(qpixmap)
add_subdirectory(qimage)
add_subdirectory(qimageiohandler)
add_subdirectory(qimagewriter)
add_subdirectory(qmovie)
add_subdirectory(qpicture)
add_subdirectory(qiconhighdpi)
if(QT_FEATURE_private_tests)
add_subdirectory(qpixmapcache)
endif()
# QTBUG-87669
if(NOT ANDROID)
add_subdirectory(qicon)
endif()

View File

@ -0,0 +1,21 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qicoimageformat Test:
#####################################################################
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
icons/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qicoimageformat
SOURCES
tst_qicoimageformat.cpp
LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,324 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <QtGui>
#include <QtCore>
class tst_QIcoImageFormat : public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void format();
void canRead_data();
void canRead();
void SequentialFile_data();
void SequentialFile();
void imageCount_data();
void imageCount();
void jumpToNextImage_data();
void jumpToNextImage();
void loopCount_data();
void loopCount();
void nextImageDelay_data();
void nextImageDelay();
void pngCompression_data();
void pngCompression();
void write_data();
void write();
private:
QString m_IconPath;
};
void tst_QIcoImageFormat::initTestCase()
{
m_IconPath = QFINDTESTDATA("icons");
if (m_IconPath.isEmpty())
QFAIL("Cannot find icons directory containing testdata!");
}
void tst_QIcoImageFormat::format()
{
{
QImageReader reader(m_IconPath + "/valid/35FLOPPY.ICO", "ico");
QByteArray fmt = reader.format();
QCOMPARE(const_cast<const char*>(fmt.data()), "ico" );
}
{
QImageReader reader(m_IconPath + "/valid/yellow.cur", "ico");
QByteArray fmt = reader.format();
QCOMPARE(const_cast<const char*>(fmt.data()), "ico" );
}
}
void tst_QIcoImageFormat::canRead_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("isValid");
QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 1;
QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 1;
QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 1;
QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 1;
QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 1;
QTest::newRow("16px16c, 32px32c, 32px256c 1") << "valid/WORLD.ico" << 1;
QTest::newRow("16px16c, 32px32c, 32px256c 2") << "valid/WORLDH.ico" << 1;
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
QTest::newRow("103x16px, 24BPP") << "valid/trolltechlogo_tiny.ico" << 1;
QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 1;
QTest::newRow("PNG compression") << "valid/Qt.ico" << 1;
QTest::newRow("CUR file") << "valid/yellow.cur" << 1;
}
void tst_QIcoImageFormat::canRead()
{
QFETCH(QString, fileName);
QFETCH(int, isValid);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
}
class QSequentialFile : public QFile
{
public:
QSequentialFile(const QString &name) : QFile(name) {}
virtual ~QSequentialFile() {}
virtual bool isSequential() const override
{
return true;
}
};
void tst_QIcoImageFormat::SequentialFile_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("isValid");
QTest::newRow("floppy (16,32 pixels - 16 colors)") << "valid/35FLOPPY.ICO" << 1;
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
}
void tst_QIcoImageFormat::SequentialFile()
{
QFETCH(QString, fileName);
QFETCH(int, isValid);
QSequentialFile *file = new QSequentialFile(m_IconPath + QLatin1Char('/') + fileName);
QVERIFY(file);
QVERIFY(file->open(QFile::ReadOnly));
QImageReader reader(file);
// Perform the check twice. If canRead() does not restore the sequential device back to its original state,
// it will fail on the second try.
QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
file->close();
}
void tst_QIcoImageFormat::imageCount_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
QTest::newRow("16px16c, 32px32c, 32px256c 1") << "valid/WORLD.ico" << 3;
QTest::newRow("16px16c, 32px32c, 32px256c 2") << "valid/WORLDH.ico" << 3;
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1;
QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
QTest::newRow("CUR file") << "valid/yellow.cur" << 1;
}
void tst_QIcoImageFormat::imageCount()
{
QFETCH(QString, fileName);
QFETCH(int, count);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
QCOMPARE(reader.imageCount(), count);
}
void tst_QIcoImageFormat::jumpToNextImage_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
QTest::newRow("16px16c, 32px32c, 32px256c 1") << "valid/WORLD.ico" << 3;
QTest::newRow("16px16c, 32px32c, 32px256c 2") << "valid/WORLDH.ico" << 3;
QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
QTest::newRow("CUR file") << "valid/yellow.cur" << 1;
}
void tst_QIcoImageFormat::jumpToNextImage()
{
QFETCH(QString, fileName);
QFETCH(int, count);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
bool bJumped = reader.jumpToImage(0);
while (bJumped) {
count--;
bJumped = reader.jumpToNextImage();
}
QCOMPARE(count, 0);
}
void tst_QIcoImageFormat::loopCount_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 0;
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1;
}
void tst_QIcoImageFormat::loopCount()
{
QFETCH(QString, fileName);
QFETCH(int, count);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
QCOMPARE(reader.loopCount(), count);
QCOMPARE(reader.canRead(), count < 0 ? false : true);
}
void tst_QIcoImageFormat::nextImageDelay_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
QTest::newRow("16px16c, 32px32c, 32px256c 1") << "valid/WORLD.ico" << 3;
QTest::newRow("16px16c, 32px32c, 32px256c 2") << "valid/WORLDH.ico" << 3;
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1;
QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
QTest::newRow("CUR file") << "valid/yellow.cur" << 1;
}
void tst_QIcoImageFormat::nextImageDelay()
{
QFETCH(QString, fileName);
QFETCH(int, count);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
if (count == -1) {
QCOMPARE(reader.nextImageDelay(), -1);
} else {
int i;
for (i = 0; i < count; i++) {
QVERIFY(reader.jumpToImage(i));
QCOMPARE(reader.nextImageDelay(), 0);
}
}
}
void tst_QIcoImageFormat::pngCompression_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("index");
QTest::addColumn<int>("width");
QTest::addColumn<int>("height");
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4 << 256 << 256;
}
void tst_QIcoImageFormat::pngCompression()
{
QFETCH(QString, fileName);
QFETCH(int, index);
QFETCH(int, width);
QFETCH(int, height);
QImageReader reader(m_IconPath + QLatin1Char('/') + fileName);
QImage image;
reader.jumpToImage(index);
QSize size = reader.size();
QCOMPARE(size.width(), width);
QCOMPARE(size.height(), height);
reader.read(&image);
QCOMPARE(image.width(), width);
QCOMPARE(image.height(), height);
}
void tst_QIcoImageFormat::write_data()
{
QTest::addColumn<QSize>("inSize");
QTest::addColumn<QSize>("outSize");
QTest::newRow("64x64") << QSize(64, 64) << QSize(64, 64);
QTest::newRow("128x200") << QSize(128, 200) << QSize(128, 200);
QTest::newRow("256x256") << QSize(256, 256) << QSize(256, 256);
QTest::newRow("400x400") << QSize(400, 400) << QSize(256, 256);
}
void tst_QIcoImageFormat::write()
{
QFETCH(QSize, inSize);
QFETCH(QSize, outSize);
QImage inImg;
{
QImageReader reader(m_IconPath + "/valid/Qt.ico");
reader.jumpToImage(4);
reader.setScaledSize(inSize);
inImg = reader.read();
QVERIFY(!inImg.isNull());
QCOMPARE(inImg.size(), inSize);
}
QBuffer buf;
{
buf.open(QIODevice::WriteOnly);
QImageWriter writer(&buf, "ico");
QVERIFY(writer.write(inImg));
buf.close();
}
{
buf.open(QIODevice::ReadOnly);
QImageReader reader(&buf);
QVERIFY(reader.canRead());
QCOMPARE(reader.format(), QByteArray("ico"));
QImage outImg = reader.read();
QVERIFY(!outImg.isNull());
QCOMPARE(outImg.size(), outSize);
buf.close();
}
}
QTEST_MAIN(tst_QIcoImageFormat)
#include "tst_qicoimageformat.moc"

View File

@ -0,0 +1,97 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qicon Test:
#####################################################################
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
icons/*)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
second_icons/*)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
fallback_icons/*)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
*.png)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
*.svg)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
*.svgz)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qicon
SOURCES
tst_qicon.cpp
LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
# Resources:
set(tst_qicon_resource_files
"./fallback_icons/red.png"
"./icons/testtheme/16x16/actions/appointment-new.png"
"./icons/testtheme/22x22/actions/appointment-new.png"
"./icons/testtheme/index.theme"
"./icons/testtheme/scalable/actions/svg-only.svg"
"./icons/themeparent/16x16/actions/address-book-new.png"
"./icons/themeparent/16x16/actions/appointment-new.png"
"./icons/themeparent/22x22/actions/address-book-new.png"
"./icons/themeparent/22x22/actions/appointment-new.png"
"./icons/themeparent/32x32/actions/address-book-new.png"
"./icons/themeparent/32x32/actions/appointment-new.png"
"./icons/themeparent/icon-theme.cache"
"./icons/themeparent/index.theme"
"./icons/themeparent/scalable/actions/address-book-new.svg"
"./icons/themeparent/scalable/actions/appointment-new.svg"
"./second_icons/testtheme/32x32/actions/appointment-new.png"
"./styles/commonstyle/images/standardbutton-open-128.png"
"./styles/commonstyle/images/standardbutton-open-16.png"
"./styles/commonstyle/images/standardbutton-open-32.png"
"./styles/commonstyle/images/standardbutton-open-64.png"
"./styles/commonstyle/images/standardbutton-save-128.png"
"./styles/commonstyle/images/standardbutton-save-16.png"
"./styles/commonstyle/images/standardbutton-save-32.png"
"./styles/commonstyle/images/standardbutton-save-64.png"
"image.png"
"rect.png"
"tst_qicon.cpp"
)
qt_internal_add_resource(tst_qicon "tst_qicon"
PREFIX
"/"
FILES
${tst_qicon_resource_files}
)
set(qmake_immediate_resource_files
"tst_qicon.cpp"
)
qt_internal_add_resource(tst_qicon "qmake_immediate"
PREFIX
"/"
FILES
${qmake_immediate_resource_files}
)
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qicon CONDITION TARGET Qt::Widgets
LIBRARIES
Qt::Widgets
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,492 @@
[Icon Theme]
_Name=Test
_Comment=Test Theme
Inherits=crystalsvg, themeparent
Example=x-directory-normal
# KDE Specific Stuff
DisplayDepth=32
LinkOverlay=link_overlay
LockOverlay=lock_overlay
ZipOverlay=zip_overlay
DesktopDefault=48
DesktopSizes=16,22,32,48,64,72,96,128
ToolbarDefault=22
ToolbarSizes=16,22,32,48
MainToolbarDefault=22
MainToolbarSizes=16,22,32,48
SmallDefault=16
SmallSizes=16
PanelDefault=32
PanelSizes=16,22,32,48,64,72,96,128
# Directory list
Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status
[16x16/actions]
Size=16
Context=Actions
Type=Fixed
[16x16/apps]
Size=16
Context=Applications
Type=Fixed
[16x16/categories]
Size=16
Context=Categories
Type=Fixed
[16x16/devices]
Size=16
Context=Devices
Type=Fixed
[16x16/emblems]
Size=16
Context=Emblems
Type=Fixed
[16x16/emotes]
Size=16
Context=Emotes
Type=Fixed
[16x16/mimetypes]
Size=16
Context=MimeTypes
Type=Fixed
[16x16/places]
Size=16
Context=Places
Type=Fixed
[16x16/status]
Size=16
Context=Status
Type=Fixed
[22x22/actions]
Size=22
Context=Actions
Type=Fixed
[22x22/apps]
Size=22
Context=Applications
Type=Fixed
[22x22/categories]
Size=22
Context=Categories
Type=Fixed
[22x22/devices]
Size=22
Context=Devices
Type=Fixed
[22x22/emblems]
Size=22
Context=Emblems
Type=Fixed
[22x22/emotes]
Size=22
Context=Emotes
Type=Fixed
[22x22/mimetypes]
Size=22
Context=MimeTypes
Type=Fixed
[22x22/places]
Size=22
Context=Places
Type=Fixed
[22x22/status]
Size=22
Context=Status
Type=Fixed
[24x24/actions]
Size=24
Context=Actions
Type=Fixed
[24x24/apps]
Size=24
Context=Applications
Type=Fixed
[24x24/categories]
Size=24
Context=Categories
Type=Fixed
[24x24/devices]
Size=24
Context=Devices
Type=Fixed
[24x24/emblems]
Size=24
Context=Emblems
Type=Fixed
[24x24/emotes]
Size=24
Context=Emotes
Type=Fixed
[24x24/mimetypes]
Size=24
Context=MimeTypes
Type=Fixed
[24x24/places]
Size=24
Context=Places
Type=Fixed
[24x24/status]
Size=24
Context=Status
Type=Fixed
[32x32/actions]
Size=32
Context=Actions
Type=Fixed
[32x32/apps]
Size=32
Context=Applications
Type=Fixed
[32x32/categories]
Size=32
Context=Categories
Type=Fixed
[32x32/devices]
Size=32
Context=Devices
Type=Fixed
[32x32/emblems]
Size=32
Context=Emblems
Type=Fixed
[32x32/emotes]
Size=32
Context=Emotes
Type=Fixed
[32x32/mimetypes]
Size=32
Context=MimeTypes
Type=Fixed
[32x32/places]
Size=32
Context=Places
Type=Fixed
[32x32/status]
Size=32
Context=Status
Type=Fixed
[48x48/actions]
Size=48
Context=Actions
Type=Fixed
[48x48/apps]
Size=48
Context=Applications
Type=Fixed
[48x48/categories]
Size=48
Context=Categories
Type=Fixed
[48x48/devices]
Size=48
Context=Devices
Type=Fixed
[48x48/emblems]
Size=48
Context=Emblems
Type=Fixed
[48x48/emotes]
Size=48
Context=Emotes
Type=Fixed
[48x48/mimetypes]
Size=48
Context=MimeTypes
Type=Fixed
[48x48/places]
Size=48
Context=Places
Type=Fixed
[48x48/status]
Size=48
Context=Status
Type=Fixed
[64x64/actions]
Size=64
Context=Actions
Type=Fixed
[64x64/apps]
Size=64
Context=Applications
Type=Fixed
[64x64/categories]
Size=64
Context=Categories
Type=Fixed
[64x64/devices]
Size=64
Context=Devices
Type=Fixed
[64x64/emblems]
Size=64
Context=Emblems
Type=Fixed
[64x64/emotes]
Size=64
Context=Emotes
Type=Fixed
[64x64/mimetypes]
Size=64
Context=MimeTypes
Type=Fixed
[64x64/places]
Size=64
Context=Places
Type=Fixed
[64x64/status]
Size=64
Context=Status
Type=Fixed
[72x72/actions]
Size=72
Context=Actions
Type=Fixed
[72x72/apps]
Size=72
Context=Applications
Type=Fixed
[72x72/categories]
Size=72
Context=Categories
Type=Fixed
[72x72/devices]
Size=72
Context=Devices
Type=Fixed
[72x72/emblems]
Size=72
Context=Emblems
Type=Fixed
[72x72/emotes]
Size=72
Context=Emotes
Type=Fixed
[72x72/mimetypes]
Size=72
Context=MimeTypes
Type=Fixed
[72x72/places]
Size=72
Context=Places
Type=Fixed
[72x72/status]
Size=72
Context=Status
Type=Fixed
[96x96/actions]
Size=96
Context=Actions
Type=Fixed
[96x96/apps]
Size=96
Context=Applications
Type=Fixed
[96x96/categories]
Size=96
Context=Categories
Type=Fixed
[96x96/devices]
Size=96
Context=Devices
Type=Fixed
[96x96/emblems]
Size=96
Context=Emblems
Type=Fixed
[96x96/emotes]
Size=96
Context=Emotes
Type=Fixed
[96x96/mimetypes]
Size=96
Context=MimeTypes
Type=Fixed
[96x96/places]
Size=96
Context=Places
Type=Fixed
[96x96/status]
Size=96
Context=Status
Type=Fixed
[128x128/actions]
Size=128
Context=Actions
Type=Fixed
[128x128/apps]
Size=128
Context=Applications
Type=Fixed
[128x128/categories]
Size=128
Context=Categories
Type=Fixed
[128x128/devices]
Size=128
Context=Devices
Type=Fixed
[128x128/emblems]
Size=128
Context=Emblems
Type=Fixed
[128x128/emotes]
Size=128
Context=Emotes
Type=Fixed
[128x128/mimetypes]
Size=128
Context=MimeTypes
Type=Fixed
[128x128/places]
Size=128
Context=Places
Type=Fixed
[128x128/status]
Size=128
Context=Status
Type=Fixed
[scalable/actions]
Size=48
Context=Actions
Type=Scalable
MinSize=32
MaxSize=256
[scalable/apps]
Size=48
Context=Applications
Type=Scalable
MinSize=32
MaxSize=256
[scalable/categories]
Size=48
Context=Categories
Type=Scalable
MinSize=32
MaxSize=256
[scalable/devices]
Size=48
Context=Devices
Type=Scalable
MinSize=32
MaxSize=256
[scalable/emblems]
Size=48
Context=Emblems
Type=Scalable
MinSize=32
MaxSize=256
[scalable/emotes]
Size=48
Context=Emotes
Type=Scalable
Minsize=32
MaxSize=256
[scalable/mimetypes]
Size=48
Context=MimeTypes
Type=Scalable
MinSize=32
MaxSize=256
[scalable/places]
Size=48
Context=Places
Type=Scalable
MinSize=32
MaxSize=256
[scalable/status]
Size=48
Context=Status
Type=Scalable
MinSize=32
MaxSize=256

View File

@ -0,0 +1,425 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
sodipodi:docname="appointment-new.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective59" />
<linearGradient
inkscape:collect="always"
id="linearGradient5204">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop5206" />
<stop
style="stop-color:#c4a000;stop-opacity:0;"
offset="1"
id="stop5208" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5196">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop5198" />
<stop
style="stop-color:#c4a000;stop-opacity:0;"
offset="1"
id="stop5200" />
</linearGradient>
<linearGradient
id="linearGradient12512">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop12513" />
<stop
style="stop-color:#fff520;stop-opacity:0.89108908;"
offset="0.50000000"
id="stop12517" />
<stop
style="stop-color:#fff300;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop12514" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12512"
id="radialGradient278"
gradientUnits="userSpaceOnUse"
cx="55.000000"
cy="125.00000"
fx="55.000000"
fy="125.00000"
r="14.375000" />
<linearGradient
id="linearGradient10653">
<stop
style="stop-color:#f3f4ff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop10655" />
<stop
style="stop-color:#9193af;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop10657" />
</linearGradient>
<linearGradient
id="linearGradient42174">
<stop
style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop42176" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop42178" />
</linearGradient>
<linearGradient
id="linearGradient2145">
<stop
style="stop-color:#fffffd;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2147" />
<stop
style="stop-color:#cbcbc9;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2149" />
</linearGradient>
<linearGradient
id="linearGradient37935">
<stop
id="stop37937"
offset="0.0000000"
style="stop-color:#9497b3;stop-opacity:1.0000000;" />
<stop
id="stop37939"
offset="1.0000000"
style="stop-color:#4c4059;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2152">
<stop
id="stop2154"
offset="0.0000000"
style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
<stop
id="stop2156"
offset="1.0000000"
style="stop-color:#b5beb5;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3816">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3818" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3820" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3816"
id="radialGradient3822"
cx="31.112698"
cy="19.008621"
fx="31.112698"
fy="19.008621"
r="8.6620579"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2152"
id="linearGradient4307"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)"
x1="8.9156475"
y1="37.197018"
x2="9.8855033"
y2="52.090678" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient10653"
id="radialGradient4309"
gradientUnits="userSpaceOnUse"
cx="11.329200"
cy="10.583970"
fx="11.329200"
fy="10.583970"
r="15.532059" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2145"
id="radialGradient4311"
gradientUnits="userSpaceOnUse"
cx="11.901996"
cy="10.045444"
fx="11.901996"
fy="10.045444"
r="29.292715" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient42174"
id="linearGradient4313"
gradientUnits="userSpaceOnUse"
x1="6.3422160"
y1="7.7893324"
x2="22.218424"
y2="25.884274" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5196"
id="radialGradient5202"
cx="23.375"
cy="10.972863"
fx="23.375"
fy="10.972863"
r="3.3478092"
gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5204"
id="linearGradient5210"
x1="19.667364"
y1="4.2570662"
x2="20.329933"
y2="5.2845874"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient37935"
id="radialGradient5212"
gradientUnits="userSpaceOnUse"
cx="8.7468252"
cy="6.8283234"
fx="8.7468252"
fy="6.8283234"
r="29.889715" />
</defs>
<sodipodi:namedview
stroke="#c4a000"
fill="#babdb6"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="13.2248"
inkscape:cy="25.106052"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="833"
inkscape:window-height="772"
inkscape:window-x="305"
inkscape:window-y="76" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:title>New Appointment</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>appointment</rdf:li>
<rdf:li>new</rdf:li>
<rdf:li>meeting</rdf:li>
<rdf:li>rvsp</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
sodipodi:ry="8.6620579"
sodipodi:rx="8.6620579"
sodipodi:cy="19.008621"
sodipodi:cx="31.112698"
id="path4318"
style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc"
transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" />
<path
sodipodi:nodetypes="cccc"
id="path14341"
d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z "
style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cccc"
id="path18921"
d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z "
style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
sodipodi:ry="14.910714"
sodipodi:rx="14.910714"
sodipodi:cy="16.910715"
sodipodi:cx="16.25"
id="path27786"
style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
sodipodi:ry="14.910714"
sodipodi:rx="14.910714"
sodipodi:cy="16.910715"
sodipodi:cx="16.25"
id="path35549"
style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path4120"
sodipodi:cx="23.375"
sodipodi:cy="11.875"
sodipodi:rx="8.5"
sodipodi:ry="8.5"
d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z"
transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)"
sodipodi:start="3.8052902"
sodipodi:end="4.7074114" />
<path
transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)"
d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z"
sodipodi:ry="1.21875"
sodipodi:rx="1.21875"
sodipodi:cy="17.28125"
sodipodi:cx="15.1875"
id="path34778"
style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
id="path35559"
d="M 22.176614,20.718014 L 13.155702,13.140282"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
id="path35561"
d="M 19.408614,29.776506 L 22.368655,25.283228"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35563"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35565"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35567"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35569"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path10651"
sodipodi:cx="16.25"
sodipodi:cy="16.910715"
sodipodi:rx="14.910714"
sodipodi:ry="14.910714"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
id="path12511"
sodipodi:cx="55"
sodipodi:cy="125"
sodipodi:rx="14.375"
sodipodi:ry="14.375"
d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)"
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
inkscape:export-xdpi="33.852203"
inkscape:export-ydpi="33.852203" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 924 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,492 @@
[Icon Theme]
_Name=Test
_Comment=Test Theme
Inherits=gnome,crystalsvg
Example=x-directory-normal
# KDE Specific Stuff
DisplayDepth=32
LinkOverlay=link_overlay
LockOverlay=lock_overlay
ZipOverlay=zip_overlay
DesktopDefault=48
DesktopSizes=16,22,32,48,64,72,96,128
ToolbarDefault=22
ToolbarSizes=16,22,32,48
MainToolbarDefault=22
MainToolbarSizes=16,22,32,48
SmallDefault=16
SmallSizes=16
PanelDefault=32
PanelSizes=16,22,32,48,64,72,96,128
# Directory list
Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status
[16x16/actions]
Size=16
Context=Actions
Type=Fixed
[16x16/apps]
Size=16
Context=Applications
Type=Fixed
[16x16/categories]
Size=16
Context=Categories
Type=Fixed
[16x16/devices]
Size=16
Context=Devices
Type=Fixed
[16x16/emblems]
Size=16
Context=Emblems
Type=Fixed
[16x16/emotes]
Size=16
Context=Emotes
Type=Fixed
[16x16/mimetypes]
Size=16
Context=MimeTypes
Type=Fixed
[16x16/places]
Size=16
Context=Places
Type=Fixed
[16x16/status]
Size=16
Context=Status
Type=Fixed
[22x22/actions]
Size=22
Context=Actions
Type=Fixed
[22x22/apps]
Size=22
Context=Applications
Type=Fixed
[22x22/categories]
Size=22
Context=Categories
Type=Fixed
[22x22/devices]
Size=22
Context=Devices
Type=Fixed
[22x22/emblems]
Size=22
Context=Emblems
Type=Fixed
[22x22/emotes]
Size=22
Context=Emotes
Type=Fixed
[22x22/mimetypes]
Size=22
Context=MimeTypes
Type=Fixed
[22x22/places]
Size=22
Context=Places
Type=Fixed
[22x22/status]
Size=22
Context=Status
Type=Fixed
[24x24/actions]
Size=24
Context=Actions
Type=Fixed
[24x24/apps]
Size=24
Context=Applications
Type=Fixed
[24x24/categories]
Size=24
Context=Categories
Type=Fixed
[24x24/devices]
Size=24
Context=Devices
Type=Fixed
[24x24/emblems]
Size=24
Context=Emblems
Type=Fixed
[24x24/emotes]
Size=24
Context=Emotes
Type=Fixed
[24x24/mimetypes]
Size=24
Context=MimeTypes
Type=Fixed
[24x24/places]
Size=24
Context=Places
Type=Fixed
[24x24/status]
Size=24
Context=Status
Type=Fixed
[32x32/actions]
Size=32
Context=Actions
Type=Fixed
[32x32/apps]
Size=32
Context=Applications
Type=Fixed
[32x32/categories]
Size=32
Context=Categories
Type=Fixed
[32x32/devices]
Size=32
Context=Devices
Type=Fixed
[32x32/emblems]
Size=32
Context=Emblems
Type=Fixed
[32x32/emotes]
Size=32
Context=Emotes
Type=Fixed
[32x32/mimetypes]
Size=32
Context=MimeTypes
Type=Fixed
[32x32/places]
Size=32
Context=Places
Type=Fixed
[32x32/status]
Size=32
Context=Status
Type=Fixed
[48x48/actions]
Size=48
Context=Actions
Type=Fixed
[48x48/apps]
Size=48
Context=Applications
Type=Fixed
[48x48/categories]
Size=48
Context=Categories
Type=Fixed
[48x48/devices]
Size=48
Context=Devices
Type=Fixed
[48x48/emblems]
Size=48
Context=Emblems
Type=Fixed
[48x48/emotes]
Size=48
Context=Emotes
Type=Fixed
[48x48/mimetypes]
Size=48
Context=MimeTypes
Type=Fixed
[48x48/places]
Size=48
Context=Places
Type=Fixed
[48x48/status]
Size=48
Context=Status
Type=Fixed
[64x64/actions]
Size=64
Context=Actions
Type=Fixed
[64x64/apps]
Size=64
Context=Applications
Type=Fixed
[64x64/categories]
Size=64
Context=Categories
Type=Fixed
[64x64/devices]
Size=64
Context=Devices
Type=Fixed
[64x64/emblems]
Size=64
Context=Emblems
Type=Fixed
[64x64/emotes]
Size=64
Context=Emotes
Type=Fixed
[64x64/mimetypes]
Size=64
Context=MimeTypes
Type=Fixed
[64x64/places]
Size=64
Context=Places
Type=Fixed
[64x64/status]
Size=64
Context=Status
Type=Fixed
[72x72/actions]
Size=72
Context=Actions
Type=Fixed
[72x72/apps]
Size=72
Context=Applications
Type=Fixed
[72x72/categories]
Size=72
Context=Categories
Type=Fixed
[72x72/devices]
Size=72
Context=Devices
Type=Fixed
[72x72/emblems]
Size=72
Context=Emblems
Type=Fixed
[72x72/emotes]
Size=72
Context=Emotes
Type=Fixed
[72x72/mimetypes]
Size=72
Context=MimeTypes
Type=Fixed
[72x72/places]
Size=72
Context=Places
Type=Fixed
[72x72/status]
Size=72
Context=Status
Type=Fixed
[96x96/actions]
Size=96
Context=Actions
Type=Fixed
[96x96/apps]
Size=96
Context=Applications
Type=Fixed
[96x96/categories]
Size=96
Context=Categories
Type=Fixed
[96x96/devices]
Size=96
Context=Devices
Type=Fixed
[96x96/emblems]
Size=96
Context=Emblems
Type=Fixed
[96x96/emotes]
Size=96
Context=Emotes
Type=Fixed
[96x96/mimetypes]
Size=96
Context=MimeTypes
Type=Fixed
[96x96/places]
Size=96
Context=Places
Type=Fixed
[96x96/status]
Size=96
Context=Status
Type=Fixed
[128x128/actions]
Size=128
Context=Actions
Type=Fixed
[128x128/apps]
Size=128
Context=Applications
Type=Fixed
[128x128/categories]
Size=128
Context=Categories
Type=Fixed
[128x128/devices]
Size=128
Context=Devices
Type=Fixed
[128x128/emblems]
Size=128
Context=Emblems
Type=Fixed
[128x128/emotes]
Size=128
Context=Emotes
Type=Fixed
[128x128/mimetypes]
Size=128
Context=MimeTypes
Type=Fixed
[128x128/places]
Size=128
Context=Places
Type=Fixed
[128x128/status]
Size=128
Context=Status
Type=Fixed
[scalable/actions]
Size=48
Context=Actions
Type=Scalable
MinSize=32
MaxSize=256
[scalable/apps]
Size=48
Context=Applications
Type=Scalable
MinSize=32
MaxSize=256
[scalable/categories]
Size=48
Context=Categories
Type=Scalable
MinSize=32
MaxSize=256
[scalable/devices]
Size=48
Context=Devices
Type=Scalable
MinSize=32
MaxSize=256
[scalable/emblems]
Size=48
Context=Emblems
Type=Scalable
MinSize=32
MaxSize=256
[scalable/emotes]
Size=48
Context=Emotes
Type=Scalable
Minsize=32
MaxSize=256
[scalable/mimetypes]
Size=48
Context=MimeTypes
Type=Scalable
MinSize=32
MaxSize=256
[scalable/places]
Size=48
Context=Places
Type=Scalable
MinSize=32
MaxSize=256
[scalable/status]
Size=48
Context=Status
Type=Scalable
MinSize=32
MaxSize=256

View File

@ -0,0 +1,389 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg1256"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
sodipodi:docname="address-book-new.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective58" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
id="linearGradient12512">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop12513" />
<stop
style="stop-color:#fff520;stop-opacity:0.89108908;"
offset="0.50000000"
id="stop12517" />
<stop
style="stop-color:#fff300;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop12514" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12512"
id="radialGradient278"
gradientUnits="userSpaceOnUse"
cx="55.000000"
cy="125.00000"
fx="55.000000"
fy="125.00000"
r="14.375000" />
<linearGradient
inkscape:collect="always"
id="linearGradient2116">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2118" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2120" />
</linearGradient>
<linearGradient
id="linearGradient2094">
<stop
style="stop-color:#d6e3f0;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2096" />
<stop
style="stop-color:#95b1cf;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2098" />
</linearGradient>
<linearGradient
id="linearGradient2803">
<stop
id="stop2805"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop2807"
offset="1.0000000"
style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2795">
<stop
id="stop2797"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:0.068627454;" />
<stop
id="stop2799"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="4.9530048"
x2="41.219128"
y1="4.9530050"
x1="35.433035"
gradientTransform="matrix(0.254000,0.000000,1.822151e-16,3.759813,0.788629,0.148567)"
id="linearGradient2801"
xlink:href="#linearGradient2795"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="84.287079"
x2="10.219901"
y1="93.338043"
x1="10.496115"
gradientTransform="matrix(2.262742,0.000000,0.000000,0.441942,1.000000,-0.875000)"
id="linearGradient2813"
xlink:href="#linearGradient2803"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2094"
id="linearGradient2100"
gradientTransform="matrix(0.957750,0.000000,0.000000,1.027989,1.000000,-0.571911)"
x1="6.5871811"
y1="22.132999"
x2="14.511404"
y2="22.132999"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2116"
id="linearGradient2112"
gradientTransform="matrix(1.025428,0.000000,0.000000,0.957303,0.000000,-0.806758)"
x1="73.361984"
y1="26.652197"
x2="-2.7582901"
y2="21.270376"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5013"
gradientUnits="userSpaceOnUse"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient5016"
gradientUnits="userSpaceOnUse"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5020"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient5027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5029"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5031"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.27843137"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-111.52422"
inkscape:cy="10.167608"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="872"
inkscape:window-height="688"
inkscape:window-x="562"
inkscape:window-y="160"
fill="#ef2929"
stroke="#cc0000"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Addess Book - New</dc:title>
<dc:date />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<dc:subject>
<rdf:Bag>
<rdf:li>address</rdf:li>
<rdf:li>contact</rdf:li>
<rdf:li>book</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="opacity:1;color:#000000;fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 33.096456,4.6520202 L 40.521077,4.6520202 C 41.228184,4.6520202 41.758513,4.8287969 41.93529,5.71268 L 42.819174,12.606972 C 42.907562,13.667632 42.443523,14.021185 41.493349,14.021185 L 32.919679,14.021185 L 33.096456,4.6520202 z "
id="path21630"
sodipodi:nodetypes="ccccccc" />
<path
sodipodi:nodetypes="ccccccc"
id="path21632"
d="M 34.10295,5.638875 L 40.463507,5.638875 C 40.771656,5.638875 40.940266,5.669037 40.986054,5.960473 L 41.777489,12.344449 C 41.847258,12.775421 41.959897,13.019804 41.637211,13.034341 L 33.963412,13.034341 L 34.10295,5.638875 z "
style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="ccccccc"
id="path21634"
d="M 35.596456,12.40202 L 43.021077,12.40202 C 43.728184,12.40202 44.258513,12.578797 44.43529,13.46268 L 45.319174,20.356972 C 45.407562,21.417632 44.943523,21.771185 43.993349,21.771185 L 35.419679,21.771185 L 35.596456,12.40202 z "
style="opacity:1;color:#000000;fill:#9db029;fill-opacity:1;fill-rule:evenodd;stroke:#727e0a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 36.60295,13.388875 L 42.963507,13.388875 C 43.271656,13.388875 43.440266,13.419037 43.486054,13.710473 L 44.277489,20.094449 C 44.347258,20.525421 44.459897,20.769804 44.137211,20.784341 L 36.463412,20.784341 L 36.60295,13.388875 z "
id="path21636"
sodipodi:nodetypes="ccccccc" />
<path
style="opacity:1;color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:#cc0000;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 36.06451,20.776498 L 44.50992,20.776498 C 45.314245,20.776498 45.917487,20.995896 46.118569,22.092882 L 47.123975,30.649381 C 47.224515,31.965765 46.696677,32.40456 45.615866,32.40456 L 35.863428,32.40456 L 36.06451,20.776498 z "
id="path21638"
sodipodi:nodetypes="ccccccc" />
<path
sodipodi:nodetypes="ccccccc"
id="path21640"
d="M 37.209384,21.763574 L 44.444435,21.763574 C 44.79495,21.763574 44.986742,21.801928 45.038825,22.172513 L 45.939072,30.290267 C 46.018433,30.838284 46.146559,31.149038 45.779508,31.167522 L 37.050661,31.167522 L 37.209384,21.763574 z "
style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<g
id="g5022"
transform="matrix(2.165152e-2,0,0,4.307902e-2,43.08625,34.04509)">
<rect
y="-150.69685"
x="-1559.2523"
height="478.35718"
width="1339.6335"
id="rect4173"
style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cccc"
id="path5058"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
id="path5018"
sodipodi:nodetypes="cccc" />
</g>
<path
style="color:#000000;fill:#5b6b94;fill-opacity:1;fill-rule:nonzero;stroke:#364878;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 6.3643222,5.5185897 C 6.4551049,3.6036003 7.3719758,2.5542814 9.0788784,2.549044 L 38.405776,2.4590577 C 38.652361,2.4583011 38.974317,2.6592071 38.999012,2.9089888 L 42.257491,35.867228 L 40.942189,35.923862 L 41.571429,42.369516 C 41.632441,42.994499 41.390059,43.52882 40.5,43.533035 L 9.7893046,43.678474 C 7.25676,43.690468 4.6538454,41.59976 4.7759337,39.024403 L 6.3643222,5.5185897 z "
id="rect1408"
sodipodi:nodetypes="csssccsssss" />
<path
id="path2489"
d="M 40.125,34.875 L 10.9375,35 C 9.3809819,35.177868 8.125,36.39612 8.125,38 C 8.125,39.60388 9.3809819,40.822132 10.9375,41 L 40.125,41.125 L 40.125,41.0625 C 38.469378,40.984348 37.125,39.674851 37.125,38 C 37.125,36.325149 38.469378,35.015652 40.125,34.9375 L 40.125,34.875 z "
style="color:#000000;fill:url(#linearGradient2813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="ccccccssc"
id="path2784"
d="M 9.6875,2.8125 C 7.9805897,2.8125 7.050103,3.8215062 6.96875,5.6738658 L 5.3125,37.825772 C 5.22054,40.904199 7.1393732,42.654485 9.125,43.15625 C 4.875,41.525579 5.4375,34.164455 10.75,34.195222 L 41.648286,34.195222 L 38.335786,3.2432432 C 38.310025,3.0025304 37.987878,2.8125 37.742036,2.8125 L 9.6875,2.8125 z "
style="color:#000000;fill:url(#linearGradient2100);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
y="3.968539"
x="9.7886267"
height="29.604792"
width="2"
id="rect2793"
style="opacity:0.48044691;color:#000000;fill:url(#linearGradient2801);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.60818715;visibility:visible;display:inline;overflow:visible"
transform="matrix(1.000000,0.000000,-3.582731e-2,0.999358,0.000000,0.000000)" />
<path
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2112);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:20;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 9.8751008,3.3336831 C 8.1912014,3.3336831 7.5384236,4.0658459 7.4581673,5.887831 L 6.1592633,35.777198 C 7.0925916,34.170451 8.5988591,33.594437 11.011665,33.594437 L 40.963081,33.594437 L 38.137179,3.7573631 C 38.114727,3.5203092 37.793961,3.3336831 37.551434,3.3336831 L 9.8751008,3.3336831 z "
id="path2104"
sodipodi:nodetypes="cccscssc" />
<path
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:120.00000477%;writing-mode:lr-tb;text-anchor:start;fill:#ad7fa8;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
d="M 21.12553,18.381288 C 21.050283,19.50227 21.269376,20.384155 21.782812,21.026947 C 22.296751,21.661909 23.039741,21.979388 24.011788,21.979387 C 24.97597,21.979388 25.754005,21.65799 26.345892,21.01519 C 26.945589,20.372398 27.282799,19.49443 27.357529,18.381288 C 27.431173,17.283839 27.207372,16.413709 26.686123,15.770905 C 26.165371,15.120279 25.426826,14.794959 24.470482,14.79495 C 23.521952,14.794959 22.743917,15.11636 22.136378,15.759145 C 21.536656,16.401952 21.199707,17.275998 21.12553,18.381288 M 27.29793,21.897075 C 26.787062,22.500679 26.216183,22.947501 25.58529,23.237544 C 24.962734,23.519747 24.247754,23.66085 23.44035,23.660849 C 22.092032,23.66085 21.027197,23.174832 20.245835,22.202797 C 19.472826,21.222925 19.138938,19.949092 19.244172,18.381288 C 19.349395,16.813498 19.858197,15.539665 20.770584,14.559781 C 21.682954,13.579917 22.809375,13.089981 24.149854,13.089969 C 24.957257,13.089981 25.656689,13.238924 26.24815,13.536791 C 26.840107,13.826846 27.347352,14.269749 27.76988,14.865501 L 27.873267,13.325141 L 29.554732,13.325141 L 28.973868,21.979387 C 30.129917,21.806931 31.058551,21.285637 31.759769,20.415508 C 32.469312,19.537544 32.870659,18.404812 32.963808,17.017304 C 33.020082,16.178542 32.947536,15.390722 32.746168,14.653848 C 32.552597,13.916994 32.226018,13.235002 31.766435,12.607873 C 31.020085,11.580979 30.077151,10.79708 28.937625,10.256176 C 27.806428,9.707462 26.551007,9.433097 25.171361,9.433081 C 24.207151,9.433097 23.27347,9.56244 22.370314,9.821111 C 21.467662,10.071974 20.623234,10.448244 19.837027,10.949925 C 18.552629,11.749517 17.517932,12.79994 16.732929,14.101199 C 15.956279,15.394643 15.517185,16.797819 15.415642,18.310738 C 15.331983,19.557142 15.476998,20.725151 15.85069,21.814765 C 16.232213,22.904387 16.822316,23.864664 17.621,24.695594 C 18.389368,25.51085 19.300238,26.130129 20.353615,26.553435 C 21.406448,26.984578 22.54823,27.20015 23.778962,27.200153 C 24.790178,27.20015 25.793384,27.027692 26.788584,26.682781 C 27.791068,26.345701 28.72125,25.859684 29.579139,25.224728 L 30.549801,26.529919 C 29.518874,27.2903 28.409917,27.870384 27.222932,28.270174 C 26.043227,28.677799 24.857618,28.881612 23.666104,28.881616 C 22.215881,28.881612 20.865341,28.622926 19.614483,28.105557 C 18.36308,27.596019 17.268571,26.851316 16.330955,25.871444 C 15.393328,24.89157 14.705054,23.758838 14.266133,22.47324 C 13.827731,21.179813 13.658252,19.792311 13.757696,18.310738 C 13.853452,16.88405 14.211263,15.523986 14.831129,14.230542 C 15.450993,12.937121 16.287663,11.800469 17.34115,10.820582 C 18.419191,9.825045 19.638236,9.0646655 20.998287,8.5394366 C 22.358842,8.0064001 23.779908,7.7398759 25.261489,7.7398585 C 26.923341,7.7398759 28.440813,8.080872 29.813913,8.7628469 C 31.194815,9.444854 32.325282,10.41297 33.205316,11.667193 C 33.741656,12.435425 34.132443,13.270279 34.377679,14.171752 C 34.630708,15.073243 34.724877,16.006082 34.660187,16.970271 C 34.521787,19.031929 33.789414,20.658519 32.463064,21.850041 C 31.136671,23.04157 29.374449,23.66085 27.17639,23.707883 L 27.29793,21.897075"
id="text21625" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
id="path12511"
sodipodi:cx="55"
sodipodi:cy="125"
sodipodi:rx="14.375"
sodipodi:ry="14.375"
d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
transform="matrix(0.611127,0.000000,0.000000,0.611127,-24.94992,-67.63529)"
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
inkscape:export-xdpi="33.852203"
inkscape:export-ydpi="33.852203" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,425 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
sodipodi:docname="appointment-new.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective59" />
<linearGradient
inkscape:collect="always"
id="linearGradient5204">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop5206" />
<stop
style="stop-color:#c4a000;stop-opacity:0;"
offset="1"
id="stop5208" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5196">
<stop
style="stop-color:#c4a000;stop-opacity:1;"
offset="0"
id="stop5198" />
<stop
style="stop-color:#c4a000;stop-opacity:0;"
offset="1"
id="stop5200" />
</linearGradient>
<linearGradient
id="linearGradient12512">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop12513" />
<stop
style="stop-color:#fff520;stop-opacity:0.89108908;"
offset="0.50000000"
id="stop12517" />
<stop
style="stop-color:#fff300;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop12514" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12512"
id="radialGradient278"
gradientUnits="userSpaceOnUse"
cx="55.000000"
cy="125.00000"
fx="55.000000"
fy="125.00000"
r="14.375000" />
<linearGradient
id="linearGradient10653">
<stop
style="stop-color:#f3f4ff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop10655" />
<stop
style="stop-color:#9193af;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop10657" />
</linearGradient>
<linearGradient
id="linearGradient42174">
<stop
style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop42176" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop42178" />
</linearGradient>
<linearGradient
id="linearGradient2145">
<stop
style="stop-color:#fffffd;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2147" />
<stop
style="stop-color:#cbcbc9;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2149" />
</linearGradient>
<linearGradient
id="linearGradient37935">
<stop
id="stop37937"
offset="0.0000000"
style="stop-color:#9497b3;stop-opacity:1.0000000;" />
<stop
id="stop37939"
offset="1.0000000"
style="stop-color:#4c4059;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2152">
<stop
id="stop2154"
offset="0.0000000"
style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
<stop
id="stop2156"
offset="1.0000000"
style="stop-color:#b5beb5;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3816">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3818" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3820" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3816"
id="radialGradient3822"
cx="31.112698"
cy="19.008621"
fx="31.112698"
fy="19.008621"
r="8.6620579"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2152"
id="linearGradient4307"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)"
x1="8.9156475"
y1="37.197018"
x2="9.8855033"
y2="52.090678" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient10653"
id="radialGradient4309"
gradientUnits="userSpaceOnUse"
cx="11.329200"
cy="10.583970"
fx="11.329200"
fy="10.583970"
r="15.532059" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2145"
id="radialGradient4311"
gradientUnits="userSpaceOnUse"
cx="11.901996"
cy="10.045444"
fx="11.901996"
fy="10.045444"
r="29.292715" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient42174"
id="linearGradient4313"
gradientUnits="userSpaceOnUse"
x1="6.3422160"
y1="7.7893324"
x2="22.218424"
y2="25.884274" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5196"
id="radialGradient5202"
cx="23.375"
cy="10.972863"
fx="23.375"
fy="10.972863"
r="3.3478092"
gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5204"
id="linearGradient5210"
x1="19.667364"
y1="4.2570662"
x2="20.329933"
y2="5.2845874"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient37935"
id="radialGradient5212"
gradientUnits="userSpaceOnUse"
cx="8.7468252"
cy="6.8283234"
fx="8.7468252"
fy="6.8283234"
r="29.889715" />
</defs>
<sodipodi:namedview
stroke="#c4a000"
fill="#babdb6"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="13.2248"
inkscape:cy="25.106052"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="833"
inkscape:window-height="772"
inkscape:window-x="305"
inkscape:window-y="76" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:title>New Appointment</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>appointment</rdf:li>
<rdf:li>new</rdf:li>
<rdf:li>meeting</rdf:li>
<rdf:li>rvsp</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
sodipodi:ry="8.6620579"
sodipodi:rx="8.6620579"
sodipodi:cy="19.008621"
sodipodi:cx="31.112698"
id="path4318"
style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc"
transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" />
<path
sodipodi:nodetypes="cccc"
id="path14341"
d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z "
style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cccc"
id="path18921"
d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z "
style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
<path
transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
sodipodi:ry="14.910714"
sodipodi:rx="14.910714"
sodipodi:cy="16.910715"
sodipodi:cx="16.25"
id="path27786"
style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
sodipodi:ry="14.910714"
sodipodi:rx="14.910714"
sodipodi:cy="16.910715"
sodipodi:cx="16.25"
id="path35549"
style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path4120"
sodipodi:cx="23.375"
sodipodi:cy="11.875"
sodipodi:rx="8.5"
sodipodi:ry="8.5"
d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z"
transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)"
sodipodi:start="3.8052902"
sodipodi:end="4.7074114" />
<path
transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)"
d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z"
sodipodi:ry="1.21875"
sodipodi:rx="1.21875"
sodipodi:cy="17.28125"
sodipodi:cx="15.1875"
id="path34778"
style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc" />
<path
id="path35559"
d="M 22.176614,20.718014 L 13.155702,13.140282"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
id="path35561"
d="M 19.408614,29.776506 L 22.368655,25.283228"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35563"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35565"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35567"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)"
d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
sodipodi:ry="0.61871845"
sodipodi:rx="0.61871845"
sodipodi:cy="7.6932044"
sodipodi:cx="16.705399"
id="path35569"
style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path10651"
sodipodi:cx="16.25"
sodipodi:cy="16.910715"
sodipodi:rx="14.910714"
sodipodi:ry="14.910714"
d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
id="path12511"
sodipodi:cx="55"
sodipodi:cy="125"
sodipodi:rx="14.375"
sodipodi:ry="14.375"
d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)"
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
inkscape:export-xdpi="33.852203"
inkscape:export-ydpi="33.852203" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,836 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <QImageReader>
#include <QBuffer>
#include <QStandardPaths>
#include <QPainter>
#if QT_CONFIG(process)
#include <QProcess>
#endif
#include <qicon.h>
#include <qiconengine.h>
#include <algorithm>
class tst_QIcon : public QObject
{
Q_OBJECT
public:
tst_QIcon();
private slots:
void initTestCase();
void actualSize_data(); // test with 1 pixmap
void actualSize();
void actualSize2_data(); // test with 2 pixmaps with different aspect ratio
void actualSize2();
void isNull();
void isMask();
void swap();
void bestMatch();
void cacheKey();
void detach();
void addFile();
void pixmap();
void paint();
void availableSizes();
void name();
void streamAvailableSizes_data();
void streamAvailableSizes();
void fromTheme();
void fromThemeCache();
#ifndef QT_NO_WIDGETS
void task184901_badCache();
#endif
void task223279_inconsistentAddFile();
private:
bool haveImageFormat(QByteArray const&);
const QString m_pngImageFileName;
const QString m_pngRectFileName;
const QString m_sourceFileName;
};
bool tst_QIcon::haveImageFormat(QByteArray const& desiredFormat)
{
return QImageReader::supportedImageFormats().contains(desiredFormat);
}
tst_QIcon::tst_QIcon()
: m_pngImageFileName(QFINDTESTDATA("image.png"))
, m_pngRectFileName(QFINDTESTDATA("rect.png"))
, m_sourceFileName(":/tst_qicon.cpp")
{
}
void tst_QIcon::initTestCase()
{
QVERIFY(!m_pngImageFileName.isEmpty());
QVERIFY(!m_pngRectFileName.isEmpty());
QVERIFY(!m_sourceFileName.isEmpty());
}
void tst_QIcon::actualSize_data()
{
QTest::addColumn<QString>("source");
QTest::addColumn<QSize>("argument");
QTest::addColumn<QSize>("result");
// square image
QTest::newRow("resource0") << ":/image.png" << QSize(128, 128) << QSize(128, 128);
QTest::newRow("resource1") << ":/image.png" << QSize( 64, 64) << QSize( 64, 64);
QTest::newRow("resource2") << ":/image.png" << QSize( 32, 64) << QSize( 32, 32);
QTest::newRow("resource3") << ":/image.png" << QSize( 16, 64) << QSize( 16, 16);
QTest::newRow("resource4") << ":/image.png" << QSize( 16, 128) << QSize( 16, 16);
QTest::newRow("resource5") << ":/image.png" << QSize( 128, 16) << QSize( 16, 16);
QTest::newRow("resource6") << ":/image.png" << QSize( 150, 150) << QSize( 128, 128);
// rect image
QTest::newRow("resource7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40);
QTest::newRow("resource8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20);
QTest::newRow("resource9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30);
QTest::newRow("resource10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40);
QTest::newRow("external0") << m_pngImageFileName << QSize(128, 128) << QSize(128, 128);
QTest::newRow("external1") << m_pngImageFileName << QSize( 64, 64) << QSize( 64, 64);
QTest::newRow("external2") << m_pngImageFileName << QSize( 32, 64) << QSize( 32, 32);
QTest::newRow("external3") << m_pngImageFileName << QSize( 16, 64) << QSize( 16, 16);
QTest::newRow("external4") << m_pngImageFileName << QSize( 16, 128) << QSize( 16, 16);
QTest::newRow("external5") << m_pngImageFileName << QSize(128, 16) << QSize( 16, 16);
QTest::newRow("external6") << m_pngImageFileName << QSize(150, 150) << QSize(128, 128);
// rect image
QTest::newRow("external7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40);
QTest::newRow("external8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20);
QTest::newRow("external9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30);
QTest::newRow("external10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40);
}
void tst_QIcon::actualSize()
{
QFETCH(QString, source);
QFETCH(QSize, argument);
QFETCH(QSize, result);
// Skip two corner cases
if (qApp->devicePixelRatio() > 1 && (qstrcmp(QTest::currentDataTag(), "resource9") == 0
|| qstrcmp(QTest::currentDataTag(), "external9") == 0))
QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::QSkipAll);
auto expectedDeviceSize = [](QSize deviceIndependentExpectedSize, QSize maxSourceImageSize) -> QSize {
qreal dpr = qApp->devicePixelRatio();
return QSize(qMin(qRound(deviceIndependentExpectedSize.width() * dpr), maxSourceImageSize.width()),
qMin(qRound(deviceIndependentExpectedSize.height() * dpr), maxSourceImageSize.height()));
};
QSize sourceSize = QImage(source).size();
QSize deviceIndependentSize = result;
QSize deviceSize = expectedDeviceSize(result, sourceSize);
{
QPixmap pixmap(source);
QIcon icon(pixmap);
QCOMPARE(icon.actualSize(argument), deviceIndependentSize);
QCOMPARE(icon.pixmap(argument).size(), deviceSize);
}
{
QIcon icon(source);
QCOMPARE(icon.actualSize(argument), deviceIndependentSize);
QCOMPARE(icon.pixmap(argument).size(), deviceSize);
}
}
void tst_QIcon::actualSize2_data()
{
QTest::addColumn<QSize>("argument");
QTest::addColumn<QSize>("result");
// two images - 128x128 and 20x40. Let the games begin
QTest::newRow("trivial1") << QSize( 128, 128) << QSize( 128, 128);
QTest::newRow("trivial2") << QSize( 20, 40) << QSize( 20, 40);
// QIcon chooses the one with the smallest area to choose the pixmap
QTest::newRow("best1") << QSize( 100, 100) << QSize( 100, 100);
QTest::newRow("best2") << QSize( 20, 20) << QSize( 10, 20);
QTest::newRow("best3") << QSize( 15, 30) << QSize( 15, 30);
QTest::newRow("best4") << QSize( 5, 5) << QSize( 2, 5);
QTest::newRow("best5") << QSize( 10, 15) << QSize( 7, 15);
}
void tst_QIcon::actualSize2()
{
if (qApp->devicePixelRatio() > 1)
QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::SkipAll);
QIcon icon;
icon.addPixmap(m_pngImageFileName);
icon.addPixmap(m_pngRectFileName);
QFETCH(QSize, argument);
QFETCH(QSize, result);
QCOMPARE(icon.actualSize(argument), result);
QCOMPARE(icon.pixmap(argument).size(), result);
}
void tst_QIcon::isNull() {
// test default constructor
QIcon defaultConstructor;
QVERIFY(defaultConstructor.isNull());
// test copy constructor
QVERIFY(QIcon(defaultConstructor).isNull());
// test pixmap constructor
QPixmap nullPixmap;
QVERIFY(QIcon(nullPixmap).isNull());
// test string constructor with empty string
QIcon iconEmptyString = QIcon(QString());
QVERIFY(iconEmptyString.isNull());
QVERIFY(!iconEmptyString.actualSize(QSize(32, 32)).isValid());;
// test string constructor with non-existing file
QIcon iconNoFile = QIcon("imagedoesnotexist");
QVERIFY(!iconNoFile.isNull());
QVERIFY(!iconNoFile.actualSize(QSize(32, 32)).isValid());
// test string constructor with non-existing file with suffix
QIcon iconNoFileSuffix = QIcon("imagedoesnotexist.png");
QVERIFY(!iconNoFileSuffix.isNull());
QVERIFY(!iconNoFileSuffix.actualSize(QSize(32, 32)).isValid());
// test string constructor with existing file but unsupported format
QIcon iconUnsupportedFormat = QIcon(m_sourceFileName);
QVERIFY(!iconUnsupportedFormat.isNull());
QVERIFY(!iconUnsupportedFormat.actualSize(QSize(32, 32)).isValid());
// test string constructor with existing file and supported format
QIcon iconSupportedFormat = QIcon(m_pngImageFileName);
QVERIFY(!iconSupportedFormat.isNull());
QVERIFY(iconSupportedFormat.actualSize(QSize(32, 32)).isValid());
}
void tst_QIcon::isMask()
{
QIcon icon;
icon.setIsMask(true);
icon.addPixmap(QPixmap());
QVERIFY(icon.isMask());
QIcon icon2;
icon2.setIsMask(true);
QVERIFY(icon2.isMask());
icon2.setIsMask(false);
QVERIFY(!icon2.isMask());
}
void tst_QIcon::swap()
{
QPixmap p1(1, 1), p2(2, 2);
p1.fill(Qt::black);
p2.fill(Qt::black);
QIcon i1(p1), i2(p2);
const qint64 i1k = i1.cacheKey();
const qint64 i2k = i2.cacheKey();
QVERIFY(i1k != i2k);
i1.swap(i2);
QCOMPARE(i1.cacheKey(), i2k);
QCOMPARE(i2.cacheKey(), i1k);
}
void tst_QIcon::bestMatch()
{
QPixmap p1(1, 1);
QPixmap p2(2, 2);
QPixmap p3(3, 3);
QPixmap p4(4, 4);
QPixmap p5(5, 5);
QPixmap p6(6, 6);
QPixmap p7(7, 7);
QPixmap p8(8, 8);
p1.fill(Qt::black);
p2.fill(Qt::black);
p3.fill(Qt::black);
p4.fill(Qt::black);
p5.fill(Qt::black);
p6.fill(Qt::black);
p7.fill(Qt::black);
p8.fill(Qt::black);
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 2; ++j) {
QIcon::State state = (j == 0) ? QIcon::On : QIcon::Off;
QIcon::State oppositeState = (state == QIcon::On) ? QIcon::Off
: QIcon::On;
QIcon::Mode mode;
QIcon::Mode oppositeMode;
QIcon icon;
switch (i) {
case 0:
default:
mode = QIcon::Normal;
oppositeMode = QIcon::Active;
break;
case 1:
mode = QIcon::Active;
oppositeMode = QIcon::Normal;
break;
case 2:
mode = QIcon::Disabled;
oppositeMode = QIcon::Selected;
break;
case 3:
mode = QIcon::Selected;
oppositeMode = QIcon::Disabled;
}
/*
The test mirrors the code in
QPixmapIconEngine::bestMatch(), to make sure that
nobody breaks QPixmapIconEngine by mistake. Before
you change this test or the code that it tests,
please talk to the maintainer if possible.
*/
if (mode == QIcon::Disabled || mode == QIcon::Selected) {
icon.addPixmap(p1, oppositeMode, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p1.size());
icon.addPixmap(p2, oppositeMode, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p2.size());
icon.addPixmap(p3, QIcon::Active, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p3.size());
icon.addPixmap(p4, QIcon::Normal, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p4.size());
icon.addPixmap(p5, mode, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p5.size());
icon.addPixmap(p6, QIcon::Active, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p6.size());
icon.addPixmap(p7, QIcon::Normal, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p7.size());
icon.addPixmap(p8, mode, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p8.size());
} else {
icon.addPixmap(p1, QIcon::Selected, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p1.size());
icon.addPixmap(p2, QIcon::Disabled, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p2.size());
icon.addPixmap(p3, QIcon::Selected, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p3.size());
icon.addPixmap(p4, QIcon::Disabled, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p4.size());
icon.addPixmap(p5, oppositeMode, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p5.size());
icon.addPixmap(p6, mode, oppositeState);
QVERIFY(icon.pixmap(100, mode, state).size() == p6.size());
icon.addPixmap(p7, oppositeMode, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p7.size());
icon.addPixmap(p8, mode, state);
QVERIFY(icon.pixmap(100, mode, state).size() == p8.size());
}
}
}
}
void tst_QIcon::cacheKey()
{
QIcon icon1(m_pngImageFileName);
qint64 icon1_key = icon1.cacheKey();
QIcon icon2 = icon1;
QCOMPARE(icon2.cacheKey(), icon1.cacheKey());
icon2.detach();
QVERIFY(icon2.cacheKey() != icon1.cacheKey());
QCOMPARE(icon1.cacheKey(), icon1_key);
}
void tst_QIcon::detach()
{
QImage img(32, 32, QImage::Format_ARGB32_Premultiplied);
img.fill(0xffff0000);
QIcon icon1(QPixmap::fromImage(img));
QIcon icon2 = icon1;
icon2.addFile(m_pngImageFileName, QSize(64, 64));
QImage img1 = icon1.pixmap(64, 64).toImage();
QImage img2 = icon2.pixmap(64, 64).toImage();
QVERIFY(img1 != img2);
img1 = icon1.pixmap(32, 32).toImage();
img2 = icon2.pixmap(32, 32).toImage();
if (qApp->devicePixelRatio() > 1)
QVERIFY(img1 != img2); // we get an e.g. 64x64 image in dpr=2 displays
else
QCOMPARE(img1, img2);
}
void tst_QIcon::addFile()
{
if (qApp->devicePixelRatio() != int(qApp->devicePixelRatio()))
QSKIP("Test is not ready for non integer devicePixelRatio", QTest::SkipAll);
QIcon icon;
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png"));
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-32.png"));
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-64.png"));
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-128.png"));
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-16.png"), QSize(), QIcon::Selected);
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-32.png"), QSize(), QIcon::Selected);
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-64.png"), QSize(), QIcon::Selected);
icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-128.png"), QSize(), QIcon::Selected);
const int maxImageSize = 128;
auto expectedHighDpiImage = [=](int deviceIndependentSize, const QString &imagePathTemplate) -> QImage {
const int expectedImageSize = qMin(maxImageSize, deviceIndependentSize * qCeil(qApp->devicePixelRatio()));
const int expectedImageDpr = expectedImageSize / deviceIndependentSize;
const QString path = imagePathTemplate.arg(expectedImageSize);
QPixmap image(path);
image.setDevicePixelRatio(expectedImageDpr);
return image.toImage();
};
QCOMPARE(icon.pixmap(16, QIcon::Normal).toImage(),
expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-open-%1.png"));
QCOMPARE(icon.pixmap(32, QIcon::Normal).toImage(),
expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-open-%1.png"));
QCOMPARE(icon.pixmap(64, QIcon::Normal).toImage(),
expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-open-%1.png"));
QCOMPARE(icon.pixmap(128, QIcon::Normal).toImage(),
expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-open-%1.png"));
QCOMPARE(icon.pixmap(16, QIcon::Selected).toImage(),
expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-save-%1.png"));
QCOMPARE(icon.pixmap(32, QIcon::Selected).toImage(),
expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-save-%1.png"));
QCOMPARE(icon.pixmap(64, QIcon::Selected).toImage(),
expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-save-%1.png"));
QCOMPARE(icon.pixmap(128, QIcon::Selected).toImage(),
expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-save-%1.png"));
}
void tst_QIcon::pixmap()
{
QIcon icon;
icon.addFile(m_pngImageFileName, QSize(64, 64));
// Exercise all pixmap() API overloads
QVERIFY(icon.pixmap(16).size().width() >= 16);
QVERIFY(icon.pixmap(16, 16).size().width() >= 16);
QVERIFY(icon.pixmap(QSize(16, 16)).size().width() >= 16);
QVERIFY(icon.pixmap(QSize(16, 16), 1).size().width() == 16);
QVERIFY(icon.pixmap(QSize(16, 16), -1).size().width() >= 16);
}
void tst_QIcon::paint()
{
QImage img16_1x(16, 16, QImage::Format_ARGB32);
img16_1x.fill(qRgb(0, 0, 0xff));
img16_1x.setDevicePixelRatio(1.);
QImage img16_2x(32, 32, QImage::Format_ARGB32);
img16_2x.fill(qRgb(0, 0xff, 0xff));
img16_2x.setDevicePixelRatio(2.);
QImage img32_1x(32, 32, QImage::Format_ARGB32);
img32_1x.fill(qRgb(0xff, 0, 0));
img32_1x.setDevicePixelRatio(1.);
QImage img32_2x(64, 64, QImage::Format_ARGB32);
img32_2x.fill(qRgb(0x0, 0xff, 0));
img32_2x.setDevicePixelRatio(2.);
QIcon icon;
icon.addPixmap(QPixmap::fromImage(img16_1x));
icon.addPixmap(QPixmap::fromImage(img16_2x));
icon.addPixmap(QPixmap::fromImage(img32_1x));
icon.addPixmap(QPixmap::fromImage(img32_2x));
// Test painting the icon version with a device independent size of 32x32
QRect iconRect(0, 0, 32, 32);
auto imageWithPaintedIconAtDpr = [&](qreal dpr) {
QImage paintDevice(64 * dpr, 64 * dpr, QImage::Format_ARGB32);
paintDevice.setDevicePixelRatio(dpr);
QPainter painter(&paintDevice);
icon.paint(&painter, iconRect);
return paintDevice;
};
QImage imageWithIcon1x = imageWithPaintedIconAtDpr(1.0);
QCOMPARE(imageWithIcon1x.pixel(iconRect.center()), qRgb(0xff, 0, 0));
QImage imageWithIcon2x = imageWithPaintedIconAtDpr(2.0);
QCOMPARE(imageWithIcon2x.pixel(iconRect.center()), qRgb(0, 0xff, 0));
QImage imageWithIcon3x = imageWithPaintedIconAtDpr(3.0);
QCOMPARE(imageWithIcon3x.pixel(iconRect.center()), qRgb(0, 0xff, 0));
}
static bool sizeLess(const QSize &a, const QSize &b)
{
return a.width() < b.width();
}
void tst_QIcon::availableSizes()
{
{
QIcon icon;
icon.addFile(m_pngImageFileName, QSize(32,32));
icon.addFile(m_pngImageFileName, QSize(64,64));
icon.addFile(m_pngImageFileName, QSize(128,128));
icon.addFile(m_pngImageFileName, QSize(256,256), QIcon::Disabled);
icon.addFile(m_pngImageFileName, QSize(16,16), QIcon::Normal, QIcon::On);
QList<QSize> availableSizes = icon.availableSizes();
QCOMPARE(availableSizes.size(), 3);
std::sort(availableSizes.begin(), availableSizes.end(), sizeLess);
QCOMPARE(availableSizes.at(0), QSize(32,32));
QCOMPARE(availableSizes.at(1), QSize(64,64));
QCOMPARE(availableSizes.at(2), QSize(128,128));
availableSizes = icon.availableSizes(QIcon::Disabled);
QCOMPARE(availableSizes.size(), 1);
QCOMPARE(availableSizes.at(0), QSize(256,256));
availableSizes = icon.availableSizes(QIcon::Normal, QIcon::On);
QCOMPARE(availableSizes.size(), 1);
QCOMPARE(availableSizes.at(0), QSize(16,16));
}
{
// we try to load an icon from resources
QIcon icon(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png"));
QList<QSize> availableSizes = icon.availableSizes();
QCOMPARE(availableSizes.size(), 1);
QCOMPARE(availableSizes.at(0), QSize(16, 16));
}
{
// load an icon from binary data.
QPixmap pix;
QFile file(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png"));
QVERIFY(file.open(QIODevice::ReadOnly));
uchar *data = file.map(0, file.size());
QVERIFY(data != 0);
pix.loadFromData(data, file.size());
QIcon icon(pix);
QList<QSize> availableSizes = icon.availableSizes();
QCOMPARE(availableSizes.size(), 1);
QCOMPARE(availableSizes.at(0), QSize(16,16));
}
{
// there shouldn't be available sizes for invalid images!
QVERIFY(QIcon(QLatin1String("")).availableSizes().isEmpty());
QVERIFY(QIcon(QLatin1String("non-existing.png")).availableSizes().isEmpty());
}
}
void tst_QIcon::name()
{
{
// No name if icon does not come from a theme
QIcon icon(":/image.png");
QString name = icon.name();
QVERIFY(name.isEmpty());
}
{
// Getting the name of an icon coming from a theme should work
QString searchPath = QLatin1String(":/icons");
QIcon::setThemeSearchPaths(QStringList() << searchPath);
QString themeName("testtheme");
QIcon::setThemeName(themeName);
QIcon icon = QIcon::fromTheme("appointment-new");
QString name = icon.name();
QCOMPARE(name, QLatin1String("appointment-new"));
}
}
void tst_QIcon::streamAvailableSizes_data()
{
QTest::addColumn<QIcon>("icon");
QIcon icon;
icon.addFile(":/image.png", QSize(32,32));
QTest::newRow( "32x32" ) << icon;
icon.addFile(":/image.png", QSize(64,64));
QTest::newRow( "64x64" ) << icon;
icon.addFile(":/image.png", QSize(128,128));
QTest::newRow( "128x128" ) << icon;
icon.addFile(":/image.png", QSize(256,256));
QTest::newRow( "256x256" ) << icon;
}
void tst_QIcon::streamAvailableSizes()
{
QFETCH(QIcon, icon);
QByteArray ba;
// write to QByteArray
{
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
QDataStream stream(&buffer);
stream << icon;
}
// read from QByteArray
{
QBuffer buffer(&ba);
buffer.open(QIODevice::ReadOnly);
QDataStream stream(&buffer);
QIcon i;
stream >> i;
QCOMPARE(i.isNull(), icon.isNull());
QCOMPARE(i.availableSizes(), icon.availableSizes());
}
}
#ifndef QT_NO_WIDGETS
void tst_QIcon::task184901_badCache()
{
QPixmap pm(m_pngImageFileName);
QIcon icon(pm);
//the disabled icon must have an effect (grayed)
QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() != icon.pixmap(32, QIcon::Disabled).toImage());
icon.addPixmap(pm, QIcon::Disabled);
//the disabled icon must now be the same as the normal one.
QVERIFY( icon.pixmap(32, QIcon::Normal).toImage() == icon.pixmap(32, QIcon::Disabled).toImage() );
}
#endif
void tst_QIcon::fromTheme()
{
QString firstSearchPath = QLatin1String(":/icons");
QString secondSearchPath = QLatin1String(":/second_icons");
QIcon::setThemeSearchPaths(QStringList() << firstSearchPath << secondSearchPath);
QCOMPARE(QIcon::themeSearchPaths().size(), 2);
QCOMPARE(firstSearchPath, QIcon::themeSearchPaths()[0]);
QCOMPARE(secondSearchPath, QIcon::themeSearchPaths()[1]);
QString fallbackSearchPath = QStringLiteral(":/fallback_icons");
QIcon::setFallbackSearchPaths(QStringList() << fallbackSearchPath);
QCOMPARE(QIcon::fallbackSearchPaths().size(), 1);
QCOMPARE(fallbackSearchPath, QIcon::fallbackSearchPaths().at(0));
QString themeName("testtheme");
QIcon::setThemeName(themeName);
QCOMPARE(QIcon::themeName(), themeName);
// Test normal icon
QIcon appointmentIcon = QIcon::fromTheme("appointment-new");
QVERIFY(!appointmentIcon.isNull());
QVERIFY(!appointmentIcon.availableSizes(QIcon::Normal, QIcon::Off).isEmpty());
QVERIFY(appointmentIcon.availableSizes().contains(QSize(16, 16)));
QVERIFY(appointmentIcon.availableSizes().contains(QSize(32, 32)));
QVERIFY(appointmentIcon.availableSizes().contains(QSize(22, 22)));
// Test fallback to less specific icon
QIcon specificAppointmentIcon = QIcon::fromTheme("appointment-new-specific");
QVERIFY(!QIcon::hasThemeIcon("appointment-new-specific"));
QVERIFY(QIcon::hasThemeIcon("appointment-new"));
QCOMPARE(specificAppointmentIcon.name(), QString::fromLatin1("appointment-new"));
QCOMPARE(specificAppointmentIcon.availableSizes(), appointmentIcon.availableSizes());
QCOMPARE(specificAppointmentIcon.pixmap(32).cacheKey(), appointmentIcon.pixmap(32).cacheKey());
// Test icon from parent theme
QIcon abIcon = QIcon::fromTheme("address-book-new");
QVERIFY(!abIcon.isNull());
QVERIFY(QIcon::hasThemeIcon("address-book-new"));
QVERIFY(!abIcon.availableSizes().isEmpty());
// Test icon from fallback path
QIcon fallbackIcon = QIcon::fromTheme("red");
QVERIFY(!fallbackIcon.isNull());
QVERIFY(QIcon::hasThemeIcon("red"));
QCOMPARE(fallbackIcon.availableSizes().size(), 1);
// Test non existing icon
QIcon noIcon = QIcon::fromTheme("broken-icon");
QVERIFY(noIcon.isNull());
QVERIFY(!QIcon::hasThemeIcon("broken-icon"));
QCOMPARE(noIcon.actualSize(QSize(32, 32), QIcon::Normal, QIcon::On), QSize(0, 0));
// Test non existing icon with fallback
noIcon = QIcon::fromTheme("broken-icon", abIcon);
QCOMPARE(noIcon.cacheKey(), abIcon.cacheKey());
// Test svg-only icon
noIcon = QIcon::fromTheme("svg-icon", abIcon);
QVERIFY(!noIcon.availableSizes().isEmpty());
// Pixmaps should be no larger than the requested size (for devicePixelRatio 1) (QTBUG-17953)
if (qApp->devicePixelRatio() == 1) {
QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact
QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact
QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller
QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down
QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down
QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down
}
QByteArray ba;
// write to QByteArray
{
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
QDataStream stream(&buffer);
stream << abIcon;
}
// read from QByteArray
{
QBuffer buffer(&ba);
buffer.open(QIODevice::ReadOnly);
QDataStream stream(&buffer);
QIcon i;
stream >> i;
QCOMPARE(i.isNull(), abIcon.isNull());
QCOMPARE(i.availableSizes(), abIcon.availableSizes());
}
// Make sure setting the theme name clears the state
QIcon::setThemeName("");
abIcon = QIcon::fromTheme("address-book-new");
QVERIFY(abIcon.isNull());
// Passing a full path to fromTheme is not very useful, but should work anyway
QIcon fullPathIcon = QIcon::fromTheme(m_pngImageFileName);
QVERIFY(!fullPathIcon.isNull());
}
static inline QString findGtkUpdateIconCache()
{
QString binary = QLatin1String("gtk-update-icon-cache");
#ifdef Q_OS_WIN
binary += QLatin1String(".exe");
#endif
return QStandardPaths::findExecutable(binary);
}
void tst_QIcon::fromThemeCache()
{
QTemporaryDir dir;
QVERIFY2(dir.isValid(), qPrintable(dir.errorString()));
QVERIFY(QDir().mkpath(dir.path() + QLatin1String("/testcache/16x16/actions")));
QVERIFY(QFile(QStringLiteral(":/styles/commonstyle/images/standardbutton-open-16.png"))
.copy( dir.path() + QLatin1String("/testcache/16x16/actions/button-open.png")));
{
QFile index(dir.path() + QLatin1String("/testcache/index.theme"));
QVERIFY(index.open(QFile::WriteOnly));
index.write("[Icon Theme]\nDirectories=16x16/actions\n[16x16/actions]\nSize=16\nContext=Actions\nType=Fixed\n");
}
QIcon::setThemeSearchPaths(QStringList() << dir.path());
QIcon::setThemeName("testcache");
// We just created a theme with that icon, it must exist
QVERIFY(!QIcon::fromTheme("button-open").isNull());
QString cacheName = dir.path() + QLatin1String("/testcache/icon-theme.cache");
// An invalid cache should not prevent lookup
{
QFile cacheFile(cacheName);
QVERIFY(cacheFile.open(QFile::WriteOnly));
QDataStream(&cacheFile) << quint16(1) << quint16(0) << "invalid corrupted stuff in there\n";
}
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(!QIcon::fromTheme("button-open").isNull());
// An empty cache should prevent the lookup
{
QFile cacheFile(cacheName);
QVERIFY(cacheFile.open(QFile::WriteOnly));
QDataStream ds(&cacheFile);
ds << quint16(1) << quint16(0); // 0: version
ds << quint32(12) << quint32(20); // 4: hash offset / dir list offset
ds << quint32(1) << quint32(0xffffffff); // 12: one empty bucket
ds << quint32(1) << quint32(28); // 20: list with one element
ds.writeRawData("16x16/actions", sizeof("16x16/actions")); // 28
}
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(QIcon::fromTheme("button-open").isNull()); // The icon was not in the cache, it should not be found
// Adding an icon should be changing the modification date of one sub directory which should make the cache ignored
QTest::qWait(1000); // wait enough to have a different modification time in seconds
QVERIFY(QFile(QStringLiteral(":/styles/commonstyle/images/standardbutton-save-16.png"))
.copy(dir.path() + QLatin1String("/testcache/16x16/actions/button-save.png")));
QVERIFY(QFileInfo(cacheName).lastModified() < QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified());
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(!QIcon::fromTheme("button-open").isNull());
// Try to run the actual gtk-update-icon-cache and make sure that icons are still found
const QString gtkUpdateIconCache = findGtkUpdateIconCache();
if (gtkUpdateIconCache.isEmpty()) {
QIcon::setThemeSearchPaths(QStringList());
QSKIP("gtk-update-icon-cache not run (binary not found)");
}
#if QT_CONFIG(process)
QProcess process;
process.start(gtkUpdateIconCache,
QStringList() << QStringLiteral("-f") << QStringLiteral("-t") << (dir.path() + QLatin1String("/testcache")));
QVERIFY2(process.waitForStarted(), qPrintable(QLatin1String("Unable to start: ")
+ gtkUpdateIconCache + QLatin1String(": ")
+ process.errorString()));
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QCOMPARE(process.exitCode(), 0);
#endif // QT_CONFIG(process)
QVERIFY(QFileInfo(cacheName).lastModified() >= QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified());
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(!QIcon::fromTheme("button-open").isNull());
QVERIFY(!QIcon::fromTheme("button-open-fallback").isNull());
QVERIFY(QIcon::fromTheme("notexist-fallback").isNull());
}
void tst_QIcon::task223279_inconsistentAddFile()
{
QIcon icon1;
icon1.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png"));
icon1.addFile(QLatin1String("IconThatDoesntExist"), QSize(32, 32));
QPixmap pm1 = icon1.pixmap(32, 32);
QIcon icon2;
icon2.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png"));
icon2.addFile(QLatin1String("IconThatDoesntExist"));
QPixmap pm2 = icon1.pixmap(32, 32);
QCOMPARE(pm1.isNull(), false);
QCOMPARE(pm1.size(), QSize(16,16));
QCOMPARE(pm1.isNull(), pm2.isNull());
QCOMPARE(pm1.size(), pm2.size());
}
QTEST_MAIN(tst_QIcon)
#include "tst_qicon.moc"

View File

@ -0,0 +1,38 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qiconhighdpi Test:
#####################################################################
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
icons/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qiconhighdpi
SOURCES
tst_qiconhighdpi.cpp
LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
# Resources:
set(tst_qiconhighdpi_resource_files
"icons/misc/button.9.png"
"icons/misc/button@2x.9.png"
"icons/testtheme/16x16/actions/appointment-new.png"
"icons/testtheme/22x22/actions/appointment-new.png"
"icons/testtheme/22x22@2/actions/appointment-new.png"
"icons/testtheme/index.theme"
)
qt_internal_add_resource(tst_qiconhighdpi "tst_qiconhighdpi"
PREFIX
"/"
FILES
${tst_qiconhighdpi_resource_files}
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,21 @@
[Icon Theme]
Name=Test
Comment=Test Theme
Directories=16x16/actions,22x22/actions,22x22@2/actions
[16x16/actions]
Size=16
Context=Actions
Type=Fixed
[22x22/actions]
Size=22
Context=Actions
Type=Fixed
[22x22@2/actions]
Size=22
Context=Actions
Scale=2
Type=Fixed

View File

@ -0,0 +1,223 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <qicon.h>
class tst_QIconHighDpi : public QObject
{
Q_OBJECT
public:
tst_QIconHighDpi();
private slots:
void initTestCase();
void fromTheme_data();
void fromTheme();
void addPixmap_data();
void addPixmap();
void ninePatch();
};
tst_QIconHighDpi::tst_QIconHighDpi()
{
}
void tst_QIconHighDpi::initTestCase()
{
}
void tst_QIconHighDpi::fromTheme_data()
{
QTest::addColumn<int>("requestedSize");
QTest::addColumn<qreal>("requestedDpr");
QTest::addColumn<int>("expectedSize");
QTest::addColumn<qreal>("expectedDpr");
// The pixmaps that we have available can be found in tst_qiconhighdpi.qrc.
// Currently we only have @1 and @2 icons available, which limits the expected
// devicePixelRatio when testing at e.g. devicePixelRatio 3.
// We have an @2 high DPI version of the 22x22 size of this icon.
QTest::newRow("22x22,dpr=1") << 22 << 1.0 << 22 << 1.0;
QTest::newRow("22x22,dpr=2") << 22 << 2.0 << 44 << 2.0;
QTest::newRow("22x22,dpr=3") << 22 << 3.0 << 44 << 2.0;
// We don't have a high DPI version of the 16x16 size of this icon,
// so directoryMatchesSize() will return false for all directories.
// directorySizeDistance() is then called to find the best match.
// The table below illustrates the results for our available images at various DPRs:
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 16 * 1 = 28
// 22 * 1 - 16 * 1 = 6
// 16 * 1 - 16 * 1 = 0 < (16x16)
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 16 * 2 = 12
// 22 * 1 - 16 * 2 = 10 < (22x22)
// 16 * 1 - 16 * 2 = 16
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 16 * 3 = 4 < (22x22@2)
// 22 * 1 - 16 * 3 = 26
// 16 * 1 - 16 * 3 = 32
// Both of these functions are implementations of the freedesktop icon theme spec,
// which dictates that if there is no matching scale, directorySizeDistance() determines
// the winner, regardless of whether or not the scale is too low for the requested scale.
QTest::newRow("16x16,dpr=1") << 16 << 1.0 << 16 << 1.0;
// PixmapEntry::pixmap() will only downscale the pixmap if actualSize.width() > size.width().
// In this case, 22 > 32 is false, so a 22x22 pixmap is returned.
QTest::newRow("16x16,dpr=2") << 16 << 2.0 << 22 << 1.375;
QTest::newRow("16x16,dpr=3") << 16 << 3.0 << 44 << 2.75;
// We don't have an 8x8 size of this icon, so:
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 8 * 1 = 36
// 22 * 1 - 8 * 1 = 14
// 16 * 1 - 8 * 1 = 8 < (16x16)
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 8 * 2 = 28
// 22 * 1 - 8 * 2 = 6
// 16 * 1 - 8 * 2 = 0 < (16x16)
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 8 * 3 = 20
// 22 * 1 - 8 * 3 = 2 < (22x22)
// 16 * 1 - 8 * 3 = 8
QTest::newRow("8x8,dpr=1") << 8 << 1.0 << 8 << 1.0;
QTest::newRow("8x8,dpr=2") << 8 << 2.0 << 16 << 2.0;
QTest::newRow("8x8,dpr=3") << 8 << 3.0 << 22 << 2.75;
// We don't have a 44x44 size of this icon, so:
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 44 * 1 = 0 < (22x22@2)
// 22 * 1 - 44 * 1 = 22
// 16 * 1 - 44 * 1 = 28
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 44 * 2 = 44 < (22x22@2)
// 22 * 1 - 44 * 2 = 66
// 16 * 1 - 44 * 2 = 72
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 44 * 3 = 88 < (22x22@2)
// 22 * 1 - 44 * 3 = 110
// 16 * 1 - 44 * 3 = 116
QTest::newRow("44x44,dpr=1") << 44 << 1.0 << 44 << 1.0;
QTest::newRow("44x44,dpr=2") << 44 << 2.0 << 44 << 1.0;
QTest::newRow("44x44,dpr=3") << 44 << 3.0 << 44 << 1.0;
// We don't have a 20x20 size of this icon, so:
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 20 * 1 = 24
// 22 * 1 - 20 * 1 = 2 < (22x22)
// 16 * 1 - 20 * 1 = 4
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 20 * 2 = 4 < (22x22@2)
// 22 * 1 - 20 * 2 = 18
// 16 * 1 - 20 * 2 = 24
// Available size | Available scale | Requested size | Requested scale | Distance
// 22 * 2 - 20 * 3 = 16 < (22x22@2)
// 22 * 1 - 20 * 3 = 38
// 16 * 1 - 20 * 3 = 44
QTest::newRow("20x20,dpr=1") << 20 << 1.0 << 20 << 1.0;
// PixmapEntry::pixmap() will only downscale the pixmap if actualSize.width() > size.width().
// In this case, 44 > 40 is true, so the 44x44 pixmap is downscaled to 40x40.
QTest::newRow("20x20,dpr=2") << 20 << 2.0 << 40 << 2.0;
QTest::newRow("20x20,dpr=3") << 20 << 3.0 << 44 << 2.2;
}
void tst_QIconHighDpi::fromTheme()
{
QFETCH(int, requestedSize);
QFETCH(qreal, requestedDpr);
QFETCH(int, expectedSize);
QFETCH(qreal, expectedDpr);
QString searchPath = QLatin1String(":/icons");
QIcon::setThemeSearchPaths(QStringList() << searchPath);
QCOMPARE(QIcon::themeSearchPaths().size(), 1);
QCOMPARE(searchPath, QIcon::themeSearchPaths()[0]);
QString themeName("testtheme");
QIcon::setThemeName(themeName);
QCOMPARE(QIcon::themeName(), themeName);
QIcon appointmentIcon = QIcon::fromTheme("appointment-new");
QVERIFY(!appointmentIcon.isNull());
QVERIFY(!appointmentIcon.availableSizes(QIcon::Normal, QIcon::Off).isEmpty());
QVERIFY(appointmentIcon.availableSizes().contains(QSize(16, 16)));
QVERIFY(appointmentIcon.availableSizes().contains(QSize(22, 22)));
const QPixmap pixmap = appointmentIcon.pixmap(QSize(requestedSize, requestedSize), requestedDpr);
QCOMPARE(pixmap.size(), QSize(expectedSize, expectedSize));
// We should get the high DPI version of an image if it exists in the correct directory.
QCOMPARE(pixmap.devicePixelRatio(), expectedDpr);
}
void tst_QIconHighDpi::addPixmap_data()
{
// fromTheme() and addPixmap() test the QIconLoaderEngine and QPixmapIconEngine
// QIcon backend, repsectively. We want these to have identical behavior and
// re-use the same test data here.
fromTheme_data();
}
void tst_QIconHighDpi::addPixmap()
{
QFETCH(int, requestedSize);
QFETCH(qreal, requestedDpr);
QFETCH(int, expectedSize);
QFETCH(qreal, expectedDpr);
QIcon icon;
// manual pixmap adder for full control of devicePixelRatio
auto addPixmapWithDpr = [&icon](const QString &path, qreal dpr) {
QImage image(path);
image.setDevicePixelRatio(dpr);
icon.addPixmap(QPixmap::fromImage(image));
};
addPixmapWithDpr(":icons/testtheme/16x16/actions/appointment-new.png", 1);
addPixmapWithDpr(":icons/testtheme/22x22/actions/appointment-new.png", 1);
addPixmapWithDpr(":icons/testtheme/22x22@2/actions/appointment-new.png", 2);
QVERIFY(icon.availableSizes().contains(QSize(16, 16)));
QVERIFY(icon.availableSizes().contains(QSize(22, 22)));
if (qstrcmp(QTest::currentDataTag(), "16x16,dpr=2") == 0)
QSKIP("broken corner case"); // expect 22x22, get 32x32
if (qstrcmp(QTest::currentDataTag(), "44x44,dpr=1") == 0)
QSKIP("broken corner case"); // expect 44x44, get 22x22
if (qstrcmp(QTest::currentDataTag(), "8x8,dpr=3") == 0)
QSKIP("broken corner case");// expect 22x22, get 24x24
const QPixmap pixmap = icon.pixmap(QSize(requestedSize, requestedSize), requestedDpr);
QCOMPARE(pixmap.size(), QSize(expectedSize, expectedSize));
QCOMPARE(pixmap.devicePixelRatio(), expectedDpr);
}
void tst_QIconHighDpi::ninePatch()
{
const QIcon icon(":/icons/misc/button.9.png");
const int dpr = qCeil(qApp->devicePixelRatio());
switch (dpr) {
case 1:
QCOMPARE(icon.availableSizes().size(), 1);
QCOMPARE(icon.availableSizes().at(0), QSize(42, 42));
break;
case 2:
QCOMPARE(icon.availableSizes().size(), 2);
QCOMPARE(icon.availableSizes().at(0), QSize(42, 42));
QCOMPARE(icon.availableSizes().at(1), QSize(82, 82));
break;
}
}
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
Q_UNUSED(app);
tst_QIconHighDpi test;
QTEST_SET_MAIN_SOURCE_PATH
return QTest::qExec(&test, argc, argv);
}
#include "tst_qiconhighdpi.moc"

View File

@ -0,0 +1,10 @@
<RCC>
<qresource prefix="/">
<file>icons/testtheme/16x16/actions/appointment-new.png</file>
<file>icons/testtheme/22x22/actions/appointment-new.png</file>
<file>icons/testtheme/index.theme</file>
<file>icons/testtheme/22x22@2/actions/appointment-new.png</file>
<file>icons/misc/button.9.png</file>
<file>icons/misc/button@2x.9.png</file>
</qresource>
</RCC>

View File

@ -0,0 +1,33 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimage Test:
#####################################################################
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
images/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qimage
SOURCES
tst_qimage.cpp
LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
TESTDATA ${test_data}
)
qt_internal_extend_target(tst_qimage CONDITION WIN32
LIBRARIES
gdi32
user32
)
qt_internal_extend_target(tst_qimage CONDITION APPLE
LIBRARIES
${FWCoreGraphics}
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

View File

@ -0,0 +1,8 @@
P1
16 6
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1

View File

@ -0,0 +1,10 @@
P2
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

View File

@ -0,0 +1,7 @@
P3
4 4
15
0 0 0 0 0 0 0 0 0 15 0 15
0 0 0 0 15 7 0 0 0 0 0 0
0 0 0 0 0 0 0 15 7 0 0 0
15 0 15 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,5 @@
#define Cloverleaf_width 9
#define Cloverleaf_height 9
static unsigned char Cloverleaf_bits[] = {
0xc6, 0x00, 0x29, 0x01, 0x29, 0x01, 0xfe, 0x00, 0x28, 0x00, 0xfe, 0x00,
0x29, 0x01, 0x29, 0x01, 0xc6, 0x00, };

View File

@ -0,0 +1,261 @@
/* XPM */
static char * foo_xpm[] = {
"256 256 2 1",
" c None",
". c #E22626",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................",
"................................................................................................................................................................................................................................................................"};

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimageiohandler Test:
#####################################################################
qt_internal_add_test(tst_qimageiohandler
SOURCES
tst_qimageiohandler.cpp
LIBRARIES
Qt::Gui
)

View File

@ -0,0 +1,55 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <qcoreapplication.h>
#include <qdebug.h>
#include <qimageiohandler.h>
#include <qfile.h>
class tst_QImageIOHandler : public QObject
{
Q_OBJECT
public:
tst_QImageIOHandler();
virtual ~tst_QImageIOHandler();
private slots:
void getSetCheck();
};
class MyImageIOHandler : public QImageIOHandler
{
public:
MyImageIOHandler() : QImageIOHandler() { }
bool canRead() const override { return true; }
bool read(QImage *) override { return true; }
};
tst_QImageIOHandler::tst_QImageIOHandler()
{
}
tst_QImageIOHandler::~tst_QImageIOHandler()
{
}
// Testing get/set functions
void tst_QImageIOHandler::getSetCheck()
{
MyImageIOHandler obj1;
// QIODevice * QImageIOHandler::device()
// void QImageIOHandler::setDevice(QIODevice *)
QFile *var1 = new QFile;
obj1.setDevice(var1);
QCOMPARE(obj1.device(), (QIODevice *)var1);
obj1.setDevice((QIODevice *)0);
QCOMPARE(obj1.device(), (QIODevice *)0);
delete var1;
}
QTEST_MAIN(tst_QImageIOHandler)
#include "tst_qimageiohandler.moc"

View File

@ -0,0 +1,8 @@
[setClipRect:SVG: rect]
wayland
[setClipRect:SVGZ: rect]
wayland
[setScaledClipRect:SVG: rect]
wayland
[setScaledClipRect:SVGZ: rect]
wayland

View File

@ -0,0 +1,45 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimagereader Test:
#####################################################################
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
images/*)
list(APPEND test_data ${test_data_glob})
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
baseline/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qimagereader
SOURCES
tst_qimagereader.cpp
LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Network
TESTDATA ${test_data}
)
file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*")
foreach(file IN LISTS resource_glob_0)
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
endforeach()
# Resources:
set(qmake_immediate_resource_files
${resource_glob_0}
)
qt_internal_add_resource(tst_qimagereader "qmake_immediate"
PREFIX
"/"
FILES
${qmake_immediate_resource_files}
)

View File

@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/">
<file>images/trans.gif</file>
<file>images/kollada-noext</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Some files were not shown because too many files have changed in this diff Show More