void TextSpan::DrawContentsInRegions(const Regions& rgns, const Point& offset) const { size_t charsPrinted = 0; Regions::const_iterator rit = rgns.begin(); for (; rit != rgns.end(); ++rit) { Region drawRect = *rit; drawRect.x += offset.x; drawRect.y += offset.y; const Font* printFont = font; Palette* printPalette = palette; TextContainer* container = dynamic_cast<TextContainer*>(parent); if (printFont == NULL && container) { printFont = container->TextFont(); } if (printPalette == NULL && container) { printPalette = container->TextPalette(); } assert(printFont && printPalette); #if (DEBUG_TEXT) // FIXME: this shouldnt happen, but it does (BG2 belt03 unidentified). // for now only assert when DEBUG_TEXT is set // the situation is benign and nothing even looks wrong because all that this means is that there was more space allocated than was actually needed assert(charsPrinted < text.length()); core->GetVideoDriver()->DrawRect(drawRect, ColorRed, true); #endif charsPrinted += printFont->Print(drawRect, text.substr(charsPrinted), printPalette, IE_FONT_ALIGN_LEFT); #if (DEBUG_TEXT) core->GetVideoDriver()->DrawRect(drawRect, ColorWhite, false); #endif } }
inline const Font* TextSpan::LayoutFont() const { if (font) return font; TextContainer* container = dynamic_cast<TextContainer*>(parent); if (container) { return container->TextFont(); } return NULL; }