summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/Benau/go_rlottie/vector_vglobal.h
diff options
context:
space:
mode:
authorBenau <Benau@users.noreply.github.com>2021-08-25 04:32:50 +0800
committerGitHub <noreply@github.com>2021-08-24 22:32:50 +0200
commit53cafa9f3d0c8be33821fc7338b1da97e91d9cc6 (patch)
tree964a225219099a1a1c282e27913767da588191b4 /vendor/github.com/Benau/go_rlottie/vector_vglobal.h
parentd4195deb3a6305c49c50ff30e8af978c7f1bdd92 (diff)
downloadmatterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.tar.gz
matterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.tar.bz2
matterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.zip
Convert .tgs with go libraries (and cgo) (telegram) (#1569)
This commit adds support for go/cgo tgs conversion when building with the -tags `cgo` The default binaries are still "pure" go and uses the old way of converting. * Move lottie_convert.py conversion code to its own file * Add optional libtgsconverter * Update vendor * Apply suggestions from code review * Update bridge/helper/libtgsconverter.go Co-authored-by: Wim <wim@42.be>
Diffstat (limited to 'vendor/github.com/Benau/go_rlottie/vector_vglobal.h')
-rw-r--r--vendor/github.com/Benau/go_rlottie/vector_vglobal.h302
1 files changed, 302 insertions, 0 deletions
diff --git a/vendor/github.com/Benau/go_rlottie/vector_vglobal.h b/vendor/github.com/Benau/go_rlottie/vector_vglobal.h
new file mode 100644
index 00000000..678ee199
--- /dev/null
+++ b/vendor/github.com/Benau/go_rlottie/vector_vglobal.h
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef VGLOBAL_H
+#define VGLOBAL_H
+
+#include <cmath>
+#include <cstdint>
+#include <iostream>
+#include <type_traits>
+#include <utility>
+
+using uint = uint32_t;
+using ushort = uint16_t;
+using uchar = uint8_t;
+
+#if !defined(V_NAMESPACE)
+
+#define V_USE_NAMESPACE
+#define V_BEGIN_NAMESPACE
+#define V_END_NAMESPACE
+
+#else /* user namespace */
+
+#define V_USE_NAMESPACE using namespace ::V_NAMESPACE;
+#define V_BEGIN_NAMESPACE namespace V_NAMESPACE {
+#define V_END_NAMESPACE }
+
+#endif
+
+#ifndef __has_attribute
+# define __has_attribute(x) 0
+#endif /* !__has_attribute */
+
+#if __has_attribute(unused)
+# define V_UNUSED __attribute__((__unused__))
+#else
+# define V_UNUSED
+#endif /* V_UNUSED */
+
+#if __has_attribute(warn_unused_result)
+# define V_REQUIRED_RESULT __attribute__((__warn_unused_result__))
+#else
+# define V_REQUIRED_RESULT
+#endif /* V_REQUIRED_RESULT */
+
+#define V_CONSTEXPR constexpr
+#define V_NOTHROW noexcept
+
+#include "vector_vdebug.h"
+
+#if __GNUC__ >= 7
+#define VECTOR_FALLTHROUGH __attribute__ ((fallthrough));
+#else
+#define VECTOR_FALLTHROUGH
+#endif
+
+#ifdef LOTTIE_THREAD_SUPPORT
+#define vthread_local thread_local
+#else
+#define vthread_local
+#endif
+
+#if defined(_MSC_VER)
+ #define V_ALWAYS_INLINE __forceinline
+#else
+ #define V_ALWAYS_INLINE __attribute__((always_inline))
+#endif
+
+template <typename T>
+V_CONSTEXPR inline const T &vMin(const T &a, const T &b)
+{
+ return (a < b) ? a : b;
+}
+template <typename T>
+V_CONSTEXPR inline const T &vMax(const T &a, const T &b)
+{
+ return (a < b) ? b : a;
+}
+
+static const double EPSILON_DOUBLE = 0.000000000001f;
+static const float EPSILON_FLOAT = 0.000001f;
+
+static inline bool vCompare(float p1, float p2)
+{
+ return (std::abs(p1 - p2) < EPSILON_FLOAT);
+}
+
+static inline bool vIsZero(float f)
+{
+ return (std::abs(f) <= EPSILON_FLOAT);
+}
+
+static inline bool vIsZero(double f)
+{
+ return (std::abs(f) <= EPSILON_DOUBLE);
+}
+
+class vFlagHelper {
+ int i;
+
+public:
+ explicit constexpr inline vFlagHelper(int ai) noexcept : i(ai) {}
+ constexpr inline operator int() const noexcept { return i; }
+
+ explicit constexpr inline vFlagHelper(uint ai) noexcept : i(int(ai)) {}
+ explicit constexpr inline vFlagHelper(short ai) noexcept : i(int(ai)) {}
+ explicit constexpr inline vFlagHelper(ushort ai) noexcept : i(int(uint(ai))) {}
+ constexpr inline operator uint() const noexcept { return uint(i); }
+};
+
+template <typename Enum>
+class vFlag {
+public:
+ static_assert(
+ (sizeof(Enum) <= sizeof(int)),
+ "vFlag only supports int as storage so bigger type will overflow");
+ static_assert((std::is_enum<Enum>::value),
+ "vFlag is only usable on enumeration types.");
+
+ using Int = typename std::conditional<
+ std::is_unsigned<typename std::underlying_type<Enum>::type>::value,
+ unsigned int, signed int>::type;
+
+ using enum_type = Enum;
+ // compiler-generated copy/move ctor/assignment operators are fine!
+
+ vFlag() = default;
+ constexpr vFlag(Enum f) noexcept : i(Int(f)) {}
+ explicit constexpr vFlag(vFlagHelper f) noexcept : i(f) {}
+
+ inline vFlag &operator&=(int mask) noexcept
+ {
+ i &= mask;
+ return *this;
+ }
+ inline vFlag &operator&=(uint mask) noexcept
+ {
+ i &= mask;
+ return *this;
+ }
+ inline vFlag &operator&=(Enum mask) noexcept
+ {
+ i &= Int(mask);
+ return *this;
+ }
+ inline vFlag &operator|=(vFlag f) noexcept
+ {
+ i |= f.i;
+ return *this;
+ }
+ inline vFlag &operator|=(Enum f) noexcept
+ {
+ i |= Int(f);
+ return *this;
+ }
+ inline vFlag &operator^=(vFlag f) noexcept
+ {
+ i ^= f.i;
+ return *this;
+ }
+ inline vFlag &operator^=(Enum f) noexcept
+ {
+ i ^= Int(f);
+ return *this;
+ }
+
+ constexpr inline operator Int() const noexcept { return i; }
+
+ constexpr inline vFlag operator|(vFlag f) const
+ {
+ return vFlag(vFlagHelper(i | f.i));
+ }
+ constexpr inline vFlag operator|(Enum f) const noexcept
+ {
+ return vFlag(vFlagHelper(i | Int(f)));
+ }
+ constexpr inline vFlag operator^(vFlag f) const noexcept
+ {
+ return vFlag(vFlagHelper(i ^ f.i));
+ }
+ constexpr inline vFlag operator^(Enum f) const noexcept
+ {
+ return vFlag(vFlagHelper(i ^ Int(f)));
+ }
+ constexpr inline vFlag operator&(int mask) const noexcept
+ {
+ return vFlag(vFlagHelper(i & mask));
+ }
+ constexpr inline vFlag operator&(uint mask) const noexcept
+ {
+ return vFlag(vFlagHelper(i & mask));
+ }
+ constexpr inline vFlag operator&(Enum f) const noexcept
+ {
+ return vFlag(vFlagHelper(i & Int(f)));
+ }
+ constexpr inline vFlag operator~() const noexcept
+ {
+ return vFlag(vFlagHelper(~i));
+ }
+
+ constexpr inline bool operator!() const noexcept { return !i; }
+
+ constexpr inline bool testFlag(Enum f) const noexcept
+ {
+ return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f));
+ }
+ inline vFlag &setFlag(Enum f, bool on = true) noexcept
+ {
+ return on ? (*this |= f) : (*this &= ~f);
+ }
+
+ Int i{0};
+};
+
+class VColor {
+public:
+ VColor() = default;
+ explicit VColor(uchar red, uchar green, uchar blue, uchar alpha = 255) noexcept
+ :a(alpha), r(red), g(green), b(blue){}
+ inline uchar red() const noexcept { return r; }
+ inline uchar green() const noexcept { return g; }
+ inline uchar blue() const noexcept { return b; }
+ inline uchar alpha() const noexcept { return a; }
+ inline void setRed(uchar red) noexcept { r = red; }
+ inline void setGreen(uchar green) noexcept { g = green; }
+ inline void setBlue(uchar blue) noexcept { b = blue; }
+ inline void setAlpha(uchar alpha) noexcept { a = alpha; }
+ inline bool isOpaque() const { return a == 255; }
+ inline bool isTransparent() const { return a == 0; }
+ inline bool operator==(const VColor &o) const
+ {
+ return ((a == o.a) && (r == o.r) && (g == o.g) && (b == o.b));
+ }
+ uint premulARGB() const
+ {
+ int pr = (r * a) / 255;
+ int pg = (g * a) / 255;
+ int pb = (b * a) / 255;
+ return uint((a << 24) | (pr << 16) | (pg << 8) | (pb));
+ }
+
+ uint premulARGB(float opacity) const
+ {
+ int alpha = int(a * opacity);
+ int pr = (r * alpha) / 255;
+ int pg = (g * alpha) / 255;
+ int pb = (b * alpha) / 255;
+ return uint((alpha << 24) | (pr << 16) | (pg << 8) | (pb));
+ }
+
+public:
+ uchar a{0};
+ uchar r{0};
+ uchar g{0};
+ uchar b{0};
+};
+
+enum class FillRule: unsigned char { EvenOdd, Winding };
+enum class JoinStyle: unsigned char { Miter, Bevel, Round };
+enum class CapStyle: unsigned char { Flat, Square, Round };
+
+enum class BlendMode {
+ Src,
+ SrcOver,
+ DestIn,
+ DestOut,
+ Last,
+};
+
+#ifndef V_CONSTRUCTOR_FUNCTION
+#define V_CONSTRUCTOR_FUNCTION0(AFUNC) \
+ namespace { \
+ static const struct AFUNC##_ctor_class_ { \
+ inline AFUNC##_ctor_class_() { AFUNC(); } \
+ } AFUNC##_ctor_instance_; \
+ }
+
+#define V_CONSTRUCTOR_FUNCTION(AFUNC) V_CONSTRUCTOR_FUNCTION0(AFUNC)
+#endif
+
+#endif // VGLOBAL_H