void Text::updateLayout_FromParent(const Bound& parentBound) { Widget::updateLayout_FromParent(parentBound); if((autoSizeX | autoSizeY | autoFontScaleByX | autoFontScaleByY) == 0 || wrapping) return; Library* lib = getLibrary(); if(!lib) return; Font* fnt = lib->getFont(font); if(!fnt) return; screen->lenghts.tmpSet(parentBound.size()); Vector maxSize(screen->lenghts.lenghts[maxSizeXType].x * maxSizeX, screen->lenghts.lenghts[maxSizeXType].y * maxSizeY); Vector marginLow, marginHi; margin.getLowAndHi(marginLow, marginHi, parentBound.size(), screen->lenghts); maxSize -= marginLow + marginHi; Vector2i stringSize = fnt->stringSize(text); stringSize.x += 2; stringSize.y += 2; Scalar maxFontScaleByX = -1; if(autoFontScaleByX) { if(autoSizeX && maxSizeXType) maxFontScaleByX = maxSize.x / Scalar(stringSize.x); else maxFontScaleByX = size.x / Scalar(stringSize.x); } Scalar maxFontScaleByY = -1; if(autoFontScaleByY) { uint h = autoFontScaleByYConsiderateNewLines ? stringSize.y : fnt->characterHeight(); if(autoSizeY && maxSizeYType) maxFontScaleByY = maxSize.y / Scalar(h); else maxFontScaleByY = size.y / Scalar(h); } if(maxFontScaleByX > 0) { if(maxFontScaleByY > 0) fontScale = min(maxFontScaleByX, maxFontScaleByY); else fontScale = maxFontScaleByX; } else if(maxFontScaleByY > 0) { fontScale = maxFontScaleByY; } if(autoSizeX) { if(maxSizeXType) size.x = min(stringSize.x * fontScale, maxSize.x); else size.x = stringSize.x * fontScale; } if(autoSizeY) { if(maxSizeYType) size.y = min(stringSize.y * fontScale, maxSize.y); else size.y = stringSize.y * fontScale; } Widget::updateLayout_FromParent(parentBound); }