Development/Tutorials/Icons: Difference between revisions

From KDE TechBase
Line 50: Line 50:
= The icon naming scheme =
= The icon naming scheme =
Example for icon names:
Example for icon names:
* hisc-apps-bla.svgz will be installed e.g. to /usr/local/share/icons/hicolor/scalable/apps/./bla.svgz
* 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.


= Analyzing the KApplications =
= Analyzing the KApplications =

Revision as of 15:15, 18 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.

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
[...]

See also