/* * Copyright (c) 2024-2025, Lucien Fiorini * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Gfx { enum class ColorFilterType { Brightness, Contrast, Grayscale, Invert, Opacity, Saturate, Sepia }; struct FilterImpl; class Filter { public: Filter(Filter const&); Filter& operator=(Filter const&); ~Filter(); static Filter compose(Filter const& outer, Filter const& inner); static Filter blend(Optional background, Optional foreground, CompositingAndBlendingOperator mode); static Filter flood(Gfx::Color color, float opacity); static Filter drop_shadow(float offset_x, float offset_y, float radius, Gfx::Color color, Optional input = {}); static Filter blur(float radius_x, float radius_y, Optional input = {}); static Filter color(ColorFilterType type, float amount, Optional input = {}); static Filter color_matrix(float matrix[20], Optional input = {}); static Filter saturate(float value, Optional input = {}); static Filter hue_rotate(float angle_degrees, Optional input = {}); FilterImpl const& impl() const; private: Filter(NonnullOwnPtr&&); NonnullOwnPtr m_impl; }; }