mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:37:35 +00:00
LibGfx: Implement SaturateFilter
This implements the saturate operation as defined in the SVG filter specification. (https://drafts.fxtf.org/filter-effects-1/#feColorMatrixElement)
This commit is contained in:
parent
97f66562cc
commit
f77a84a5f6
1 changed files with 40 additions and 0 deletions
40
Userland/Libraries/LibGfx/Filters/SaturateFilter.h
Normal file
40
Userland/Libraries/LibGfx/Filters/SaturateFilter.h
Normal file
|
@ -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
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue