Skip to content

Commit 05e3586

Browse files
committed
add AnimationDriver support
1 parent 2400a6f commit 05e3586

File tree

8 files changed

+52
-13
lines changed

8 files changed

+52
-13
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,5 @@ jobs:
114114
steps:
115115
- name: Checkout
116116
uses: actions/checkout@v4
117-
- name: clang-format
118-
uses: jidicula/[email protected]
119-
with:
120-
clang-format-version: "17"
121-
- name: clang-tidy/clazy
117+
- name: lint
122118
run: builders/Linux/docker-run.sh /renderwindow/builders/Linux/lint.sh

builders/Linux/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ RUN <<EOF
8686
apt-get -y update && apt-get -y install \
8787
bash \
8888
build-essential \
89-
clang-format \
89+
clang-format-17 \
9090
clang-tidy \
9191
clazy \
9292
ffmpeg \

builders/Linux/lint.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ cd /renderwindow
1414
git config --global --add safe.directory /renderwindow
1515
FILES=$(git ls-files '**/*.cpp' '**/*.h')
1616

17+
echo clang-format
18+
/usr/bin/clang-format-17 --dry-run --Werror $FILES || exit 1
19+
1720
echo clang-tidy
1821
CLANGTIDY=$(/usr/bin/clang-tidy --quiet -p "${RENDERWINDOW_BUILD}" $FILES 2>&1 || exit 1)
1922
# Manually suppress bogus error https://github.com/llvm/llvm-project/issues/58820

com/rectalogic/RenderWindow/CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,3 @@ qt_add_qml_module(renderwindow
1010
)
1111

1212
target_link_libraries(renderwindow PUBLIC Qt6::Core Qt6::Gui Qt6::GuiPrivate Qt6::Qml Qt6::Quick)
13-
14-
set_target_properties(renderwindow PROPERTIES
15-
COMPONENT "${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}"
16-
)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (C) 2025 Andrew Wason
2+
// SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
#pragma once
5+
6+
#include <QAnimationDriver>
7+
8+
const qint32 FRAMERATE_MILLIS = 40;
9+
10+
class AnimationDriver : public QAnimationDriver {
11+
public:
12+
AnimationDriver(QObject* parent = nullptr)
13+
: QAnimationDriver(parent)
14+
{
15+
}
16+
17+
void setElapsed(qint64 elapsedMillis)
18+
{
19+
m_elapsed = elapsedMillis;
20+
}
21+
22+
void advance() override
23+
{
24+
advanceAnimation();
25+
}
26+
27+
qint64 elapsed() const override
28+
{
29+
return m_elapsed;
30+
}
31+
32+
private:
33+
qint32 m_increment = 0;
34+
qint64 m_elapsed = 0;
35+
};

com/rectalogic/RenderWindow/render_control.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class RenderControl : public QQuickRenderControl {
1313
Q_OBJECT
1414
public:
1515
RenderControl(QObject* parent = nullptr)
16-
: QQuickRenderControl(parent) { };
16+
: QQuickRenderControl(parent) {};
1717
RenderControl(RenderControl&&) = delete;
1818
RenderControl& operator=(RenderControl&&) = delete;
1919
~RenderControl() override = default;

com/rectalogic/RenderWindow/render_window.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (C) 2025 Andrew Wason
22
// SPDX-License-Identifier: GPL-3.0-or-later
33
#include "render_window.h"
4+
#include "animation.h"
45
#include "render_control.h"
56
#include <QByteArray>
67
#include <QDebug>
@@ -17,12 +18,14 @@
1718
RenderWindow::RenderWindow(RenderControl* renderControl)
1819
: QQuickWindow(renderControl)
1920
, m_renderControl(renderControl)
21+
, m_animationDriver(new AnimationDriver())
2022
{
2123
}
2224

2325
RenderWindow::RenderWindow()
2426
: RenderWindow(new RenderControl())
2527
{
28+
m_animationDriver->install();
2629
#ifdef RENDERWINDOW_ENABLE_VULKAN
2730
if (rendererInterface()->graphicsApi() == QSGRendererInterface::Vulkan) {
2831
m_vulkanInstance.setExtensions(QQuickGraphicsConfiguration::preferredInstanceExtensions());
@@ -51,12 +54,16 @@ void RenderWindow::componentComplete()
5154
contentItem()->setSize(size());
5255
}
5356

54-
QByteArray RenderWindow::render()
57+
QByteArray RenderWindow::render(qint64 elapsedMillis)
5558
{
5659
if (!m_isValid) {
5760
emit qmlEngine(this)->exit(1);
5861
return QByteArray();
5962
}
63+
64+
m_animationDriver->setElapsed(elapsedMillis);
65+
m_animationDriver->advance();
66+
6067
QByteArray data = m_renderControl->renderFrame();
6168
if (data.isNull()) {
6269
emit qmlEngine(this)->exit(1);

com/rectalogic/RenderWindow/render_window.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <QtQmlIntegration>
1111
#include <memory>
1212
#include <qtgui-config.h>
13+
class AnimationDriver;
1314
class RenderControl;
1415
#if (QT_CONFIG(vulkan) && __has_include(<vulkan/vulkan.h>))
1516
#define RENDERWINDOW_ENABLE_VULKAN
@@ -32,7 +33,7 @@ class RenderWindow : public QQuickWindow, public QQmlParserStatus {
3233
RenderWindow& operator=(RenderWindow&&) = delete;
3334
~RenderWindow() override;
3435

35-
Q_INVOKABLE QByteArray render();
36+
Q_INVOKABLE QByteArray render(qint64 elapsedMillis);
3637

3738
protected:
3839
void classBegin() override { }
@@ -47,5 +48,6 @@ class RenderWindow : public QQuickWindow, public QQmlParserStatus {
4748
QVulkanInstance m_vulkanInstance;
4849
#endif
4950
std::unique_ptr<RenderControl> m_renderControl;
51+
std::unique_ptr<AnimationDriver> m_animationDriver;
5052
bool m_isValid = false;
5153
};

0 commit comments

Comments
 (0)