diff options
author | Norbert Preining <norbert@preining.info> | 2023-01-12 03:01:29 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-01-12 03:01:29 +0000 |
commit | 6a7900c93acc16d1bbd2f1e26286c7dd7387e6c0 (patch) | |
tree | 76196287351cba68a51934c49468bf1a7846aa76 /dviware/dvisvgm/src/Opacity.cpp | |
parent | c1c19023b4b1d43cb874f84df5102b485853e672 (diff) |
CTAN sync 202301120301
Diffstat (limited to 'dviware/dvisvgm/src/Opacity.cpp')
-rw-r--r-- | dviware/dvisvgm/src/Opacity.cpp | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/dviware/dvisvgm/src/Opacity.cpp b/dviware/dvisvgm/src/Opacity.cpp index 058f794a86..027992028b 100644 --- a/dviware/dvisvgm/src/Opacity.cpp +++ b/dviware/dvisvgm/src/Opacity.cpp @@ -2,7 +2,7 @@ ** Opacity.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -45,6 +45,50 @@ string Opacity::cssBlendMode (BlendMode bm) { } +static string to_lower_drop_nonalpha (const string &str) { + string ret; + if (!str.empty()) { + ret.reserve(str.length()); + for (char c : str) { + if (isalpha(c)) + ret += char(tolower(c)); + } + } + return ret; +} + + +Opacity::BlendMode Opacity::blendMode (const std::string &name) { + struct { + const char *name; + BlendMode mode; + } modes[] = { + {"normal", BM_NORMAL }, + {"multiply", BM_MULTIPLY }, + {"screen", BM_SCREEN }, + {"overlay", BM_OVERLAY }, + {"softlight", BM_SOFTLIGHT }, + {"hardlight", BM_HARDLIGHT }, + {"colordodge", BM_COLORDODGE}, + {"colorburn", BM_COLORBURN }, + {"darken", BM_DARKEN }, + {"lighten", BM_LIGHTEN }, + {"difference", BM_DIFFERENCE}, + {"exclusion", BM_EXCLUSION }, + {"hue", BM_HUE }, + {"saturation", BM_SATURATION}, + {"color", BM_COLOR }, + {"luminosity", BM_LUMINOSITY} + }; + string compname = to_lower_drop_nonalpha(name); + for (const auto &m : modes) { + if (compname == m.name) + return m.mode; + } + return BM_NORMAL; +} + + bool Opacity::operator == (const Opacity &opacity) const { return opacity._fillalpha == _fillalpha && opacity._strokealpha == _strokealpha @@ -56,4 +100,4 @@ bool Opacity::operator != (const Opacity &opacity) const { return opacity._fillalpha != _fillalpha || opacity._strokealpha != _strokealpha || opacity._blendMode != _blendMode; -}
\ No newline at end of file +} |