C : Science et éducation : EZ-Draw 1.2 est sorti

Posté par . Édité par Davy Defaud, Nÿco et ZeroHeure. Modéré par Pierre Jarillon. Licence CC by-sa
Tags :
30
19
avr.
2014
C et C++

Pour qui veut apprendre à réaliser une interface graphique, il y a un très grand choix de langages et de bibliothèques graphiques. Dans le cas particulier du langage C (ou C++), les bibliothèques graphiques communément utilisées (GTK+, Qt, etc.) sont très complètes, mais nécessitent un important effort d’apprentissage ; pour tout dire, elles ne sont clairement pas adaptées pour le débutant ou l’autodidacte. C’est pour cette raison que je développe EZ-Draw depuis maintenant six ans, et j’ai le plaisir de vous annoncer la sortie de la nouvelle version 1.2.

EZ-Draw (Easy Draw) est une petite boîte à outil graphique pour le langage C, fonctionnant à la fois sous GNU/Linux, Mac OS X et Windows (toutes versions).

EZ-Draw est conçu pour l’apprentissage de la programmation événementielle et des interfaces graphiques. Il permet de créer de façon très simple des fenêtres, y dessiner, réagir à la souris et au clavier, faire des animations.

Au menu des nouveautés :

  • lecture et affichage des images aux formats PNG, JPEG, GIF et BMP ;
  • nouvelle documentation récrite avec Sphinx ;
  • traduction de tout le projet en anglais, et documentation bilingue ;
  • nouveaux jeux : Doodle in London, 2048 / 2584, Bubblet.

