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

Auteur Sujet: [Résolu] Multi view  (Lu 3737 fois)

0 Membres et 1 Invité sur ce sujet

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
[Résolu] Multi view
« le: Juillet 03, 2013, 03:31:38 pm »
Hi !

Pour faire simple, je dois faire un programme qui affiche une interface de simulation d'imprimante et qui permet de modifier l'état des différents capteurs, l'état des stocks, etc, etc. Et de chaque côté, un visuel sur les impressions en file d'attente dans la mémoire et un visuel des impressions réalisées. (en gros, des miniatures des pages en attente d'impression sur la gauche et des miniatures des pages imprimées sur la droite)

Seulement, il n'y a pas de nombre maximum de miniatures, donc je dois pouvoir "scroll" si certaines ne peuvent pas s'afficher sur la fenêtre de base. Et je dois pouvoir le faire indépendement, à gauche ou à droite. Ce qui sous entend que je dois avoir 3 vues : une pour les minuatures de gauche (que je pourrais scroll), une pour le milieu qui serait fixe car je ne rajoute rien sur cette partie et une sur la droite (que je pourrais scroll elle aussi).

Ca revient au final à faire trois Views, dont deux qui peuvent être repositionnées pour faire un effet de scroll. (Je ne sais pas si je suis clair dans mes explications, n'hésitez pas à me demander de clarifier certains points)

J'ai testé ce code mais cela ne marche pas dès le début : Avec une seule vue, tout s'affiche correctement mais dès que j'en ajoute une seconde je vois un écran noir.

_MemView = new sf::View(sf::Vector2f(175, 300), sf::Vector2f(350, 600));
_GuiView = new sf::View(sf::Vector2f(600, 300), sf::Vector2f(500, 600));                                                                                                                                                                  
_PriView = new sf::View(sf::Vector2f(1025, 300), sf::Vector2f(350, 600));                                                                                                                                                                

_MemView->setViewport(sf::FloatRect(0.f, 0.f, 0.29f, 1.f));                                                                                                                                                                      
_GuiView->setViewport(sf::FloatRect(0.29f, 0.f, 0.42f, 1.f));                        
_PriView->setViewport(sf::FloatRect(0.71f, 0.f, 0.29f, 1.f));                                                                                                                    

_window->setView(*_MemView);
_window->setView(*_GuiView);
_window->setView(*_PriView);
 

J'ai sûrement du louper un truc primordiale dans les view mais je n'arrive pas à voir quoi et je suis totalement bloqué du coup ... Donc si vous pouviez me filer un coup de main, ça serait super !

La fenêtre fait 1200*600 px pour infos.

Merci :)
« Modifié: Juillet 03, 2013, 04:03:47 pm par Zatae42 »

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : Multi view
« Réponse #1 le: Juillet 03, 2013, 04:03:35 pm »
J'ai rien dit ! Problem solved.

Mon erreur : penser que les views n'étaient pas indépendantes et donc que je devais rentrer les coordonnées des "centres" par rapport à leur position dans la fenêtre alors que c'est le setViewport() qui le fait. (et accessoirement, qu'il faut faire un window->setView(notreVue) avant de draw des objets qui devraient se trouver dedans ... ca parait con mais j'avais pas compris ça comme ça :o)

Merci pour ce tuto https://github.com/SFML/SFML/wiki/Tutorial:-Using-View ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Multi view
« Réponse #2 le: Juillet 03, 2013, 04:05:22 pm »
Et sinon, pourquoi utiliser SFML pour faire un logiciel de bureautique ? C'est pas vraiment ce qu'il y a de mieux.
Laurent Gomila - SFML developer

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : [Résolu] Multi view
« Réponse #3 le: Juillet 03, 2013, 04:12:16 pm »
C'est un peu une solution de secours. Je devais à la base le faire avec Qt, mais il fallait une librairie portable facilement sur Windows sans rien installer et avec une compilation standard.

J'avais le choix entre MFC (un truc Microsoft que j'avais tout sauf envie d'utiliser) ou une autre lib de mon choix qui permettrait de faire un équivalent. Etant donné que j'ai utilisé un paquet de fois la SFML pour par mal de projets / jeux, je me suis dit pourquoi pas ! Ca sera dans tous les cas mieux que de me pencher sur une techno Microsoft qui n'est même plus maintenue je crois.

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : [Résolu] Multi view
« Réponse #4 le: Juillet 04, 2013, 10:14:11 am »
J'ai quand même une autre petite question ...

Si on a trois vues sur une fenêtre, est il possible de ne clear que sur deux vues par exemple ? Ou est ce que ce n'est pas possible ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Multi view
« Réponse #5 le: Juillet 04, 2013, 10:22:38 am »
Non, ce n'est pas possible. Mais tu peux très bien dessiner un gros rectangle plutôt que d'appeler la fonction clear(), le résultat sera le même.

Mais pourquoi vouloir faire ça ?
Laurent Gomila - SFML developer

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : [Résolu] Multi view
« Réponse #6 le: Juillet 04, 2013, 10:32:27 am »
En fait, j'ai une view qui affiche un paquet de trucs et ca prend une petite plombe à traiter toutes les infos (une list de list d'objets à afficher ...) donc je voudrais éviter de la refresh le plus possible, surtout qu'elle n'est pas modifiée très très souvent.

Merci pour ton idée, je pense que ça devrait faire l'affaire.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Multi view
« Réponse #7 le: Juillet 04, 2013, 11:34:22 am »
Ca ne marchera pas. Je te cite le tutoriel :

Citer
Ce cycle clear/draw/display est la seule bonne manière de dessiner. N'essayez pas d'autres stratégies, telles que garder certains pixels de la frame précédente, "effacer" des pixels, ou bien encore dessiner une seule fois et appeler display plusieurs fois. Vous obtiendrez des résultats bizarres à cause du double buffering.
Laurent Gomila - SFML developer

Zatae42

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : [Résolu] Multi view
« Réponse #8 le: Juillet 05, 2013, 04:27:21 pm »
J'ai fait ce que tu m'avais conseillé de faire (afficher un carré noir et reprint par dessus) et ça marche plutot bien ! Je n'ai pas de problèmes visuels et le temps de génération à été réduit considérablement. Merci pour l'astuce ;)