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-2024 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}