Преглед изворни кода

LibGfx: Implement SaturateFilter

This implements the saturate operation as defined in the SVG filter
specification.

(https://drafts.fxtf.org/filter-effects-1/#feColorMatrixElement)
MacDue пре 2 година
родитељ
комит
f77a84a5f6
1 измењених фајлова са 40 додато и 0 уклоњено
  1. 40 0
      Userland/Libraries/LibGfx/Filters/SaturateFilter.h

+ 40 - 0
Userland/Libraries/LibGfx/Filters/SaturateFilter.h

@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022, MacDue <macdue@dueutil.tech>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGfx/Filters/MatrixFilter.h>
+
+namespace Gfx {
+
+class SaturateFilter : public MatrixFilter {
+public:
+    SaturateFilter(float amount)
+        : MatrixFilter(calculate_saturate_matrix(amount))
+    {
+    }
+
+    virtual bool amount_handled_in_filter() const override
+    {
+        return true;
+    }
+
+    virtual StringView class_name() const override { return "SaturateFilter"sv; }
+
+private:
+    static FloatMatrix3x3 calculate_saturate_matrix(float amount)
+    {
+        // The matrix is taken directly from the SVG filter specification:
+        // https://drafts.fxtf.org/filter-effects-1/#feColorMatrixElement
+        return FloatMatrix3x3 {
+            0.213f + 0.787f * amount, 0.715f - 0.715f * amount, 0.072f - 0.072f * amount,
+            0.213f - 0.213f * amount, 0.715f + 0.285f * amount, 0.072f - 0.072f * amount,
+            0.213f - 0.213f * amount, 0.715f - 0.715f * amount, 0.072f + 0.928f * amount
+        };
+    }
+};
+
+}