Home / LinuxUser / 2008 / 10 / Fortgeschrittenes Basteln

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Eingedost
(161 Punkte bei 4 Stimmen)
Aufteiler
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Fortgeschrittenes Basteln

Plasmoiden für KDE 4 programmieren

In Bewegung

Plasma bietet dem Anwender im Idealfall ein organisches Benutzer-Interface an, auf dem sich Objekte so verhalten, wie der Benutzer es erwartet und wie sein Gehirn es aus der Natur kennt. Animationen sollen ihm dabei visuelle Hinweise geben, denn das menschliche Gehirn kommt mit kurzen Bewegungen besser klar, als mit abrupten Änderungen. Um die Benutzer nicht abzulenken, sollten sich Plasmoiden daher ruhig verhalten, solange sie nicht den Fokus besitzen.

Animationen in Plasma benutzen die Klasse Plasma::Animator. Diese stellt eine Zeitachse bereit, indem sie in bestimmten Abständen eine definierte Funktion aufruft und das Plasmoid neu zeichnet. Das Beispiel benutzt diese Phase, um den gezeichneten Bildschirm des Plasmoids zur Mitte hin zu verkleinern. Das erzeugt einen Ausschalteffekt, wie bei einem alten Fernseher. Genügt der Platz auf dem Desktop, blendet das Plasmoid zugleich den Namen des USB-Sticks weich ein.

Sobald ein Anwender einen USB-Stick einsteckt, startet das Applet über die Methode showScreen() die Animation, die in regelmäßigen Abständen die Methode animationUpdate() des Applets aufruft. Dabei speichert es die ID, um sie im weiteren Verlauf zu kontrollieren. (Listing 9)

// drade.cpp, Zeile 148
m_animId = Plasma::Animator::self()->customAnimation(40 / (1000 / m_animDuration), m_animDuration, Plasma::Animator::EaseInCurve, this, "animationUpdate");

Als Parameter übergeben Sie Plasma::Animator die Anzahl der Bilder, die Länge der Animation, die Kurvenform, das Empfänger-Widget für die Updates und die aufzurufende Methode. Die Zahl der Bilder errechnen Sie, indem Sie von 25 Bildern pro Sekunde ausgehen, was einem Bild pro 40 Millisekunden entspricht. Die Dauer der Animation wählen Sie zwischen 150 und 300 Millisekunden – länger andauernde Animationen empfinden Benutzer mitunter als störend. Als Kurvenform kommt die EaseInCurve zum Einsatz, die dafür sorgt, dass sich die Geschwindigkeit am Anfang schnell erhöht und danach langsam abbremst. Lineare Kurven wie LinearCurve fühlen sich häufig hölzern und statisch an.

Die Methode animationUpdate() bekommt dann wiederum eine Variable vom Typ Qreal namens progress mit auf den Weg (Listing 10), die verrät, wie weit die Animation fortgeschritten ist. Anhand der Boolschen Member-Variable m_fadeIn merkt sich Plasma, ob es die zu animierende Grafik gerade ein- oder ausblendet.

// drade.cpp, Zeilen 209 bis 220
void DrAde::animationUpdate(qreal progress)
{
    if (progress == 1) {
        m_animId = -1;
    }
    if (!m_fadeIn) {
        m_animProgress = 1 - progress;
    } else {
        m_animProgress = progress;
    }
    update();
}

Die Variable progress pendelt dabei immer zwischen 0 (am Anfang der Animation) und 1 (am Ende). Für den Ausblendeffekt invertieren Sie den Wert einfach, sodass er kleiner wird. Die Member-Variable m_animProgress speichert den Status der Animation im Plasmoid und sorgt dafür, dass Plasma es mit Unterstützung der Methode paintInterface() neu zeichnet (drade.cpp, Zeile 235), was dann so aussieht:

m_svg->paint(p, scaleRectF(m_animProgress, contentsRect), "Screen");

Durch diesen Aufruf zeichnet Plasma das SVG-Element Screen in der durch die Animation vorgegebenen Größe. Die Funktion scaleRectF() kommt dabei zur Hilfe: Sie rechnet Position und Größe innerhalb des Plasmoids aus. Verfügt das über eine bestimmte Mindestbreite, sorgt paintLabel() dafür, dass Plasma den Namen des USB-Sticks in einem Rechteck mit abgerundeten Ecken abbildet.

Geben Sie den Farben, mit denen Sie malen, einen bestimmten Alpha-Wert mit, blendet die Methode den Text im Takt mit der Animation des Screen-Elements weich ein. Der Wert hängt dabei vom Fortschritt der Animation ab. Die folgenden zwei Zeilen (drade.cpp, Zeile 262 und 263) erledigen dies:

boxColor.setAlphaF(0.3*m_animProgress);
textColor.setAlphaF(0.8*m_animProgress);

Damit ist "Dr. Ade" nun fertig. Es fehlt noch ein letzter Schritt: Sie müssen das Applet kompilieren und so in die KDE-Trunk-Version einbinden.

Dr. Ade aktivieren

Melden Sie sich über sux - kde-devel als KDE-Entwicklungshelfer an. Wechseln Sie in das Verzeichnis /home/kde-devel/KDE/kdeplasma-addons/applets und legen Sie ein neues Verzeichnis namens drade an. Kopieren Sie sämtliche Dateien von der LinuxUser-DVD, die zu "Dr. Ade" gehören, in den neuen Ordner. Wechseln Sie ins übergeordnete Verzeichnis, öffnen Sie die Datei CMakeLists.txt mit einem Texteditor und ergänzen Sie die Zeile add_subdirectory(drade). Nach dem Speichern der Datei übersetzen Sie aus dem Verzeichnis applets heraus das Plasmoid über den Befehl cmakekde. Im Drade-Verzeichnis sollte nun ein Makefile erscheinen, das Sie mit make und make install installieren. Nach einem Neustart von KDE steht Ihnen "Dr. Ade" zu Diensten.

[1] Über Plasma: Sebastian Kügler, "Plasmische Chirurgie", LinuxUser 09/2008, S. 82, http://www.linux-user.de/ausgabe/2008/09/082/

[2] Entwicklungsumgebung für KDE 4 einrichten: Kristian Kißling, "Bleeding Edge", LinuxUser 09/2008, S. 86, http://www.linux-user.de/ausgabe/2008/09/086/

[3] Mailingliste der KDE-Anwendungsentwickler: https://mail.kde.org/mailman/listinfo/kde-devel

[4] Quellcode für "Dr. Ade": http://www.linux-user.de/Downloads/2008/10/

Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 110 Punkte (8 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...