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

Auteur Sujet: [Résolu] Zone d'affichage (pour sf::Text)  (Lu 6804 fois)

0 Membres et 1 Invité sur ce sujet

Assouan

  • Newbie
  • *
  • Messages: 22
  • texe perso
    • Voir le profil
    • E-mail
[Résolu] Zone d'affichage (pour sf::Text)
« le: Avril 12, 2012, 11:01:38 pm »
Bonjour, voilà pour ma gui j'ai un soucis

Voilà, maintenant j'ai un TextArea (un edit text en multi ligne)

Mais voilà, quand on fait défiler les scrollbar, sa fait bouger le texte... (sa doit servir à la faire défiler)

Mais le soucis, c'est que je ne sais pas comment faire en sorte de n'affiche que le texte dans la zone du TextArea

Avec Sprite, on a un fonction pour n'afficher qu'une partie du Drawable :
Sprite.SetTextureRect(sf::IntRect(200,200,300,150));

Mais, comment faire avec sf::Text ?

ps: N'existe t'il pas une technique d'afficher une sorte de camera 2D, dans un endroit ?
sf::Camera Camera;
Camera.SetSize(200,200);
Camera.SetPosition(50,50);

// Boucle d'affichage
Camera.Draw(Sprite);
Window.Draw(Camera);
« Modifié: Avril 13, 2012, 12:29:58 am par Assouan »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Zone d'affichage (pour sf::Text)
« Réponse #1 le: Avril 12, 2012, 11:06:38 pm »
Il n'y a pas encore de fonction/classe dédiée pour ça, mais c'est prévu.

En attendant tu peux t'en sortir avec, au choix :
- une vue et son viewport intelligemment défini
- un rendu intermédiaire sur un sf::RenderTexture
Laurent Gomila - SFML developer

Assouan

  • Newbie
  • *
  • Messages: 22
  • texe perso
    • Voir le profil
    • E-mail
Re : Zone d'affichage (pour sf::Text)
« Réponse #2 le: Avril 12, 2012, 11:59:19 pm »
Ah oui tien, les viewport, je l'avais zapper ::)

Sinon j'ai un soucis avec RenderTexture

        sf::RenderTexture rw;
        rw.Create(230,230,false);
        rw.Clear(sf::Color::Red);

        sf::Texture at;
        at.LoadFromFile("nature.png");
        sf::Sprite as;
        as.SetTexture(at);
        as.SetTextureRect(sf::IntRect(0,0,200,200));

        rw.Draw(as);

        sf::Sprite TS(rw.GetTexture());

        window.Draw(TS);

Et je me retrouve avec le Haut en Bas, et le Bas en Haut
Et ce, même si je fais rw.Create(230,230,true); (au lieu de false)

Si la gauche et la droite étais inversé aussi, j'aurais pu faire une rotation, mais là, sa va être un peu dur ;D

Edit: J'ai trouver, la solution (un peu simple, mais fallait y pensé ^^)
rw.Display();

Sinon, merci Laurent !
« Modifié: Avril 13, 2012, 12:29:39 am par Assouan »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #3 le: Avril 13, 2012, 07:56:41 am »
Citer
la solution (un peu simple, mais fallait y pensé ^^)
... ou bien regarder dans la doc.
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #4 le: Juillet 15, 2013, 12:30:34 pm »
Je up se sujet pour savoir si il existe à ce jour un moyen de n'afficher qu'une partie d'un Drawable, et non l'afficher en entière, sans passer par un sf.RenderTexture (qui bouffe pas mal de ressource) ? Merci d'avance :D .

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #5 le: Juillet 15, 2013, 01:18:57 pm »
Rien de nouveau non.

Tout ce qu'il y a à savoir se trouve là :
https://github.com/SFML/SFML/issues/1
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #6 le: Juillet 15, 2013, 02:53:56 pm »
Tu parles d'une classe sf::ClippingMask mais je ne trouve pas sa documentation.... Il n'y a pas un moyen avec openGL de forcer l'affichage d'une unique partie d'un seul drawable ? Merci d'avance :)
« Modifié: Juillet 15, 2013, 02:58:13 pm par gaulois94 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #7 le: Juillet 15, 2013, 03:04:45 pm »
Citer
Tu parles d'une classe sf::ClippingMask mais je ne trouve pas sa documentation....
C'est une tâche à faire. Si elle était déjà implémentée elle serait fermée ;)

Citer
Il n'y a pas un moyen avec openGL de forcer l'affichage d'une unique partie d'un seul drawable ? Merci d'avance
Si, mais pas de mélanger ça avec SFML.
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #8 le: Juillet 15, 2013, 03:23:34 pm »
Désoler, pas l'habitude avec les issues x) (je croyais que c'était déjà fait x) ). BOn ben soit j'attends, soit je code un trucs assez sale avec les sf.RenderTexture, merci encore :D

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #9 le: Juillet 15, 2013, 03:26:58 pm »
Le truc intéressant qui est dit dans cette tâche c'est qu'on peut très facilement émuler ça avec une vue ayant le viewport qui va bien.
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #10 le: Juillet 15, 2013, 03:43:50 pm »
Je n'ai pas compris comment ta vue peut faire ceci puisque je veux uniquement une partie d'un ensemble de drawable. Je pensais plus faire un sf.RenderTexture, dessiner dedans, récupéré la texture, la mettre dans un Sprite avec un subRectTexture, non ?
« Modifié: Juillet 15, 2013, 03:54:58 pm par gaulois94 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #11 le: Juillet 15, 2013, 04:09:13 pm »
Ca marche, mais c'est mieux avec la vue.

Tu crée une nouvelle vue, tu lui mets son rectangle et son viewport à la zone de clipping souhaitée, et tu dessines dedans tout ce que tu veux clipper. C'est tout, et ça produit l'effet voulu (puisque tout ce qui sort du viewport est clippé par la carte graphique).
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #12 le: Juillet 15, 2013, 04:49:36 pm »
Tu aurais un exemple de code s'il te plait ? J'ai du mal à voir avec la vue comment faire (à moins que je créé une seconde vue que j'applique à une sf.RenderTexture, mais même comme ça j'ai du mal à voir (les bandes noires à côter seront visibles lors du draw finale, non ?)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #13 le: Juillet 15, 2013, 04:55:55 pm »
// je dessine des trucs non clippés...
window.draw(truc_pas_clippe);

// je clip avec le rectangle [100, 100, 50, 200]
sf::View clipView(sf::FloatRect(100.f, 100.f, 50.f, 200.f));
clipView.setViewport(sf::FloatRect(100.f / window.getSize().x,
                                   100.f / window.getSize().y,
                                   50.f  / window.getSize().x,
                                   200.f / window.getSize().y))
window.setView(clipView);

// je dessine des trucs clippés...
window.draw(truc_clippe);

// je restaure la vue par défaut
window.setView(window.getDefaultView());

// je dessine des trucs non clippés...
window.draw(autre_truc_pas_clippe);
« Modifié: Juillet 15, 2013, 05:49:08 pm par Laurent »
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [Résolu] Zone d'affichage (pour sf::Text)
« Réponse #14 le: Juillet 15, 2013, 05:02:28 pm »
Ah d'accord, je peux carrément appliquer deux vues différentes dans un même display ! Je ne le savais pas, merci beaucoup, ça fait exactement ce que je voulais :D

ps : il manque un setView() avant ton second draw :) .
« Modifié: Juillet 15, 2013, 05:43:25 pm par gaulois94 »