AUI Framework  develop
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
bezier.h
    1/*
    2 * AUI Framework - Declarative UI toolkit for modern C++20
    3 * Copyright (C) 2020-2025 Alex2772 and Contributors
    4 *
    5 * SPDX-License-Identifier: MPL-2.0
    6 *
    7 * This Source Code Form is subject to the terms of the Mozilla Public
    8 * License, v. 2.0. If a copy of the MPL was not distributed with this
    9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
   10 */
   11
   12#pragma once
   13
   14
   15namespace aui::animation_curves {
   19    class CubicBezier {
   20    private:
   21        glm::vec2 v1, v2;
   22    public:
   23        CubicBezier(glm::vec2 v1, glm::vec2 v2) : v1(v1), v2(v2) {}
   24
   25        float operator()(float t) {
   26            float oneMinusX = 1 - t;
   27            float oneMinusX2 = oneMinusX * oneMinusX;
   28            float x2 = t * t;
   29            float x3 = x2 * t;
   30
   31            float result = 3 * v1.x * oneMinusX2 * t + 3 * v2.x * oneMinusX * x2 + 2 * x3 +
   32                           3 * v1.y * oneMinusX2 * t + 3 * v2.y * oneMinusX * x2 - t;
   33            return result;
   34        }
   35    };
   36
   37    class Standard: public CubicBezier {
   38    public:
   39        Standard(): CubicBezier({ 0.4f, 0.0f }, { 0.2f, 1.f }) {}
   40    };
   41}