Tylko jeden aktywny widget
Ostatnio zmodyfikowano 2014-10-06 17:39
Jakobez Temat założony przez niniejszego użytkownika |
Tylko jeden aktywny widget » 2014-10-05 19:04:12 Witam , jestem w trakcie pisania gui'a i mam problem z blokadą która będzie pozwalać tylko jednemu elementowi kontenera na bycie drag and dropowanym . Gdy jeden widget będzie przesuwany reszta nie będzie mogła być przesuwana. Posiadam klase która obsługuje widgetami class GUIDESKTOP { public: GUIDESKTOP(); ~GUIDESKTOP(); GUIDESKTOP( sf::RenderWindow & window ); sf::RenderWindow & okno; void AddWidget( std::shared_ptr < JSFELEMENT > element ); void DestroyAllWidgets(); void DestroyWidget(); void HandleWidgetEvents(); void DrawWidgets(); void CheckActiveWidget(); private: std::list < std::shared_ptr < JSFELEMENT > > Desktop; std::list < std::shared_ptr < JSFELEMENT > >::iterator it; int elements { 0 }; };
A tutaj funkcja odpowiadająca za dnd ( tak , wiem że nie jest zbyt efektywna , ważne że dziala :D ) virtual void DragNDrop( sf::RenderWindow & window ) override { if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && sf::Mouse::getPosition( window ).x >= shape.getPosition().x && sf::Mouse::getPosition( window ).x <= shape.getPosition().x + shape.getSize().x && sf::Mouse::getPosition( window ).y >= shape.getPosition().y && sf::Mouse::getPosition( window ).y <= shape.getPosition().y + shape.getSize().y ) { shape.setPosition( sf::Mouse::getPosition( window ).x - 50, sf::Mouse::getPosition( window ).y - 30 ); } }
I funkcja gui desktopa void GUIDESKTOP::HandleWidgetEvents() { if( elements > 0 ) { for( it = Desktop.begin(); it != Desktop.end(); it++ ) { ( * it )->DragNDrop( okno ); } } }
I teraz pytanie : jak to zrobić ? Myślałem nad stworzeniem funkcjii która zwróci gui managerowi iterator który ma być wyokonywany a reszta będzie ignorowana lecz to raczej nie zadziała. |
|
Jacob99 |
» 2014-10-05 20:11:56 daj każdemu widgetowi unikalne id |
|
Jakobez Temat założony przez niniejszego użytkownika |
» 2014-10-05 20:20:33 No to lepiej wrzucić to w std::map , jednak chyba nie o to chodzi ... Chodzi o to że gdy myszka jest w widgecie i wcisne przycisk to sie przesuwa , jest problem gdy przesune widget na drugi i w tym momencie gdy przesune jeden na drugi złączają się i przesuwam dwa na raz . Funckja gui managera(guidesktop) powinna sprawdzać czy jakiś widget jest w tym momencie przesuwany i blokować funkcję przesuwania innych ...
edit : problem rozwiazany , zamykam. |
|
Jacob99 |
» 2014-10-06 17:39:19 stwórz dla każdego widgetu prostokąt np. IntRect i później sprawdzaj czy widget drag'n'drop-owany nie wchodzi na drugi widget. |
|
« 1 » |