IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

SDL2 redimensionnement fenêtre avec fond coloré


Sujet :

SDL

  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Par défaut SDL2 redimensionnement fenêtre avec fond coloré
    Salut à tous.
    Nouveau venu en C, je cherche à gérer le redimensionnemet d'une fenêtre avec SDL2.
    J'explique : j'ai une fenêtre avec un fond coloré et je souhaite conserver ce fond PENDANT le redimensionnment de la fenêtre. Les exemples trouvés sur le net me disent comment redessiner le fond APRES redimensionnement.
    Actuellement, quand je "tire" sur la fenêtre en bas à droite, j'ai des bandes noires à l'intérieur de la fenêtre. Ce n'est que quand je relache le bouton de la souris que la fenêtre est redessinée. Ce n'est pas là le comportement normal d'un redimensionnement.
    Voici la partie du code qui gère ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    while (!quit)
    {
            while (SDL_PollEvent(&event))
        	{
                switch (event.type)
        	    {
                    case SDL_QUIT:
                        quit = 1;
                        break;
     
                    case SDL_WINDOWEVENT:
                        if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
                	    {
                            int new_width = event.window.data1;
                            int new_height = event.window.data2;
                            SDL_RenderSetLogicalSize(renderer, new_width, new_height);
                        }
                        break; 
                }
            }
     
            SDL_SetRenderDrawColor(renderer, 220, 220, 220, 255);
            SDL_RenderClear(renderer);
            SDL_RenderPresent(renderer);
        }
    Comment faire pour que le fond gris "suive" le redimensionnement de la fenêtre au fur et à mesure du changement de taille ?

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    bonjour je ne pense pas que ce soit possible une fois les dimensions de la fenêtre et donc de la résolution d'écran établis
    Si vous voulez redimensionner la fenêtre de rendu il faut détruire le renderer l'allouer de nouveau et dessiner dessus.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Si vous voulez redimensionner la fenêtre de rendu il faut détruire le renderer l'allouer de nouveau et dessiner dessus.
    Bigre !

    Mais le détruire quand ? Faut-il intercepter le mouvement de la souris et faire ça dès que le curseur se déplace bouton enfoncé ? Pourquoi est-il si difficile de faire un truc pourtant aussi simple ?
    Imaginez que je place une image en fond de fenêtre. Je réduis le fenêtre puis je l'agrandis. Comment reconstituer le morceau d'image que je "révèle" au fur et à mesure que je redimensionne la fenêtre ?

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par Kinesra Voir le message
    Mais le détruire quand ? Faut-il intercepter le mouvement de la souris et faire ça dès que le curseur se déplace bouton enfoncé ? Pourquoi est-il si difficile de faire un truc pourtant aussi simple ?
    bonne question parce que sous Direct X notamment je suppose que SDL déclenche la création de ce que l'on appelle des "backbuffers" et l'accélération matérielle s'établit sur ça.
    Je pense que ça doit être pareil avec Open GL.

    Citation Envoyé par Kinesra Voir le message
    Comment reconstituer le morceau d'image que je "révèle" au fur et à mesure que je redimensionne la fenêtre ?
    il faut faire du "clipping" de l'image c.a.d. la découper en fonction de la résolution d'image et n'afficher que la zone visible.
    Ou alors faire un rétrécissement avec "Stretch"

  5. #5
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 43
    Par défaut
    Bon, ben je voulais revenir à mes amours de jeunesse et reprendre la programmation en C qui m'avait tant plu à l'époque (en 1980, la préhistoire !). Depuis, j'ai découvert Embarcadero C++ Builder qui prend en charge tout ces petits détails de redimensionnement, maximisation, réduction et déplacement des fenêtres sans que je tape une seule ligne de code. Ca permet de me concentrer sur l'essentiel du développement. De plus, l'IDE donne la possibilité de "dessiner" l'interface à la souris avec les images, les boutons, les zones d'édition, les popups déroulants, les boutons radio, les cases à cocher, etc ...
    J'aurais aimé renouer avec une programmation un peu plus "pure" mais je n'ai pas trouvé de bibliothèque graphique en C facile à utiliser (sans avoir à réinventer la roue).

    Il faut vivre avec son temps !

    Merci à tous.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par Kinesra Voir le message
    Depuis, j'ai découvert Embarcadero C++ Builder qui prend en charge tout ces petits détails de redimensionnement, maximisation, réduction et déplacement des fenêtres sans que je tape une seule ligne de code.
    d'accord mais est-ce qu'il y a l'accélération graphique de Direct X ou Open GL derrière ?
    L'intérêt de la SDL c'est de pouvoir profiter de l'accélération hardware bref de bénéficier d'un affichage performant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionnement Userform avec photos de fonds selon resolution
    Par Allanbzh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2017, 21h22
  2. Réponses: 2
    Dernier message: 21/01/2016, 09h26
  3. Réponses: 3
    Dernier message: 25/03/2008, 18h17
  4. Coloration syntaxique pour java avec fond noir
    Par thibal_kamehouse dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 02/05/2007, 16h58
  5. Image avec fond transparent
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 16/09/2005, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo