Bonjour,
Mon petit problème du jour se situe au niveau du design d'une interface graphique. Ce n'est pas tant un problème de code mais plus de logique ou mathématiques...
Dans cette interface graphique, j'ai une colonne principale à gauche et un espace à droite dans lequel je peux rajouter des "controleurs" sous forme de "pavés". La surface me permet en théorie de placer 12 controleurs soit 3 controleurs par ligne x 4 lignes.
Pour info j'utilise la librairie ofxUI mais cela n'a pas grande importance si ce n'est la manière de récupérer les dimensions des éléments graphiques. dans ofxUI les conteneurs sont des "canvas". J'ai donc ici la possibilité d'ajouter 3x4 canvas.
Ce qui marche :
Quand j'ajoute un canvas, celui ci se place bien après le canvas précédemment placé, autrement dit à sa droite.
Le problème :
Il intervient quand je suis à plus de 3 canvas (controleur). En effet dans l'idée à chaque fin de ligne (donc tous les 3 canvas) il faut "revenir à la ligne" et recommencer une ligne. Dans l'idée j'imagine que l'utilisation d'un modulo ici serait la solution. Cela fonctionne évidement pour le 4eme élément, mais ne fonctionne plus à partir de 5eme...
Bon cela n'est pas censé être compliqué, mais j'avoue que je suis un peu malade aujourd'hui et j'ai la tête dans le brouillard !
Le code actuel permettant le placement des dalles :
commandGUI = est un vector pour l'ensemble des dalles.
gui = une dalle
ofxUICanvas *gui = new ofxUICanvas(300,0,length-xInit,150); if(commandGUI.size() > 0) { if(commandGUI.size()%3 != 0) { ofxUICanvas *previous = commandGUI[commandGUI.size()-1]; gui->getRect()->setX(previous->getRect()->getX()+previous->getRect()->getWidth()+1); } else { ofxUICanvas *previous = commandGUI[commandGUI.size()-3]; //gui->getRect()->setX(previous->getRect()->getX()); gui->getRect()->setY(previous->getRect()->getY()+previous->getRect()->getHeight()+1); } }
petite idée du résultat :
Hors ligne
Salut,
C'est parce que tu n'incrémentes pas le Y de tes canvas, donc les canvas s'empilent infiniment sur la première ligne et la sur la première case de la 2e
Il suffirait je pense de rajouter un gui->getRect()->setY(previous->getRect()->getY()); dans ton IF, ca donnerait:
if(commandGUI.size()%3 != 0) { ofxUICanvas *previous = commandGUI[commandGUI.size()-1]; gui->getRect()->setX(previous->getRect()->getX()+previous->getRect()->getWidth()+1); gui->getRect()->setY(previous->getRect()->getY()); }
Hors ligne
Elémentaire !!!
(J'avais prévenu, je suis dans le gaz )
Merci beaucoup
Dernière modification par Marty (2013-05-07 13:05:15)
Hors ligne
Pages: 1