summaryrefslogtreecommitdiff
path: root/dviware/dvisvgm/src/Opacity.cpp
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-01-12 03:01:29 +0000
committerNorbert Preining <norbert@preining.info>2023-01-12 03:01:29 +0000
commit6a7900c93acc16d1bbd2f1e26286c7dd7387e6c0 (patch)
tree76196287351cba68a51934c49468bf1a7846aa76 /dviware/dvisvgm/src/Opacity.cpp
parentc1c19023b4b1d43cb874f84df5102b485853e672 (diff)
CTAN sync 202301120301
Diffstat (limited to 'dviware/dvisvgm/src/Opacity.cpp')
-rw-r--r--dviware/dvisvgm/src/Opacity.cpp48
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
+}