Beispiel #1
0
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();
	}
}
Beispiel #2
0
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();
	}
}