utils/HtmlFonts.cc | 20 +++++++++++++++----- utils/HtmlFonts.h | 12 ++++++++---- utils/HtmlOutputDev.cc | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-)
New commits: commit 47550058463d181096770624aad811ae4eaf2688 Author: Eddie Kohler <[email protected]> Date: Mon Oct 26 14:06:03 2020 -0400 HTML and XML output includes opacity. In HTML output, the opacity attribute is added to CSS. In XML output, opacity is a separate XML attribute on <fontspec>. diff --git a/utils/HtmlFonts.cc b/utils/HtmlFonts.cc index bb46c152..23f7dee0 100644 --- a/utils/HtmlFonts.cc +++ b/utils/HtmlFonts.cc @@ -69,17 +69,19 @@ void removeStyleSuffix(std::string &familyName) extern bool xml; extern bool fontFullName; -HtmlFontColor::HtmlFontColor(GfxRGB rgb) +HtmlFontColor::HtmlFontColor(GfxRGB rgb, double opacity_) { r = static_cast<int>(rgb.r / 65535.0 * 255.0); g = static_cast<int>(rgb.g / 65535.0 * 255.0); b = static_cast<int>(rgb.b / 65535.0 * 255.0); - if (!(Ok(r) && Ok(b) && Ok(g))) { + opacity = static_cast<int>(opacity_ * 255.999); + if (!(Ok(r) && Ok(b) && Ok(g) && Ok(opacity))) { if (!globalParams->getErrQuiet()) - fprintf(stderr, "Error : Bad color (%d,%d,%d) reset to (0,0,0)\n", r, g, b); + fprintf(stderr, "Error : Bad color (%d,%d,%d,%d) reset to (0,0,0,255)\n", r, g, b, opacity); r = 0; g = 0; b = 0; + opacity = 255; } } @@ -118,9 +120,9 @@ GooString *HtmlFontColor::toString() const return tmp; } -HtmlFont::HtmlFont(GfxFont *font, int _size, GfxRGB rgb) +HtmlFont::HtmlFont(GfxFont *font, int _size, GfxRGB rgb, double opacity) { - color = HtmlFontColor(rgb); + color = HtmlFontColor(rgb, opacity); lineSize = -1; @@ -310,6 +312,10 @@ GooString *HtmlFontAccu::CSStyle(int i, int j) tmp->append(fontName); // font.getFontName()); tmp->append(";color:"); tmp->append(colorStr); + if (font.getColor().getOpacity() != 1.0) { + tmp->append(";opacity:"); + tmp->append(std::to_string(font.getColor().getOpacity())); + } // if there is rotation or skew, include the matrix if (font.isRotOrSkewed()) { const double *const text_mat = font.getRotMat(); @@ -343,6 +349,10 @@ GooString *HtmlFontAccu::CSStyle(int i, int j) tmp->append(fontName); tmp->append("\" color=\""); tmp->append(colorStr); + if (font.getColor().getOpacity() != 1.0) { + tmp->append("\" opacity=\""); + tmp->append(std::to_string(font.getColor().getOpacity())); + } tmp->append("\"/>"); } diff --git a/utils/HtmlFonts.h b/utils/HtmlFonts.h index 6f410262..6b5bb372 100644 --- a/utils/HtmlFonts.h +++ b/utils/HtmlFonts.h @@ -42,28 +42,32 @@ private: unsigned int r; unsigned int g; unsigned int b; + unsigned int opacity; bool Ok(unsigned int xcol) { return xcol <= 255; } GooString *convtoX(unsigned int xcol) const; public: - HtmlFontColor() : r(0), g(0), b(0) { } - HtmlFontColor(GfxRGB rgb); + HtmlFontColor() : r(0), g(0), b(0), opacity(255) { } + HtmlFontColor(GfxRGB rgb, double opacity); HtmlFontColor(const HtmlFontColor &x) { r = x.r; g = x.g; b = x.b; + opacity = x.opacity; } HtmlFontColor &operator=(const HtmlFontColor &x) { r = x.r; g = x.g; b = x.b; + opacity = x.opacity; return *this; } ~HtmlFontColor() {}; GooString *toString() const; - bool isEqual(const HtmlFontColor &col) const { return ((r == col.r) && (g == col.g) && (b == col.b)); } + double getOpacity() const { return opacity / 255.0; } + bool isEqual(const HtmlFontColor &col) const { return ((r == col.r) && (g == col.g) && (b == col.b) && (opacity == col.opacity)); } }; class HtmlFont @@ -79,7 +83,7 @@ private: HtmlFontColor color; double rotSkewMat[4]; // only four values needed for rotation and skew public: - HtmlFont(GfxFont *font, int _size, GfxRGB rgb); + HtmlFont(GfxFont *font, int _size, GfxRGB rgb, double opacity); HtmlFont(const HtmlFont &x); HtmlFont &operator=(const HtmlFont &x); HtmlFontColor getColor() const { return color; } diff --git a/utils/HtmlOutputDev.cc b/utils/HtmlOutputDev.cc index 27a7f11a..1572c6a1 100644 --- a/utils/HtmlOutputDev.cc +++ b/utils/HtmlOutputDev.cc @@ -189,7 +189,7 @@ HtmlString::HtmlString(GfxState *state, double fontSize, HtmlFontAccu *_fonts) : yMax = y - descent * fontSize; GfxRGB rgb; state->getFillRGB(&rgb); - HtmlFont hfont = HtmlFont(font, static_cast<int>(fontSize), rgb); + HtmlFont hfont = HtmlFont(font, static_cast<int>(fontSize), rgb, state->getFillOpacity()); if (isMatRotOrSkew(state->getTextMat())) { double normalizedMatrix[4]; memcpy(normalizedMatrix, state->getTextMat(), sizeof(normalizedMatrix)); _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
