Development/Tutorials/Icons: Difference between revisions
Line 69: | Line 69: | ||
* [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/mainwindow.h mainwindow.h] | * [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/mainwindow.h mainwindow.h] | ||
* [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/world.svg world.svg] | * [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/world.svg world.svg] | ||
: This is a file that defines our icon in (almost natural) english language. It is a scalable vector graphics. Before being used, it must be converted to a zipped scalable vector graphic file hisc-apps-tutorial-kicon.svgz, see below. | |||
* [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/tutorial-kiconui.rc tutorial-kiconui.rc] | * [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/tutorial-kiconui.rc tutorial-kiconui.rc] | ||
* [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/hisc-apps-tutorial-kicon.svgz hisc-apps-tutorial-kicon.svgz] | * [http://quickgit.kde.org/?p=kdeexamples.git&a=blob&f=kicons/hisc-apps-tutorial-kicon.svgz hisc-apps-tutorial-kicon.svgz] |
Revision as of 08:13, 19 September 2011
When you create your own KDE application you will probably want icons in it like this:
These icons are called KIcons. This article shows you how to do this on the example of the software krep. In case of a cmake based project you will need to
How to use icons in a qmake base project is discussed elsewhere.
Your KDE project
If you have a KDE project and want to use icons within it, and want that these icons install seamlessly, you will have to name the icons after the project. In the following we look at a project named krep. The important lines in CMakeLists.txt are the ones printed bold below:
PROJECT( krep ) FIND_PACKAGE( KDE4 REQUIRED ) INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} . ) SET(krepSources main.cpp krep.cpp krep.h) qt4_add_dbus_adaptor( krepSources org.kde.krep.xml krep.h krep mainadaptor MainAdaptor ) kde4_add_ui_files( krepSources krepui.ui ) kde4_add_app_icon( krepSources "hi*-app-krep.png" ) KDE4_ADD_EXECUTABLE( krep ${krepSources} ) TARGET_LINK_LIBRARIES( krep ${KDE4_KPARTS_LIBS} ) install( TARGETS krep ${INSTALL_TARGETS_DEFAULT_ARGS} ) kde4_install_icons( ${ICON_INSTALL_DIR} )
How to test it
- delete a file
rm /usr/local/share/icons/hicolor/22x22/apps/krep.png
- delete your cache
rm -rf /var/tmp/kdecache-user/
- relogin
using this test case I could remove one icon after the other, 22x22, 64x64, 48x48, but when I removed 32x32, the icon disappeared from my application. This was the last icon that existed. Then I put in the 64x64 icon and the application carried an icon again. This means you can use any icon of 16x16, 22x22, 32x32, 48x48, 64x64, 128x128.
The icon naming scheme
Example for icon names:
- hisc-apps-bla.svgz will be installed e.g. to /usr/local/share/icons/hicolor/scalable/apps/./bla.svgz. hi stands for "hicolor", sc for "scalable", apps for "applications", bla for the application's name and .svgz is the suffix for gzipped scalable vector graphic files.
- hi128-app-ktimetracker.png will be installed e.g. to /usr/share/icons/hicolor/128x128/apps/ktimetracker.png. hi stands for "hicolor", 128 for a resolution of 128x128 pixels, app for "applications", ktimetracker for the application's name and .png is the suffix for portable network graphic files.
example application
In this chapter we will build an example application kicons that looks like this:
You can obtain its source code as part of kdeexamples by calling
git clone git://anongit.kde.org/kdeexamples
It is based on the KAction example
files
The example application consists of
- Note the command
clearAction->setIcon(KIcon("tutorial-kicon"));
that sets the icon
- This is a file that defines our icon in (almost natural) english language. It is a scalable vector graphics. Before being used, it must be converted to a zipped scalable vector graphic file hisc-apps-tutorial-kicon.svgz, see below.
- sorry for the name, but there are naming conventions. Create this file with the command convert from the ImageMagick package
convert world.svg hisc-apps-tutorial-kicon.svgz
- Note the commands
kde4_install_icons(${ICON_INSTALL_DIR})
andkde4_update_iconcache()
which integrate the icons.
build it
To compile, link and install the example application, do a
cmake . && make && make install
To run it, call
tutorial-kicon
Analyzing the KApplications
Maybe you have already searched for yourself how a KDE application finds its icons. You will not be successful like this:
# strace -e open ktimetracker 2>&1 | grep icon open("/usr/lib64/libkemoticons.so.4", O_RDONLY) = 3 #
You see, a KDE application (in this case ktimetracker) does not open icon files or even look for them. However, it spawns a process to look for these icons:
linux-qgla:~/repos/kdepim/ktimetracker # strace -ffe open ktimetracker 2>&1 | grep icon open("/usr/lib64/libkemoticons.so.4", O_RDONLY) = 3 [pid 3457] open("/root/.icons/DMZ/cursors/left_ptr", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 3457] open("/root/.icons/DMZ/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 3457] open("/usr/share/icons/DMZ/cursors/left_ptr", O_RDONLY) = 10 [pid 3457] open("/var/tmp/kdecache-root/icon-cache.kcache", O_RDWR|O_CREAT|O_CLOEXEC, 0666) = 10 [pid 3457] open("/var/tmp/kdecache-root/kpc/kde-icon-cache.data", O_RDONLY|O_CLOEXEC) = 10 [pid 3457] open("/var/tmp/kdecache-root/kpc/kde-icon-cache.index", O_RDONLY|O_CLOEXEC) = 10 [...]