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

Vorbereiten und Laden der Grafik

Inkscape eignet sich hervorragend, um die Vektorgrafik zu bearbeiten – werfen Sie einen Blick auf die Beispielgrafik. Dazu öffnen Sie die Datei television.svg mit Inkscape und betrachten Sie dann im eingebauten XML-Editor, den Sie über Bearbeiten | XML-Editor öffnen (Abbildung 3). Sie sehen, dass einige Elemente über lesbare id-Felder verfügen, die Sie später aus dem Code heraus ansprechen. Sie passen also existierende SVG-Dateien recht einfach an Ihre Bedürfnisse an, indem Sie die Elemente neu anordnen und dem id-Feld des betreffenden Elements einen sinnvollen Namen verpassen.

Abbildung 3

Abbildung 3: In Inkscape bearbeiten Sie Vektorgrafiken im SVG-Format weiter.

Drade.cpp unter der Lupe

Das Laden der SVG-Datei besorgt im Applet die Methode init() (Listing 2). Dank des Codes lädt Plasma die Vektorgrafik. Da Sie in der Datei CMakeLists.txt angegeben haben, dass diese in das Verzeichnis desktoptheme/default/widgets/ gehört, können Sie sie im Applet-Code über widgets/television wiederfinden und ansprechen. Wie der vordere Teil der Adresse aussieht, hängt vom voreingestellten Pfad der Umgebungsvariable $KDEHOME ab. Weil hinter television die Dateiendung fehlt, lädt Plasma auch komprimierte Vektorgrafiken (.svgz), ohne dass Sie das Applet neu übersetzen müssen.

// drade.cpp, Zeilen 76 bis 80
m_svg = new Plasma::Svg(this);
m_svg->setImagePath("widgets/television");
m_svg->setContainsMultipleImages(false);
m_svg->resize(contentsRect().size());

Im nächsten Schritt bestimmen Sie den Inhaltstyp ("ContentType") für das m_svg-Objekt. Dabei geben Sie zunächst an, dass es sich bei der Grafik um ein einzelnes Bild handelt und nicht um eine Reihe von Bildern (Listing 2, Zeile 4). Über den resize-Parameter (Zeile 5) passen Sie die Grafik der Größe des Inhaltes an.

Das rechenintensive Übersetzen der Vektorgrafik in eine Bitmapgrafik sollten Sie nicht über paintInterface() erledigen, sondern in der Methode init() und über die Funktion constraintsEvent() (Zeilen 93 bis 98 in drade.cpp). Letztere ruft Plasma auf, wenn sich die Größe des Applets ändert. Das passiert, wenn der Benutzer die Größe des Plasmoids über die Applet-Anfasser oder das Panel verändert. Rufen Sie resize() nicht auf, gerät die Grafik körnig oder ungenau.

Die Elemente in der SVG-Datei sprechen Sie mit den Zeilen aus Listing 3 an. Hier zeichnet Plasma ein Element – und damit alle unterliegenden Elemente – ins Applet. Dies geschieht innerhalb der Methode paintInterface(), die den Teil der Grafik in ein vorgegebenes Rechteck zeichnet. Dessen Größe hängt vom darin befindlichen Inhalt ab, was Sie in der Methode resize über contentsRect definiert haben. Um das Positionieren der SVG-Grafiken zu erleichtern, empfiehlt es sich, den darin enthaltenen Elementen gleich große Rechtecke zuzuweisen.

// drade.cpp, Zeilen 229 bis 233
if (m_svg->hasElement("Box")) {
    m_svg->paint(p, contentsRect, "Box");
        } else {
            kDebug() << "Box SVG element is not there. …";
        }
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...