void StackLayout::processLine(uint8_t *pixelData, int dataOffset) { if (itemNr < 0) return; if (itemScanLine >= getItemHeight(itemNr)) { itemScanLine = 0; if (--itemNr < 0) return; currentNumberWidth = getNumberWidth(itemNr + firstLevelVisible); } DisplayItem *item = NULL; if (itemNr < getItems().getLength()) item = getItems().getAt(itemNr); if (itemScanLine == 0 && item) { if (drawOffsetX <= item->getX()) item->initLineScanning(0, 0, drawWidth - item->getX()); else item->initLineScanning(0, drawOffsetX - item->getX(), drawWidth); } if (itemNr > 0) drawNumber(pixelData, dataOffset, itemNr + firstLevelVisible); if (item != NULL && isItemVisible(item)) { if (itemScanLine < item->getHeight()) { if (drawOffsetX <= item->getX()) item->processLine(pixelData, dataOffset + item->getX() - drawOffsetX); else item->processLine(pixelData, dataOffset); } } itemScanLine++; }
void StackLayout::initLineScanning(int scanLine, int drawOffsetX, int drawWidth) { itemNr = upperItemNr; itemScanLine = upperItemScanStart + scanLine; while (itemScanLine > getItemHeight(itemNr)) { itemScanLine -= getItemHeight(itemNr); itemNr--; } this->drawOffsetX = drawOffsetX; this->drawWidth = drawWidth; currentNumberWidth = getNumberWidth(itemNr + firstLevelVisible); DisplayItem *item = NULL; if (itemNr < getItems().getLength()) item = getItems().getAt(itemNr); if (item) { if (drawOffsetX <= item->getX()) item->initLineScanning(scanLine - item->getY(), 0, drawWidth - item->getX()); else item->initLineScanning(scanLine - item->getY(), drawOffsetX - item->getX(), drawWidth); } }