Review comments

This commit is contained in:
jpirnay
2026-04-29 11:26:50 +02:00
parent b83482e732
commit a0243ad6de
6 changed files with 66 additions and 21 deletions
+14 -9
View File
@@ -18,17 +18,22 @@ void TextBlock::render(const GfxRenderer& renderer, const int fontId, const int
renderer.drawText(fontId, wordX, y, words[i].c_str(), true, currentStyle);
const std::string& w = words[i];
const int fullWordWidth = renderer.getTextWidth(fontId, w.c_str(), currentStyle);
int startX = wordX;
int lineWidth = fullWordWidth;
const bool hasEmSpacePrefix = w.size() >= 3 && static_cast<uint8_t>(w[0]) == 0xE2 &&
static_cast<uint8_t>(w[1]) == 0x80 && static_cast<uint8_t>(w[2]) == 0x83;
if (hasEmSpacePrefix) {
const char* visiblePtr = w.c_str() + 3;
const int prefixWidth = renderer.getTextAdvanceX(fontId, "\xe2\x80\x83", currentStyle);
const int visibleWidth = renderer.getTextWidth(fontId, visiblePtr, currentStyle);
startX = wordX + prefixWidth;
lineWidth = visibleWidth;
const bool hasDecoration = (currentStyle & (EpdFontFamily::UNDERLINE | EpdFontFamily::STRIKETHROUGH)) != 0;
int startX = wordX;
int lineWidth = 0;
if (hasEmSpacePrefix || hasDecoration) {
const int fullWordWidth = renderer.getTextWidth(fontId, w.c_str(), currentStyle);
lineWidth = fullWordWidth;
if (hasEmSpacePrefix) {
const char* visiblePtr = w.c_str() + 3;
const int prefixWidth = renderer.getTextAdvanceX(fontId, "\xe2\x80\x83", currentStyle);
const int visibleWidth = renderer.getTextWidth(fontId, visiblePtr, currentStyle);
startX = wordX + prefixWidth;
lineWidth = visibleWidth;
}
}
if ((currentStyle & EpdFontFamily::UNDERLINE) != 0) {
@@ -894,6 +894,19 @@ void XMLCALL ChapterHtmlSlimParser::startElement(void* userData, const XML_Char*
entry.hasStrikethrough = true;
entry.strikethrough = true;
}
if (cssStyle.hasTextDecoration()) {
const uint8_t dec = static_cast<uint8_t>(cssStyle.textDecoration);
if (dec & static_cast<uint8_t>(CssTextDecoration::Underline)) {
entry.hasUnderline = true;
entry.underline = true;
self->underlineUntilDepth = std::min(self->underlineUntilDepth, self->depth);
}
if (dec & static_cast<uint8_t>(CssTextDecoration::LineThrough)) {
entry.hasStrikethrough = true;
entry.strikethrough = true;
self->strikethroughUntilDepth = std::min(self->strikethroughUntilDepth, self->depth);
}
}
if (cssStyle.hasFontWeight()) {
entry.hasBold = true;
entry.bold = cssStyle.fontWeight == CssFontWeight::Bold;