Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: lxgui - "Lua and Xml Graphical User Interface"  (Lu 30089 fois)

0 Membres et 2 Invités sur ce sujet

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #30 le: Juillet 31, 2012, 10:42:27 am »
Et on ne devrait pas discuter de ça dans le topic qui concerne ton projet lxgui, là on est en train de le polluer. Si tu veux aller plus loin dans la discussion concernant la localisation des touches, tu peux ouvrir une nouvelle discussion.
Laurent Gomila - SFML developer

Canadadry

  • Hero Member
  • *****
  • Messages: 1081
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #31 le: Juillet 31, 2012, 11:15:23 am »
Salut,
   J'aime beaucoup ton projet, t'as fait du super boulot. J'ai le même genre de projet en tête et je me demandais si tu avais considéré l'utilisation du JSON à la place de l'xml qui est très verbeux. (cf QML qui est très proche de tout ça) ça donne un code plus claire et plus lisible.
   Je suis aussi d'accord avec Laurent pour la localisation je sais que je n'aurai pas envie de m’embêter avec ça

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #32 le: Juillet 31, 2012, 05:15:55 pm »
Et on ne devrait pas discuter de ça dans le topic qui concerne ton projet lxgui, là on est en train de le polluer. Si tu veux aller plus loin dans la discussion concernant la localisation des touches, tu peux ouvrir une nouvelle discussion.
Houla oui, tu as raison. J'ouvre un topic là pour poursuivre la discussion : click.

Salut,
   J'aime beaucoup ton projet, t'as fait du super boulot. J'ai le même genre de projet en tête et je me demandais si tu avais considéré l'utilisation du JSON à la place de l'xml qui est très verbeux. (cf QML qui est très proche de tout ça) ça donne un code plus claire et plus lisible.
