• Vastliggende pagina
  • Info
  • Bijlages

In Aanbouw: Dit artikel is nog in aanbouw. Meer info...

Het schrijven van een compiz plug-in

door: Sam Spilsbury (smspillaz)

Over Sam Spilsbury

Sam Spilsbury is beheerder van de Compiz 0.9 series, dat wil zeggen de versie van compiz die zal worden gebruikt in Ubuntu 10.04 en Unity en andere binnenkort verschijnende distributies.

Inleiding

Voordat we beginnen wil ik u nog een aantal pagina's aanbevelen die u kunt gebruiken bij de cursus:De De architectuur van compiz: http://smspillaz.ucc.asn.au/unity/compiz_arch/compiz_arch.pdf Een half afgemaakte handleiding voor het schrijven van compiz: http://smspillaz.ucc.asn.au/unity/compiz_arch/writing.odt We beginnen met een snelle introductie hoe compiz werkt en wat de functie van compiz is, als tweede gaan we bezig met het verkrijgen en compileren van de ontwikkeling versie van compiz, of het verkrijgen ervan uit de pakketbronnen uit Ubuntu. Vervolgens doorlopen we de basisstructuur van een toevoeging en een aantal algemene gebruikte functie's in Compiz toevoegingen.

De functie en werking van Compiz

In navolging van de compiz wiki is compiz eigenlijk een "Composoting Window Manager". In X land, wat betekent dat het de vensters beheerd worden en het vormgeven van deze vensters door deze toepassing gebeurt. Deze technologie kwam, toen Xcomposite uitkwam in 2005. Dat betekent dat op het gebied van mogelijkheden van de compiz plugins, je schermen rechtstreeks kan beheren, beheren hoe ze worden vormgegeven, en hoe het totaalplaatje eruit ziet. Daardoor is er veel mogelijk om compiz te laten doen wat jij wilt.

Creëren van een ontwikkelingsomgeving voor Compiz

Gelukkig maakt Ubuntu ons dit heel gemakkelijk, het enige wat gedaan moet worden is het installeren van de volgende pakketten:

  • compiz-dev
  • compiz-plugins-main-dev

Deze cursus gaat over compiz in Ubuntu 11.04 voor het installeren van de ontwikkelingsomgeving en voor ontwikkeling op een Ubuntu 10.10 systeem dient een ander pakket geïnstalleerd te worden. Namelijk compiz-fusion-plugins-main. Als men verder wil gaan met het ontwikkelen, is het handig om een aparte versie van compiz te verkrijgen. Gelukkig is dat relatief eenvoudig omdat hier scripts voor zijn, zoals deze: http://git.compiz.org/~soreau/scripts/. Clone de git-bron aldaar en met het script, en je hebt meteen een compleet werkende installatie, afkomstig vanuit de broncode. Dit zorgt ervoor dat je de broncode van andere toevoegingen gemakkelijk kunt lezen, van toevoegingen die bijvoorbeeld gedeeltelijk hetzelfde doen als wat u wilt.

De basisstructuur van een compiz toevoeging

Compiz toevoegingen zijn geschreven in C++. We hoeven niet de meest uitgebreide opties van C++ of van externe bibliotheken te gebruiken, als je de beginselen kent ben je al een heel eind. We gebruiken enkel een klein gedeelte van Boost, glib, het recentere Cmake en sigc. Cmake wordt naast automake ook gebruikt voor het bouwen van de applicatie. Hier volgt een vraag van een deelnemer aan de live cursus: VRAAG: Is het mogelijk om het de code lokaal op te bouwen en hierbij gebruik te maken van Ubuntu pakketten en pbuilder of iets wat daar op lijkt? ANTWOORD: Ja, dat kan, door het binnenhalen van de volgende bazaar branch: lp:compiz, echter dit is de broncode van compiz-core. Daarnaast weet ik niet hoe het lokaal gebouwd en geïnstalleerd moet worden. (plus dat het ingewikkeld is om gedeelten toe te voegen omdat de gehele broncode dan opnieuw moet worden gecompileerd en gebouwd door middel van bzr bd). Ik stel voor dat we vasthouden aan de algemene broncode.

Schrijven van de plug-in

Nogmaals, de basiskennis die je nodig hebt is C++, boost of Cmake. Onthoudt dat OpenGL niet een strikte vereiste is, dit omdat er vele algemeen gebruikte grafische mogelijkheden toegevoegd zijn aan de API van compiz. Echter als je echt veel effecten wilt creëren is OpenGL een aanrader.

Aanmaken van een plug-in project

Stel u wilt een plug-in aanmaken met de naam “moveleft” welke, elke keer dat er een venster geopend is, het alle andere vensters naar links beweegt. De mappenstructuur is als volgt: - -> src ---> moveleft.cpp ---> moveleft.h –> moveleft.xml.in –> CmakeLists.txt

Uitleg mappenstructuur

Eigenlijk zijn de .cpp en .h bestanden de uitvoering van uw plug-in, bijvoorbeeld de laadbare object code. De .xml.in beschrijft de informatie over jouw plug-in voor CCSM en ook haar opties. CmakeLists.txt is het bouwsysteem.

Bouwsysteem voor de plug-ins

Gelukkig is het bouwsysteem voor compiz plug-ins heel gemakkelijk het enige wat u moet doen is de volgende drie regels in CmakeLists.txt zetten: find_package (Compiz REQUIRED) include (CompizPlugin) compiz_plugin (moveleft PLUGINDEPS foo bar PKGDEPS baz) Wat doet elke regel? De eerste regel zoekt naar compiz door middel van pkgconfig. De tweede maakt een nieuw plug-in project aan in Cmake met de naam “moveleft”. De derde en laatste regel maakt een nieuw plug-in project aan door middel van Cmake met de naam “moveleft” afhankelijk van de andere plug-ins “foo”, “bar” en de het externe pakket “baz”. Omdat de naam “moveleft” is, moet men die verkorte naam vasthouden tijdens het programmeren. Bijvoorbeeld de .xml.in moet ook “moveleft” genoemd worden; “moveleft.xml.in”. Hoewel er met die naam niet rekening hoeft te worden gehouden in de src/ map. Wat ook interessant is, is dat je plug-in kan baseren op andere plug-ins. Compiz 0.9 is gemaakt met het in gedachte houden van de inter-plugin afhankelijkheid zodat de code van bestaande plug-ins kan worden gebruikt door nieuwe plug-ins. Een algemeen voorbeeld is dat OpenGL en samengestelde stukken van compiz zijn in feite allemaal plug-ins. Dus de meeste plug-ins die toegang tot deze functionaliteit willen krijgen, beschrijven dit in hun PLUGINDEPS. Metabestand Dit is in de hiervoor gegeven links meer gedetailleerd uitgelegd. U moet hier ook uw plug-in naam definiëren: <compiz> <plugin name=“myname” useBcop=“true”> Het gebruiken van useBcop is cruciaal als u van automatisch gegenereerde code houdt.

community/mwanzo/Workshop/UDW/2011/Februari-Maart/SchrijvenCompizPlug-in (laatst bewerkt op 2011-03-04 08:50:47 door rachidbm)