// // slots // void BigCharWidget::onTileIndexUpdated(int tileIndex) { auto state = State::getInstance(); if (_tileIndex != tileIndex) { _tileIndex = tileIndex; _charIndex = state->getCharIndexFromTileIndex(_tileIndex); update(); } }
void XlinkPreview::tileUpdated(int tileIndex) { if(!isConnected()) return; auto state = State::getInstance(); State::TileProperties properties = state->getTileProperties(); int charIndex = state->getCharIndexFromTileIndex(tileIndex); int numChars = properties.size.width() * properties.size.height(); if(properties.interleaved == 1) { xlink_load(0xb7, 0x00, 0x3000 + charIndex * 8, (uchar*) state->getCharAtIndex(charIndex), numChars*8); } else { for(int sent=0; sent<numChars; sent++) { xlink_load(0xb7, 0x00, 0x3000 + charIndex * 8, (uchar*) state->getCharAtIndex(charIndex), 8); charIndex += properties.interleaved; } } }
int State::tileGetPen(int tileIndex, const QPoint& position) { Q_ASSERT(tileIndex>=0 && tileIndex<=getTileIndexFromCharIndex(255) && "invalid index value"); Q_ASSERT(position.x()<State::MAX_TILE_WIDTH*8 && position.y()<State::MAX_TILE_HEIGHT*8 && "Invalid position"); int x = position.x(); int y = position.y(); int bitIndex = (x%8) + (y%8) * 8; int charIndex = getCharIndexFromTileIndex(tileIndex) + (x/8) * _tileProperties.interleaved + (y/8) * _tileProperties.interleaved * _tileProperties.size.width(); char c = _charset[charIndex*8 + bitIndex/8]; int b = bitIndex%8; int ret = 0; // not multicolor: expected result: 0 or 1 if (!shouldBeDisplayedInMulticolor2(tileIndex)) { uint8_t mask = 1 << (7-b); ret = (c & mask) >> (7-b); }