Development/Tutorials/Icons: Difference between revisions

From KDE TechBase
m (improve markup)
(Mark for updating)
 
(8 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{Review|Port to KF5}}
__TOC__
__TOC__


Line 30: Line 32:
kde4_add_ui_files( krepSources krepui.ui )
kde4_add_ui_files( krepSources krepui.ui )
   
   
kde4_add_app_icon]]( krepSources "hi*-app-krep.png" )
kde4_add_app_icon( krepSources "hi*-app-krep.png" )
   
   
KDE4_ADD_EXECUTABLE( krep ${krepSources} )
KDE4_ADD_EXECUTABLE( krep ${krepSources} )
Line 38: Line 40:
install( TARGETS krep ${INSTALL_TARGETS_DEFAULT_ARGS} )
install( TARGETS krep ${INSTALL_TARGETS_DEFAULT_ARGS} )
   
   
'''kde4_install_icons( ${ICON_INSTALL_DIR]]} )
kde4_install_icons( ${ICON_INSTALL_DIR} )
</syntaxhighlight>
</syntaxhighlight>
Weitere Informationen:
Weitere Informationen:
Line 45: Line 47:


= How to test it =
= How to test it =
* delete a file
The easy way is to define a custom cmake install prefix where you can simply insall the project without touching your system.
Use following commands to setup this:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
rm /usr/local/share/icons/hicolor/22x22/apps/krep.png
cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/playground ../
make && make install
</syntaxhighlight>
</syntaxhighlight>
{{Note| We are assuming your icon path is /usr/local/share/icons.
 
Find it out with the command
now the files should be deployed under
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
kde4-config --path icon
$HOME/playground/bin/krep
$HOME/playground/share/apps/krep
$HOME/playground/share/icons/hicolor/22x22/apps/krep.png
</syntaxhighlight>
</syntaxhighlight>
}}
 
* delete your cache
With this method you can easy see what you will get.
 
{{Note| You can still not see the icon in your application because $HOME/playground is not a know path by kde.
Normaly kde support a user defined space under $HOME/.kde.
 
Find out if this is supported with the command
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
rm -rf /var/tmp/kdecache-''user''/icon-cache.kcache
kde4-config -path icon
</syntaxhighlight>
</syntaxhighlight>


According to [[Development/CMake/Addons_for_KDE#Macros]] you need to provide a 128x128 pixels icon.
finally you have to extend the search path for kde
<syntaxhighlight lang="bash">
export KDEDIRS=$KDEDIRS:$HOME/playground
</syntaxhighlight>
}}


= 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. <tt>hi</tt> stands for "hicolor", <tt>sc</tt> for "scalable", <tt>apps</tt> for "applications", <tt>bla</tt> for the application's name and <tt>.svgz</tt> is the suffix for gzipped scalable vector graphic files.
* hisc-apps-bla.svgz will be installed e.g. to /usr/local/share/icons/hicolor/scalable/apps/bla.svgz. <tt>hi</tt> stands for "hicolor", <tt>sc</tt> for "scalable", <tt>apps</tt> for "applications", <tt>bla</tt> for the application's name and <tt>.svgz</tt> 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. <tt>hi</tt> stands for "hicolor", <tt>128</tt> for a resolution of 128x128 pixels, <tt>app</tt> for "applications", <tt>ktimetracker</tt> for the application's name and <tt>.png</tt> is the suffix for portable network graphic files.
* hi128-apps-ktimetracker.png will be installed e.g. to /usr/share/icons/hicolor/128x128/apps/ktimetracker.png. <tt>hi</tt> stands for "hicolor", <tt>128</tt> for a resolution of 128x128 pixels, <tt>apps</tt> for "applications", <tt>ktimetracker</tt> for the application's name and <tt>.png</tt> is the suffix for portable network graphic files.


= example application =
= example application =
Line 95: Line 112:
To compile, link and install the example application, do a
To compile, link and install the example application, do a
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cmake . && make && make install
mkdir build && cd build
cmake ../ && make && make install
</syntaxhighlight>
</syntaxhighlight>
To run it, call
To run it, call

Latest revision as of 22:47, 29 May 2019

Warning
This page needs a review and probably holds information that needs to be fixed.

Parts to be reviewed:

Port to KF5

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 using the software krep as an example. In case of a CMake-based project you will need to

How to use icons in QMake-based projects is discussed elsewhere.

Your KDE project

If you have a KDE project and want to use icons within it, and want these icons installed 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} )

Weitere Informationen:

How to test it

The easy way is to define a custom cmake install prefix where you can simply insall the project without touching your system. Use following commands to setup this:

cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/playground ../
make && make install

now the files should be deployed under

$HOME/playground/bin/krep
$HOME/playground/share/apps/krep
$HOME/playground/share/icons/hicolor/22x22/apps/krep.png

With this method you can easy see what you will get.

Note
You can still not see the icon in your application because $HOME/playground is not a know path by kde.

Normaly kde support a user defined space under $HOME/.kde.

Find out if this is supported with the command

kde4-config -path icon

finally you have to extend the search path for kde

export KDEDIRS=$KDEDIRS:$HOME/playground


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-apps-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, apps 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 - on top of the KAction example - 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

files

The example application consists of

just taken from the KAction example
Note the command
clearAction->setIcon(KIcon("tutorial-kicon"));
that sets the icon
just taken from the KAction example
This is a file that defines our icon in (almost natural) english language. It is a scalable vector graphic file. Before being used, it must be converted into a zipped scalable vector graphic named hisc-apps-tutorial-kicon.svgz, see below.
just taken from the KAction example
sorry for the name, but there are naming conventions. Create this file with the convert command from the ImageMagick package
convert world.svg hisc-apps-tutorial-kicon.svgz
Note the commands
kde4_install_icons(${ICON_INSTALL_DIR})
and
kde4_update_iconcache()
which integrate the icons.

build it

To compile, link and install the example application, do a

mkdir build && cd build
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:

 # [http://www.linuxintro.org/wiki/Strace#Search_for_a_syscall 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
 [...]

Moving On

Now you can move on to how to place your application in the K-Menu using .desktop files.