diff --git a/Userland/Libraries/LibGfx/Filters/BrightnessFilter.h b/Userland/Libraries/LibGfx/Filters/BrightnessFilter.h new file mode 100644 index 0000000000..85303ba9ae --- /dev/null +++ b/Userland/Libraries/LibGfx/Filters/BrightnessFilter.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Gfx { + +class BrightnessFilter : public ColorFilter { +public: + using ColorFilter::ColorFilter; + virtual ~BrightnessFilter() = default; + + virtual StringView class_name() const override { return "BrightnessFilter"sv; } + + virtual bool amount_handled_in_filter() const override + { + return true; + } + +protected: + Color convert_color(Color original) override + { + auto convert_channel = [&](u8 channel) { + return static_cast(clamp(round_to(channel * m_amount), 0, 255)); + }; + return Gfx::Color { + convert_channel(original.red()), + convert_channel(original.green()), + convert_channel(original.blue()), + original.alpha() + }; + }; +}; + +} diff --git a/Userland/Libraries/LibGfx/Filters/ContrastFilter.h b/Userland/Libraries/LibGfx/Filters/ContrastFilter.h new file mode 100644 index 0000000000..5bcb6764df --- /dev/null +++ b/Userland/Libraries/LibGfx/Filters/ContrastFilter.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Gfx { + +class ContrastFilter : public ColorFilter { +public: + using ColorFilter::ColorFilter; + virtual ~ContrastFilter() = default; + + virtual StringView class_name() const override { return "ContrastFilter"sv; } + + virtual bool amount_handled_in_filter() const override + { + return true; + } + +protected: + Color convert_color(Color original) override + { + auto convert_channel = [&](u8 channel) { + return static_cast(clamp(round_to(channel * m_amount + (-128 * m_amount) + 128), 0, 255)); + }; + return Gfx::Color { + convert_channel(original.red()), + convert_channel(original.green()), + convert_channel(original.blue()), + original.alpha() + }; + }; +}; + +} diff --git a/Userland/Libraries/LibGfx/Filters/OpacityFilter.h b/Userland/Libraries/LibGfx/Filters/OpacityFilter.h new file mode 100644 index 0000000000..5e16907355 --- /dev/null +++ b/Userland/Libraries/LibGfx/Filters/OpacityFilter.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Gfx { + +class OpacityFilter : public ColorFilter { +public: + using ColorFilter::ColorFilter; + virtual ~OpacityFilter() = default; + + virtual StringView class_name() const override { return "OpacityFilter"sv; } + + virtual bool amount_handled_in_filter() const override + { + return true; + } + +protected: + Color convert_color(Color original) override + { + return original.with_alpha(m_amount * 255); + }; +}; + +}