/* * This file is part of the MLV Library. * * Copyright (C) 2010,2011,2012 Adrien Boussicault, Marc Zipstein * * * This Library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this Library. If not, see . */ /** \~french * \file MLV_window.h * \brief Ce fichier définit les prototypes des fonctions permettant de créer, * initialiser et fermer des fenêtres. * * \author Adrien Boussicault * \author Marc Zipstein * */ #ifndef __MLV__MLV_WINDOW_H__ #define __MLV__MLV_WINDOW_H__ #include "MLV_color.h" #ifdef __cplusplus extern "C" { #endif /** \~french * \brief Créé une fenêtre dont la taille, et les différents noms sont passés en * paramètres. * * Cette fonction initialise la bibliothèque MLV. * Un programme donné ne peut pas ouvrir plus d'une fenêtre à la * fois. * Les paramètres largeur et hauteur peuvent éventuellement prendre des valeurs * négatives. Dans ce cas, la fenêtre est dessinée en plein écran. * * \bug BOGUES WINDOWS ET MACOSX UNIQUEMENT\n\n * Sous Windows uniquement, la fenêtre crée ne peut pas toujours être * fermée à l'aide de la croix. En effet, la bibliothèque MLV implémente * une fermeture automatique de la fenêtre lorsque l'utilisateur utilise * la croix. Or, ce mécanisme utilise les threads SDL qui ne sont * malheureusement pas bien supportés sous Windows et MacOSX.\n\n * En fait, la bibliothèque MLV utilise un second thread pour * récuperer en permanance tous les évènements SDL de la pile et pour les * traiter au fur et à mesure de leurs apparitions. OR, sous Windos et * Mac OS X, comme les threads ne fonctionnent pas, la bibliothèque ne peux * pas lire les évènements systèmes comme ceux de la fermeture de la * fenêtre. * Elle n'est donc plus informée de ce qui ce passe. * Pour permettre à la bibliothèque de récupérer ces informations, il vous * suffit de demander un évènement à l'aide de la fonction : * MLV_get_event(). * Cela obligera la bibliothèque MLV à dépiler et à traiter tous les * évènements SDL de la pile. Cela aura pour conséquence de traiter * l'évènement système de la fermeture de la fenêtre. * Dans l'implémentation des fonctions : MLV_wait_keyboard(), * MLV_wait_mouse(), etc ..., nous utilisons la fonction MLV_get_event(). * C'est pourquoi, la croix fonctionne correctement lorsque le programme * est en attente d'une information provenant de l'utilisateur. * * \param window_name Le nom de la fenêtre. * \param icone_name Le nom de l'icône de la fenêtre. * \param width La largeur de la fenêtre. * \param height La hauteur de la fenêtre. */ void MLV_create_window( const char* window_name, const char* icone_name, unsigned int width, unsigned int height ); /** \~french * \brief Même chose que MLV_create_window(), mais en utilisant une fonte * de caractères particulière. * * \bug Même bogues que la fonction MLV_create_window(). * * \param window_name Le nom de la fenêtre. * \param icone_name Le nom de l'icône de la fenêtre. * \param width La largeur de la fenêtre. * \param height La hauteur de la fenêtre. * \param path_to_font Le chemin d'accès vers une fonte de caratères au standard * 'TrueType' (fichiers d'extension .ttf). * \param size_font La taille de la fonte de caractères. la hauteur de la fenêtre. */ void MLV_create_window_with_default_font( const char* window_name, const char* icone_name, unsigned int width, unsigned int height, const char* path_to_font, unsigned int size_font ); /** \~french * \brief Change la fonte de caractères par défault de la bibliothèque MLV. * * Cette fonction change la fonte de caractères par défault de la bibliothèque. * Cette fonction ne peux s'exécuter qu'après avoir initialisé la bibliothèque * MLV en créant une fenêtre à l'aide de la fonction MLV_create_window(). * Cette fonction n'a pas de sens si vous ne souhaitez pas changer de fontes * plusieurs fois durant l'exécution de votre programme. * Si vous n'utilisez qu'une seule fonte de caractères, il vaut mieux * l'indiquer à la bibliothèque MLV lors de la création de la fenêtre en utilisant * la fonction: MLV_create_window_with_default_font(). * * \param path_to_font Le chemin d'accès vers une fonte de caratères au * standard "TrueType" (fichiers d'extension .ttf). * \param size_font La taille de la fonte de caractères. */ void MLV_change_default_font( const char* path_to_font, unsigned int size_font ); /** \~french * \brief Même chose que MLV_create_window(), mais configure la fenêtre en * mode plein écran. * * \bug Même bogues que MLV_create_window(). * * \param window_name Le nom de la fenêtre. * \param icone_name Le nom de l'icône de la fenêtre. * \param width La largeur de la fenêtre ( en mode plein écran, cette valeur * correspond à la coordonnée en X de la résolution de l'image ). * \param height La hauteur de la fenêtre ( en mode plein écran, cela * correspond à la coordonnée en Y de la résolution de l'image ). */ void MLV_create_full_screen_window( const char* window_name, const char* icone_name, unsigned int width, unsigned int height ); /** \~french * \brief Même chose que MLV_create_window(), mais configure la fenêtre en * mode plein écran. * * \bug Même bogues que MLV_create_window(). * * \param window_name Le nom de la fenêtre. * \param icone_name Le nom de l'icône de la fenêtre. * \param width La largeur de la fenêtre ( en mode plein écran, cette valeur * correspond à la coordonnée en X de la résolution de l'image ). * \param height La hauteur de la fenêtre ( en mode plein écran, cela * correspond à la coordonnée en Y de la résolution de l'image ). * \param path_to_font Le chemin d'accès vers une fonte de caratères au * standard "TrueType" (fichiers d'extension .ttf). * \param size_font La taille de la fonte de caractères. */ void MLV_create_full_screen_window_with_default_font( const char* window_name, const char* icone_name, unsigned int width, unsigned int height, const char* path_to_font, unsigned int size_font ); /** \~french * \brief Affiche la fenêtre en plein ecran. * * La résolution de l'image est donnée alors par la taille de l'image. * Pour que l'application soit en plein écran, il faut que la taille de la * fenêtre soit compatible avec la résolution de l'écran. */ void MLV_enable_full_screen(); /** \~french * \brief Désactve le mode plein écran de la fenêtre. */ void MLV_disable_full_screen(); /** \~french * \brief Test si l'affichage est en mode plein écran ou en mode fenêtre. * * \return Renvoie 1 si l'affichage est en mode plein écran, 0 sinon. */ int MLV_is_full_screen(); /** \~french * \brief Change la taille de la fenêtre. * * Si la fenêtre est configurée en mode plein ecran, l'application reste alors * en mode plein écran. * Pour que l'application soit en plein écran, il faut que la taille de la * fenêtre soit compatible avec la résolution de l'écran. * De plus, en mode plein écran, la taille de la fenêtre correspond à la * résolution de l'image sur l'écran. * * \param width la largeur de la fenêtre * \param height la hauteur de la fenêtre */ void MLV_change_window_size( unsigned int width, unsigned int height ); /** \~french * \brief Change les intitulés de la fenêtre principale. * * \param window_name Intitulé apparaissaissant sur la barre de la fenêtre. * \param icone_name Intitulé apparaissaissant dans la barre des tâches. */ void MLV_change_window_caption( const char* window_name, const char* icone_name ); /** \~french * \brief Renvoie dans les paramètres, la hauteur et la largeur de la fentre. * * \param width La largeur de la fenêtre. * \param height La hauteur de la fenêtre. */ void MLV_get_window_size( unsigned int* width, unsigned int* height ); /** \~french * \brief Retourne la hauteur de la fenêtre. */ int MLV_get_window_height( ); /** \~french * \brief Retourne la largeur de la fenêtre. */ int MLV_get_window_width( ); /** \~french * \brief Éfface la fenêtre et la remplace par un monochrome de la couleur * donnée en paramètre. * * \param color La couleur du fond de la fênetre. */ void MLV_clear_window( MLV_Color color ); /** \~french * \brief Ferme la fenêtre de la bibliothèque MLV. * * Cette fonction libère correctement toutes les données qui ont été crées par la * bibliothèque MLV * */ void MLV_free_window(); /** \~french * \brief Actualise l'affichage de la fenêtre. * * Vois La fonction MLV_update_window * * Lorsque vous utilisez des fonctions de dessins, les différents changements * effectués ne sont pas visibles. Pour les afficher vous devez utiliser cette * fonction. */ void MLV_actualise_window(); /** \~french * \brief Met à jour l'affichage de la fenêtre. * * Lorsque vous utilisez des fonctions de dessins, les différents changements * effectués ne sont pas visibles. Pour les afficher vous devez utiliser cette * fonction. */ void MLV_update_window(); /** \~french * \brief Exécute la fonction de call back donnée en paramètre lorsque le système * envoie un signal d'arrêt, ou lorsque l'utilisateur clique sur la croix de la * fenêtre. * * La fonction de call back est alors exécutée avec en * paramêtre un pointeur vers une structure de donnée qui * est aussi donné en paramètre à la fonction * MLV_execute_at_exit(). * * \param function Le pointeur de la fonction de call back qui doit être exécutée. * \param data La Donnée à passer en paramètre à la fonction de call back lors de * son exécution. */ void MLV_execute_at_exit( void (*function)(void*), void* data ); /** \~french * \brief Renvoie dans les paramètres, la hauteur et la largeur de * l'environement de bureau de l'ordinateur. * * \param width La largeur du bureau. * \param height La hauteur du bureau. */ void MLV_get_desktop_size( unsigned int* width, unsigned int* height ); /** \~french * \brief Renvoie la hauteur de l'environement de bureau de l'ordinateur. */ int MLV_get_desktop_height( ); /** \~french * \brief Renvoie la largeur de l'environement de bureau de l'ordinateur. */ int MLV_get_desktop_width( ); #ifdef __cplusplus } #endif #endif