Le logiciel est sous licence LGPL ; il est utilisé en particulier dans la Licence d’informatique de l’Université d’Aix‐Marseille, dans des projets d’algorithmique ou des projets de jeux en 2D (souvent inspirés des jeux sur smartphones).

  • # Forums en anglais

    Posté par . Évalué à 1.

    J'aimerais faire connaître EZ-Draw sur des forums en langue anglaise, maintenant que la doc est bilingue ; quels forums pourriez-vous me conseiller ?

    • [^] # Re: Forums en anglais

      Posté par . Évalué à 4. Dernière modification le 19/04/14 à 13:30.

      Tu pourrais empaqueter la bibliothèque et les jeux pour quelques distributions très utilisées. Certes c'est moins fun que le développement mais y'a que comme ça que les gens vont utiliser. Une fois que c'est dans une distro, tu peux lancer un topic sur les forums de la distribution.

      • [^] # Re: Forums en anglais

        Posté par . Évalué à 2.

        Ce n'est pas vraiment l'esprit, qui est plutôt "tout en 1 fichier" et "compilez vous-même" …

        • [^] # Re: Forums en anglais

          Posté par . Évalué à 7. Dernière modification le 19/04/14 à 15:22.

          Il y a plein d'autres projets comme ça, je cite juste ceux que j'utilise :

          • tinyxml2, parseur XML qui tient en un seul fichier C++
          • le langage lua, dont l'implémentation est prévue pour être intégrée à un programme C. (La documentation officielle explique même quels fichiers modifier.)
          • la bibliothèque TCLAP d'analyse de ligne de commande pour C++, entièrement écrite en fonctions inline dans des fichiers d'en-tête. (Donc la distribution n'a rien à compiler.)

          À mon avis la notion de distribution est différente, sans être incompatible, avec la démarche de développement dont tu parles. Il y a des paquets qui ne sont jamais compilés mais qui sont utiles (timezone-data), des paquets qui ne contiennent que des scripts shell et qui sont donc non compilables (mon gestionnaire de paquets me donne les noms de mktwpol, mediacrush-cli, guilt, bashmount, split2flac) et que tu pourrais aussi bien les télécharger dans /usr/local/bin. Je citais aussi l'exemple de TCLAP entièrement écrit en header C++.

          Eh bien ces logiciels sont empaquetés dans les distribution. Cela apporte des facilité pour les utilisateurs :

          • #include et ça marche, vu que tout est déjà dans /usr/include et /usr/lib
          • les corrections de bug de l'auteur originel sans avoir à m'en préoccuper (c'est ma distribution met à jour ces paquets).
          • pas besoin de distribuer du code externe dans les sources de mon projet. Aussi, le script de compilation de mon projet est plus clair.

          Je suis utilisateur gentoo. Toute une part du travail des développeurs de gentoo est de débusquer les bibliothèques imbriquées (bundled/embedded library) et les retirer des sources, pour que les paquets utilisent toujours la version de la distribution. Par exemple un développeur gentoo critiquait Blender, dont les sources incluait une bibliothèque externe (libmv) qui elle-même incluait d'autres bibliothèques externes (glog, gflags, ldl). Une en particulier (eltopo) n'avait pas de makefile, pas de licence, ne compilait pas avec gcc 4.7 (ou plutôt les dévs de Blender n'avaient pas pris la peine de copier le fichier de licence et ils compilent avec un gcc ancien). Désormais, gentoo expose ces bibliothèques pour tous les utilisateurs. Tous les projets (pas seulement Blender) peuvent les utiliser et elles sont mises à jour régulièrement (donc même pour Blender, au lieu d'utiliser sa vieille version moisie/bugguée incluse dans les sources officielles).

          • [^] # Re: Forums en anglais

            Posté par . Évalué à 1.

            Je vise aussi les apprentis programmeurs sur Mac OS X (il faudrait faire un .dmg) et ceux qui utilisent windows (il faudrait un installeur qui installe aussi MinGW .. ouf). Ça ferait une grosse usine à gaz pour pas grand chose : je ne cherche pas à concurrencer SDL (qui est très bien - d'ailleurs si un jour j'ai le temps, je porterai EZ-Draw sur SDL ce qui permettra aussi de fonctionner sur Android). Comme de toutes façon le but est d'écrire un fichier C et de le compiler, autant le faire de suite.

            Pour la mise à jour il faut voir le contexte : dans les salles de TP on n'a pas toujours la possibilité de demander telle version ou telle mise à jour aux sysadmins (il y a 3 campus gérés différemment et une bonne vingtaine de salles) et à l'usage c'est très pratique pour les étudiants de n'avoir qu'un tarball à télécharger et à installer en local - d'ailleurs le Makefile est réglé pour fonctionner de base sous Debian/Ubuntu/Fedora et sous Windows, il y a juste un petit réglage pour Mac OS X (ils modifient les chemins à chaque version, c'est pénible) et sous Cygwin (mystérieusement il faut -std=gnu99). J'aurais pu rendre le Makefile entièrement automatique mais il était déjà assez compliqué comme ça (les étudiants doivent pouvoir se l'approprier - surtout les débutants).

            Bon évidemment si quelqu'un me propose un script qui me transforme le tarball en .deb, .rpm, .dmg ou quoique ce soit, ça m'intéresse et je mettrai un lien !

            • [^] # Re: Forums en anglais

              Posté par . Évalué à 3. Dernière modification le 19/04/14 à 17:54.

              Je vise aussi les apprentis programmeurs sur Mac OS X (il faudrait faire un .dmg) et ceux qui utilisent windows

              Il n'y a aucune contradiction entre les approches. Les développeurs pour linux sont habitués à installer ce qui est dans leur gestionnaire de paquets, ça serait donc sympa que tu leur fasses un paquet. Pour les autres OS qui n'ont pas de système de paquets ou pour les linuxiens qui préfèrent ta méthode, rien ne leur interdit d'intégrer tes fichiers directement dans leur projet et d'utiliser le Makefile que tu fournis.

              (il faudrait un installeur qui installe aussi MinGW .. ouf).

              Je ne comprends pas pourquoi. Si c'est pour Windows tu fournis les .h et des .dll que tu as compilés chez toi avec ta chaine de compilation préférée (sous Windows avec le compilateur de ton choix, p.ex. MinGW ou MSVC, ou en compilation croisée depuis ta machine linux personnelle).

              Tu as posé la question de la publicité à donner à ton projet. Ma réponse c'est que pour les projets libres (et linuxiens en particulier) ça revient à avoir un dépôt source sur une forge connue, faire un paquet pour les principales distributions, et se débrouiller pour faire inclure le paquet dans les dépôts précompilés des distributions.

              Ce ne serait probablement pas si difficile pour ta bibliothèque d'être admis dans les distributions, puisque tu en proposes une application concrète (un ensemble de jeux).

              Ensuite c'est la classe tu peux dire que ton logiciel a été retenu dans Debian/Fedora/…

              Bon évidemment si quelqu'un me propose un script qui me transforme le tarball en .deb, .rpm, .dmg ou quoique ce soit,

              cmake fait ça (il peut aussi produire un installeur graphique pour Windows), mais ce serait un gros morceau pour un cours à des débutants. Mais rien ne t'oblige à produire des paquets pour un tas de systèmes. Commence par la distribution que tu utilises. Si par exemple tu es utilisateur de Debian, tu lis le Guide du mainteneur Debian, tu apprends donc à faire un paquet .deb tout propre, ensuite tu demandes à l'inclure dans la distribution et tu en deviens mainteneur. Tu réponds donc aux rapports de bug qui seraient soumis sur le site de la distribution. Mais tu n'as rien de particulier à faire pour d'autres distributions si ça ne t'intéresse pas) ; si ton logiciel a du succès, les autres distributions l'intègreront de leur propre initiative.

  • # Pour jouer des sons

    Posté par . Évalué à 2.

    La prochaine étape de développement est ez-sound.c, un module qui jouerait des sons sur Linux/MacOSX/Windows. Est-ce que vous connaissez des programmes simples qui font cela ? Pour la partie chargement d'image je me suis appuyé sur stb_image.c et il existe peut-être des choses de ce genre pour les sons ? Je cherche juste à pouvoir faire quelques bruitages pour les jeux (fichiers wav), même un son à la fois sans mixage serait bien.

  • # SDL? SFML?

    Posté par (page perso) . Évalué à 3.

    J'ai l'impression que ez-draw est proche des API utilisées pour les jeux. Est-ce le cas?

    http://devnewton.bci.im

    • [^] # Re: SDL? SFML?

      Posté par . Évalué à 2.

      Oui c'est le cas, mais en plus simple ; par exemple il y a un certain nombre de fonctions pour manipuler les images (rotations, zoom, etc) bien pratiques. Le but est ensuite de pouvoir (ou d'avoir envie de) passer à des toolbox "pro" comme SDL ou SFML en ayant compris quelques concepts de base, sans être perdu.

      Il n'y a pas de widgets, c'est volontaire aussi : d'une part il existe déjà de nombreux toolkits qui font ça (j'en avait fait un il y a quelques années : Helium), et d'autre part ça incite les étudiants à coder eux-même ; ainsi j'ai vu des étudiants faire spontanément des boutons, ascenseurs, etc, et ça leur plaît plus que de prendre un truc tout fait.

  • # Mauvaise description

    Posté par . Évalué à 4.

    les toolkits communément utilisés (GTK+, Qt, etc) sont très complets mais nécessitent un important effort d'apprentissage.

    Surtout si le but est de dessiner dans une fenêtre et non pas d'utiliser des widgets…

    Pourquoi comparer EZ-Draw avec Gtk/Qt/etc alors que c'est plus une librairie de type SDL ?

    • [^] # Re: Mauvaise description

      Posté par . Évalué à 2.

      Parce que ce n'est pas non plus au niveau de la SDL, c'est un peu au dessus : on pourrait le situer au niveau GDK + pixbuf.

      Je parle de GTK+ et Qt pour opposer la simplicité du projet. Évidemment si on se focalise sur les widgets vous avez raison.

  • # Et pour Wayland

    Posté par (page perso) . Évalué à 2.

    Il est indiqué sur le site que EZ-Draw utilise la Xlib pour les systèmes de type Unix. Est-ce que tu comptes la migrer vers Wayland, dans longtemps ou pas, ou te contenter de la compatibilité avec XWayland?

    Écrit en Bépo selon l’orthographe de 1990

    • [^] # Re: Et pour Wayland

      Posté par . Évalué à 2.

      C'est assez tentant, ça réglerait de plus un petit problème pour l'affichage avec transparence : actuellement c'est fait avec un simple seuil. J'avais regardé avec les extensions X qui vont bien, mais c'était assez indémerdable, et beaucoup trop complexe pour le projet …

  • # Pour les jeux?

    Posté par . Évalué à 1.

    Personnellement j'aime beaucoup la SFML pour développer des jeux, en lisant le titre du post je m'attendais a trouver une bibliothèque pour créer des interfaces GTK+ / Qt (ou équivalent) de façon simpliste et légère, mais non.
    Enfin, le projet est pas mal en soit et ça m'a l'air bien documenté :)

    Tu comptes y ajouter a possibilité de faire des menus/boutons type GTK/Qt? Et la possibilité d'avoir des objets C++ plutôt que du C?
    Merci et bon développement :)

    • [^] # Re: Pour les jeux?

      Posté par . Évalué à 1.

      Non, l'idée est de donner une "base nue" pour inciter les étudiants à écrire leur propres widgets ; l'expérience montre que ça leur plaît beaucoup plus que d'utiliser un truc tout fait.
      Je limite de plus volontairement les fonctions graphiques pour rendre possible de nombreux exercices.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.