forked from quickshell/quickshell
		
	core/easingcurve: add EasingCurve type
This commit is contained in:
		
							parent
							
								
									dd811ac423
								
							
						
					
					
						commit
						8e25c1cee0
					
				
					 5 changed files with 76 additions and 1 deletions
				
			
		
							
								
								
									
										2
									
								
								docs
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								docs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
Subproject commit b13019316035a0f57bfaa470ae702b65b8f6bc01
 | 
			
		||||
Subproject commit a036d378c03366009ad4a8dd64e3622d9dfe97af
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ qt_add_library(quickshell-core STATIC
 | 
			
		|||
	qsintercept.cpp
 | 
			
		||||
	incubator.cpp
 | 
			
		||||
	lazyloader.cpp
 | 
			
		||||
	easingcurve.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS GIT_REVISION="${GIT_REVISION}")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								src/core/easingcurve.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/core/easingcurve.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
#include "easingcurve.hpp"
 | 
			
		||||
#include <utility>
 | 
			
		||||
 | 
			
		||||
#include <qeasingcurve.h>
 | 
			
		||||
#include <qpoint.h>
 | 
			
		||||
#include <qrect.h>
 | 
			
		||||
#include <qtmetamacros.h>
 | 
			
		||||
#include <qtypes.h>
 | 
			
		||||
 | 
			
		||||
qreal EasingCurve::valueAt(qreal x) const { return this->mCurve.valueForProgress(x); }
 | 
			
		||||
 | 
			
		||||
qreal EasingCurve::interpolate(qreal x, qreal a, qreal b) const {
 | 
			
		||||
	return a + (b - a) * this->valueAt(x);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QPointF EasingCurve::interpolate(qreal x, const QPointF& a, const QPointF& b) const {
 | 
			
		||||
	return QPointF(this->interpolate(x, a.x(), b.x()), this->interpolate(x, a.y(), b.y()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QRectF EasingCurve::interpolate(qreal x, const QRectF& a, const QRectF& b) const {
 | 
			
		||||
	return QRectF(
 | 
			
		||||
	    this->interpolate(x, a.topLeft(), b.topLeft()),
 | 
			
		||||
	    this->interpolate(x, a.bottomRight(), b.bottomRight())
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QEasingCurve EasingCurve::curve() const { return this->mCurve; }
 | 
			
		||||
 | 
			
		||||
void EasingCurve::setCurve(QEasingCurve curve) {
 | 
			
		||||
	if (this->mCurve == curve) return;
 | 
			
		||||
	this->mCurve = std::move(curve);
 | 
			
		||||
	emit this->curveChanged();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								src/core/easingcurve.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/core/easingcurve.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <qeasingcurve.h>
 | 
			
		||||
#include <qobject.h>
 | 
			
		||||
#include <qpoint.h>
 | 
			
		||||
#include <qqmlintegration.h>
 | 
			
		||||
#include <qrect.h>
 | 
			
		||||
#include <qtmetamacros.h>
 | 
			
		||||
 | 
			
		||||
///! Easing curve.
 | 
			
		||||
/// Directly accessible easing curve as used in property animations.
 | 
			
		||||
class EasingCurve: public QObject {
 | 
			
		||||
	Q_OBJECT;
 | 
			
		||||
	/// Easing curve settings. Works exactly the same as
 | 
			
		||||
	/// [PropertyAnimation.easing](https://doc.qt.io/qt-6/qml-qtquick-propertyanimation.html#easing-prop).
 | 
			
		||||
	Q_PROPERTY(QEasingCurve curve READ curve WRITE setCurve NOTIFY curveChanged);
 | 
			
		||||
	QML_ELEMENT;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	EasingCurve(QObject* parent = nullptr): QObject(parent) {}
 | 
			
		||||
 | 
			
		||||
	/// Returns the Y value for the given X value on the curve
 | 
			
		||||
	/// from 0.0 to 1.0.
 | 
			
		||||
	Q_INVOKABLE [[nodiscard]] qreal valueAt(qreal x) const;
 | 
			
		||||
	/// Interpolates between two values using the given X coordinate.
 | 
			
		||||
	Q_INVOKABLE [[nodiscard]] qreal interpolate(qreal x, qreal a, qreal b) const;
 | 
			
		||||
	/// Interpolates between two points using the given X coordinate.
 | 
			
		||||
	Q_INVOKABLE [[nodiscard]] QPointF interpolate(qreal x, const QPointF& a, const QPointF& b) const;
 | 
			
		||||
	/// Interpolates two rects using the given X coordinate.
 | 
			
		||||
	Q_INVOKABLE [[nodiscard]] QRectF interpolate(qreal x, const QRectF& a, const QRectF& b) const;
 | 
			
		||||
 | 
			
		||||
	[[nodiscard]] QEasingCurve curve() const;
 | 
			
		||||
	void setCurve(QEasingCurve curve);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
	void curveChanged();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	QEasingCurve mCurve;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -15,5 +15,6 @@ headers = [
 | 
			
		|||
	"popupwindow.hpp",
 | 
			
		||||
	"singleton.hpp",
 | 
			
		||||
	"lazyloader.hpp",
 | 
			
		||||
	"easingcurve.hpp",
 | 
			
		||||
]
 | 
			
		||||
-----
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue