void TabBarButton::resized() { if (extraComponent != nullptr) { Rectangle<int> extraComp, textArea; calcAreas (extraComp, textArea); if (! extraComp.isEmpty()) extraComponent->setBounds (extraComp); } }
void splitAreas(QList<Geometry*> *firstHalf, QList<Geometry*> *secondHalf, QList<Geometry*> all) { int length1 = 1; int length2 = all.length()-1; int splitIdx = 0; //last index included in the first half of objs QList<Geometry*> prev1(all.mid(0,length1)); QList<Geometry*> prev2(all.mid(1,all.length()-1)); float prevArea1 = calcAreas(prev1); float prevArea2 = calcAreas(prev2); for (int i = 0; i < all.length(); i++) { length1++; //add one to firstHalf list of objs length2--; //remove one from secondHalf list QList<Geometry*> temp1(all.mid(0, length1)); QList<Geometry*> temp2(all.mid(splitIdx, length2)); float area1 = calcAreas(temp1); float area2 = calcAreas(temp2); if (area1 > area2) { //when area of first is finally greater than area 2 //check if the previous split was better balanced: float prevDifference = glm::abs(prevArea2 - prevArea1); float newDifference = glm::abs(area1 - area2); if (prevDifference > newDifference) { //they are NOW more evenly split prev1 = temp1; prev2 = temp2; } else { //they were previously more evenly split //current prev1 and prev2 contain ideal split break; //dont replace the return value with the new lists } }else { //they havent been replaced, make prev=curr area calcs prevArea1 = area1; prevArea2 = area2; } } *firstHalf = prev1; *secondHalf = prev2; }
Rectangle<int> TabBarButton::getTextArea() const { Rectangle<int> extraComp, textArea; calcAreas (extraComp, textArea); return textArea; }