Change grid creation flow

- This changes make sure the buildTiles function is called only one time, at the end of the applyTheme function.
- The buildTiles function now call calcGridDimension as both are linked to the same events
This commit is contained in:
Koerty 2018-04-30 20:59:05 +02:00
parent 7f1dca23c5
commit a52a2f5597

View file

@ -91,8 +91,6 @@ ImageGridComponent<T>::ImageGridComponent(Window* window) : IList<ImageGridData,
mTileSize = GridTileComponent::getDefaultTileSize(); mTileSize = GridTileComponent::getDefaultTileSize();
mScrollDirection = SCROLL_VERTICALLY; mScrollDirection = SCROLL_VERTICALLY;
calcGridDimension();
} }
template<typename T> template<typename T>
@ -166,7 +164,6 @@ void ImageGridComponent<T>::render(const Transform4x4f& parentTrans)
if(mEntriesDirty) if(mEntriesDirty)
{ {
buildTiles();
updateTiles(); updateTiles();
mEntriesDirty = false; mEntriesDirty = false;
} }
@ -193,7 +190,10 @@ void ImageGridComponent<T>::render(const Transform4x4f& parentTrans)
template<typename T> template<typename T>
void ImageGridComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme, const std::string& view, const std::string& element, unsigned int properties) void ImageGridComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme, const std::string& view, const std::string& element, unsigned int properties)
{ {
GuiComponent::applyTheme(theme, view, element, properties); using namespace ThemeFlags;
// Apply theme to GuiComponent but not size property, which will be applied at the end of this function
GuiComponent::applyTheme(theme, view, element, properties ^ SIZE);
// Keep the theme pointer to apply it on the tiles later on // Keep the theme pointer to apply it on the tiles later on
mTheme = theme; mTheme = theme;
@ -262,8 +262,8 @@ void ImageGridComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme,
elem->get<Vector2f>("size") * screen : elem->get<Vector2f>("size") * screen :
GridTileComponent::getDefaultTileSize(); GridTileComponent::getDefaultTileSize();
// Recalculate grid dimension after theme changed // Apply size property, will trigger a call to onSizeChanged() which will build the tiles
calcGridDimension(); GuiComponent::applyTheme(theme, view, element, SIZE);
} }
template<typename T> template<typename T>
@ -288,6 +288,8 @@ void ImageGridComponent<T>::buildTiles()
{ {
mTiles.clear(); mTiles.clear();
calcGridDimension();
Vector2f startPosition = mTileSize / 2; Vector2f startPosition = mTileSize / 2;
Vector2f tileDistance = mTileSize + mMargin; Vector2f tileDistance = mTileSize + mMargin;
@ -321,9 +323,6 @@ void ImageGridComponent<T>::buildTiles()
template<typename T> template<typename T>
void ImageGridComponent<T>::updateTiles() void ImageGridComponent<T>::updateTiles()
{ {
if(mTiles.empty())
buildTiles();
int img = getStartPosition(); int img = getStartPosition();
for(int ti = 0; ti < mTiles.size(); ti++) for(int ti = 0; ti < mTiles.size(); ti++)