SFWM est une librairie (libsfwm) écrite dans le but d'apporter au SFML des fonctions avancées dans la gestions des fenêtres et des contrôles.

En effet, par défaut, SFML ne gère que les fonctions d'affichage de base et n'est pas capable par exemple d'afficher une simple MessageBox. SFWM ajoute ces fonctions.

 

Le but de SFWM est d'apporter au SFML un window manager rapide et léger directement interfacé à la boucle d'événement du SFML.

 

SFWM reste rudimentaire comparé à Qt, et si le but est de créer et de gérer des interfaces très complexes alors l'utilisation de Qt sera à préférer.

 

SFWM permet d'ajouter facilement des boites de dialogues (dialogs) à un projet pro issu de QtCreator. L'ensemble des boites de dialogues créées ainsi sera ensuite modifiable sans ajout de ligne de codes, par le moyen d'un éditeur directement intégré au projet en cours.

 

La version courante est codée en C++, sous QtCreator, et n'est disponible que sous Linux (mais sera portée prochainement sous Windows).

 

SFWM permet également d'associer des variables du projet de l'utilisateur à des contrôles => les mécanismes d'initialisation et de mise à jour des variables peuvent être entièrement gérés par SFWM.

 

La gestion des événements est gérée soit par des fonctions virtuelles au moyen de fonctions du type onPressLeft, ou onLoad (fonctions pré-créées par l'éditeur lors de la création d'une nouvelle dialog). Mais SFWM gère aussi un mécanisme de CallBack.

 

Ainsi, SFWM constitue un système de développement visuel directement intégré dans le projet.

 

 

Les pages suivantes sont une présentation rapide et superficielle de SFWM.

Une documentation technique plus détaillée sera proposée lorsque le projet sera plus avancé.

 

 

 

 

 


 

 

Exemple de projet utilisant SFML + SFWM :

 

Fichier main.cpp :

Le code propre à SFWM est surligné en jaune, ce code est suffisant pour faire fonctionner SFWM sans avoir besoin d'en ajouter dans d'autres portions de son projet.

#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>

#include <SFWM/csfwm.h>
#include <SFWM/csfwmtaskbar.h>

#include "csfwmnewdialogs.h"

using namespace std;
int main()
{
      CSFWM* monWindowManager=new CSFWM; //WindowManager + TaskBarre
      new CSFWMNewDialogs; //création des dialogs (avec propriétés de bases)

      sf::RenderWindow *sfApp;
      sfApp=new sf::RenderWindow(sf::VideoMode(1280,768,16),"SFML - Test de la librairie SFWM - (c) Eric Bentin");
      while (sfApp->isOpen())
      {
               sfApp->clear();


               //SFWM : Gestion des entrées souris/clavier et préparation affichage :
               CSFWM::update(sfApp);


              //On affiche le rendu final à l'écran:
               sfApp->display();
      }
      return 0;
}  

 

 

Fichier .pro :

Le code surligné en jaune correspond à la librairie SFWM (installée dans /usr/local/lib par défaut)

TEMPLATE = app
CONFIG += console
CONFIG -= qt
HEADERS += \
     csfwmnewdialogs.h
SOURCES += main.cpp \
     csfwmnewdialogs.cpp
LIBS+= -L/usr/local/lib -lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system -lavformat -lavcodec -lswscale -lsfwm

 

 

 


 

Après avoir compilé cet exemple et l'avoir exécuté on obtient une fenêtre contenant une petite boite de dialogue :

c'est la barre des tâches (BT) du windows manager.

 

  

   

Au 1er lancement seule la BT est visible.

Pour créer une fenêtre personnalisée il faut utiliser l'éditeur intégré à SFWM

(il est bien sûr possible de s'en affranchir et de coder manuellement l'ensemble

des fonctions nécessaires, mais l'éditeur devrait être privilégié afin d'éviter

toute erreur et surtout d'accélérer le travail).

 

 

L'éditeur permet de créer de nouvelles fenêtres (boites de dialogue). Plusieurs types prédéfinis sont disponibles.

L'intégration à QtCreator est parfaite et SFWM vient modifier le fichier pro de QtCreator afin d'ajouter les fichiers de classes auto générés au projet.

 

 

Une fois le bouton Ok pressé, si aucune erreur n'est détectée, la boite de dialogue demandée s'affiche.

Les nouveaux fichiers h et cpp contenant la nouvelle classe sont ajoutés à l'emplacement des sources, et si l'option est cochée ajoutés au projet pro.

Les seuls fichiers à ne pas éditer à la main sont csfwmnewdialogs.h et csfwmnewdialogs.cpp car ils sont modifiés entièrement par l'éditeur SFWM.

Les fichiers de classe peuvent bien sûr être modifiés par l'utilisateur au sein de QtCreator.

 

 

Exemple de dialog par défaut : DialogFileImages

 

 

 

Une console peut-être affichée à tout moment et l'utilisateur peut ajouter des informations en utilisant la fonction CSFWM::setConsoleText(texte).

 

 

Exemple de dialog utilisée dans le projet Capitaine Mars pour gérer les scripts :

 

 

 

Dialogue SFWM permettant de voir / modifier les propriétés des dialogs ou des contrôles :

 

Tout changement est automatiquement appliqué, ce qui explique l'abscence de bouton Ok ou Appliquer.

Code d'exemple :

 

 

 

Fichier main.cpp :

 

Le code propre à SFWM est surligné en jaune, ce code est suffisant pour faire fonctionner SFWM sans avoir besoin d'en ajouter dans d'autres portions de son projet.

 

#include
<SFML/System.hpp>
#include
<SFML/Graphics.hpp>
#include
<SFML/Audio.hpp>
#include
<SFWM/csfwm.h>
#include
<SFWM/csfwmtaskbar.h>
#include
"csfwmnewdialogs.h"
using
namespace
std;
int
main()
{
    //---SFWM---//

   CSFWM*
monWindowManager=new
CSFWM;
   //WindowManager
+ TaskBarre

   new
CSFWMNewDialogs;
//création
des dialogs
(avec
propriétés
de bases)

   //---SFML---//
    sf::RenderWindow
*sfApp;

   sfApp=new
sf::RenderWindow(sf::VideoMode(1280,768,16),"SFML
- Test
de la
librairie
SFWM -
(c) Eric
Bentin");
    while
(sfApp->isOpen())
    {
        //Efface
la fenêtre
:

       sfApp->clear();
        //SFWM
: Gestion
des entrées
souris/clavier
et
préparation
affichage :

       CSFWM::update(sfApp);
        //On
affiche le
rendu final
à l'écran:
        sfApp->display();
    }
    return
0;
}




Fichier
.pro :

Le
code surligné en jaune correspond à la librairie SFWM (installée
dans /usr/local/lib par défaut)

TEMPLATE
= app
CONFIG
+= console
CONFIG
-= qt
HEADERS
+= \
    csfwmnewdialogs.h
SOURCES
+= main.cpp
\
    csfwmnewdialogs.cpp

LIBS+=
-L/usr/local/lib -lsfml-audio
-lsfml-graphics -lsfml-window
-lsfml-system
-lavformat -lavcodec
-lswscale -lsfwm