Bonjour,
Voici un tutoriel pour écrire un greffon graphique. Les greffons graphiques permettent de créer des nouvelles espèces graphiques.
Avant tout de chose, pour créer des greffons, il vous faut connaitre le langage Java ! De plus, il vous faut au minimum Linotte 0.6.1.
Deux grosses étapes pour créer un greffon :
a - Définir dans un fichier de description les caractéristique de votre espèce;
b - ensuite dans un fichier .java implémenter les méthodes pour générer l'affichage sur la toile.
Vous pouvez télécharger l'exemple complet en bas du message !
1 - Créer le fichier de description du greffon :
Exemple : graphique_bouton.greffon.xml
2 - Créer un classe héritant de org.linotte.greffons.externe.Graphique
Le source de cette classe est présente dans le répertoire greffons.
Exemple :
3 - zipper la classe compilée dans graphiqueBouton.zip
4 - Copier graphiqueBouton.zip et graphique_bouton.greffon.xml dans le répertoire greffons.
5 - Relancer Linotte.
Une ligne dans le tableau doit indiquer que le greffon est bien chargé :
6 - Tester !
Exemple de livre :
7 - Bravo, votre greffon fonctionne !
Et n'oubliez de venir sur ce forum pour partager vos créations !
FAQ :
1 - Pour compiler la classe Couleur, il faut ajouter dans le classpath Linotte.jar
Ronan
Voici un tutoriel pour écrire un greffon graphique. Les greffons graphiques permettent de créer des nouvelles espèces graphiques.
Avant tout de chose, pour créer des greffons, il vous faut connaitre le langage Java ! De plus, il vous faut au minimum Linotte 0.6.1.
Deux grosses étapes pour créer un greffon :
a - Définir dans un fichier de description les caractéristique de votre espèce;
b - ensuite dans un fichier .java implémenter les méthodes pour générer l'affichage sur la toile.
Vous pouvez télécharger l'exemple complet en bas du message !
1 - Créer le fichier de description du greffon :
Exemple : graphique_bouton.greffon.xml
Code:
<
?xml version="1.
0" encoding="UTF-8"?>
<
greffon nom="Bouton" espece="bouton" class="org.
linotte.
greffons.
impl.
Bouton">
<
lib>
graphiqueBouton.
zip<
/lib>
<
description>
Espèce graphique pour afficher un bouton simple<
/description>
<
auteur>
R.
M<
/auteur>
<
version>
0.
1<
/version>
<
attribut nom="bordure" type="BigDecimal">
0<
/attribut>
<
attribut nom="x" type="BigDecimal">
0<
/attribut>
<
attribut nom="y" type="BigDecimal">
0<
/attribut>
<
attribut nom="largeur" type="BigDecimal">
100<
/attribut>
<
attribut nom="hauteur" type="BigDecimal">
100<
/attribut>
<
attribut nom="transparence" type="BigDecimal">
100<
/attribut>
<
attribut nom="texte" type="String">
Hello !<
/attribut>
<
attribut nom="couleur_texte" type="String">
blanc<
/attribut>
<
attribut nom="couleur_bordure" type="String">
rouge<
/attribut>
<
attribut nom="couleur_bouton" type="String">
noir<
/attribut>
<
/greffon>
2 - Créer un classe héritant de org.linotte.greffons.externe.Graphique
Le source de cette classe est présente dans le répertoire greffons.
Exemple :
Code:
package org.
linotte.
greffons.
impl;
import java.
awt.
AlphaComposite;
import java.
awt.
Font;
import java.
awt.
Graphics2D;
import java.
awt.
Shape;
import java.
awt.
font.
FontRenderContext;
import java.
awt.
font.
TextLayout;
import java.
awt.
geom.
AffineTransform;
import java.
awt.
geom.
Rectangle2D;
import java.
math.
BigDecimal;
import org.
linotte.
frame.
latoile.
Couleur;
import org.
linotte.
greffons.
externe.
Graphique;
/**
* Exemple simple de greffon graphique pour afficher un bouton
* @author R.
M
*
*/
public class Bouton extends Graphique {
private Shape bouton;
public Bouton() {
}
@Override
public void forceAffichage(String attribut) {
// Rien à faire
}
@Override
public Shape getShape() {
return bouton;
}
@Override
public void modifier(String value, String attribute, String id) throws GreffonException {
// Rien à faire
}
@Override
public void projette(Graphics2D g2, Espece espece) throws GreffonException {
// Attention :
g2 peut être null dans le cas où Linotte doit calculer les collisions.
// Gestion de la transparence :
float transparence = ((BigDecimal) espece.
getAttribut("transparence").
getValeur()).
intValue() / 100f;
if (transparence >
1 || transparence <
0)
transparence = 1;
// Texte du bouton :
String texte = (String) espece.
getAttribut("texte").
getValeur();
// Dimensions :
int hauteur = ((BigDecimal) espece.
getAttribut("hauteur").
getValeur()).
intValue();
int largeur = ((BigDecimal) espece.
getAttribut("largeur").
getValeur()).
intValue();
// Position :
int x = ((BigDecimal) espece.
getAttribut("x").
getValeur()).
intValue();
int y = ((BigDecimal) espece.
getAttribut("y").
getValeur()).
intValue();
int b = ((BigDecimal) espece.
getAttribut("bordure").
getValeur()).
intValue();
// Couleur :
String couleur_texte = (String) espece.
getAttribut("couleur_texte").
getValeur();
String couleur_bordure = (String) espece.
getAttribut("couleur_bordure").
getValeur();
String couleur_bouton = (String) espece.
getAttribut("couleur_bouton").
getValeur();
// Construction des shapes :
Shape bordure = new Rectangle2D.
Double(x, y, largeur, hauteur);
bouton = new Rectangle2D.
Double(x + b, y + b, largeur - (2 * b), hauteur - (2 * b));
if (g2 != null) { // g2 peut-être vide
// la variable bouton est utilisée pour la gestion de collision
FontRenderContext context = g2.
getFontRenderContext();
Font font = new Font("Serif", Font.
BOLD, 15);
TextLayout text = new TextLayout(texte, font, context);
double dl = text.
getBounds().
getWidth();
AffineTransform rotator = new AffineTransform();
rotator.
translate(x + b + (largeur / 2) - (dl / 2) - 5, y + b + (hauteur / 2));
g2.
setComposite(AlphaComposite.
getInstance(AlphaComposite.
SRC_OVER, transparence));
g2.
setColor(Couleur.
retourneCouleur(couleur_bordure));
g2.
fill(bordure);
g2.
setColor(Couleur.
retourneCouleur(couleur_bouton));
g2.
fill(bouton);
g2.
setColor(Couleur.
retourneCouleur(couleur_texte));
g2.
fill(text.
getOutline(rotator));
}
}
}
3 - zipper la classe compilée dans graphiqueBouton.zip
4 - Copier graphiqueBouton.zip et graphique_bouton.greffon.xml dans le répertoire greffons.
5 - Relancer Linotte.
Une ligne dans le tableau doit indiquer que le greffon est bien chargé :
Code:
Greffon chargé :
Bouton ( version 0.
1 ).
Espèce graphique pour afficher un bouton simple.
Auteur :
R.
M"
6 - Tester !
Exemple de livre :
Code:
Livre :
Bouton simple
(Spécification :
0.
6.
1)
(Auteur :
R.
M)
Paragraphe :
Affichage !
Rôles :
b1 est un bouton, x vaut 200, y vaut 200, largeur vaut 90, hauteur vaut 40, bordure vaut 3, couleur_bordure vaut "gris", couleur_bouton vaut "noir", couleur_texte vaut "ambre jaune", texte vaut "Un bouton"
Actions :
efface la toile
projette b1
termine
7 - Bravo, votre greffon fonctionne !
Et n'oubliez de venir sur ce forum pour partager vos créations !
FAQ :
1 - Pour compiler la classe Couleur, il faut ajouter dans le classpath Linotte.jar
Ronan