void ewol::widget::ParameterList::onRegenerateDisplay() { if (true == needRedraw()) { // clean the object list ... clearOObjectList(); //EWOL_DEBUG("OnRegenerateDisplay(" << m_size.x << "," << m_size.y << ")"); int32_t tmpOriginX = 0; int32_t tmpOriginY = 0; /* if (true == m_userFill.x) { tmpOriginX = 0; } if (true == m_userFill.y) { tmpOriginY = 0; }*/ tmpOriginX += m_paddingSizeX; tmpOriginY += m_paddingSizeY; /* int32_t fontId = getDefaultFontId(); //int32_t minWidth = ewol::getWidth(fontId, m_label); int32_t minHeight = ewol::getHeight(fontId); */ // TODO : Rework this ... int32_t minHeight=20; //uint32_t nbColomn = getNuberOfColomn(); int32_t nbRaw = m_list.size(); // For the scrooling windows m_maxSize.setValue(m_size.x(), (minHeight + 2*m_paddingSizeY) * nbRaw ); std::vector<int32_t> listSizeColomn; // set background color : ewol::compositing::Drawing * tmpDraw = new ewol::compositing::Drawing(); tmpDraw->setColor(etk::Color<>(0xFF, 0xFF, 0xFF, 0xFF)); tmpDraw->setPos(vec3(0,0,0) ); tmpDraw->rectangleWidth(vec3(m_size.x(), m_size.y(), 0) ); uint32_t displayableRaw = m_size.y() / (minHeight + 2*m_paddingSizeY) +2; int32_t startRaw = m_originScrooled.y() / (minHeight + 2*m_paddingSizeY); if (startRaw >= nbRaw-1 ) { startRaw = nbRaw - 1; } if (startRaw<0) { startRaw = 0; } // calculate the real position ... tmpOriginY = m_size.y() - (-m_originScrooled.y() + (startRaw+1)*(minHeight + 2*m_paddingSizeY)); for (int32_t iii=startRaw; iii<nbRaw && iii<(int32_t)(startRaw+displayableRaw); iii++) { std::string myTextToWrite = "???"; etk::Color<> fg(0x00, 0x00, 0x00, 0xFF); if (m_list[iii] != nullptr) { myTextToWrite = m_list[iii]->m_label; } ewol::compositing::Text * tmpText = new ewol::compositing::Text(); vec3 textPos; textPos.setX((int32_t)tmpOriginX); if (m_list[iii]->m_group == false) { textPos.setX(textPos.x() + minHeight); } textPos.setY((int32_t)(tmpOriginY + m_paddingSizeY)); tmpText->setPos(textPos); tmpText->print(myTextToWrite); addOObject(tmpText); tmpOriginY -= minHeight + 2* m_paddingSizeY; } addOObject(tmpDraw, 0); // call the herited class... ewol::widget::WidgetScrolled::onRegenerateDisplay(); } }
void ewol::widget::List::onRegenerateDisplay() { if (true == needRedraw()) { // clean the object list ... clearOObjectList(); //EWOL_DEBUG("OnRegenerateDisplay(" << m_size.x << "," << m_size.y << ")"); int32_t tmpOriginX = 0; int32_t tmpOriginY = 0; /* if (true == m_userFill.x) { tmpOriginX = 0; } if (true == m_userFill.y) { tmpOriginY = 0; }*/ tmpOriginX += m_paddingSizeX; tmpOriginY += m_paddingSizeY; // TODO : remove this ... int32_t minHeight = 25; uint32_t nbColomn = getNuberOfColomn(); int32_t nbRaw = getNuberOfRaw(); // For the scrooling windows m_maxSize = ivec2(m_size.x(), (minHeight + 2*m_paddingSizeY) * nbRaw ); std::vector<int32_t> listSizeColomn; ewol::compositing::Drawing * BGOObjects = new ewol::compositing::Drawing(); etk::Color<> basicBG = getBasicBG(); BGOObjects->setColor(basicBG); BGOObjects->setPos(vec3(0, 0, 0) ); BGOObjects->rectangleWidth(vec3(m_size.x(), m_size.y(), 0) ); int32_t startRaw = m_originScrooled.y() / (minHeight + 2*m_paddingSizeY); if (startRaw >= nbRaw-1 ) { startRaw = nbRaw - 1; } if (startRaw<0) { startRaw = 0; } // We display only compleate lines ... //EWOL_DEBUG("Request drawing list : " << startRaw << "-->" << (startRaw+displayableRaw) << " in " << nbRaw << "raws ; start display : " << m_originScrooled.y << " == > " << tmpOriginY << " line size=" << minHeight + 2*m_paddingSizeY ); /*clipping_ts drawClipping; drawClipping.x = 0; drawClipping.y = 0; drawClipping.w = m_size.x - (2*m_paddingSizeX); drawClipping.h = m_size.y; */ // remove all the positions : m_lineSize.clear(); int32_t displayPositionY = m_size.y(); int32_t displayPositionX = 0; ivec2 tmpRegister(startRaw, displayPositionY); // add the default position raw : m_lineSize.push_back(tmpRegister); for (size_t jjj=0; jjj<nbColomn && displayPositionX < m_size.x() ; jjj++) { int32_t sizeColom = 0; displayPositionY = m_size.y(); m_nbVisibleRaw = 0; for (int32_t iii=startRaw; iii<nbRaw && displayPositionY >= 0; iii++) { m_nbVisibleRaw++; std::string myTextToWrite; etk::Color<> fg; etk::Color<> bg; getElement(jjj, iii, myTextToWrite, fg, bg); ewol::compositing::Text * tmpText = new ewol::compositing::Text(); if (nullptr != tmpText) { // get font size : int32_t tmpFontHeight = tmpText->calculateSize(char32_t('A')).y(); displayPositionY-=(tmpFontHeight+m_paddingSizeY); BGOObjects->setColor(bg); BGOObjects->setPos(vec3(displayPositionX, displayPositionY, 0) ); BGOObjects->rectangleWidth(vec3(m_size.x()-displayPositionX, tmpFontHeight+2*m_paddingSizeY, 0)); // get the maximum size of the colomn : vec3 textSize = tmpText->calculateSize(myTextToWrite); sizeColom = std::max(sizeColom, (int32_t)textSize.x()); tmpText->setColor(fg); tmpText->setPos(vec3(tmpOriginX + displayPositionX, displayPositionY, 0) ); tmpText->print(myTextToWrite); addOObject(tmpText); // madding move ... displayPositionY -= m_paddingSizeY; // add the raw position to remember it ... tmpRegister.setX(tmpRegister.x()+1); tmpRegister.setY(displayPositionY); m_lineSize.push_back(tmpRegister); //EWOL_DEBUG("List indexation:" << tmpRegister); } } displayPositionX += sizeColom; tmpOriginX += m_paddingSizeX*2*2; } //m_lineSize.push_back(tmpOriginY); addOObject(BGOObjects, 0); // call the herited class... WidgetScrolled::onRegenerateDisplay(); } }