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

Auteur Sujet: Créer une barre de défilement.  (Lu 2568 fois)

0 Membres et 1 Invité sur ce sujet

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Créer une barre de défilement.
« le: Octobre 24, 2013, 04:34:25 pm »
Bonjour.

Je cherche à réaliser un petit logiciel pour éditer et générer graphiquement des cartes à partir d'une feuille de tuiles (tile set). Mes feuilles étant parfois trop grandes pour mon écran, je cherche à réaliser une barre de défilement à côté de la feuille de tuiles tel que représenté sur la figure suivante :


Exemple de ma fenêtre de sélection de tuile

J'ai donc créé un objet Scroll qui créé et affiche la barre de défilement, en plus de quelques options supplémentaires, et pour faire défiler les objets je procède ainsi :

void WindowTileSet::scrollWheel(int delta)
{
    // delta étant le paramètre +/- 1 indiquant le sens de rotation de la molette.
    m_vTileSet.move(0,-delta);      // m_vTileSet étant la vue de la feuille de tuiles.
    m_vScroll.move(0,delta);        // m_vScroll étant la vue de la barre de défilement.
}

Maintenant j'aimerais pouvoir interagir avec lorsque l'on clique et déplace la souris, mais je manque d'idées sur la manière de procéder...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Créer une barre de défilement.
« Réponse #1 le: Octobre 24, 2013, 04:40:10 pm »
A moins que tu ne fasses ça pour le fun, tu t'embêtes pour pas grand chose. Pour ce genre de logiciel tu devrais plutôt utiliser une vraie bibliothèque d'interface graphique de bureau (Qt), ou au moins une bibliothèque de GUI pour SFML (SFGUI, TGUI).

Sinon pour répondre à ta question, c'est pas compliqué :
1. Sur Event::MouseButtonPressed tu sauvegardes la position de clic et tu actives le défilement
2. Sur Event::MouseMoved tu fais défiler de (position_souris - position_de_clic)
3. Sur Event::MouseButtonReleased to désactives le défilement
Laurent Gomila - SFML developer

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Créer une barre de défilement.
« Réponse #2 le: Octobre 24, 2013, 05:09:34 pm »
Je fais ça surtout pour le fun ^^
J'ai suivi les conseils que tu m'a donné et ça fonctionne parfaitement. Pour ceux que cela peut intéresser voici la méthode que j'ai utilisé :

// Loin dans les déclarations :
sf::Vector2i positionClic;

// Defilement avec un clic + deplacement de la souris.
if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && window.isScrollSelected(sf::Mouse::getPosition(window)))
{
    if (event.type == sf::Event::MouseButtonPressed)
        positionClic = sf::Mouse::getPosition(window);

    if (event.type == sf::Event::MouseMoved)
    {
        window.scrollClick(positionClic,sf::Mouse::getPosition(window));
        positionClic = sf::Mouse::getPosition(window);
    }
}

// Et la fonction :
void MaClasse::scrollClick(sf::Vector2i positionPre, sf::Vector2i position)
{
    int delta = positionPre.y - position.y;
    m_viewScroll.move(0,delta);
}

Merci !

 

anything