Salut et merci beaucoup ! Pour le JSON non, pas du tout. À vrai dire je ne connaissais que de nom avant que tu en parles. C'est effectivement moins verbeux, et d'après ce que j'ai pu lire ça a l'air d'être possible de l'utiliser pour remplacer le XML. La seule chose qui peut éventuellement manquer (on peut faire sans mais c'est plus dur) c'est la notion d'héritage. Dans mon validateur d'XML, je peux dire qu'un type de block (exemple : Frame) hérite d'un autre type de block (exemple : UIObject). Il récupère alors toutes les définitions d'attributs et de blocs enfants de son parent. Ensuite, à tous les endroits du fichier XML où l'on dit qu'on attend un bloc UIObject, on peut mettre un bloc Frame à la place.

Je suis aussi d'accord avec Laurent pour la localisation je sais que je n'aurai pas envie de m’embêter avec ça
Je ne sais pas si tu as lu les posts précédents, mais je me suis déjà débarrassé du système de localisation manuel. J'utilise maintenant l'événement TextEntered de la SFML qui fait tout à ma place. Reste ce petit problème avec une éventuelle fonction getKeyName() dont on parle un peu plus haut...
« Modifié: Juillet 31, 2012, 05:21:59 pm par Kalith »
Kal.

Canadadry

  • Hero Member
  • *****
  • Messages: 1081
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #33 le: Août 01, 2012, 09:40:08 am »
Excuse moi je parlais de l'encodage des fichiers. ^^

Qt propose une solution assez performante pour la notion d'héritage dans le JSON. Tu créer un fichier qui définit un objet genre une frame et tu peux t'en servir comme un nouvel objet natif exemple. Ce nouvel objet sera une frame étendu. Et au final ça marche comme ton héritage. Pour plus d'info je te laisse regarder un mini tuto d'intro à QML http://qt-project.org/doc/qt-4.8/qml-tutorial1.html

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #34 le: Janvier 01, 2013, 11:45:05 pm »
Un rapide message pour vous présenter la version 1.1.0.

Cette nouvelle version contient en grande majorité des correctifs, quelques améliorations sur la qualité du code et/ou les performances (rien de folichon), mais elle a l'inconvénient d'avoir une API légèrement différente de celle de la version 1.0.0. Autrement dit : il faudra faire quelques ajustements mineurs sur votre code pour utiliser cette nouvelle version. En particulier, la classe gui::locale (qui s'occupait surtout de traduire les touches du clavier pour différents arrangements comme AZERTY ou QWERTY) a disparu, le travail étant maintenant délégué à la SFML. Cet petit changement induit une modification de l'initialisation du GUI, voici donc l'exemple modifié pour la 1.1.0 :
// On créé une fenêtre SFML
sf::Window mWindow(...);

// On créé un gestionnaire d'input (clavier, souris, ...)
utils::refptr<input::handler_impl> pSFMLHandler(new input::sfml_handler(mWindow));

// On initialise la classe principale gui::manager
gui::manager mManager(
    // On lui donne un gestionnaire d'input
    pSFMLHandler,
    // La langue qui sera utilisée par l'interface (purement informatif : c'est aux addons de se traduire eux-même en utilisant cette valeur)
    "frFR",
    // Les dimensions de la fenêtre de rendu
    mWindow.getSize().x, mWindow.getSize().y,
    // L'implémentation OpenGL du rendu
    utils::refptr<gui::manager_impl>(new gui::gl::manager())
);

// On lit ensuite les fichiers XML et Lua :
//  - d'abord en précisant le dossier dans lequel se trouve le GUI
mManager.add_addon_directory("interface");
//  - puis on créé un contexte Lua
mManager.create_lua([&mManager](){
    // Ce code peut être appelé plus tard, par exemple quand l'utilisateur
    // demande à recharger le GUI (le contexte lua est alors détruit, puis re-créé).
    //  - on spécifie les classes que l'on veut utiliser
    mManager.register_region_type<gui::texture>("Texture");
    mManager.register_region_type<gui::font_string>("FontString");
    mManager.register_frame_type<gui::button>("Button");
    mManager.register_frame_type<gui::slider>("Slider");
    mManager.register_frame_type<gui::edit_box>("EditBox");
    mManager.register_frame_type<gui::scroll_frame>("ScrollFrame");
    mManager.register_frame_type<gui::status_bar>("StatusBar");
    //  - on référence dans Lua des fonctions C++ si nécessaire
    // ...
});

//  - puis enfin on charge le tout.
mManager.read_files();

// Dans la boucle principale
while (bRunning)
{
    // On récupère les événements de la fenêtre
    sf::Event mEvent;
    while (mWindow.pollEvent(mEvent))
    {
        // ...

        // On transmet ces événements au gestionnaire d'input
        pSFMLHandler->on_sfml_event(mEvent);
    }

    // ...

    // On met à jour le GUI
    mManager.update(fDeltaTime);

    // ...

    // Puis on l'affiche à l'écran
    mManager.render_ui();

    // ...
}

Mis à part ce changement, tout fonctionne de la même façon.
Au menu des nouveautés, on notera en particulier :
  • l'ajout de scripts CMake pour la compilation (facilite grandement l'installation sous linux)
  • la mise à jour du gestionnaire d'input SFML pour coller aux derniers snapshots de la RC
  • l'ajout d'un gestionnaire d'input pour GLFW (une bibliothèque de gestion de fenêtre pour OpenGL)
  • il est maintenant possible d'utiliser des std::functions (ou des foncteurs, ou des lambdas) pour définir un "script".
Exemple simpliste qui imite bêtement les scripts Lua du premier post :
float update_time = 0.5f, timer = 1.0f;
int frames = 0;

pFrame->define_script("OnUpdate",
    [&](gui::frame* self, gui::event* event) {
        float delta = event->get(0)->get<float>();
        timer += delta;
        ++frames;

        if (timer > update_time) {
            gui::layered_region* reg = self->get_region("FPSCounterText");
            gui::font_string* text = dynamic_cast<gui::font_string*>(reg);

            text->set_text("FPS : "+utils::to_string(floor(frames/timer)));
           
            timer = 0.0f;
            frames = 0;
        }
    }
);
C'est un peu moins agréable à utiliser que le code Lua, moins flexible aussi puisqu'il faut re-compiler le programme pour modifier le script, mais ça sera toujours plus rapide et plus rigoureux (impossible par exemple d'appeler une méthode qui n'existe pas). L'avantage des std::functions, c'est qu'on peut vraiment mettre ce qu'on veut. Si à la place du code ci-dessous, vous voulez que l'événement "OnUpdate" appelle une certaine fonction my_on_update_function(), alors il suffit d'écrire :
pFrame->define_script("OnUpdate", &my_on_update_function, "main.cpp", 255);
... si cette fonction a le bon prototype (c'est à dire qu'elle attend un pointeur vers une gui::frame (l'objet qui émet l'événement) et un pointeur vers un gui::event (qui contient les informations additionnelles liées à l'événement)).

Pour des informations plus détaillées, je vous invite à lire le changelog.
« Modifié: Janvier 01, 2013, 11:55:25 pm par Kalith »
Kal.

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #35 le: Janvier 05, 2013, 02:59:37 pm »
Je viens également de mettre en ligne une version pré-compilée du programme de démo fourni avec la bibliothèque (celui qui a été utilisé pour le screenshot du premier post). Vous pouvez le télécharger [ici], j'espère seulement qu'il ne manque aucune DLL.

Edit : la version 1.2.0 est sortie, avec au programme le support de MSVC 2010 pour la compilation sous Windows. J'ai aussi ajouté des fonctions raccourcis pour faciliter l'écriture du code en C++, ainsi que quelques fonctionnalités supplémentaires comme les couleurs au format HTML ("#RRGGBBAA") ou le filtrage des textures (aucun filtre, ou filtre linéaire). Les fichiers sont disponible sur sourceforge.net comme toujours.
« Modifié: Janvier 07, 2013, 01:49:56 am par Kalith »
Kal.

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #36 le: Janvier 20, 2013, 09:52:41 am »
Bonjour :)

J'ai voulu compiler le code de ton interface et j'ai des erreurs à la compilation du genre "nullptr", par exemple, qui n'est pas déclaré. Y a-t-il une dépendance que j'aurais oublié ? J'ai installé la librairie pour Lua donc ça ne vient pas de là.
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #37 le: Janvier 20, 2013, 10:45:12 am »
Si nullptr est requis, il faut très certainement un compilateur C++11.
Laurent Gomila - SFML developer

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #38 le: Janvier 20, 2013, 02:05:17 pm »
Exact. Minimum gcc 4.6 (avec -std=c++0x), ou visual studio 2010. Quel compilateur utilises-tu?
Kal.

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #39 le: Janvier 20, 2013, 02:35:37 pm »
J'ai résolu le problème en installant un MinGW à jour. J'utilise Code::blocks sur Windows avec GCC 4.4.1. J'ai cherché sur internet, mais comme d'habitude je n'ai pas trouvé de sources claires pour savoir comment gérer c++11. Par exemple, où dois-je écrire -std=c++0x ?

Par contre, il me dit maintenant que to_string est ambiguë.
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #40 le: Janvier 20, 2013, 04:17:35 pm »
J'ai résolu le problème en installant un MinGW à jour. J'utilise Code::blocks sur Windows avec GCC 4.4.1. J'ai cherché sur internet, mais comme d'habitude je n'ai pas trouvé de sources claires pour savoir comment gérer c++11. Par exemple, où dois-je écrire -std=c++0x ?

Par contre, il me dit maintenant que to_string est ambiguë.

Si tu utilises code::blocks, il suffit d'aller dans les options de compilations et il y a une petite checkbox à cocher pour c++0x.
Sinon il faut aller (toujours dans les options de compilation) voir du coté d'un onglet qui te permet d'ajouter tes propres options, et ajouter -std=c++0x ou -std=c++11 a la mano

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #41 le: Janvier 20, 2013, 08:58:24 pm »
Par exemple, où dois-je écrire -std=c++0x ?
Si tu utilises les projets C::B qui sont fournis avec le code source, tu n'as rien besoin de changer, ça doit compiler tout seul. Par contre si tu comptes utiliser cette bibliothèque dans un de tes projets, il faudra activer le c++11, comme l'a décrit Lo-X juste au dessus (Project -> Build options -> Compiler settings -> Compiler flags -> Have g++ follow the coming C++0x ISO C++ language standard [-std=c++0x]).

Par contre, il me dit maintenant que to_string est ambiguë.
À quel endroit du code précisément (fichier + ligne), quel est le message d'erreur exact, et quelle version de gcc as-tu installé ?
Kal.

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #42 le: Janvier 21, 2013, 07:07:38 pm »
J'ai GCC 4.4.1, donc je vais le mettre à jour pour l'avoir au moins à 4.6 comme tu l'a indiqué.

Par contre, j'ai ouvert le projet gui.workspace dans le répertoire gui pour compiler tout ça et en sélectionnant bien le Workspace. J'ai étais voir dans Project -> Build options -> Compiler settings -> Compiler flags et la case Have g++ follow the coming C++0x ISO C++ language standard [-std=c++0x] n'était pas coché alors que je suis bien dans ton projet. Est-ce à cause de ma version de gcc qui n'est pas à jour, je ne sais pas. En tout cas, je l'ai coché du coup, mais les mêmes erreurs étaient toujours là.
Je vais aussi vérifier que ma version de SFML 2 ne doit pas être changé, il me donne des erreurs sur ça aussi et j'avais installé une version pre-sortie.
Si ça n'arrange pas les erreurs, je te dirais le fichier et la ligne :)
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Kalith

  • Jr. Member
  • **
  • Messages: 93
    • Voir le profil
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #43 le: Janvier 21, 2013, 07:48:17 pm »
L'option est sélectionnée dans les cibles qui utilisent explicitement GCC (c'est à dire : "Release_Win32", "Release_Linux", etc.), mais pas dans les options générales car j'ai aussi des cibles pour Visual C++ (qui lui ne comprend pas "-std=c++0x"). Je pense que mettre à jour ton compilateur à la version 4.6 (voir 4.7 si tu peux, ça ne coûte rien !) règlera une bonne partie des problèmes.

Quant à la SFML, je me base sur des snapshots récents de la version de développement (vieux de moins de deux mois, je dirais). Si tu as des erreurs, ça doit être au niveau du noms de certaines touches du clavier qui ont été légèrement modifiés à un moment.
Kal.

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : lxgui - "Lua and Xml Graphical User Interface"
« Réponse #44 le: Janvier 24, 2013, 05:35:59 am »
Bon, j'ai installé la dernière version de code::blocks qui du coup a mis à jour gcc. J'ai ensuite installé d'une façon plus propre (oui je m'y prenais mal avant) les librairies comme SFML 2.0, etc...

Je rencontre un problème pour installer FreeType. Je ne trouve que la librairie pour du Win32, sauf que je suis en 64 bits, donc le programme sensé faciliter l'installation m'envoie balader. J'ai eu pareil avec zlib, mais j'ai trouvé une version pré-compilé pour Win64 sur le net. Donc, je pourrais bien me lancer dans une compilation de la lib si seulement je savais comment faire ça sans passer par le petit programme intitulé "vms-make.com" (si c'est bien ce truc là qu'il faut lancer). A part ça, il me reste encore lpng à télécharger et installer.

Autre chose, pour zlib, le fichier dans le répertoire lib s'appelle zlib et dans ton projet tu l'as appelé z, du coup mon compilo a râler lol J'ai donc changé z par zlib, c'est bien ce qu'il fallait faire ?

Il faut installer beaucoup de choses, c'est un peu dommage je trouve :s

EDIT: C'est pareil avec lpng, erf !
« Modifié: Janvier 24, 2013, 05:42:33 am par Timidouveg »
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?