From 6d77ca3d89ba580e62df4a2b9a13ca2466699486 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:38:43 +0200 Subject: [PATCH 01/35] Set version to 0.6.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f61624d..5d4e5aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.14) -project(scratchcpp-render VERSION 0.5.0 LANGUAGES CXX) +project(scratchcpp-render VERSION 0.6.0 LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) From 515809d1fef234386a63ac7b4816329d377f3dab Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 2 May 2024 08:22:57 +0200 Subject: [PATCH 02/35] Add costume width and height methods --- src/irenderedtarget.h | 2 ++ src/renderedtarget.cpp | 18 +++++++++++++++++- src/renderedtarget.h | 2 ++ test/mocks/renderedtargetmock.h | 2 ++ test/renderedtarget/renderedtarget_test.cpp | 14 ++++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/irenderedtarget.h b/src/irenderedtarget.h index 59b8106..0bfc291 100644 --- a/src/irenderedtarget.h +++ b/src/irenderedtarget.h @@ -78,6 +78,8 @@ class IRenderedTarget : public QNanoQuickItem virtual bool mirrorHorizontally() const = 0; virtual Texture texture() const = 0; + virtual int costumeWidth() const = 0; + virtual int costumeHeight() const = 0; virtual const std::unordered_map &graphicEffects() const = 0; virtual void setGraphicEffect(ShaderManager::Effect effect, double value) = 0; diff --git a/src/renderedtarget.cpp b/src/renderedtarget.cpp index 38c7147..fc79cb1 100644 --- a/src/renderedtarget.cpp +++ b/src/renderedtarget.cpp @@ -529,6 +529,22 @@ Texture RenderedTarget::texture() const return m_texture; } +int RenderedTarget::costumeWidth() const +{ + if (!m_skin || !m_costume) + return 0; + + return m_skin->getTexture(1).width() / m_costume->bitmapResolution(); +} + +int RenderedTarget::costumeHeight() const +{ + if (!m_skin || !m_costume) + return 0; + + return m_skin->getTexture(1).height() / m_costume->bitmapResolution(); +} + const std::unordered_map &RenderedTarget::graphicEffects() const { return m_graphicEffects; @@ -591,7 +607,7 @@ bool RenderedTarget::contains(const QPointF &point) const bool RenderedTarget::containsScratchPoint(double x, double y) const { - if (!m_engine) + if (!m_engine || !m_skin || !m_costume) return false; return containsLocalPoint(mapFromScratchToLocal(QPointF(x, y))); diff --git a/src/renderedtarget.h b/src/renderedtarget.h index 7d5d1c8..70608b0 100644 --- a/src/renderedtarget.h +++ b/src/renderedtarget.h @@ -86,6 +86,8 @@ class RenderedTarget : public IRenderedTarget bool mirrorHorizontally() const override; Texture texture() const override; + int costumeWidth() const override; + int costumeHeight() const override; const std::unordered_map &graphicEffects() const override; void setGraphicEffect(ShaderManager::Effect effect, double value) override; diff --git a/test/mocks/renderedtargetmock.h b/test/mocks/renderedtargetmock.h index 6bfc154..ce1ad9b 100644 --- a/test/mocks/renderedtargetmock.h +++ b/test/mocks/renderedtargetmock.h @@ -62,6 +62,8 @@ class RenderedTargetMock : public IRenderedTarget MOCK_METHOD(bool, mirrorHorizontally, (), (const, override)); MOCK_METHOD(Texture, texture, (), (const, override)); + MOCK_METHOD(int, costumeWidth, (), (const, override)); + MOCK_METHOD(int, costumeHeight, (), (const, override)); MOCK_METHOD((const std::unordered_map &), graphicEffects, (), (const, override)); MOCK_METHOD(void, setGraphicEffect, (ShaderManager::Effect effect, double value), (override)); diff --git a/test/renderedtarget/renderedtarget_test.cpp b/test/renderedtarget/renderedtarget_test.cpp index 77018c8..4a11924 100644 --- a/test/renderedtarget/renderedtarget_test.cpp +++ b/test/renderedtarget/renderedtarget_test.cpp @@ -87,6 +87,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) target.beforeRedraw(); ASSERT_EQ(target.width(), 4); ASSERT_EQ(target.height(), 6); + ASSERT_EQ(target.costumeWidth(), 1); + ASSERT_EQ(target.costumeHeight(), 2); ASSERT_EQ(target.x(), 263); ASSERT_EQ(target.y(), 108); ASSERT_EQ(target.z(), 0); @@ -125,6 +127,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(target.width(), 4); ASSERT_EQ(target.height(), 6); + ASSERT_EQ(target.costumeWidth(), 1); + ASSERT_EQ(target.costumeHeight(), 2); ASSERT_EQ(target.x(), 263); ASSERT_EQ(target.y(), 108); ASSERT_EQ(target.z(), 3); @@ -171,6 +175,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) target.beforeRedraw(); ASSERT_EQ(target.width(), 4); ASSERT_EQ(target.height(), 6); + ASSERT_EQ(target.costumeWidth(), 1); + ASSERT_EQ(target.costumeHeight(), 2); ASSERT_EQ(target.x(), 276); ASSERT_EQ(target.y(), 184); ASSERT_EQ(target.transformOriginPoint().x(), -23); @@ -241,6 +247,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) target.beforeRedraw(); ASSERT_EQ(target.width(), 4); ASSERT_EQ(target.height(), 6); + ASSERT_EQ(target.costumeWidth(), 1); + ASSERT_EQ(target.costumeHeight(), 2); ASSERT_EQ(target.x(), 379.5); ASSERT_EQ(target.y(), 384); ASSERT_EQ(target.transformOriginPoint().x(), 0); @@ -263,6 +271,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(target.width(), 26); ASSERT_EQ(target.height(), 26); + ASSERT_EQ(target.costumeWidth(), 13); + ASSERT_EQ(target.costumeHeight(), 13); ASSERT_EQ(target.x(), 329.5); ASSERT_EQ(target.y(), 400); ASSERT_EQ(target.z(), 3); @@ -277,6 +287,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_TRUE(texture.isValid()); ASSERT_EQ(texture.width(), 26); ASSERT_EQ(texture.height(), 26); + ASSERT_EQ(target.costumeWidth(), 13); + ASSERT_EQ(target.costumeHeight(), 13); // Stage scale (SVG) - should update width and height EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); @@ -284,6 +296,8 @@ TEST_F(RenderedTargetTest, UpdateMethods) target.setStageScale(3.5); ASSERT_EQ(target.width(), 52); ASSERT_EQ(target.height(), 52); + ASSERT_EQ(target.costumeWidth(), 13); + ASSERT_EQ(target.costumeHeight(), 13); context.doneCurrent(); } From 6d5c17031a85f98b86f561252fa0700d19112af9 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 2 May 2024 08:28:36 +0200 Subject: [PATCH 03/35] Update libscratchcpp to latest master --- src/spritemodel.cpp | 10 ++++++++++ src/spritemodel.h | 3 +++ src/stagemodel.cpp | 10 ++++++++++ src/stagemodel.h | 3 +++ test/mocks/enginemock.h | 6 ++++++ test/target_models/spritemodel_test.cpp | 22 ++++++++++++++++++++++ test/target_models/stagemodel_test.cpp | 22 ++++++++++++++++++++++ 7 files changed, 76 insertions(+) diff --git a/src/spritemodel.cpp b/src/spritemodel.cpp index 0fe5b98..70e440e 100644 --- a/src/spritemodel.cpp +++ b/src/spritemodel.cpp @@ -140,6 +140,16 @@ void SpriteModel::onBubbleTextChanged(const std::string &text) } } +int SpriteModel::costumeWidth() const +{ + return m_renderedTarget->costumeWidth(); +} + +int SpriteModel::costumeHeight() const +{ + return m_renderedTarget->costumeHeight(); +} + libscratchcpp::Rect SpriteModel::boundingRect() const { return m_renderedTarget->getBounds(); diff --git a/src/spritemodel.h b/src/spritemodel.h index ee4042c..52e2076 100644 --- a/src/spritemodel.h +++ b/src/spritemodel.h @@ -54,6 +54,9 @@ class SpriteModel void onBubbleTypeChanged(libscratchcpp::Target::BubbleType type) override; void onBubbleTextChanged(const std::string &text) override; + int costumeWidth() const override; + int costumeHeight() const override; + libscratchcpp::Rect boundingRect() const override; libscratchcpp::Rect fastBoundingRect() const override; diff --git a/src/stagemodel.cpp b/src/stagemodel.cpp index 50f834a..3290424 100644 --- a/src/stagemodel.cpp +++ b/src/stagemodel.cpp @@ -77,6 +77,16 @@ void StageModel::onBubbleTextChanged(const std::string &text) } } +int StageModel::costumeWidth() const +{ + return m_renderedTarget->costumeWidth(); +} + +int StageModel::costumeHeight() const +{ + return m_renderedTarget->costumeHeight(); +} + libscratchcpp::Rect StageModel::boundingRect() const { return libscratchcpp::Rect(); diff --git a/src/stagemodel.h b/src/stagemodel.h index 8f586c7..b5423e8 100644 --- a/src/stagemodel.h +++ b/src/stagemodel.h @@ -40,6 +40,9 @@ class StageModel void onBubbleTypeChanged(libscratchcpp::Target::BubbleType type) override; void onBubbleTextChanged(const std::string &text) override; + int costumeWidth() const override; + int costumeHeight() const override; + libscratchcpp::Rect boundingRect() const override; libscratchcpp::Rect fastBoundingRect() const override; diff --git a/test/mocks/enginemock.h b/test/mocks/enginemock.h index 89db942..7054e03 100644 --- a/test/mocks/enginemock.h +++ b/test/mocks/enginemock.h @@ -26,7 +26,10 @@ class EngineMock : public IEngine MOCK_METHOD(void, stopTarget, (Target *, VirtualMachine *), (override)); MOCK_METHOD(void, initClone, (std::shared_ptr), (override)); MOCK_METHOD(void, deinitClone, (std::shared_ptr), (override)); + MOCK_METHOD(void, stopSounds, (), (override)); + MOCK_METHOD(double, globalVolume, (), (const, override)); + MOCK_METHOD(void, setGlobalVolume, (double), (override)); MOCK_METHOD(void, updateMonitors, (), (override)); MOCK_METHOD(void, step, (), (override)); @@ -36,6 +39,7 @@ class EngineMock : public IEngine MOCK_METHOD(sigslot::signal<> &, aboutToRender, (), (override)); MOCK_METHOD(sigslot::signal &, threadAboutToStop, (), (override)); + MOCK_METHOD(sigslot::signal<> &, stopped, (), (override)); MOCK_METHOD(bool, isRunning, (), (const, override)); @@ -104,6 +108,7 @@ class EngineMock : public IEngine MOCK_METHOD(int, findBroadcast, (const std::string &), (const, override)); MOCK_METHOD(int, findBroadcastById, (const std::string &), (const, override)); + MOCK_METHOD(void, addWhenTouchingObjectScript, (std::shared_ptr), (override)); MOCK_METHOD(void, addGreenFlagScript, (std::shared_ptr), (override)); MOCK_METHOD(void, addBroadcastScript, (std::shared_ptr, int, Broadcast *), (override)); MOCK_METHOD(void, addBackdropChangeScript, (std::shared_ptr, int), (override)); @@ -131,6 +136,7 @@ class EngineMock : public IEngine MOCK_METHOD((sigslot::signal &), monitorRemoved, (), (override)); MOCK_METHOD(sigslot::signal &, questionAsked, (), (override)); + MOCK_METHOD(sigslot::signal<> &, questionAborted, (), (override)); MOCK_METHOD(sigslot::signal &, questionAnswered, (), (override)); MOCK_METHOD(std::vector &, extensions, (), (const, override)); diff --git a/test/target_models/spritemodel_test.cpp b/test/target_models/spritemodel_test.cpp index 8e81e29..ccb75cb 100644 --- a/test/target_models/spritemodel_test.cpp +++ b/test/target_models/spritemodel_test.cpp @@ -287,6 +287,28 @@ TEST(SpriteModelTest, OnBubbleTextChanged) ASSERT_EQ(spy.count(), 2); } +TEST(SpriteModelTest, CostumeWidth) +{ + SpriteModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeWidth()).WillOnce(Return(15)); + ASSERT_EQ(model.costumeWidth(), 15); +} + +TEST(SpriteModelTest, CostumeHeight) +{ + SpriteModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeHeight()).WillOnce(Return(10)); + ASSERT_EQ(model.costumeHeight(), 10); +} + TEST(SpriteModelTest, BoundingRect) { SpriteModel model; diff --git a/test/target_models/stagemodel_test.cpp b/test/target_models/stagemodel_test.cpp index 62a1974..672916d 100644 --- a/test/target_models/stagemodel_test.cpp +++ b/test/target_models/stagemodel_test.cpp @@ -112,6 +112,28 @@ TEST(StageModelTest, OnBubbleTextChanged) ASSERT_EQ(spy.count(), 2); } +TEST(StageModelTest, CostumeWidth) +{ + StageModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeWidth()).WillOnce(Return(15)); + ASSERT_EQ(model.costumeWidth(), 15); +} + +TEST(StageModelTest, CostumeHeight) +{ + StageModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeHeight()).WillOnce(Return(10)); + ASSERT_EQ(model.costumeHeight(), 10); +} + TEST(SpriteModelTest, TouchingClones) { StageModel model; From 39124703e8e4eca30625c4d5b14a9b5ac6d188c5 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 2 May 2024 08:28:36 +0200 Subject: [PATCH 04/35] Update libscratchcpp to latest master --- libscratchcpp | 2 +- src/spritemodel.cpp | 10 ++++++++++ src/spritemodel.h | 3 +++ src/stagemodel.cpp | 10 ++++++++++ src/stagemodel.h | 3 +++ test/mocks/enginemock.h | 6 ++++++ test/target_models/spritemodel_test.cpp | 22 ++++++++++++++++++++++ test/target_models/stagemodel_test.cpp | 22 ++++++++++++++++++++++ 8 files changed, 77 insertions(+), 1 deletion(-) diff --git a/libscratchcpp b/libscratchcpp index a16fa2b..3a013e1 160000 --- a/libscratchcpp +++ b/libscratchcpp @@ -1 +1 @@ -Subproject commit a16fa2b933ffb5acf0ea9714d8db36d5fd8b2a08 +Subproject commit 3a013e1d18abb5b91b954af2874e8e012f2991b8 diff --git a/src/spritemodel.cpp b/src/spritemodel.cpp index 0fe5b98..70e440e 100644 --- a/src/spritemodel.cpp +++ b/src/spritemodel.cpp @@ -140,6 +140,16 @@ void SpriteModel::onBubbleTextChanged(const std::string &text) } } +int SpriteModel::costumeWidth() const +{ + return m_renderedTarget->costumeWidth(); +} + +int SpriteModel::costumeHeight() const +{ + return m_renderedTarget->costumeHeight(); +} + libscratchcpp::Rect SpriteModel::boundingRect() const { return m_renderedTarget->getBounds(); diff --git a/src/spritemodel.h b/src/spritemodel.h index ee4042c..52e2076 100644 --- a/src/spritemodel.h +++ b/src/spritemodel.h @@ -54,6 +54,9 @@ class SpriteModel void onBubbleTypeChanged(libscratchcpp::Target::BubbleType type) override; void onBubbleTextChanged(const std::string &text) override; + int costumeWidth() const override; + int costumeHeight() const override; + libscratchcpp::Rect boundingRect() const override; libscratchcpp::Rect fastBoundingRect() const override; diff --git a/src/stagemodel.cpp b/src/stagemodel.cpp index 50f834a..3290424 100644 --- a/src/stagemodel.cpp +++ b/src/stagemodel.cpp @@ -77,6 +77,16 @@ void StageModel::onBubbleTextChanged(const std::string &text) } } +int StageModel::costumeWidth() const +{ + return m_renderedTarget->costumeWidth(); +} + +int StageModel::costumeHeight() const +{ + return m_renderedTarget->costumeHeight(); +} + libscratchcpp::Rect StageModel::boundingRect() const { return libscratchcpp::Rect(); diff --git a/src/stagemodel.h b/src/stagemodel.h index 8f586c7..b5423e8 100644 --- a/src/stagemodel.h +++ b/src/stagemodel.h @@ -40,6 +40,9 @@ class StageModel void onBubbleTypeChanged(libscratchcpp::Target::BubbleType type) override; void onBubbleTextChanged(const std::string &text) override; + int costumeWidth() const override; + int costumeHeight() const override; + libscratchcpp::Rect boundingRect() const override; libscratchcpp::Rect fastBoundingRect() const override; diff --git a/test/mocks/enginemock.h b/test/mocks/enginemock.h index 89db942..7054e03 100644 --- a/test/mocks/enginemock.h +++ b/test/mocks/enginemock.h @@ -26,7 +26,10 @@ class EngineMock : public IEngine MOCK_METHOD(void, stopTarget, (Target *, VirtualMachine *), (override)); MOCK_METHOD(void, initClone, (std::shared_ptr), (override)); MOCK_METHOD(void, deinitClone, (std::shared_ptr), (override)); + MOCK_METHOD(void, stopSounds, (), (override)); + MOCK_METHOD(double, globalVolume, (), (const, override)); + MOCK_METHOD(void, setGlobalVolume, (double), (override)); MOCK_METHOD(void, updateMonitors, (), (override)); MOCK_METHOD(void, step, (), (override)); @@ -36,6 +39,7 @@ class EngineMock : public IEngine MOCK_METHOD(sigslot::signal<> &, aboutToRender, (), (override)); MOCK_METHOD(sigslot::signal &, threadAboutToStop, (), (override)); + MOCK_METHOD(sigslot::signal<> &, stopped, (), (override)); MOCK_METHOD(bool, isRunning, (), (const, override)); @@ -104,6 +108,7 @@ class EngineMock : public IEngine MOCK_METHOD(int, findBroadcast, (const std::string &), (const, override)); MOCK_METHOD(int, findBroadcastById, (const std::string &), (const, override)); + MOCK_METHOD(void, addWhenTouchingObjectScript, (std::shared_ptr), (override)); MOCK_METHOD(void, addGreenFlagScript, (std::shared_ptr), (override)); MOCK_METHOD(void, addBroadcastScript, (std::shared_ptr, int, Broadcast *), (override)); MOCK_METHOD(void, addBackdropChangeScript, (std::shared_ptr, int), (override)); @@ -131,6 +136,7 @@ class EngineMock : public IEngine MOCK_METHOD((sigslot::signal &), monitorRemoved, (), (override)); MOCK_METHOD(sigslot::signal &, questionAsked, (), (override)); + MOCK_METHOD(sigslot::signal<> &, questionAborted, (), (override)); MOCK_METHOD(sigslot::signal &, questionAnswered, (), (override)); MOCK_METHOD(std::vector &, extensions, (), (const, override)); diff --git a/test/target_models/spritemodel_test.cpp b/test/target_models/spritemodel_test.cpp index 8e81e29..ccb75cb 100644 --- a/test/target_models/spritemodel_test.cpp +++ b/test/target_models/spritemodel_test.cpp @@ -287,6 +287,28 @@ TEST(SpriteModelTest, OnBubbleTextChanged) ASSERT_EQ(spy.count(), 2); } +TEST(SpriteModelTest, CostumeWidth) +{ + SpriteModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeWidth()).WillOnce(Return(15)); + ASSERT_EQ(model.costumeWidth(), 15); +} + +TEST(SpriteModelTest, CostumeHeight) +{ + SpriteModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeHeight()).WillOnce(Return(10)); + ASSERT_EQ(model.costumeHeight(), 10); +} + TEST(SpriteModelTest, BoundingRect) { SpriteModel model; diff --git a/test/target_models/stagemodel_test.cpp b/test/target_models/stagemodel_test.cpp index 62a1974..672916d 100644 --- a/test/target_models/stagemodel_test.cpp +++ b/test/target_models/stagemodel_test.cpp @@ -112,6 +112,28 @@ TEST(StageModelTest, OnBubbleTextChanged) ASSERT_EQ(spy.count(), 2); } +TEST(StageModelTest, CostumeWidth) +{ + StageModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeWidth()).WillOnce(Return(15)); + ASSERT_EQ(model.costumeWidth(), 15); +} + +TEST(StageModelTest, CostumeHeight) +{ + StageModel model; + + RenderedTargetMock renderedTarget; + model.setRenderedTarget(&renderedTarget); + + EXPECT_CALL(renderedTarget, costumeHeight()).WillOnce(Return(10)); + ASSERT_EQ(model.costumeHeight(), 10); +} + TEST(SpriteModelTest, TouchingClones) { StageModel model; From 4be089b912780694c6ef4c75eeda8ddf49155f27 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 2 May 2024 08:31:24 +0200 Subject: [PATCH 05/35] Add questionAborted signal to ProjectLoader --- src/projectloader.cpp | 1 + src/projectloader.h | 1 + test/projectloader/projectloader_test.cpp | 13 +++++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/projectloader.cpp b/src/projectloader.cpp index c7a4984..4960809 100644 --- a/src/projectloader.cpp +++ b/src/projectloader.cpp @@ -256,6 +256,7 @@ void ProjectLoader::load() m_engine->monitorRemoved().connect(&ProjectLoader::removeMonitor, this); m_engine->questionAsked().connect([this](const std::string &question) { emit questionAsked(QString::fromStdString(question)); }); + m_engine->questionAborted().connect([this]() { emit questionAborted(); }); // Load targets const auto &targets = m_engine->targets(); diff --git a/src/projectloader.h b/src/projectloader.h index 198497c..0304994 100644 --- a/src/projectloader.h +++ b/src/projectloader.h @@ -110,6 +110,7 @@ class ProjectLoader : public QObject void monitorAdded(MonitorModel *model); void monitorRemoved(MonitorModel *model); void questionAsked(QString question); + void questionAborted(); protected: void timerEvent(QTimerEvent *event) override; diff --git a/test/projectloader/projectloader_test.cpp b/test/projectloader/projectloader_test.cpp index 29ba171..fcbf0cb 100644 --- a/test/projectloader/projectloader_test.cpp +++ b/test/projectloader/projectloader_test.cpp @@ -188,6 +188,19 @@ TEST_F(ProjectLoaderTest, QuestionAsked) ASSERT_EQ(args.first().toString(), "test"); } +TEST_F(ProjectLoaderTest, QuestionAborted) +{ + ProjectLoader loader; + QSignalSpy spy(&loader, &ProjectLoader::questionAborted); + + load(&loader, "load_test.sb3"); + + auto engine = loader.engine(); + ASSERT_TRUE(spy.isEmpty()); + engine->questionAborted()(); + ASSERT_EQ(spy.count(), 1); +} + TEST_F(ProjectLoaderTest, AnswerQuestion) { ProjectLoader loader; From 4cce7dfdc93d3fdfd0a93a86cf8835983df30dd1 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 2 May 2024 08:31:59 +0200 Subject: [PATCH 06/35] fix #92: Hide question text box when question is aborted --- src/ProjectPlayer.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 35cd450..88762db 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -91,6 +91,8 @@ ProjectScene { questionLoader.item.clear(); questionLoader.item.question = question; } + + onQuestionAborted: questionLoader.active = false } function start() { From 0bc605aae1739cd839b1a91115690c8fb01d33e1 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 4 May 2024 17:38:00 +0200 Subject: [PATCH 07/35] Use QNanoPainter to draw pen lines --- src/penlayer.cpp | 59 ++++++++++++++++---------------- src/penlayer.h | 7 ++-- test/lines.png | Bin 2115 -> 2115 bytes test/lines_old.png | Bin 2115 -> 0 bytes test/penlayer/penlayer_test.cpp | 16 ++++----- test/points.png | Bin 1401 -> 1394 bytes 6 files changed, 40 insertions(+), 42 deletions(-) delete mode 100644 test/lines_old.png diff --git a/src/penlayer.cpp b/src/penlayer.cpp index e2b7642..76cf7cf 100644 --- a/src/penlayer.cpp +++ b/src/penlayer.cpp @@ -11,8 +11,6 @@ std::unordered_map PenLayer::m_projectPen PenLayer::PenLayer(QNanoQuickItem *parent) : IPenLayer(parent) { - m_fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); - m_fboFormat.setSamples(m_antialiasingEnabled ? 4 : 0); setSmooth(false); } @@ -30,7 +28,6 @@ bool PenLayer::antialiasingEnabled() const void PenLayer::setAntialiasingEnabled(bool enabled) { m_antialiasingEnabled = enabled; - m_fboFormat.setSamples(enabled ? 4 : 0); } libscratchcpp::IEngine *PenLayer::engine() const @@ -50,10 +47,15 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine) if (m_engine && QOpenGLContext::currentContext()) { m_projectPenLayers[m_engine] = this; - m_fbo = std::make_unique(m_engine->stageWidth(), m_engine->stageHeight(), m_fboFormat); + QOpenGLFramebufferObjectFormat fboFormat; + fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); + m_fbo = std::make_unique(m_engine->stageWidth(), m_engine->stageHeight(), fboFormat); Q_ASSERT(m_fbo->isValid()); + m_texture = Texture(m_fbo->texture(), m_fbo->size()); + + if (!m_painter) + m_painter = std::make_unique(); - m_paintDevice = std::make_unique(m_fbo->size()); clear(); } @@ -89,15 +91,13 @@ void scratchcpprender::PenLayer::drawPoint(const PenAttributes &penAttributes, d void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, double x0, double y0, double x1, double y1) { - if (!m_fbo || !m_paintDevice || !m_engine) + if (!m_fbo || !m_painter || !m_engine) return; // Begin painting m_fbo->bind(); - QPainter painter(m_paintDevice.get()); - painter.beginNativePainting(); - painter.setRenderHint(QPainter::Antialiasing, m_antialiasingEnabled); - painter.setRenderHint(QPainter::SmoothPixmapTransform, false); + + m_painter->beginFrame(m_fbo->width(), m_fbo->height()); // Translate to Scratch coordinate system double stageWidthHalf = m_engine->stageWidth() / 2; @@ -108,20 +108,30 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do y1 = stageHeightHalf - y1; // Set pen attributes - QPen pen(penAttributes.color); - pen.setWidthF(penAttributes.diameter); - pen.setCapStyle(Qt::RoundCap); - painter.setPen(pen); + m_painter->setLineWidth(penAttributes.diameter); + QNanoColor col(penAttributes.color.red(), penAttributes.color.green(), penAttributes.color.blue(), penAttributes.color.alpha()); + m_painter->setStrokeStyle(col); + m_painter->setFillStyle(col); + m_painter->setLineJoin(QNanoPainter::JOIN_ROUND); + m_painter->setLineCap(QNanoPainter::CAP_ROUND); + m_painter->setAntialias(m_antialiasingEnabled ? 1.0f : 0.0f); + m_painter->beginPath(); + + // Width 1 and 3 lines need to be offset by 0.5 + const double offset = (std::fmod(std::max(4 - penAttributes.diameter, 0.0), 2)) / 2; // If the start and end coordinates are the same, draw a point, otherwise draw a line - if (x0 == x1 && y0 == y1) - painter.drawPoint(x0, y0); - else - painter.drawLine(x0, y0, x1, y1); + if (x0 == x1 && y0 == y1) { + m_painter->circle(x0 + offset, y0 + offset, penAttributes.diameter / 2); + m_painter->fill(); + } else { + m_painter->moveTo(x0 + offset, y0 + offset); + m_painter->lineTo(x1 + offset, y1 + offset); + m_painter->stroke(); + } // End painting - painter.endNativePainting(); - painter.end(); + m_painter->endFrame(); m_fbo->release(); m_textureDirty = true; @@ -239,13 +249,4 @@ void PenLayer::updateTexture() m_textureDirty = false; m_textureManager.removeTexture(m_texture); - - if (!m_resolvedFbo || m_resolvedFbo->size() != m_fbo->size()) { - QOpenGLFramebufferObjectFormat format; - format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); - m_resolvedFbo = std::make_unique(m_fbo->size(), format); - } - - QOpenGLFramebufferObject::blitFramebuffer(m_resolvedFbo.get(), m_fbo.get()); - m_texture = Texture(m_resolvedFbo->texture(), m_resolvedFbo->size()); } diff --git a/src/penlayer.h b/src/penlayer.h index 55d7e27..fe72fc5 100644 --- a/src/penlayer.h +++ b/src/penlayer.h @@ -3,9 +3,8 @@ #pragma once #include -#include #include -#include +#include #include #include "ipenlayer.h" @@ -56,9 +55,7 @@ class PenLayer : public IPenLayer bool m_antialiasingEnabled = true; libscratchcpp::IEngine *m_engine = nullptr; std::unique_ptr m_fbo; - std::unique_ptr m_resolvedFbo; - std::unique_ptr m_paintDevice; - QOpenGLFramebufferObjectFormat m_fboFormat; + std::unique_ptr m_painter; std::unique_ptr m_glF; Texture m_texture; bool m_textureDirty = true; diff --git a/test/lines.png b/test/lines.png index 3cb9dedcd707910ad027f279590dc94d8b73b155..245885e9061acacb6132edfbc8897e4e917fafe6 100644 GIT binary patch delta 2072 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, 480); ASSERT_EQ(fbo->height(), 360); ASSERT_EQ(fbo->format().attachment(), QOpenGLFramebufferObject::CombinedDepthStencil); - ASSERT_EQ(fbo->format().samples(), 4); + ASSERT_EQ(fbo->format().samples(), 0); penLayer.setAntialiasingEnabled(false); ASSERT_FALSE(penLayer.antialiasingEnabled()); @@ -309,25 +309,25 @@ TEST_F(PenLayerTest, TextureData) attr.color = QColor(0, 255, 0, 255); attr.diameter = 1; penLayer.drawLine(attr, 0, -1, 1, 1); - ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgb(0, 255, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgba(0, 0, 0, 0)); ASSERT_EQ(penLayer.colorAtScratchPoint(0, 0), qRgb(0, 255, 0)); ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 1), qRgba(0, 0, 0, 0)); bounds = penLayer.getBounds(); ASSERT_EQ(bounds.left(), 0); - ASSERT_EQ(bounds.top(), 1); - ASSERT_EQ(bounds.right(), 1); - ASSERT_EQ(bounds.bottom(), -1); + ASSERT_EQ(bounds.top(), 0); + ASSERT_EQ(bounds.right(), 2); + ASSERT_EQ(bounds.bottom(), -2); attr.diameter = 2; penLayer.drawPoint(attr, -2, 0); - ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgb(0, 255, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgba(0, 0, 0, 0)); ASSERT_EQ(penLayer.colorAtScratchPoint(0, 0), qRgb(0, 255, 0)); ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 1), qRgb(0, 255, 0)); bounds = penLayer.getBounds(); ASSERT_EQ(bounds.left(), -3); ASSERT_EQ(bounds.top(), 1); - ASSERT_EQ(bounds.right(), 1); - ASSERT_EQ(bounds.bottom(), -1); + ASSERT_EQ(bounds.right(), 2); + ASSERT_EQ(bounds.bottom(), -2); } diff --git a/test/points.png b/test/points.png index 03a886abb9248ff7c38fe847919ac23ce8bcfdde..ae5668ece2c006af5bf728ac3fe60234f5c75de8 100644 GIT binary patch literal 1394 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|?860dtk$!Ux1t7&);1OBOz`%C|gc+x5^GP!> zu&Q{vIEGZrd3)C}Xtje#TcF2YQOhEBJ@43Q)&)Meg> z#ToQ4Z#&4Pyv)oT~7oxd=aiHCiqY~sh(ZIO=54h@_Vd?DFfW`CW2vq&&)Ym2COXu~4m zbj>ZI=3xwr#JdAAJ+9&m3|dBv%x8D<9o|}F`^(yG@gHd+uw6iJVF3kNr{y1iwb@fs z{nx6JmqDk@`oQH6ew>C3Yn~OhFbI73%~F&7OV{Th!-g)H^ZqU6cTm2=${#Rw_ky2u z=i499TeE;s;Q)J~!THz^47(%icyGu@GORepB?a-$w0P!a{_mRDZnT0-@HwFKSg!($ zOUM=4k?AAP@U2L;E&FHHm)(4KW_tf(V7Q>n2#QYZ;NLOhAV#TYJFma}WZ}fXA&`Jw z8JVIBVv~O{Y?uy;cK`SN^8Nnq^H~$T8Z4*od~r@NS;4izvUlr8T^9)tfrMGxP4@&l z@yK{KWJaz1A*RG5^K_CO1H+dSEIymF{P(wNN?0^8Twb#GQFMpF26OEUuv;`_-_#^JTk0R{mDAWmTQ-E7mtm@$*#vdMX7wy0EA zUIs?BgjwOBw8Z2tl;D?~-O(xzbdX`~D z{kp1pP>%SeGiNdbbIr`|cQS_0^jRblBINHowcPY-Xk3@e`+kbR=4lMfcUOr5#UdX= zgNCPM<+m@i9Aa<4KC=OXI482GRWtE!}ToRgUjNt2_-ZnR(G^cU&|u#;PfqyZvA@20}S>v zx;MUH!s*9BC*fcVOpgqAW zuxfj{IEGZrd3)E<@3n!5L*VjX+DS+FBEn8@y1}TtZHm3av_%{qvyRji)|^|zv2vQj zu07Ky@o;LS)%^Uk;-lT+>#w7Gzccm~ciS;AeDP>tR5&0|%dlhDrRa88G_`SgtzEcw{=!(b1O|=-rZ%s>c}>3iFPJg5b@g>^_~G=MMMCSgbmGU>Y=H!h z4W@@4abH(FAdr#U(JH>qz2TwCGefahpch`;opH%xnTgwc=5Gbcd_V#0V8OELswLG` zF7nI_QRX^z$Ab#)vr00|ds=ybLBOE_=*aupFScH`Os^OJbB3|( zw|Fgs-@E1Z2bRSPCpY-6SpZc1iN$7a!5Rg|2Lh+BH@uwge~?)unU$A;(dWRQv&$ba zb{Q}-J1{V^F<6-PFJ{5+BCHFBd{*@A;@@5g=7}sbPDe=Jvs7eL;xL%L!F1nD4(6?#24`hGLL zXJ%En7$aK)!#c*xD*xM9wwz<(VPIqdrl<(V%R1ki*rL*yfU;@{vz`^UIIL!w@k~}U z@gr-NP=a1!e#=qu6}}BSd)5ky#Va&16kBFH>+Eq*VSIK8nvkd(N(&sFzc4bK%L3+! z8T;h+#ob?Y?$B2bg9ArwcI_8T{w9>ru*GgqvD29_CZ3Y~>>6XiG;T(=UE9oo!Sz`O z$SMs1ianDA%D#N@BTeZ{6ezMC`h5;KlzaK^pQ$;+)CZby8$?YmOuh8_`5CEMs-T3c z029v!s{JD^l%4M528M=Ue5DD*@h>jd|5 Date: Sat, 4 May 2024 17:39:23 +0200 Subject: [PATCH 08/35] PenLayerPainter: Remove FBO format --- src/penlayerpainter.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/penlayerpainter.cpp b/src/penlayerpainter.cpp index 4c6e5f6..212deec 100644 --- a/src/penlayerpainter.cpp +++ b/src/penlayerpainter.cpp @@ -24,9 +24,6 @@ void PenLayerPainter::paint(QNanoPainter *painter) // Custom FBO - only used for testing QOpenGLFramebufferObject *targetFbo = m_targetFbo ? m_targetFbo : framebufferObject(); - QOpenGLFramebufferObjectFormat format; - format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); - // Blit the FBO to the item FBO QOpenGLFramebufferObject::blitFramebuffer(targetFbo, m_fbo); } From bcbe09b9478cf75fc5efedd4adf56ad6e12f5307 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 4 May 2024 17:56:12 +0200 Subject: [PATCH 09/35] Use QNanoColor for pen color --- src/penattributes.h | 4 +- src/penlayer.cpp | 5 +- src/penstate.h | 2 +- test/blocks/pen_blocks_test.cpp | 146 ++++++++++++------------ test/penlayer/penlayer_test.cpp | 18 +-- test/penstate/penstate_test.cpp | 2 +- test/target_models/spritemodel_test.cpp | 4 +- 7 files changed, 90 insertions(+), 91 deletions(-) diff --git a/src/penattributes.h b/src/penattributes.h index 900991f..b2573d6 100644 --- a/src/penattributes.h +++ b/src/penattributes.h @@ -2,14 +2,14 @@ #pragma once -#include +#include namespace scratchcpprender { struct PenAttributes { - QColor color = QColor(0, 0, 255); + QNanoColor color = QNanoColor(0, 0, 255); double diameter = 1; }; diff --git a/src/penlayer.cpp b/src/penlayer.cpp index 76cf7cf..f230c0a 100644 --- a/src/penlayer.cpp +++ b/src/penlayer.cpp @@ -109,9 +109,8 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do // Set pen attributes m_painter->setLineWidth(penAttributes.diameter); - QNanoColor col(penAttributes.color.red(), penAttributes.color.green(), penAttributes.color.blue(), penAttributes.color.alpha()); - m_painter->setStrokeStyle(col); - m_painter->setFillStyle(col); + m_painter->setStrokeStyle(penAttributes.color); + m_painter->setFillStyle(penAttributes.color); m_painter->setLineJoin(QNanoPainter::JOIN_ROUND); m_painter->setLineCap(QNanoPainter::CAP_ROUND); m_painter->setAntialias(m_antialiasingEnabled ? 1.0f : 0.0f); diff --git a/src/penstate.h b/src/penstate.h index aa134f2..f1e6400 100644 --- a/src/penstate.h +++ b/src/penstate.h @@ -31,7 +31,7 @@ struct PenState const int v = brightness * 255 / 100; const int a = 255 - transparency * 255 / 100; - penAttributes.color = QColor::fromHsv(h, s, v, a); + penAttributes.color = QNanoColor::fromQColor(QColor::fromHsv(h, s, v, a)); } }; diff --git a/test/blocks/pen_blocks_test.cpp b/test/blocks/pen_blocks_test.cpp index 57b423e..e6b7ece 100644 --- a/test/blocks/pen_blocks_test.cpp +++ b/test/blocks/pen_blocks_test.cpp @@ -289,43 +289,43 @@ TEST_F(PenBlocksTest, SetPenColorToColorImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(210, 42, 204)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(210, 42, 204))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(228, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(228, 255, 255))); vm.reset(); vm.setBytecode(bytecode3); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(359, 0, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(359, 0, 0))); vm.reset(); vm.setBytecode(bytecode4); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(359, 0, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(359, 0, 0))); vm.reset(); vm.setBytecode(bytecode5); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(359, 0, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(359, 0, 0))); vm.reset(); vm.setBytecode(bytecode6); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(162, 74, 72, 73)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(162, 74, 72, 73))); vm.reset(); vm.setBytecode(bytecode7); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(239, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(239, 255, 255))); } TEST_F(PenBlocksTest, ChangePenColorParamBy) @@ -435,18 +435,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) // color vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(71, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(71, 255, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(263, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(263, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 255, 255, 150))); // saturation model.penState().saturation = 32.4; @@ -454,18 +454,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode3); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 218, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 218, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode4); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 255, 150))); // brightness model.penState().brightness = 12.5; @@ -473,18 +473,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode5); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 167, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 167, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 255, 150))); vm.reset(); vm.setBytecode(bytecode6); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 150))); // transparency model.penState().transparency = 6.28; @@ -492,25 +492,25 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode7); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 103)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 103))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 0))); vm.reset(); vm.setBytecode(bytecode8); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 255))); // invalid parameter vm.reset(); vm.setBytecode(bytecode9); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 255))); // color (optimized) model.penState() = PenState(); @@ -519,18 +519,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode10); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(71, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(71, 255, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(263, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(263, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode11); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 255, 255, 150))); // saturation (optimized) model.penState().saturation = 32.4; @@ -538,18 +538,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode12); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 218, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 218, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode13); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 255, 150))); // brightness (optimized) model.penState().brightness = 12.5; @@ -557,18 +557,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode14); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 167, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 167, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 255, 150))); vm.reset(); vm.setBytecode(bytecode15); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 150))); // transparency (optimized) model.penState().transparency = 6.28; @@ -576,18 +576,18 @@ TEST_F(PenBlocksTest, ChangePenColorParamByImpl) vm.setBytecode(bytecode16); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 103)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 103))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 0))); vm.reset(); vm.setBytecode(bytecode17); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(188, 0, 0, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(188, 0, 0, 255))); } TEST_F(PenBlocksTest, SetPenColorParamTo) @@ -705,19 +705,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) // color vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(191, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(191, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(234, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(234, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode3); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // saturation model.penState().saturation = 32.4; @@ -725,19 +725,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode4); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 135, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 135, 255, 150))); vm.reset(); vm.setBytecode(bytecode5); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 0, 255, 150))); vm.reset(); vm.setBytecode(bytecode6); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // brightness model.penState().brightness = 12.5; @@ -745,19 +745,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode7); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 135, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 135, 150))); vm.reset(); vm.setBytecode(bytecode8); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 0, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 0, 150))); vm.reset(); vm.setBytecode(bytecode9); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // transparency model.penState().transparency = 12.5; @@ -765,26 +765,26 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode10); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 119)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 119))); vm.reset(); vm.setBytecode(bytecode11); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 255))); vm.reset(); vm.setBytecode(bytecode12); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 0))); // invalid parameter vm.reset(); vm.setBytecode(bytecode13); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 0))); // color (optimized) model.penState() = PenState(); @@ -794,19 +794,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode14); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(191, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(191, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode15); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(234, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(234, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode16); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // saturation (optimized) model.penState().saturation = 32.4; @@ -814,19 +814,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode17); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 135, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 135, 255, 150))); vm.reset(); vm.setBytecode(bytecode18); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 0, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 0, 255, 150))); vm.reset(); vm.setBytecode(bytecode19); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // brightness (optimized) model.penState().brightness = 12.5; @@ -834,19 +834,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode20); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 135, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 135, 150))); vm.reset(); vm.setBytecode(bytecode21); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 0, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 0, 150))); vm.reset(); vm.setBytecode(bytecode22); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 150))); // transparency (optimized) model.penState().transparency = 12.5; @@ -854,19 +854,19 @@ TEST_F(PenBlocksTest, SetPenColorParamToImpl) vm.setBytecode(bytecode23); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 119)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 119))); vm.reset(); vm.setBytecode(bytecode24); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 255))); vm.reset(); vm.setBytecode(bytecode25); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(313, 255, 255, 0)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(313, 255, 255, 0))); } TEST_F(PenBlocksTest, ChangePenSizeBy) @@ -1057,28 +1057,28 @@ TEST_F(PenBlocksTest, ChangePenShadeByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 255, 110, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 255, 110, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 119, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 119, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 247, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 247, 255, 150))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 162, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 162, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 255, 55, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 255, 55, 150))); } TEST_F(PenBlocksTest, SetPenShadeToNumber) @@ -1132,19 +1132,19 @@ TEST_F(PenBlocksTest, SetPenShadeToNumberImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 148, 253, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 148, 253, 150))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 102, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 102, 255, 150))); vm.reset(); vm.setBytecode(bytecode3); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(240, 89, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(240, 89, 255, 150))); } TEST_F(PenBlocksTest, ChangePenHueBy) @@ -1197,28 +1197,28 @@ TEST_F(PenBlocksTest, ChangePenHueByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(106, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(106, 255, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(332, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(332, 255, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(199, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(199, 255, 255, 150))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(353, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(353, 255, 255, 150))); vm.reset(); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(148, 255, 255, 150)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(148, 255, 255, 150))); } TEST_F(PenBlocksTest, SetPenHueToNumber) @@ -1272,17 +1272,17 @@ TEST_F(PenBlocksTest, SetPenHueToNumberImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(226, 255, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(226, 255, 255, 255))); vm.reset(); vm.setBytecode(bytecode2); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(154, 255, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(154, 255, 255, 255))); vm.reset(); vm.setBytecode(bytecode3); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(model.penAttributes().color, QColor::fromHsv(160, 255, 255, 255)); + ASSERT_EQ(model.penAttributes().color, QNanoColor::fromQColor(QColor::fromHsv(160, 255, 255, 255))); } diff --git a/test/penlayer/penlayer_test.cpp b/test/penlayer/penlayer_test.cpp index 44c5bf1..4764dc5 100644 --- a/test/penlayer/penlayer_test.cpp +++ b/test/penlayer/penlayer_test.cpp @@ -178,7 +178,7 @@ TEST_F(PenLayerTest, DrawPoint) penLayer.setEngine(&engine); PenAttributes attr; - attr.color = QColor(255, 0, 0); + attr.color = QNanoColor(255, 0, 0); attr.diameter = 3; EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); @@ -187,7 +187,7 @@ TEST_F(PenLayerTest, DrawPoint) penLayer.drawPoint(attr, -56, 93); penLayer.drawPoint(attr, 130, 77); - attr.color = QColor(0, 128, 0, 128); + attr.color = QNanoColor(0, 128, 0, 128); attr.diameter = 10; EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); @@ -196,7 +196,7 @@ TEST_F(PenLayerTest, DrawPoint) penLayer.drawPoint(attr, -228, 145); penLayer.drawPoint(attr, -100, 139); - attr.color = QColor(255, 50, 200, 185); + attr.color = QNanoColor(255, 50, 200, 185); attr.diameter = 25.6; EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); @@ -225,7 +225,7 @@ TEST_F(PenLayerTest, DrawLine) penLayer.setEngine(&engine); PenAttributes attr; - attr.color = QColor(255, 0, 0); + attr.color = QNanoColor(255, 0, 0); attr.diameter = 3; EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); @@ -233,7 +233,7 @@ TEST_F(PenLayerTest, DrawLine) penLayer.drawLine(attr, 63, 164, -56, 93); penLayer.drawLine(attr, 130, 77, 125, -22); - attr.color = QColor(0, 128, 0, 128); + attr.color = QNanoColor(0, 128, 0, 128); attr.diameter = 10; EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); @@ -241,7 +241,7 @@ TEST_F(PenLayerTest, DrawLine) penLayer.drawLine(attr, 152, -158, -228, 145); penLayer.drawLine(attr, -100, 139, 20, 72); - attr.color = QColor(255, 50, 200, 185); + attr.color = QNanoColor(255, 50, 200, 185); attr.diameter = 25.6; EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); @@ -269,7 +269,7 @@ TEST_F(PenLayerTest, TextureData) penLayer.setEngine(&engine); PenAttributes attr; - attr.color = QColor(255, 0, 0); + attr.color = QNanoColor(255, 0, 0); attr.diameter = 1; penLayer.drawLine(attr, -3, 2, 3, -2); ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 2), qRgb(255, 0, 0)); @@ -282,7 +282,7 @@ TEST_F(PenLayerTest, TextureData) ASSERT_EQ(bounds.right(), 3); ASSERT_EQ(bounds.bottom(), -2); - attr.color = QColor(0, 128, 0, 128); + attr.color = QNanoColor(0, 128, 0, 128); attr.diameter = 2; penLayer.drawLine(attr, -3, -2, 3, 2); ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 2), qRgb(255, 0, 0)); @@ -306,7 +306,7 @@ TEST_F(PenLayerTest, TextureData) ASSERT_EQ(bounds.right(), 0); ASSERT_EQ(bounds.bottom(), 0); - attr.color = QColor(0, 255, 0, 255); + attr.color = QNanoColor(0, 255, 0, 255); attr.diameter = 1; penLayer.drawLine(attr, 0, -1, 1, 1); ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgba(0, 0, 0, 0)); diff --git a/test/penstate/penstate_test.cpp b/test/penstate/penstate_test.cpp index 9a7be7d..bcea105 100644 --- a/test/penstate/penstate_test.cpp +++ b/test/penstate/penstate_test.cpp @@ -28,5 +28,5 @@ TEST(PenStateTest, UpdateColor) state.transparency = 36.09; state.shade = 85; state.updateColor(); - ASSERT_EQ(state.penAttributes.color, QColor::fromHsv(283, 114, 31, 162)); + ASSERT_EQ(state.penAttributes.color, QNanoColor::fromQColor(QColor::fromHsv(283, 114, 31, 162))); } diff --git a/test/target_models/spritemodel_test.cpp b/test/target_models/spritemodel_test.cpp index ccb75cb..5b406e0 100644 --- a/test/target_models/spritemodel_test.cpp +++ b/test/target_models/spritemodel_test.cpp @@ -83,7 +83,7 @@ TEST(SpriteModelTest, OnCloned) QSignalSpy spy2(cloneModel, &SpriteModel::cloned); PenLayerMock penLayer; cloneModel->setPenLayer(&penLayer); - cloneModel->penAttributes().color = QColor(255, 0, 0); + cloneModel->penAttributes().color = QNanoColor(255, 0, 0); cloneModel->penAttributes().diameter = 20.3; EXPECT_CALL(penLayer, drawPoint); cloneModel->setPenDown(true); @@ -98,7 +98,7 @@ TEST(SpriteModelTest, OnCloned) ASSERT_EQ(cloneModel->sprite(), &clone3); ASSERT_EQ(cloneModel->cloneRoot(), &model); ASSERT_EQ(cloneModel->penLayer(), &penLayer); - ASSERT_EQ(cloneModel->penAttributes().color, QColor(255, 0, 0)); + ASSERT_EQ(cloneModel->penAttributes().color, QNanoColor(255, 0, 0)); ASSERT_EQ(cloneModel->penAttributes().diameter, 20.3); ASSERT_TRUE(cloneModel->penDown()); } From c1db5f079c95ceba95992352180f22aa35a29e80 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Tue, 20 Aug 2024 19:27:52 +0200 Subject: [PATCH 10/35] Add CPU texture getter to RenderedTarget --- src/irenderedtarget.h | 1 + src/renderedtarget.cpp | 5 +++++ src/renderedtarget.h | 1 + test/mocks/renderedtargetmock.h | 1 + test/renderedtarget/renderedtarget_test.cpp | 25 +++++++++++++++++++++ 5 files changed, 33 insertions(+) diff --git a/src/irenderedtarget.h b/src/irenderedtarget.h index 0bfc291..7925cd0 100644 --- a/src/irenderedtarget.h +++ b/src/irenderedtarget.h @@ -78,6 +78,7 @@ class IRenderedTarget : public QNanoQuickItem virtual bool mirrorHorizontally() const = 0; virtual Texture texture() const = 0; + virtual const Texture &cpuTexture() const = 0; virtual int costumeWidth() const = 0; virtual int costumeHeight() const = 0; diff --git a/src/renderedtarget.cpp b/src/renderedtarget.cpp index fc79cb1..f9454fd 100644 --- a/src/renderedtarget.cpp +++ b/src/renderedtarget.cpp @@ -529,6 +529,11 @@ Texture RenderedTarget::texture() const return m_texture; } +const Texture &RenderedTarget::cpuTexture() const +{ + return m_cpuTexture; +} + int RenderedTarget::costumeWidth() const { if (!m_skin || !m_costume) diff --git a/src/renderedtarget.h b/src/renderedtarget.h index 70608b0..e752e1c 100644 --- a/src/renderedtarget.h +++ b/src/renderedtarget.h @@ -86,6 +86,7 @@ class RenderedTarget : public IRenderedTarget bool mirrorHorizontally() const override; Texture texture() const override; + const Texture &cpuTexture() const override; int costumeWidth() const override; int costumeHeight() const override; diff --git a/test/mocks/renderedtargetmock.h b/test/mocks/renderedtargetmock.h index ce1ad9b..a120bb6 100644 --- a/test/mocks/renderedtargetmock.h +++ b/test/mocks/renderedtargetmock.h @@ -62,6 +62,7 @@ class RenderedTargetMock : public IRenderedTarget MOCK_METHOD(bool, mirrorHorizontally, (), (const, override)); MOCK_METHOD(Texture, texture, (), (const, override)); + MOCK_METHOD(const Texture &, cpuTexture, (), (const, override)); MOCK_METHOD(int, costumeWidth, (), (const, override)); MOCK_METHOD(int, costumeHeight, (), (const, override)); diff --git a/test/renderedtarget/renderedtarget_test.cpp b/test/renderedtarget/renderedtarget_test.cpp index 4a11924..044a81d 100644 --- a/test/renderedtarget/renderedtarget_test.cpp +++ b/test/renderedtarget/renderedtarget_test.cpp @@ -106,6 +106,11 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(texture.width(), 4); ASSERT_EQ(texture.height(), 6); + texture = target.cpuTexture(); + ASSERT_TRUE(texture.isValid()); + ASSERT_EQ(texture.width(), 4); + ASSERT_EQ(texture.height(), 6); + // Sprite Sprite sprite; sprite.setVisible(true); @@ -145,6 +150,11 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(texture.width(), 4); ASSERT_EQ(texture.height(), 6); + texture = target.cpuTexture(); + ASSERT_TRUE(texture.isValid()); + ASSERT_EQ(texture.width(), 4); + ASSERT_EQ(texture.height(), 6); + // Visibility target.updateVisibility(false); ASSERT_FALSE(target.isVisible()); @@ -290,6 +300,11 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(target.costumeWidth(), 13); ASSERT_EQ(target.costumeHeight(), 13); + texture = target.cpuTexture(); + ASSERT_TRUE(texture.isValid()); + ASSERT_EQ(texture.width(), 13); + ASSERT_EQ(texture.height(), 13); + // Stage scale (SVG) - should update width and height EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); @@ -299,6 +314,16 @@ TEST_F(RenderedTargetTest, UpdateMethods) ASSERT_EQ(target.costumeWidth(), 13); ASSERT_EQ(target.costumeHeight(), 13); + texture = target.texture(); + ASSERT_TRUE(texture.isValid()); + ASSERT_EQ(texture.width(), 52); + ASSERT_EQ(texture.height(), 52); + + texture = target.cpuTexture(); + ASSERT_TRUE(texture.isValid()); + ASSERT_EQ(texture.width(), 13); + ASSERT_EQ(texture.height(), 13); + context.doneCurrent(); } From bb93dc9aafdf4188baa1db6730c931a5147d07c0 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 00:15:07 +0200 Subject: [PATCH 11/35] Add fuzzyCompareImages() test function --- test/common.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/common.h b/test/common.h index c639833..847aa84 100644 --- a/test/common.h +++ b/test/common.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -18,6 +19,23 @@ std::string readFileStr(const std::string &fileName) return buffer.str(); } +double fuzzyCompareImages(const QImage &a, const QImage &b) +{ + if (a.size() != b.size()) + return 1; + + int x, y, c = 0; + + for (y = 0; y < a.height(); y++) { + for (x = 0; x < a.width(); x++) { + if (a.pixel(x, y) != b.pixel(x, y)) + c++; + } + } + + return c / static_cast((a.width() * a.height())); +} + int main(int argc, char **argv) { QGuiApplication a(argc, argv); From d180546ea89faa9dd699107a8c0a62c988fee5dc Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 00:16:43 +0200 Subject: [PATCH 12/35] PenLayer: Initialize GL functions in setEngine() --- src/penlayer.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/penlayer.cpp b/src/penlayer.cpp index f230c0a..e537dc5 100644 --- a/src/penlayer.cpp +++ b/src/penlayer.cpp @@ -56,6 +56,11 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine) if (!m_painter) m_painter = std::make_unique(); + if (!m_glF) { + m_glF = std::make_unique(); + m_glF->initializeOpenGLFunctions(); + } + clear(); } @@ -67,11 +72,6 @@ void scratchcpprender::PenLayer::clear() if (!m_fbo) return; - if (!m_glF) { - m_glF = std::make_unique(); - m_glF->initializeOpenGLFunctions(); - } - m_fbo->bind(); m_glF->glDisable(GL_SCISSOR_TEST); m_glF->glClearColor(0.0f, 0.0f, 0.0f, 0.0f); From 3dc61a4248bbe1cf03c468dc7fc63ed70cc5a1d7 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 00:18:04 +0200 Subject: [PATCH 13/35] Add stamp() method to PenLayer --- src/ipenlayer.h | 2 + src/penlayer.cpp | 200 +++++++++++++++++++++++++++++++- src/penlayer.h | 8 +- test/mocks/penlayermock.h | 1 + test/penlayer/penlayer_test.cpp | 49 ++++++++ test/stamp.png | Bin 0 -> 57816 bytes test/stamp_env.sb3 | Bin 0 -> 178895 bytes 7 files changed, 257 insertions(+), 3 deletions(-) create mode 100644 test/stamp.png create mode 100644 test/stamp_env.sb3 diff --git a/src/ipenlayer.h b/src/ipenlayer.h index d21d26e..1ca3fe6 100644 --- a/src/ipenlayer.h +++ b/src/ipenlayer.h @@ -16,6 +16,7 @@ namespace scratchcpprender { struct PenAttributes; +class IRenderedTarget; class IPenLayer : public QNanoQuickItem { @@ -36,6 +37,7 @@ class IPenLayer : public QNanoQuickItem virtual void clear() = 0; virtual void drawPoint(const PenAttributes &penAttributes, double x, double y) = 0; virtual void drawLine(const PenAttributes &penAttributes, double x0, double y0, double x1, double y1) = 0; + virtual void stamp(IRenderedTarget *target) = 0; virtual QOpenGLFramebufferObject *framebufferObject() const = 0; virtual QRgb colorAtScratchPoint(double x, double y) const = 0; diff --git a/src/penlayer.cpp b/src/penlayer.cpp index e537dc5..628bec1 100644 --- a/src/penlayer.cpp +++ b/src/penlayer.cpp @@ -1,8 +1,13 @@ // SPDX-License-Identifier: LGPL-3.0-or-later +#include + #include "penlayer.h" #include "penlayerpainter.h" #include "penattributes.h" +#include "irenderedtarget.h" +#include "spritemodel.h" +#include "stagemodel.h" using namespace scratchcpprender; @@ -18,6 +23,12 @@ PenLayer::~PenLayer() { if (m_engine) m_projectPenLayers.erase(m_engine); + + if (m_blitter.isCreated()) { + // Delete vertex array and buffer + m_glF->glDeleteVertexArrays(1, &m_vao); + m_glF->glDeleteBuffers(1, &m_vbo); + } } bool PenLayer::antialiasingEnabled() const @@ -57,10 +68,38 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine) m_painter = std::make_unique(); if (!m_glF) { - m_glF = std::make_unique(); + m_glF = std::make_unique(); m_glF->initializeOpenGLFunctions(); } + if (!m_blitter.isCreated()) { + m_blitter.create(); + + // Set up VBO and VAO + float vertices[] = { + -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, + }; + + m_glF->glGenVertexArrays(1, &m_vao); + m_glF->glGenBuffers(1, &m_vbo); + + m_glF->glBindVertexArray(m_vao); + + m_glF->glBindBuffer(GL_ARRAY_BUFFER, m_vbo); + m_glF->glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + + // Position attribute + m_glF->glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void *)0); + m_glF->glEnableVertexAttribArray(0); + + // Texture coordinate attribute + m_glF->glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void *)(2 * sizeof(float))); + m_glF->glEnableVertexAttribArray(1); + + m_glF->glBindVertexArray(0); + m_glF->glBindBuffer(GL_ARRAY_BUFFER, 0); + } + clear(); } @@ -138,6 +177,165 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do update(); } +/* + * A brief description of how stamping is implemented: + * 1. Get rotation, size and coordinates and translate them. + * 2. Draw the texture onto a temporary texture using shaders. + * 3. Blit the resulting texture to a FBO with a square texture (required for rotation). + * 4. Blit the resulting texture to the pen layer using QOpenGLTextureBlitter with transform. + * + * If you think this is too complicated, contributions are welcome! + */ +void PenLayer::stamp(IRenderedTarget *target) +{ + if (!target || !m_fbo || !m_texture.isValid() || !m_blitter.isCreated()) + return; + + double x = 0; + double y = 0; + double angle = 0; + double scale = 1; + bool mirror = false; + std::shared_ptr costume; + + SpriteModel *spriteModel = target->spriteModel(); + + if (spriteModel) { + libscratchcpp::Sprite *sprite = spriteModel->sprite(); + x = sprite->x(); + y = sprite->y(); + + switch (sprite->rotationStyle()) { + case libscratchcpp::Sprite::RotationStyle::AllAround: + angle = 90 - sprite->direction(); + break; + + case libscratchcpp::Sprite::RotationStyle::LeftRight: + mirror = (sprite->direction() < 0); + break; + + default: + break; + } + + scale = sprite->size() / 100; + costume = sprite->currentCostume(); + } else + costume = target->stageModel()->stage()->currentCostume(); + + const double bitmapRes = costume->bitmapResolution(); + const double centerX = costume->rotationCenterX() / bitmapRes; + const double centerY = costume->rotationCenterY() / bitmapRes; + + const Texture &texture = target->cpuTexture(); + + if (!texture.isValid()) + return; + + const double textureScale = texture.width() / static_cast(target->costumeWidth()); + + // Translate the coordinates + // TODO: Apply scale (HQ pen) + x = std::floor(x + m_texture.width() / 2.0); + y = std::floor(-y + m_texture.height() / 2.0); + + m_glF->glDisable(GL_SCISSOR_TEST); + + // For some reason nothing is rendered without this + // TODO: Find out why this is happening + m_painter->beginFrame(m_fbo->width(), m_fbo->height()); + m_painter->stroke(); + m_painter->endFrame(); + + // Create a temporary FBO for graphic effects + QOpenGLFramebufferObject tmpFbo(texture.size()); + m_painter->beginFrame(tmpFbo.width(), tmpFbo.height()); + + // Create a FBO for the current texture + unsigned int fbo; + m_glF->glGenFramebuffers(1, &fbo); + m_glF->glBindFramebuffer(GL_FRAMEBUFFER, fbo); + m_glF->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.handle(), 0); + + if (m_glF->glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + qWarning() << "error: framebuffer incomplete (stamp " + target->scratchTarget()->name() + ")"; + m_glF->glDeleteFramebuffers(1, &fbo); + return; + } + + // Get the shader program for the current set of effects + ShaderManager *shaderManager = ShaderManager::instance(); + + const auto &effects = target->graphicEffects(); + QOpenGLShaderProgram *shaderProgram = shaderManager->getShaderProgram(effects); + Q_ASSERT(shaderProgram); + Q_ASSERT(shaderProgram->isLinked()); + + m_glF->glBindBuffer(GL_ARRAY_BUFFER, m_vbo); + + // Render to the target framebuffer + m_glF->glBindFramebuffer(GL_FRAMEBUFFER, tmpFbo.handle()); + shaderProgram->bind(); + m_glF->glBindVertexArray(m_vao); + m_glF->glActiveTexture(GL_TEXTURE0); + m_glF->glBindTexture(GL_TEXTURE_2D, texture.handle()); + shaderManager->setUniforms(shaderProgram, 0, effects); // set texture and effect uniforms + m_glF->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + m_painter->endFrame(); + + // Resize to square (for rotation) + const double dim = std::max(tmpFbo.width(), tmpFbo.height()); + QOpenGLFramebufferObject resizeFbo(dim, dim); + resizeFbo.bind(); + m_painter->beginFrame(dim, dim); + + const QRect resizeRect(QPoint(0, 0), tmpFbo.size()); + const QMatrix4x4 matrix = QOpenGLTextureBlitter::targetTransform(resizeRect, QRect(QPoint(0, 0), resizeFbo.size())); + m_glF->glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + m_glF->glClear(GL_COLOR_BUFFER_BIT); + m_blitter.bind(); + m_blitter.blit(tmpFbo.texture(), matrix, QOpenGLTextureBlitter::OriginBottomLeft); + m_blitter.release(); + + m_painter->endFrame(); + resizeFbo.release(); + + // Cleanup + shaderProgram->release(); + m_glF->glBindVertexArray(0); + m_glF->glBindBuffer(GL_ARRAY_BUFFER, 0); + m_glF->glBindFramebuffer(GL_FRAMEBUFFER, 0); + m_glF->glDeleteFramebuffers(1, &fbo); + + // Transform + const double width = resizeFbo.width() / textureScale; + const double height = resizeFbo.height() / textureScale; + QRectF targetRect(QPoint(x, y), QSizeF(width, height)); + QTransform transform = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(centerX, centerY), m_fbo->size())).toTransform(); + const double dx = 2 * (centerX - width / 2.0) / width; + const double dy = -2 * (centerY - height / 2.0) / height; + transform.translate(dx, dy); + transform.rotate(angle); + transform.scale(scale * (mirror ? -1 : 1), scale); + transform.translate(-dx, -dy); + + // Blit + m_fbo->bind(); + m_painter->beginFrame(m_fbo->width(), m_fbo->height()); + m_blitter.bind(); + m_blitter.blit(resizeFbo.texture(), transform, QOpenGLTextureBlitter::OriginBottomLeft); + m_blitter.release(); + m_painter->endFrame(); + m_fbo->release(); + + m_glF->glEnable(GL_SCISSOR_TEST); + + m_textureDirty = true; + m_boundsDirty = true; + update(); +} + QOpenGLFramebufferObject *PenLayer::framebufferObject() const { return m_fbo.get(); diff --git a/src/penlayer.h b/src/penlayer.h index fe72fc5..a7d2969 100644 --- a/src/penlayer.h +++ b/src/penlayer.h @@ -3,7 +3,7 @@ #pragma once #include -#include +#include #include #include @@ -33,6 +33,7 @@ class PenLayer : public IPenLayer void clear() override; void drawPoint(const PenAttributes &penAttributes, double x, double y) override; void drawLine(const PenAttributes &penAttributes, double x0, double y0, double x1, double y1) override; + void stamp(IRenderedTarget *target) override; QOpenGLFramebufferObject *framebufferObject() const override; QRgb colorAtScratchPoint(double x, double y) const override; @@ -56,12 +57,15 @@ class PenLayer : public IPenLayer libscratchcpp::IEngine *m_engine = nullptr; std::unique_ptr m_fbo; std::unique_ptr m_painter; - std::unique_ptr m_glF; + std::unique_ptr m_glF; Texture m_texture; bool m_textureDirty = true; mutable CpuTextureManager m_textureManager; mutable bool m_boundsDirty = true; mutable libscratchcpp::Rect m_bounds; + QOpenGLTextureBlitter m_blitter; + GLuint m_vbo = 0; + GLuint m_vao = 0; }; } // namespace scratchcpprender diff --git a/test/mocks/penlayermock.h b/test/mocks/penlayermock.h index 2f8a0d5..5c76938 100644 --- a/test/mocks/penlayermock.h +++ b/test/mocks/penlayermock.h @@ -21,6 +21,7 @@ class PenLayerMock : public IPenLayer MOCK_METHOD(void, clear, (), (override)); MOCK_METHOD(void, drawPoint, (const PenAttributes &, double, double), (override)); MOCK_METHOD(void, drawLine, (const PenAttributes &, double, double, double, double), (override)); + MOCK_METHOD(void, stamp, (IRenderedTarget *), (override)); MOCK_METHOD(QOpenGLFramebufferObject *, framebufferObject, (), (const, override)); MOCK_METHOD(QRgb, colorAtScratchPoint, (double, double), (const, override)); diff --git a/test/penlayer/penlayer_test.cpp b/test/penlayer/penlayer_test.cpp index 4764dc5..c7f62a6 100644 --- a/test/penlayer/penlayer_test.cpp +++ b/test/penlayer/penlayer_test.cpp @@ -4,6 +4,9 @@ #include #include #include +#include +#include +#include #include #include @@ -259,6 +262,52 @@ TEST_F(PenLayerTest, DrawLine) ASSERT_EQ(ref.readAll(), buffer.readAll()); } +TEST_F(PenLayerTest, Stamp) +{ + PenLayer penLayer; + EngineMock engine; + EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); + EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); + penLayer.setEngine(&engine); + + ProjectLoader loader; + loader.setFileName("stamp_env.sb3"); + loader.start(); // wait until it loads + + std::vector> targets; + StageModel *stage = loader.stage(); + targets.push_back(std::make_unique()); + targets.back()->setStageModel(stage); + targets.back()->setEngine(loader.engine()); + targets.back()->loadCostumes(); + targets.back()->updateCostume(stage->stage()->currentCostume().get()); + targets.back()->setGraphicEffect(ShaderManager::Effect::Color, 25); + stage->setRenderedTarget(targets.back().get()); + const auto &sprites = loader.spriteList(); + + int i = 0; + + for (SpriteModel *sprite : sprites) { + targets.push_back(std::make_unique()); + targets.back()->setSpriteModel(sprite); + targets.back()->setEngine(loader.engine()); + targets.back()->loadCostumes(); + targets.back()->updateCostume(sprite->sprite()->currentCostume().get()); + targets.back()->setGraphicEffect(ShaderManager::Effect::Color, i * 25); + targets.back()->setGraphicEffect(ShaderManager::Effect::Ghost, i * 5); + sprite->setRenderedTarget(targets.back().get()); + i++; + } + + for (const auto &target : targets) + penLayer.stamp(target.get()); + + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage().scaled(240, 180); + QImage ref("stamp.png"); + ASSERT_LE(fuzzyCompareImages(image, ref), 0.1668); +} + TEST_F(PenLayerTest, TextureData) { PenLayer penLayer; diff --git a/test/stamp.png b/test/stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5e4266867f04908330ed14b8b17af43a69fa19 GIT binary patch literal 57816 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/test/stamp_env.sb3 b/test/stamp_env.sb3 new file mode 100644 index 0000000000000000000000000000000000000000..9a0f4359571b652f905b79eb37d779ee2f6bebdd GIT binary patch literal 178895 zcmV(%K;pkpO9KQ7000080Gp~5S$Y@^_Ra$U0CW=o01N;C0B~||YGq?|E^2dcZta*` zZ`(E$$G=LzJ!}JPhWCqKb}80jz_1NX&}}G+jgn|bizFHp?Iuh8-FIjyt&@3;UzP+x z{KU(lbjbftJb(BKB^MVy^=S6y3f28datn`UDX#nkb*_ar8pbAQ?PBeU#zX8C`tz^v z&c7D#>o=dhJpbwobMfUjukp0KJh~2o=b_#1guLBMP*eB$Raej~VsKUIKK7eXo{#M^ zw5{*1XUbKK(0dX3w8{yQ9I$NFE$Y;|N+7BueC$Dd>6<96%Gx66QL3YzP> z^5HbPu3tJhq4E;V z-xB?Q7H}M+d-bEY^y}9*^|MS@N;Au(*M+rnZ7A1VmcocqS;lttyDJtC5C4~boM0_1 z*Tyhy7?*aBn$lpSgjR+M!G$tR9V{--()IQB;~74{3pATj3Fv~d7EYkA|IQ1Ugu|$# zFNdRr7A5WgbPYX^vdXd7)23@JHk4X&URrS)$KC z+$RuXFAxGVNtlot;*HRBzyms%K&nO(AtfX911|a&E!tuY=|VPyP)@WsgqDvC98L>+ zrsY0qVf$#IRAUO15Dk@zi{U1bm`JIugv&yjtp5NCCpSQ$!eV8tvP3XqH4_J2D~E$p zg=rTcHf$@^Gb;Cp3f+r}C0JQ)DFIs}xl-f30{0D5(i&nRVXDkEE)p=>{n4BBaEdh- zf-+*j;fP$t?xv>--RJ3OMB)?t{PNRd@+NnA%aZZJ__^_(6i!iYcp*zx8Br*2O~H4G zxhwX+yrrUh5TVo@%!J(UKA>7ys+3d!0D~JtZmF1RfsF-9H02CLCiWrB2~hAz&B>D> zLhU6&YAm4~0103+xMV_oAVMkzmzv~MC}zb2_>Y@FJSP9~B!JNSfG{MN0V=3A7SzmT zAmd;-R#FpYpawv-)9L|SM#kZ>x{N0QgxTvOG{;~`wBm3Z5HsSSv6T$?u;54;7>fII z5wL+abae`G+zuR??|O(I`>jtd|E1OYcAa;HI0mLOD=l;gX4?+%)#by6=CW~V4#MR{ zqt>UZScG3)T*CA!HZXFQ(z2f&AE!L?4rXwOi(|CeZ2kdIO9KQ7000080Gp~5S;gYw z^9!c}0D`vy03-ka0Ayt_Wi>QoWHB){H8C|dHfAt1G-WqsHezEnI5=W5V=i!RXH zAe8<0z7{P!(PDWDsXS#1C0Qb(B7`D4gCfMFv750JNm)~dvQ3t;WEl*`G7Ab>$ChCR zBhwiBV2m+l@qb=?f8THa`^Ej@es@0CIp@00b)V0>2bLzsgw6;F2nZZAy?4i2K;S@| zfWZEtBZvO|;udzgUSL1!xal3kN8!X3%yc0|;bZmDdw|c(5d7p67yGdpu9G|6TA`Gs z@(Iy*LgA?5!6Tl1+Z^fQpvm2R-(lhJ-fqP34E6%9;5@2$JgZYi4m{5(>f`Z2niXwo ziPeuEen+tgoSCB==I%8_^Vp;Q>K1$$-mq0oMoWRVmsA~dnoix6HK4n3X|gQ(-cCyl ze|C8zzU*)L8{|bVSzR_O466q=9HoB)`SGkISY7?{PWNQwTTK!TZ557(aRz zzlV<5yStb_#d}F7@wm7JG>#wG!{oDAyZ|f0FDq3YHkSszOU;hZcbwWL)J^>}&cxvC z$YXRUZRLANv%~Fs22Vi3p1MD=u=~#Y{wh(~lY^U#i$+|t#HJIv)yS^%LBkufyE_l)X=-{$*UII~6LsfZ}RbVf#Nztxdt{CRy`jzw=e zLrajI8@C`k@Rawni*&bDe zo7~%D=0N_XQMPWeCFiUhT+$@9qu{_2pcp=O&K6eD)Qt2Z>? zjR>Bv@62!C{6My>}KEPzC`XWy8^k3KK>bP;y zdhjGXWqFe^zxksfsLG(1d99i8{E`OK4Ziqb)LRO1YO0zMM70IW0MRO#RAzxMcLTb( z%9C!O*=O^I1^(}mZFArltCEWwpx;({Islh#$znZsimms$%N;VuONS<+V^1($gp_mX z{X4GNqHJBfLGga+A#ov-q7LyN*$jn@Y$+zF_tQ_#>%K6VAHMMUQR`GM~8iP{|O*wr2jb zf^*qV#J(4ayBF1$j&F@clfMc`;R2=>^T^W-LRawZeTV)7;QEQ=D&-pkLhDBCIjcrn zP!D+{(&;g0+&}ueP{q?zD|h(e7gg?~JB$ewaSc!uUem1poU~88dUab1Q+!cJhARu$ zchT7iaK+Q>a`o0b+EtKFA{5isc-b?_XpxZ>Echt<%SPfwQcZ-D+-F#e#fVpOqfry~ zq-q6eOlh`fSMt8KWn5*#X7ufxW2E1xYwvCL=cY5q6sV1WLCq%z(*5vQiRFpZpkOn&hJT3;19C>6{Ng>;-ti1hvr}#X_9>=;*H|)58`*>d|!rGzHIp7qx1P{ zqZ9(e7o%Q{Qe1%3Oa(a-y2ZiKbqZP^$8&nja-Lq5rECBuQjMiXl&AMHqj%qhb+GHD z;}KbV*&`7r(-IDxc8f{zCrR5SEU!nI&#T0Y($so~v}9N^)^NS=c^)<+X*zb*35w<3 zF0PlA`*JP2SKH+o){=b>KTG!HDH`d_Z|(T>DQCFkh`bz@d~MooI&(fOZyZL}h%byV z_QMro4L(JgJqCiuSf8H?HmTgih|ex9TVR)>5QM=m&k40arl`=B|G@h)&E4O%{BlFY za5c^JSHmUOs~n3QI3>bM#r1|<>8qvQilAj7xBAcG=C@SuA(G2aN&|2EKWpu7{5$k` z7gp2uKCdJ56S~bf{xdeU@t!})Tp2p-@JX~te9FiC1MwduVX?21m(MLj-<9$P3{%CY zUiH!Vx++`7YClm6H-j+IKFmw3C>2AZL^ttc33)(NUuVWD%75Zf;6Miynt;7vU;6jF z|CtH~eRMYu`O7sI_kO*Rf&3AZaAvIIQF!jxmrtV!eeM5H0i+l_l^k|!xGN4rxdX%o z>dJ31Y^Y&p4~;{~5nSsvWq&7(E8@An2GKnp3wV?Sr8(@8h-s&&PvS>kI^gmqBE&{E z9yQVyY+RFZhTP~A9!FxcGz%kj)#fiQueLTCFyl2Rm*|&lJBm6aza1^66kJZIQGKlz z`cG}ufns;(Aj;?6yL_M3-WRs@;0;<{m zZ_RSdm3y^}Q(lzYdu`81hY8e4dMh<8b~%43n~KQav0%srBBM^<(cP}RQVPhA=q{3+ z`Q4m9HK&I!VHgi@+>bU}QiEKF0gd$wc7!3_s z^OBHxqkRc#6rK^<@Ffru5$F2IE{doYenK+aAfRJh=j~Sbu-l7>&7fpm#$3}NWB7b| zCO7I)>ZI{hAGjt6-HSe)LG18j#6IvDB_HE#2}={z>es&a>UVq7a2wkXUhex3+>r-6 z)!Lrrwi?0hIRI=ge&%Xk6RiGdH4-{9S7E01RXPg_RDaX-c;1eFEuG^H06meKR95M~ zOFEI$wISn8G5E+m4vePPs6(jY4(T)Ji$Sr6)f4kAa(p^7`e2ziOu(C3PU)UGGw&oG z>G02z`1}isoE!=-o=K~!n(YxZ@FR#1IPEmwaU*WQ&X=p;B3xbWovp4t3RV0H7p|Q4 zFA@eSXh^ZG3&Z-8S&vorMua`5+H1lGpEh9iAc7-)jrdSxb{QyIk}5Ceu7*;7-L>n1 zZ;o}%6|HhB z^%*DPU3AoQ?}D$pwA7ri`^S2kR_}-jH6QrmusHG}6zO`%@vPlocSc@FA-{(|DlE0_ zwF#F5X4CIcZ8D{z-Ylrci+P_(rv>pO*+OhP8d7{m0LGqen-@#3-fK&47k z%6?H0HN*aRkMIRk4EllghuEd3a!^i0YUYlQ*Dx|{{%XU`&Ee2DVh&Dhu1I;6Dx`p4 z$T-w^GiXFP;7s=wV*Pu2AKltkL$mek4XYl`XSS<txe)6V)~G z*2AdJ;Eyu)VdJdaDnNPckl6#8xCfGVur)8An|kdl?&I6+bDUFB<1wgak#Gng19BG5 zen)FvjedF(&`?z<0Kv&fJ|d1BD)9NbcxtVL0^2tGcEsW?=E3$|u7`5Qpzp(&JJO!% z?UTCK2N)|VJ+LChjeAs`zkD-Jrk+$kcK$ON#MfS{7H7o$Eq3Rxo!j-pdEe!gaf^}n zw@Ju3<&pNrUM{NAYOsXLI~UNEw4to0De?j+_RgdmQ)L;m9JPwwD79zj#P#AdQm_7r z>9(LYO0qRXu)~CsA56VmY?ONY|X4bH%IA#rnG0yy8*K7&grPC9&O$TFe9kh zxtjnCHB9wY{U2XICl4yu1-m*8=lH}2nW;%(3Pdy;Kos$I!^)w$$9jnSBWCi#BLoeZ z;cXM5w78PE$>)sA{;~I+u)@^$drQSHeG{E41_H`AJ2cTPLw;H@qAgO3>XlV&FuS$J zw6|0%x8-(&HBNgQjLK&nV?RH}m$Y&q19 zz>y5h4B!F0Zn={I#i5i&PU&LaFJAFt(|-$|bJPcJ%jSxDe*9~x^2I>-dvc334C z-Rr)%y;FPn@S>vij@U9=vI=*~ zwChTc_Ix5eM|{hL{irLR4y`6`WtE)zLqB=COt`E1Cyl{5G4Da=vXtSAAkbZvnQp|{ zfIKVQmGZEio^Y;tk@{S30hyzqxylsaY0AK8Ch$q}tq`0b~%%$}TkG)%EPP z$WoT9V&2TOJplJ({9wZAplTC`=>>{KNYgFJ?GF-@6~y{7z@QZuo?2AnG) z`SXpT4)%qh-<7*88=Sq^wW5hoV)9%zD(e1dK&M2a6SVgKd3o*{rXJY5sJpoUc~e{;2!d!&LLvaMWB z@b^1I`PQpF-m8sHzVO~s;c`mfw{xV$yBg=d#?+sB@qu@6z^yQLWhD4mQm8I`HPnHu z+jL)P zkDOpN%K4lSdgmzcIKC68k02ZCuho8?zu6aII+1_kM_$fmM6+*@egVsJj%IGC9HY?of2FP;`w)A+ zLRs)M{WY9ykbS&fJUJPtR8>3x;7sV&zjujTf=+U_Ab@w6Ve2m2Gb*CKxs-poxrake z!5H*y4FkWQ97zF|`=0**B{w}VRz_Yu{qb#<c=Oz;52X}^Wg#Egqg`+IOTTc)l4Ku=zCIVeN?o-6OHxo5eTvR=U z2LO`ssOQb=CxPcBLDy}lT-2G2-`x_er`Bv?yWiE8p{cnY=P~K3z0JeMzZW8Dkq>D3 z)yGT(t=E{+goSlXMx$73s` z-|X9ow>IyEn_|k}l=Ta#4H+tQcaVbX+mV6rbPPukKr2+wB?f-q`F6EZhLl^(e!G}T z>!Ahhs{Ts;DZ>DOLr$M2BT;{!A+nTa~L+#sIdjeSYXpZ^CHJ_?KHm`r+1n&0bVb%Tyhtr`#qh^U|v2|2)g0 z?XFy#&<3qNYpK~GUqv@$N|M=&d%#$oHRt;D;6S(qc%#S--m#d$h1h-RX^ay=gO(=j zb}~zzY#V=)=(`|usb{`JH~2Vc&*4Nq#<;SJLH%)56ape?4JTDgV99l$Uy=C3$#UE3*{{$*+De?6Ph3 z*h_t4VDl4@M(ATquCOGWyqB?MRw>lu_sb%qX-isXr|BxDrmFHq>&!5v+McUt*@ zi}-M1)~}&xd78zI(k&|S7c%1;(uRci*(HU*SgsDHZf?m^Zer`t8vbD=c~S(jh+FzZ z4${To6Y$gPs*}ns^&h-%XRF%%qcejL2ROoynTREGcY8Z>&vG~(8`^fBMaRvRQ&fvV z)Ulm{=QsC~-NL@=Dc8)sY!c|9p8P>Ne_FEDA-epe|G(v(9?j3t9CA@V?+>}EM;!l0 zL8v}6wP-287aJt>@|kc!2H~ORpf_uY<1@c`Z%RnYDR7e$%P}|>_Aj)krtswK;w#YdQ z4${A)OCnwxZH5OfuRM#&q3l+Zx=di|{>yy~ne-sF+|bMZIp0FjZYs$}YB_Y`hO3`R z0|4tMK432h_#*3Ey}tk0e@U;aood_T|qK)gx{{j#I4R#qa0#;^}Oy8+UrZ#uP28WT>e)) zxMgC_I~iOec)c+a)RwqbYM|7%+-q7zXrE@%+|}?Vqe~&Eu;wu(2=;0}l97V%KFf3& zAH{_Oo{~tVk~3f8wupY@3VnU^qt*5=SPdVM+wySy>abblxE-(*=u-uBE;pL$lL`h! z;aA+B+2)(~`65Pa=uwzTt{F|#aL4#_?jBHrW$^F3nC(k!wdf*w!Z8NPUQdevHHI3%B`H7eRuJZ zY|3Nbi|_4sl9TcC_I+{U^T)*>gd*?b7-r}9)<&1tdECcv;7R;1KBv=_&(5XvoZcn< z6LZ)s;m849wUEG;dmk9;YoL437jg(>nLLrUZ5H;Ny8Te-4yeJep+LinI%3{qOSvYS zOQz&IBgI#4FPY3N&xNA9CjyR;>cXxUs@la4Akp7q-frwV<_8shC|)_Rr`IGmdUt@c zi5@f|D=ag91a|gsN97+@4jwNgM}7|q&%D6#flGq^+lgN8ACq)1zrT_A>4b8brQ@p) z${)WTi=9`wQ3KpB|NWg7co%#h>e8%l0EwT+!KJ8*1EPvGauDxh`!T`NbC zVewZb>!hFC!DER5z=*&bhX~tTC(13W4s*WCa&cAYQfLk*t4A9?eu#R*1JYJj{c;)b z>&e!EpS3WpuRMZfj$KIiqlxP7uaB4fAJR|sx9BoGUNj3;heZ1BzE&v}r@(V* z-^)&UO!>=B=E-T~_p*~h^;iUC*yF4D4_gw_=VdRY1n7PbE+ynWXW^xIQ5ZOnAw~jk0(_$;0Z#XJ|g& zviMSkJ+j?4$FQp1kLmG2_kb%ATjfY6d-8**wiOQ~AxA@_Fb`1U2}Sdw&%nIUy-Ex~ z3=%Y$5)+T-mC0Pvk-gGfkyfzY_JF3#sQOVuruDoZ(8h%1A zrXC)TDqY`tjX+|5&MjzfHIs`jSe`y}uRJAjdqI&L4468ieu?_Mmvc+sk^5dhRJJH+ z$5S6gc&aYx1rPQ9gno|LSvTn}ogukpWcCefR<&|0NWeM%`^fwTZh^po|HQd-B-`yJ z3=`4Ptna+E=#<3RGhErj(c{Xv?{lF zky#BCeCk`F5QAFoR-AbRQT)_L>39~=rybrG3{-B%myAKmv4uOtGfu6skVdZi1MtGm z6MP=uK1I%jY=C>VclGUZx>fqZ&zsYyFBUymS;a$Ago#1#C~}-ccf^l4(|N<;!w2b~ z=Ih))U=t5wf_6EzEZgSm|&whdM*H1=In8n)Zg^=Nf*Y)&3l zd!w=2y%L=5ALDD(u3Hg#IU&S(0if9iL7ck(YzjizvdUOI)*iOIJ+NB6w@KJX_Jo-egmcbVJ`?J z`CofvHt#g6Yxt|{RV7zLANaU3T+$C{`5j3O>67a2K4tzKJ?EIO28uy+TENNi0|*zE zf`;LE{A|C_i|BarTgvvN((jDl)?RLX2@RV8tpHVSn~r4x^Maf2Y%TK0H8}ME6;%zG z|0EJ>#91?29|j#HH@JWm%f2vmdgRYFrk*}=y$!nRqBL{VeR)v1%AP^nO_>M%V_Q!H zU2mw$o0d;VsQ)+;*|KopB2!TPp)`fQh$Re~P<5lC$tVpGHD#Q%iswm&T&mJZU}6+$ zM}?wK(5De2+fBw)Jn`yfE zbu$NY+u+kvwV}s?1mvnP;`iqEimXd`V>=9EG8R@9bJ)7emm zH~YpZe<^GJ2)(ICp3@0U%4#9lm0r=$wi9ur+E=ceQKqBLYJsv#N;PM#=`X*g>?I-G z^~u7)e$wt~4;RYu277P9PNSG{pm8|GOfGMBsmtIU-CwS6 z(Ubl|Z_i^N38E9dyR~b_uS)smwYUNdYFXbeGZJxzbea5pqjF)BQWrdh$Z;DWh{e5K zXO{fd&rLKmZvT-&p4;hJBbmC>R6uvTWyI5(x6nnHa|V6Fpo(LWjGdolW8<0LzEevk zP=i0Lv-XLW*cyVcXTUc2RsKYyef4+vpcJJyw<1}W<=pcCyrZ`(23pwPJzYepennY7 z>g?4rW7}0U5KbM>H>x;!*2y5*IjE*v56A7Ljo*!2Hgif@um-jXl7ubs1Z(Wz)8E85&2>?gR5?ya(#)l-h!VD z;4B)4ydtO*PSS|+Z-}67^+t%}zZDzl8F+tI%jrL>y@xv2OGW7df5wgEi9^ENS8R8j zmRE;0+c3Me-kk@Yr^H1C>x?OF{7*s(zoVC8o`ZPzXGG+K;PB3d9Md+HPU$&hCVD_F3 z#4Jn!{Fa%HGl5epRYR6Jc#jRt zDdoCh&&*WOMHUwY-_nI;_F0Tyqb25Zq`L!p$7Ep{Ft>vuGWLkp%iT=zNsqr5TFR@^ zHar?`{=oNm`hN{tl^aL?zUtrbW$T--uDJg&Dsh#fm8kr?eJ-`4^N9rZpT~PSxNlFHEDz*NZ$$fJ{_k-s zPtw#a9uma@Jbvm| z3gH7tn@|Z$UzS**{d$d)!S8SlR?LVdpkFfCZz(356hIX@$mX!kmNNemfw25W__#->7|E&it zgy)*`V&9~I-Y)yzMY&S0nbhJY7kf#yEI~CX@JqE zb`CW{ID^|!pte409*2@^Dk6<0Eb&}qKWghjIXs4kw2#<`qG|Wi5)(3!f~i#d@-Nul z#Pf5<7ou0cJ-tWzG%YnZI@C6T|9zQrtUqH&bZ)ip7v&RSjt-L#JrKzA{v{JOFE?PBA@Bd>1bDf(~ za7}F|EdE1`#ZkTr6-YpR*6t0RHg-_6Y6a`arfHe!H#!mp5C$lWP>gc3xF3(zxC~1f zkK8|mB=<8pa9Rb~c|w4`C`!g)Z~C3JUA`OfxD#IqIgkoSzN@c+mr}2eI!;sRn0h+r zPV2oob{6*_T3l+jgBDrzvN>s|BUo_z(7;UoVe2=%HY!vJJ6_B{>pWMJp+N|;i`35< zPrKEQNbl`bb6XtNuzlQ9XhPF*B`9en%`{}oTV803{|THm(A*;T<^N1MSYf?L5xQHkVHn1uo%{rDmEg{i}oxRUQj2$Yg zcZ*LUhU$vOcee{~funAG1^-l11Nd*%={+|=bb5q5zH+Q1sn*f{DaOttyPMDw=(an1 zuH2>v)_5Ql5q3(Kcv-RIO>gHzL%<>ZR54rFOePdy)z~qb0Un+w$2q5+%3Vfz=FU5u zHFW8$J-PaUbFALhJ9+Un-ig=~po5`wg95Qq~0W}Kg zHv!K)|M($1s(iNPw}1sZ@4z9+u0`ZBDAgRwGf8(Y0Gx$Yge?>c{AfUp?7$%6ZcMbK zq-GGsiO<1r?+3aSM=gvVE;y*9TUD4f+Z5!F;cDc#MdYTXZyDevh+CgBH? z!0F(M${(S0G(?%8Tre$(5J?_FA*jg zbGQK)Y6hvTh=D-vw<-bmIstXpcGHO$Fp@d$@8Q8MjIa6Vms`?+*)GOEPC zbTC4E2#ZG$g&TpbF;{Mnvf~!yV?UXOD`O>53>3W{m&Q1_>%5}?vH=^A7mT%EI}bP2 zO{Bw<(}pt%M@Wv>ue`WHzLuKdvdal*`~`obnatV*WpQYGcNyJ2E|7v{mo;{FNgoEb zi|vxSgnb*@C(anxpR@5niR@?#L5etnLk` zGJWp#;YA8}$@!$+C})l`vw&hW&4mY>dA3leRp7^cikC$7Km!&S=QR*+R@>Q7G$C{v(trk1pDRRgy)w^itSsF}x zTdLyuu$!`j{TB61e+ZPB;iR8K*$~l6KdVNOG>=cg==4ilp;YI<0qVscmU z0C7dC4KXNbWZWDbsym>F19RQ2$8LWOR*OtKxV?FQBdllf=uzBLck;olc0dsu`+K)@ z>T<-pOU@6>jawsirM@$clxz7)A(lg#obh_a&}|E}1>N>3uqz?KP6VzSU`8i^0gLR0 z-e65~s2h0wf1n6Zm+H&aF#DGM>`K8pbk^@WI*Cs9j#usmTnrCzK#quO z3CtA4OeFzVVhJpx@j9j}MbTbrXU+Vx;_JKMXffp&pTdeGf#)SR-~bi#?QEs$Kz;OxwIl zCo)BksH$kyvGXy(3BMzHXwqp(!Mk+7wmO`r(4QZ9b}~(4f62TC;DsEFZXL2&4n|gy+Brs z#mOwuh^fGfU)Q3~Jd<9P43NC-C+%{;i!08-c#~PKp^tJqyToR`pcs>1x$~iauUgW7 zYtiK>zv>EoB`A63Zx|7Pxz3%H&L7wP$$N&Y!2vf>BRPRvU#k?_FX+a6B+REnJ+MS- zG{4R4MSX!KMa0=dYUPmfS|47;A|aXNA6s&8C6NwcziKvlWj zJZDx>hu0f>BZfF;JdyrI?|Z~aH~A1%b>;qYU?X(#LT6OtQM>u;GfF%;lKN;!)UyM? z_|cEn&cjndF~J7*y44NfS2N2pE%p5Id6eC&nH>E5);D2||Esw7ht=Bh%9(}ZEp?ME zMkNsicEBKt_Zqi5!>>BhuMYv+kLKrQ(dfu@LkIWuRGuedITl0NhrT82n3@Fo)kD?! z!17qVG3m(u23hdQ^}gTG1K0X8^^vV?ll@Jl(w=b_{f)WQ2Dl{&%8BEq5%@(1Ut2iZ(#k{IhiOA$b$UEyxS#l=xY`spt^?8`mCIl!>izgsu}WOI0;|* zPg3}&=H0Q~sB$gKRlR}CTFt@c*TDU(@xAfw(wl^lg+mE=S#>fp%d^Tk7wGkEcVFE2 z-Vu7I#$dl@uJ6=@Fq2ZWt{Ms7VCxb;S(;*SuMt~1FCc}luGV}|*ezE~xf zrvyKNZ8Mo|$_ybk_jXwYt`49R<{X7ZrXWm5{3My%cqV8xO#^qPlY75kw458eJ}6Vs z=Xpn`FWP+~ckd2jOd~z}PJ}2wUoF2Yy!Y2FHfA`ALO1*!Gb~#y*!)%=oqH>E)!v+Q zkstNzC%R6yLDSwUNw;Hw<4bTXDP7~7zh>|wGm()q4d0!za3V{vYkQm2HuwE8SiQ)W zoHgl=&{c*2J$9#KICMr9tRT=yjWDuFADCQXR(|qjyCMRT!0+_8#_;Un#Z~dc$0Nsg z4sCY`m5`;oD{o-o&eMg3vSALjBPOt5ZRObZVo>yH+*^r_iS0c_p2ZKP7@+JPm)8?4rbx4Q*_qnNCb@D80# z<(H9DyDV=Lw+*6xv_4``d37#&@H%v_NUQ()gh^;TrBqwx4w2g%7ROS=s8Zst73FEAi5thiL zDhrFN?=l!v9BE$u(?`hN7Ho%YknZ6kF*1==I>oG`i$Z$?R1=40@}5A#W{v)cM2{!f z6e7s3%&2a=9H}1aG`!MqGG-e(Iv)O6N6?njT0cdj!))}wZuSY6RX3ukk_&g1m)dIq zSwSqHRldC?j$P7LYL{ja;JO9R#kw?! zfgd*Lo}=OI(g8t<8xf=0RY}pt3h@w{+U^b(80VlHpiR=Q)#Aa)cm^zlG#g)qXpFO* z5K!9!i%CQj<6HCTL9L6Ok1^)7UmZmq}q0D{je&{4c@w1HOow(Px5LfPEDW zf)%d6A{t-YoJqUy)>CN%_JjUHJ|e_#`i)Kzz&QSD@50@IW$-IaV@Bbpvsp=^)hhjO zhB7UOwx?j%^S2Wp3#e25Cl7_0bw4RMh&=Y<(euS-7kRtgdy1D#!-IeGJ{L;Y5C9@9 zNKs$f=^S(fdJ=`K3YGs?50hcn@##AqAZMEwybPr!f)<#Pb`17DB#^Ugy zfrwzb%zJ#@v4H8T6U)&Ji9Xf2fkOVky_kB*g(=XV+aL(K;O_6mssXEh!XWfBK$(-4 zDm7Wb4WgDpgO*v|caglyRRQ$siO3d7pH+5N*U>koG@a$z@l*(*dtBxL#(!2H+RUB! zd_b|Kc&sih;mbjPDnmZn(n!%$4Zp&iOk%*R$|6+<6)9zobhl@iTZHihJK4i&&rwyY zh+u57V&`O@2bAsdU9>tk?Q(CG&D5-S$~O!L=cKmC1jTSB9{Vv%e+mb$rpo`ZT(%!A z5O%3rd{z%#DR%l8~{pKI0#3!=;KZ0Azi8>Eq&GdyoCo=0GKcde3(0IG&m{sjEKqK30 zyZ+sfTy>F7wjZD-q}te-c}}(D6hZBp3qR*Sb#YJ&vtVC#tsO<5$s)d;@W61k({D`9R6Q=j4ILG6C!1U(ql0UB0u#VoXRzSe(sLj)c}oF>h%g zgQ;b5)5MQ)vwItXUEisxi1K3=L`Ggu_?Om}YqNe$ui`lao4$GEv3Zo!hL45a`Z6!^ z1fwEe%WZQ_?{%>(50Goo*!FP?V+1Hpcpoe`0?{*=ew7*qLSI6RjM^r9v&ix}T~eul zGD?%)5Vu{v$~?!U6Nh;lrmS&J4GPLq`eisMkFYEk4MoakfRclFublFH_-7Ku!CBk1 zxpzT9$qcQ4kL*gfE!xMj)WB%y(_6-QM;fbmsORvCh5;z$p&#z??V!Vtepda+D<^L0 zvd&8Mwd*`o4Ot8xOEssXR`@0N`KYjtKi7DY;WN+E5`&t<(!vqq(*RH;%hKGAFdu(e ztP5;GDLPakZ(ut6H=#hPbWjt zXb6RIqDUPE6rROnJ;8{wkcJ6WAbg;2l;~9JsndU&81U9eqi@Cb{LJ94JJXV+d#6R!p>zrNv^@pa7rZ*aBJC*Dq z$7MgDG_8^jvm_|yS)IKu(f}~oy`}wZcXF8>B5PvdlihvmPcRw)e`hI6MEN&9v;RA_ z(AIQXsuUI6S@BcCksod6g@WF1Qojbd8Cku5>6loay>VIvngvdK7|rB|@#q*{uy2eF zi7exFfV&{>|Kxa!Zlj`_X}NE)T*jigE|Rvd5*2wqH8Zmh+mOA*sE=9VqM4JEoY zDDM;Ew~ajc8sxTqaa#8GYz(vDLWcZ(_Y{AzTd053q$zlOU>Z;j-o zwvA|M(FuPO(A!>w1;!Hp;ksyBpUniD zeUo{s7<$nIs%Mlp@f()afx(FzWgGfqgZ6 z^^3hr^EkMb!(ZP&4bNZ1+gD_{TwTsi3&o7@mLi6>G59(@&t}iuePOM4EnaL^txj;B%MJ-wGIKRQ*`Uw1*dd&4kNP2AnC(y;*hVbc#0OkU>E zd)}a`!{E9x+gQmh>$S7fX=_YXZvA%BQJ*MvpN4f3G#L(*4wqR)n7>qG(PP?w3)zMEM^b`tacyG__kPcWd zl!5NwgPx_Zq&prl(Gr7)#YwYs*8VQ9qz3fW7Mr;=|Cae(j;G+Ida$8J3JpaiN3>?A zPF^=UzB*Yt85+N#xw;$GQ7EuNN2Qa`s8!SJG*O1XZx`bm8r-}!)V_|zTyBwEYjYI( z>OAb0`NUD|;3~(3?PVhw33drSrMhhMV3*uAvqu#dzybEMuDjpdt6pWxmME}8$d~KR zLc)5I4~xkY6c;xNOTKeB#ZjrZiEf)zK841MJ}|kST6BuqtBL!VdxggUA<2($rJj15 zk!Pv$@3;IG2a9ABn(fWVJdUjADCcftm)lB8w$Q8*^*XV2o07nxxy6u2H@tU3_Hx%6 zG31Oizoxw?xhKDt?=$|(!fyAVpEeeRcp(pa9iG=}_||m$ zHF>lNw|+jtDx;BSPvwp7jy3;yyz~0lfBS~j<48$TA(HeLju#k4{$E1NtJU6UHdh(2`)t-e)umm)Q{4)vEm%=*$6BW5_oPM)a4K zmwMsbSJZbqcFnX+Mu8q)HSCeztoboXzrJw1ZM{nG5dqKev~v7><9>$*kyZ5Y+iHtx z?6 zB(_uZ{`1oG*jg%(`wXw!$Tm48heWPywUXWK5U${eS_o;u-hKTLab(^#@=(#r6*Rtp z!QtHRNtIXS6tV%Xi1hw;lr~4aI@>0g(r-4osZRHvh@ng_3hM%`iPp9sHtI$R8zh8) zAz`p2VnX8yoim!vN)6pp0ayHC$uVyB0SSep1y8zw6{WaJzD0slZvdG(yNDVgqN z^w1=C#(stbib!aYb!y9(Ma{orcShK_+TGS&c=oC>v@j&n3FK(=mi;RqS>$$q3XSSn zTmA4`xphEk+`D3LW)zYQ&GlGzYS^THcDD1RDa8J;>FsULm&GHK_7onhuv|>!4$?c< zHYgD(V{2j9RgzbOAC+pev>-Uy6hhGHchYOzn|c(Yw)L!YcQO#+%)+X9W2=B~lqTyl z^q2IgD=B3>n8`xr{Px0_YA`LHA$)Tr`Y^J6vu3HkWtpp9RkIfUmV9e^zg|NP9`*N; zXsoC6H&lEv*uo>#535$w^7;n(VE=hu!jI55c1pJD8{nYIX{WA7bI; ziY$a!YBjIY`~j$*Gn3!I4=Dor2q^n>8aV?5HRFI&IYWtxKXYu~ij2Jr?8|m#o;;3T z75dIz0E^rD@%pA-jf?*DW6>PsNQe2ZI2mxnSm31dI}=TsX8GcO_6?z39!Lra=%biby;2>SH( zf?7WfUbwo_2qP?X-Tt_71Am(vhI8LsuG!d`YyD#L zKc(%b-y5Y6_k`lRfSx49edKo!b^?053tbMFYw$ZB9Y0xwZo2LqL{0&$OI9UVv~l_v zXJ-A=(u+apPsvx!kpUw zexo%ak;9au>^x0OYK2L1fi+V{J@u>HEzw^dZtg@!(@Ny5Zpmt0Je(VT%`5}oT&?7_ zd=^}+dHdA~J@rOS)yWGNDcg6p#}L;MYXo`oV*|KB~c6d9% z+~nnH?gOGMH7>MgaauW z;)%_fwcZ*NoMqw0T2qj|QygC1`ig%|J~yrErYEG#>g3tNEoq?#6*K<;F(u;Ux!G^J zF?xu?qYX~FI(SIUdtTYp)U(X#2sILzBdY`sS~a>M5i-;khti&$yZE~k6DfE2aW2Q6MDf} z#;zQqSQxv3qn!}z*}!UAzu7e#MdtG_Q`F>+4R>5(mxp3M^MxnbP^8|Yz!ahPs7)(+ zwQx0MMd*QB=L*B>31@-dZ#V3KA7iJH(&QG)*Rv+MqBdZzL8C5Dz5EuDrp0rsT5N6% z8IAwFV{J;#V_`>w-u&%Xf79d{bpIA~V=&9bIVxA#!9jLXtS48jx#9NbxHUF4xDnY2 z*J+$=33?wdIFQjoobh z#~&J$PL&Qnx0pJPY5A}U>)<7cI-8l^wX!;W7v5_MqkJYBa`TGbpkSb%IYNvCQz`kL zs|CCeZe{A~Mk=9NX>B{$(P0T7+5@`5;w(&txad2v)%BX>$s3TFfdailFhFqfk=O8d z9RnPcO_)4qaj5V^iUfvGp9~YSuF#wkHY7|g$aFzi*CVbZED*)wB%CscLxhV&F$uR^ zH^i$qf7YmMWcn|DWYfi~0Q+$NxeJuh1-Z~e%9Kl1ZtXXh3DKBC(~%}Z31ltwu1@d1 z*BPMC9|~?N(wzc}>Waz-fSg&Om$GN3eS(h#BS~VW+w6bj*ITUUj$b}1-=0^^>=T;t zra3HuFCKLzfBEu>LKUPzn|yce(+?{kShUf1UXmL~Wqfp%pm#ss#4011R>ZI!l`f3X z*5Ot3UIZ|5Ri*@c0D(HZL=|_JfB***u(gghGj0N64j?H72m~DX_Ia=*yPMFq|(pM6rki;dgYa{=tM6hJU9qHOEE)-N-Tk1)mf%A*gb+GMEOr9Ut0@xxT&W;L!{MP(-9R8h&L0orx8I9}C@sa_E=C}g zp*0L1YryPYgdP=NH7vdBEXn#>Y9Pz-_;f^;8w&U>*T1~y+1=`z=6xxqPBub!=kcY= z7csBhMNiWwUt87nz$M4yJU@^K0aU|xj)!tS+IG@%IPi@lrJ3MVWZ}Bi5eej#ZriU= z|KvjE)hxouG$1)Tz^v6P8)W|%K{JIj)6X?7%1q7v$X-d0Q8)F#0W)hd*JDn3m%;r- zC(+tEMo6-tKJpU4c?K`wgh_h2VzY(_jW}Cm`Az6wivkcxpt{FaS~4Md_7|hKU6M#K zWZ(L7r1AoW_!TX}9d)nMYTL|9Wn5wh<1mD{21d|iu2T8Rvch)Cm!<+xjogGLhjI3q2Qu!Fd9p`DIW zx?fha(+S=|>2ktpkoi~5Q#rN0XMwGv71}BzWFze)A!Os4q3(^pJzK;1#a43j5gfhi zz9qe~?=I%N2FF({%Be%|tQI~+J3Vb4UdmAc zL?6igxpB5{07d$~&b?pvQ4QloM;G#k1E{q~N*g4=mCkqvJ1 z&j+SM=HwF8$R&b{aeIvx_WbS)nV9d~nna~Zs62i6zG;yX#L{#3x-d)Ao|bLtvou-6^|G;a3`4J`i)TX-Z;e9+Ox3$mnJ z-e@|oAocjSu%O>1A6UwUbjv!LTG_o~Pm58rIzPxZ1j0pg%^vSgqEouKRnXO{PFdLa zX+&-N%x~a)-eT&jqE$OKCR#58e^*v4B&&O`O#&#Ns@-oPdY`9kd3CwX^O#xK!>PN8zIe+_OV`5#MfB%o!hw;WysHv5$XtTnHOC?I^ z)L@F6XsC0DPxi%%PN?rSH+RsiJs<&hKHg79Lq~rErH|!{?@0`-Iyg1lI67os`(*gs zHA8C_HWi*WVJR2*05W&QhY5QoN}#5jOWzKq(bG^tHoa>mLXlfhT~Zg2{|ccU)^~ z5T!#79UHbWda%!SBq_wmRPM}*_!}B72z8m|UQa}M0D7ijKjXkT;QKL6L8GL@nh?N6 z6^N~wvV?)q_8r^W78>U^Mz>rNy z6VuKB%GJ5}sH)QH7;F)(sNif@B7pt9Y8@IAUz^Pi=|-|ezmdu|mB6LDwJfOUMgtjr zW)}e4r|R2}700rL6>@E5twAx0<1%Y!1aJon##7~fs(k30CIPNTrSm2IU|`7wwZJ9) z!bxuoB*|T7vR>RzJF(rqbfy*kbPM%GHM^A2so?LCb+Vy+3us0JSWY>}u}ns)jq*?t%h^zb8QDA z;{NT?#r=@4DxQ4XX4mh~y;d&8c5M&1_j2>-m%Qpcm_-zVuvz*sx26Ek&d==Y>3qHz zBsOP=VZUB~=%)@jK`Q&nf6%$N0n(dmp^H0q_@D0+g8dO;evT@qBX4CXzQl_@2S<^S=9-gDCG=KSXFJoQU1*xw4jf^3oR- z9hdoE04FxJU94dbn}{9$tnfi`p(-VI)yEo5#D0_ zwcxsxJ%4B}ZSjc)_^)q?2!~|^s`hWK+wnyvrlu&T4KCXp_7lU&y!jgJ(i9UbL)Ob> zA5{9Rk*!7l!EwV+WDIrQT**8W@B!%dCTbq+3isTHw{{jLw9zY6^X`i%4y(64#5-<_ z6LylBy7a@^#6x&O+uA9U`VD?#DQ;`^?3C~Pjkwyp2~f(sSja+Hr!YG^Sn4g>xz=}J zIxFf*OudKE$~VqTJ^!v7ngfUDhuj4dy8zNtKJ0m~IVwkKonaYtVlDLcVUX`8er@!>PAg_ZLd1g3>F@eDD|NB=^@FfWUXmP|;ON z>U8e9E91*1sjmfXhycO1*%IBHDzGxOZOqX}g_8&#z1h4JcJn~c5fyE%*E#r`^HR(G z$qVLaY?`%1!M(HX{2di{+nDQUn_}giK_BB`JJ&L81e4l$3@OA&me;Nli0X8<_?mlF}NUoS6QOFQ$Y(iuY$O7wz z@~fC%kT_qYU&cBKO_(~CUmG-xqW}-E6u5J$>yT0rj&(eP{W0E9ZU_)Fm?2lC#Jt^yxw7&REV!km#A_AV7GWx3nIv^Yzk;C64Afn+79|6# zSzh{j>m-u$|pKxZTcg z)q&hJbbZ#2(otmq{*eU|T3`39Lax#$x!_SOJ(wEVK7?*MCKK;xtv8jh}U~jhcEvl#8BmXhu{kBv&XtsBDoXjGJ=MlE(N3=B2xE5GJoOn z8@^kSCZ#`2EnKwc*KzX{6D4M?>qwIJHe?r`DvA8y+y3dQpDyOUURpcmwz9Ib7tCpw*?%oTff>g7vx3n=%EEWw@Jgm)E<1|z0zd=N?h(fx|0pe zAOPjskYL4%TUp!h@XF4`Q!+)Sy=}FGg?TOx&T$wE@P(Dyx2yt(o+j^F#QnFtFLnmc zBCoA6P0AlBsDRSeq8m282SEnw77KC9>tBOae&`3Ub2-R&JC7|xA9(7I&3P?lPDR;M_=wLEWI?VX< z_UzdfP)3kVq@43{_&Vnwy-%w^qZ7`SyLc<2=_rL^BeyA4&n*aE9XqwdY)`6QVPLS! zI5nza8Tes`D`@^jFpF{hjz7;!{g8i}B^)?w?Uw$-)LO+m;s%^Ke@EY)dpmK7JvR$Q zD8!^$HhM!wdc)tHo&0Xdi| z+yMGw@7z}lZarT4=$(ny-&m4fto^QR=2*8XVdZnt4zlIv#%&C15z}%*%|FESWMQ1YOLu+d3n=>5ryYp$CWbrkUYI5%^x&;X5Wd zH^|3slCJ^tM~dIK{I%6QD0!>B|A?rDssfr4SOg}}{b6P<56&RcE#TizxEmBXaLAo| z#|zrBvkpw!H~KOAi|1YJF z^X*fk)6?6&_%-8;s;$pFICN*>AT9#HRkSBD`dxi}3yU?Ly-dF1h-Y6h80sX1l}J-q z2Sjnpe8D@|g#VPxvHiRa)xLu0M~9S04z+34p99}%Q~K%ZcrxvWwP7K{Sp{iZbiS&h z4DklWYy-Z%`M!3An~_0zlxCS&_U^32xJVbjhpL|z?KLYyF)vX{2PR%MisU!{0G4o= zK}(Je8_9d!IZk#P9^RO2g@MC*x5#`*@hyWr~t%!FN96|i$4Ty=Dk zE_OvPSNEMRVEA&xSZH%6)Fq;1BjW7yMBVFNjuiox&PzOBgGArj7tShI`ng@IdfTsh zh}qbWPQD(BU{*ROWDGbzc*Tz!VkYd9C^Q{F4Z80$-2F|wwcgI%kZ|M{nub@5%Ac=& zgT>@Iv(#o`w$BYWo^B*HSuxFL^P5-qp}9eh3p18X{wp2 z*pSfQ?jj48JA+=|tWOStvIS8Fy9g z(L_Zd9vK_Zmtf_&cfSE>x$@RkUMS*$>zdjO20Wcyb(7z`H8t7ra^JS^MyKK@Vb|x^ zpZyn0A@HbqtF(;glqhjY@zE2^{|wk6-e)S1P$r;(FZ>nzP)X1u-p64{(oy>hW4 zrPB=*>4-E!@InP@MBmuPnyAA-6Fs}oQ75pwpxCc;FaLlksA#l%ZGBErd?yU(M>t7p zk^lErP73gKe3u1yI4b(JS0Y3DdB;k71gwuA9%L$+WVkMGrXKN0MDn3XrXBW(t0*S8 zrm{+xYLS?+G8Gmq&`TCVVqdXl+uuo4(A5=mb*(v;47##>mgnTO4a0&XS8imJ%*r$j zvKPljpv0HwrkIx5vsEJ-7c(Ws!)_?oDaCFNZst>PR;^?yyg%mUt7cZmGLq+f*rVlS z#v}ZP!rk*}%3UO<6RpLh)mqc;d5<=(!z?`2Vj~EcZkinoIwp#Vd&DG1Z6*G;Ct1MP z?&MiY-c0F-kqC#T&^D5TY(VT3>svo>% zEfI^E3B=TH?ikrmz%Em1YV%jA&YWD8iqepTx4?E`X^0GeTmDE&H91@ojr$G*ilSqU zsw#Fzc*SU`CRn6qqNDAYUan=kv^!EqFNGLQ*5B`xEWC@T9b|tRktKxV^u6IYJ$OCA zPjvMJj#xu>F}0=a)E1E%_(vI`jNghYkCh(uTr1mw40oyDu_Q)?dm2`5X{~!Wv1WgA z^DKEuved9_SFDjdP)DA=OCpCG%-@6YqsA8Q!TEU`pS9`@lqoI}U$B0v1=PpnzCp+H zbsGU0cfwCjT&=cxYr|$*=03?>A1%&WoRl0r!Tw8}4V}B8JlcBlmtF+mSFC_E~ocSwT2WhzXe6${mlbn$LC$FqEq`}qzud1r6iG2B#t#D(|}eR zdb3F$&gX|HUHv5baP+M_9*TGudkFf>N6D#VZNLD_HSPTa$ zH?+;<*jUoqNeZ!#uP6Q$P|WZONw1CXQ6@_`d-c$wC3K~P4JOwHea_sv<@JM~?Dsi$ z0T~ZW=DwV(D$;hRuKFL$=(1*kYWc3%r@Qt1RhrEnd5=%JLXu4n!K+be1bIg+P0$pQotgqqO zyfG7B#Rmrn=gwbOdY7&$l|_1KW*lk&Axt!E)odyf>eNaHR4BFTew(gUBzbGnI1@5! zPK<`T?jeRo(VXvY>|RAJ$#bZ$3&EI&u4TD*Jt8h`WmcMugJAm{T?#ONx;+HCyn&5_ZPNZ4ZguLak3#UF4kWsXxjMErk zV-~d2EY!V3)nQ*r@FQ1g@P)(Y!`SeV7&O?sjOqavVT#yy?cShMNwE+!mHE-I5CNc8 zrhDYZH0~4GB(uPNj*2wAYrNsPF-uu6sp|>`oq(NHP2T*#Z!N_5ZUF4uv%|3|;dt0G zxcrU+p#sF#6JBg8vUvDv^VbR;eA2q6iBzzmbFkdQ7md=-e}uJEMw-oUeg0*pUS>)# zi#9>#u#oh|fP$S{DhXKpHaqeA4IO2`G%RR%kkc7dZ6BA^MHjiUQ{d`n4=B8sm{C43 z!_S{W*|-aeVBa}hMp(U#TNo_};IwKxR$ zN~+Gim^IqrLr_d_1YQHh%B+6U|BA09oZ4t$qHvHC<<{Y~jWtwVegy%6u3oJagX)#; zEGqD7+_qSlWSS_|kOB;%AH_oMJrQ&twO}}*yF-Gx@hFVQS9vI{1PhIg{bi2*j6-@% z#%&@NC=TGu?6;Hu{}Lb`uWedCsr3R``N5aA!;-r+@1l*r>H0eYhOGr$|{fM^IX;SFqobd`)Oar9J~b| zdqOyc{>mSitpE#@!~R(l4`t;a z^%;Jw>GVowLBO#Fp5T5qFf$exZ?V#?D6n_#r}5lVI9^S!pEE>3*voX&6<$*{yA>f!<6cg(ZJzp`-xBVdKR=*GC`f=T2 zolVwJR8n_j%qixO(t}$U{=ZByn+Aa&G6|;8_|HSm6C;rql&67)fAE1N;jMK8&p(CA z7{A)#I#gD3dQ%>_=RTqY5(7)=179;4;*Ld|t&I%UkI7FOEFc{WBjRAkEWkaYT4hiu zAznKW$tRCIN7-)+P_sVQ(MQv-L>}A;<-~Y%I7nJ!wB~c~P7-a2If%Q2Nx^V-V^;5p zHvbOY=ak0#+xlbA6bZ(-PM>G^=pb#^pq;kMMoxHAX6G5f(>tp<%S7(xV`2tsZmewN z_*?2BK965MhPiiOp<);BAgKy9IUJQ3lZVC8E`YpaIgx9>9i7CNL%v!`b69#a$P%aw_5Gyq81A-l$anx@crEe1uuN5>8>GxMawlY;psC6SfcLDeopIB@uu3*W+)&SoAC&$uKSEK;>;9ttM^~y`+`efUezXnet^o~D6pft#111VTT$;!d&9&v zC~t-JO{hrvtH?^bMKcnJ`}eC5;St7X0Ec1eSJ(%q7O#osa|Cjnk z^QESLb@Etg+z3C>vrr_E>v5WpGR3+yVbSL4f3A*(S1mgAjL4hl`?>(^9$0|=y+Qj= zumqKQ#25RU4c2L9s#q;OJ#;^DGK5mr(BD4)*Adg|+{*eTgd zW@7!%Yai}E$y9+}>r zgnOYkqko9oV%I1BBzhXllfpke3#hycwEU$6GPIlSr#RcUG=5^LE`00B|B@b&fGYn= zu3VW+iB8|7ay z5D1_r8XV_GLUutbo;U+_{!8Zd&pCs-enBAWJIUgKDcNosjRG^BYc!}jy;H3hK1YX; ziKwUp3*j4S$r_xGcB79ct@juxHsHqX9Q3HV{@-`dl-%&JXJSZfG! znUaH8q)f@?xk9M0tx}ARYW#yHiOMyZ8zPC>UjP44|JfBED7Ub)6(3A2U&rr$`LBOO zh&Rn=AcD2B1$5(F0KR$(SJO%WuZpkYvHkmWp1i&2yn@Gs1w~A8o;G~=Sg}h>W76I$ z9TDppb?oU_Cg6WuagN0(0rE|14@J#>l@91`cmY zB;<}5J#h0lvD4JZ#FPJGFf@zp{|g7St!VKafcMIZ8^5gk`-m}N;wwwspvE&|Ptr|M zY*ulspw=tQrIcXhyw%;6Duxu5P;*;CowzI@tQGy*4X@VD@b_A$8cS!nI9(iE)4Q|cxvmjEd#O1#!e=t?JRbR+N9 zrx^AwvZC=N#{o{2D}_5Imi( z9Q}LgFsGhN5eN>5jCadbh@c-GUJ@Ynx;*XXz;my zW-6*x`|a%D1S+%m_wjz?fq)+5$1R!DT9{2X&L*i=5Dse|&r#86(56>?`s4@Ycs=Q( zG~R*#=V{W_lh2~Tcl?k?nLggysRjLG&T*Bou-_4Zb+oielF}ok^iV|@q6_p>&@~m& zBmOC~Hkw{JkU!dF*oWIJ1vL2e1ICMXtpvn>;Ple#RQ@Jyru^^gjDa49Ko+{|?Gzu2 z?*Mu@St-`$7;*gW|2qzM&Vu5VX2^@1@Rb6Pi-hqJ< zp?;~Kfd6?yKgwk6^Rvb*?ZvXfXvo^{i1NBehTgRQW2z`Y&_9=5x1Ix6if)hx4dcgP zT!0uTSqK@aDW17_7z)zPZ3LTn+K$>fr)dE$k}A~ScUqq)KVGl+{z2>@_rCphdePw< zo_CRi*kk5QN~L$QyPbNluxO3pZzqQES^{qS9hwOR9ff^vuW+({Ysv?xJCG*E?UU>*ZE;9S9=WzNmWA1$YkO^y2)IUXlg@L6ul z+G8z8@{6WUllPOE$GpZR+{_?u58-q2JgR@A65VRfl>eVu zlFkHpm|6ziOJ+}4ouBaPFFSoqOew241-6?K_aF&J*}C76BRUgH`J7mgwu1j@WbNi6 zs0x)Ln(jj#EphGJICX6Qe-ZL>8Fju|7PVT^_&z&%{~S|!BgkSePu=+jFzZ2aNHObj zVsDK43i$(0l52LLyUWy<*;yeMQ1N6~YXj+3HfktNg{5#;|5PX?M)z;btV#Vo67_9k zuOD5ouj4!tXRaAcvd?J>(Tr{Uv{mXccWG3=xHj<{jVs`@7B`8V2HMXlbuY5T_my5PnmtUXE` z8yYpPxQhB3A|v$}9VBuRmwI(Zhi6}wimJ(U5Nz7f(IL2pyYwr+-u~Mzd)7C_q&w7^ zZ$7r`*H^7SpTOHgO`UD7tdBz>N=UHssPo_KL0S~X`I|JXVm+@YkJs>D9_yLN7xE3+!tR*COu&PJUD(t5fL(A$XhHwTrBYNQRSAZvIx1rdsFpywls&{*|3Rd*jc9fewuw2rtT0J z8@z=HfmNn7Lfg52yoG~Zeew>nto_8OV=bSz@!xG74tP4O8{pWlnRvyK(0DgWxEhfM z!Na4}@kT?ObLaKGHY`Pyo>=?5qC+rE$mGmLX|Upaw1{E`{3kDC_3Lt-zske16?&`Y z9>UIWkSs%LfwiDvPP#J!NDRgufZRX(AlBKqw+(q`Rh%9P?;Kfuet7R-fhW9S49-g= z=H51?)3ZKDse>MW`3Dh<@0sCmiqTc3pdv884Bk2);b0e`9NQWsSei9Ao^3*bz0^HL z5&XJBZ%z8dI$@X#53M($cr}p2QkP|6y2`=-RdW}3<%*0kFwu;n?+L;$yx|xnz;Zh( zf^#G41LtCtT=Lnc|M>7B4v&sP*-q+`3{4a&94b+{sr4gyS_%-PWad=jWG{(uL9PqM zAp6b&DjbI1m8275w@Owx+VKB*U7pB9aGe&FJ0wz#1xe*4#&21nq({B>ZZ2J` z9c5dJrgl+a^c`6{rKY+(OLiBWJdd_&s+9+{f#v)mGJ+G-c0Bi|OCz`~DWYPN;8XCA zF>eT-eNQ1;vCGzM6|*_34^(!^uUEC(7Vi7s!)J{;!pnFU&FP$b_-^S}6E<7ML(}=4 zYjT1R#l2EJuuerZp4qAYEo(w~Mf;E$kwrcbUWC234S=@-n~F|Ng>7*4ZqL%oR>R8( z??bbj>9s4I3P3H}fh!pm)eEfQR4eJ5d6u0dkO%az z2m<~l@rh%Oh5-;E;)2>@?<^7z@rg7oll(?9th%x!ABfC|`L*6kVVKzg_GY8hA^opX zk73*rivEXMc5rFWq)t!qemq7mx0D`pGYF zY}Zx*9qi7?Sp;V>)mAeq26_l4;pkL$9N~^Z7VNJDD zhOdHa3uc5(;qhzE1X{+#aNFM#RgOEGYFizsh6;#1R-v+hGB}6gwSN}I%$X4mb;=#8 z^EmLxVc(a^OhRU>+XC1_$QgwdkyBM8)t^n->_J@3E+g_CA~_=wj6mfy3$i&&FH!Tw`0WiRVX`Mb83+ zN|&fm%ux>ZkXW+4GssPQ&#}k*63(^wicYch^2hW1p9Lk#m*n0MZ(T5aKLS@^K?a6R zM!e3Suf@bj$yXy%Tj@JlGM~0rUCF<5Vy|5Me?HVU>5-+h_9n6}i%KW*s8h=^VhPEB z63?TtenJ6TOJyM(=BR~o34_2VkkV-dqp3(&1&l@JDt@({!ljYyWF7xqZ12uENrckW z8(9nQ^NNYP2X?py-N4F+6`BJfDy3MP~G(WFjZSHq4jM7)M1T0AVsGAli z1gys*-A|ogbkj0bZvpq?mG(G_#V#tB{+1o6gu}dpUgAO8Od~@6^0``_UFGo{GA_qL z>}w#6`HaC65f!u0c>R^u7-tN-!En~Jm#v*N;wUv)PJG3H!mF=$kUR-kXE_5bK=VSH=Vd4(!p zM@58^yKEa!AdzdGo57w^)jCV4Wn*f^{eRQ^&Yci^JluG1v?E&G)HFGoo9yz))GwBn zxGe+uco?%$%LL6Gp75Mv)P*a3AG#~<%COV4(iUScR)PZ^*l@wZCe@ecQ-U?-5ay}a z|M>?FrEFfuVl8NPN*xMCM_YESUB`k|$WG8myXvL~?>`bCFJT5#9 zomyKPqsVmaG=$x2xCBQBH}XOXXHOPE0Xr6lB+#;ept7JTREm;$M(Y1s#?W9Z)jjp% z$lh$Ncei2wb=PWp>f*>;do@Lur=}{K3ZzbY-oXo!1lU~kU40mIR^Pq7u5Tn%C2%FO`S0oJ zZ63Cjw1#GJ%RQEQ0;yvA&B{2imIl3@2GUib#(`Oj)>ezfU%no6z1bNA^JE*ok{&)t z9q2ONv$Y0oOlj=S&GPgoR<*u^uOAWNXKaBP1rE9VCa~U4*r8wm?ZZtt3pJg1znoD)8&3UcC75V^(d@7eG`pr zmg_N7=^*KR3IF@1)}VRCK5Nx2=vo23=I>=mth4rmA+_X@BBPY3r_ZY@=q}ieLE`0% z)+YNMYfKgIfO~MVI^m(%oI*>Nw*SX{$+cb`Uw}z*TGwH^vQ7s$6=ZeiN^`OWvFOlg zp}Zgima7B|NL8_ebI#2ct=Ms-wFVDaZhN?!m{y!XH5I61Eh9ZiWn=X3QbF5kHVkOp zIi;2R)2;`P9p&s4l}inmNj`TrB@7DwD2bPxq8~NG`1F5Y-8b=peo_*oN$6ve&ka{E zP28W=L*VebsaKVWghOhC^*Ly4`?>rJ0cY^Q|2;m_TNi8J)BVnTB71qk9i{~^N?M>- z&vWb7kVd2Qr+8*~M=r?gc);7Z6>HRw_3oFP?$pez#ivOp=*Cwp`Fh*cYfO}pdS_*= zztGg3MI*Hb-knnIJGRSKd1Ef3?B_|bxzR^QyBX8s9{BoPP=BU|;kBNXloz^it|e(;`^fSev}Vhd+qwo{ts(HU6btyEdf4ga7QE13)F!`yD?o z<4Ez&XGYw2_!kwg+^@YvRUfqfBHV5`1^O-pwcSxz`oqC-Aw0qQ1#DSSA^5i4n7IBu zsep*N#E99N)ySJeH!J>OHM5C*Na46Lf!o1DkV6<@PSL&|y9_-{!#42y;v%$^7Hp#% z)+~0;#>yWQzIiSIwsG!*eSka9?(p;;qJsYZIdw1;Mr&lhYb2m615XgQ05?F$zbQCW zl1XD~MS?REiq~La`kIvw0>hY)F$A3RJQn`DpON^d4Kx^~xXJeF1SB!}JOiZpv^REk%E_{>p$nO8qu=UbwH@Sc?qZ2&8 za2azRY@tyG{FjK=7gZQ06Yme z+b9rendmiKpVmXRf8Am8uI<|d1rCqbfRaf65xZQ^)9FgKau^sSuUk- z`)cp@@7}4KPidQ%%KLy#nVrr?Qg>_h?5_fQdNN%;5)DNrzNyUU?VHh=mH~cP!>lEI z*cvBnbi{B2W3^TAykc-+2!8oFX=(HCLM8f5EUJISxckE$j^8^l;X%!~dkwRZ_zW$U zV-xhi@Si4~kg~To*4LX8Uq=7Uh(xkMKfXdvnNtGz?%z`?G5Gy|RmLo@VUdbkqIn2E zL5n?kRg6#$XOl4pF))YQi?wseALCigtDcn<$ge>28}QkyI5VbSDGAmQ+hUp=a*2|& zg0q>o%{MhId*xBjA2_D}ai&lD$4-`5rx0)2BS=^jqI2H*#2e99K5aMI_V|cO^D4aCMz0VTAnWBl=TmAv^BfGJ-5HCl9W4p%lTb+CMag7H!N6ic_TO}^t5Fb0)KuLGc>a> zC^5-?Zepkt)A+w(b`;<@E1@v@L^lwC@O<2B%dm>;72?L`&}(J)A$LG8>}W@qoomY+AvkaNs6hmkan$lpbwhILRlQH$P1LSUjb;I?vM~;km~I?4 zI^^etAKOioko?6ZOF4oa!5OJ8iD)V)`u5;?&>7XDjIG?I%GpR;0VUeg1T#&4er01@ zr)UZCMIIWLPw#j}PVqYr7p~rUKmj|8G?Sw-!GC(2ItHvuhUX|QYcTmMq+$wFYjgQ; zCnVt#!25iO2S3sRvi)5{xXmuOQzWj<$x0k)K zwr+hg9v3Af!!-UrfNSGa`w`FJ!-O}vaBNI~G88@J%v<%mWhd&yt6mut<)uQj{NSUB zNIryEYI3m6mQLRbZfWjvi8@2O|bdKp1S)Hr9{N z^Xk66pLgfo&d%ri|JLt!P8h=y2;QUWU70(@hN)7^i~hIwJZ2ytnTw|gMI|F_0XQx@ z(%Xx-(aB0Pt7$Z|Y9`J{GvIQ87vAoQ-AfnpFfGp!?xp>BcLX|>$E7=#L|g$j>Wm*K z)=mT7w9xcW3{dtu5?k`RYJ3ZaHiJ#CUl6!y^ID3znfIs#c(lAZy!=fiNm6Vm{B}k! zPwG+GhTMgb9*bO-ne(uesgNI;(O#ZlL{O>M?39=FtBJPLZ@T~(RQ*Z8U6x|3*?;pY z(|0xnQP>X!|9^+(Ubh)`wM&7jBUo&dnQaRGk<2Wu9TtbZe6{%Vqc^0_cE+Qty&_D? zO&fWoa|O2$ahp6Hx%T^bcAVRfvhkBEA4#*>Xi}2(3ukGcfg%{#w;Kuy6)sAf+5B3T zi?vIA_mNRTCM$Bh6P8I(U5ZimaH*9IDA4K-EG?_8g*>~JIi(Z6-`S##E8p-m0Aq%q zZeQT^NW8T?r99U(fgRCz+$J~C0|0+~JaX+hscyUJ$7QjZzRH(uLT_=Fe~I?*+RM6T z!)L72KscM0ES8qL4B4f{mC@e9EDufQL800u-0pW@SFWs2!YCWgCcClHsm6gz8Cf=U zl;r%qvp&|ms~*j@1=0Gj9xF*c9*P!%eMDb7|HJY>V>K`C3y$91JVQ)CpTf;BW6*Tu z?2*M9b9#?5)x^=4Np zhsyXDgFrQLpX3Pkgdhm{^+pe7z*!jb2%(5iAe@$-fu^3uwslGH=h}yGw|$CJ zH5>OhxX>xpP~4kdE^^u$QPY%duXdP;+qlpD7P;j-8s$U%{V12Mo)`9crNa7`rL*hK zkg!Degfe>_3UHPtYSSX6-^$?}jG#ppuIcKEIW|xQ=x$cVacBojE-F z0wX+O!MIbpJ@}m25&!}&u)p>sDGK~{I}e+_9&0bBFKoh(gcTnu9wo^7k7V2 zh-G)%AO_mbY+*~8GdR!(iV)5#hKHdy#q}f4e_orriojK*H+(c#b+6b^pZ(CatEfxK?lWSND zecpCqZ=4(XFp#`#JqM0lny0*OZhppCK`l4mhCf&93KFt+BWM11*7+1X*&iCo^5LP3 zf&7^zz_Ew?SA_GM=1qnv(XJL1YX2btkY9c&h0UeAP~|QsX3Hgt=wy_SG2C5m^>*9$ zZOF!qA8#Xk<$QCCggBW zjspcXNAUsF&0QAz8xU%n+09>~*y6VkP*b>e`Ia_lrpEJ0Ssmvlq602onN}nQZ37OCXN1wHd;B@+iHepS&wy$U> zKC>V*eJe<6_EJ*EQe2T*SYUiztGunVy|mX+J3ovA-Gat z+*t}G{!psVV<9Akm`mRwT$_zraih)333@e?C1pR1Z10$I z66X$7Ef*s_y1X+%i+oDW1t4IksL3mamC76*Ge;S+&L}5w1*d^}vOm<(3%<~>%ZxmJ zSIk3vaT&GyJ9Lc*dpl3pN_TFbE_#Ks@Qkgi>lURCve!vtUf@Bxe5D}`tr@!I;ke68L>{g7 zF1nYX7Rf?-!g9LyuRC7gTJ3D`p7o7l+d>H*SysimCB;N=FRl1S>1{kI+NwS7fS+z< z+uM?63iqLKu=nL=%O6o=&UYWo;T!AO!Y*!hU*K04x9MKPx>H>XLz~UqMT-Xv%y;ht z9A(PU2-oIF;L->&zCkmk4Q{hhfMAeG0nJ)1bRuZHX8I*X7>qdv&(Q;C{F_$H{w^?U z65Xf+k@ia`7l`j+edMErM4iUC7!|`WpD|%yH5^%$a&k65c z7(i8@A0Q1L1RlZECR=_zVMuAzA}?ncu)Z%9?yZQ(w$k@NrIuqYow=)f=_VYqTt5u(Sdmq%gw91c8yX=T}*$rd9Hk$z}7tw#I zvgS)9gBcM%`A@n@idb%^Xy#+*dcqQa7$%yKB!ayhgFINyoMYgQoN)lbR zWVbBuTHohI8re>rHsO^0bNRwfXe2ROvb?#wJ9{UxHe{IiA>RWm$)APF3{Be{iAfNj zRTv{mC3&aNPTN|Oy$5E#%)Bs<0%emK*6Rbe9ci_{HuHtO6Ls1dA8t#;EM#Fj`K=@! zW%k4!>b89?LvY;7<+-@kF`}Cgmmb(VlFM6)F?ZZPM}L;mzCoRi*q@B*{k->g+Z*O} zq05w#H*iqn1VXd-`3Z>^gxW5DKm#a|&fN+6Lh|W$%$zV^e-CGAda*Lfwy@h+`#7$pO~v3Dv&j(k*XqQXjY(QM_~(ImlV3o+B@8_FLW;dzrhkQOVBHv?a=7=1pm_L009 zQcEP-u-kgJ1tVnQB6lQLAS%nxIq*#_tyzzUnqjEDw|jHmPl*vr?~y-i$im?ruD$i3 zj*PL+;d|Df{^JmTzNk%Qo;OaC_=DiFi+6y)Jn=-Z9$GBUOOf`lX7L#u6%l!b6X?dc zm1uS|cK&S87N>8mZ%F1>$HC%9EG@Gy>+qmrj?b!`_)KKu-L-Z;GX>85nB?Lyf$rlI zS57b9yMf;~rrXEGu(LpHBV&0n@{rIBLXq7)+u^sWc^$m#Pp?_*4d-GSw7RGkR+m>XSCJXMEJa`8O6*FZ6|@ob84&SdH|zg*B@ViQ%hNg85$^-oWX-b^xsx5<}$Kfu?yhSdzQ@mppyCjxh(Koo? z-J#9B8wL)qy;FSGizx(3!!3CIzOzg~;E9>eLTbJg>$#x~dDjt&aEr2o);S-sHiwu; zT+=G@JwYiui;*nk`g>2$JhA33tYfHgaJA2ic(|05Zv@wzJ=4hkp@W#2(}J(+#G7qv z38kmW^EGXUg;`mFZp4+PCPVtq@$ieiqBQGU88t2aK>u;TNr{&!bg3C;v*aEx5Ab*T z{V(4{=`E54X7)Cb(?*MP}|PkLE$v?|T$HC3#MKKM`mS`N(@02mkT* z4#uFSYta8QDqCW|?-uv@tvgF7`Y6Z&^kz2{Ys+C{j5Zo7&Xns8%3g_1zOaMZHQ(C|I()(f}rv-|K!vFTw{d@F<(dqxu|(V zdvaxvV24pmSX~_5HK3O+e*t}K`k=X!{`T^3uApch_s4ERQ>Gk+S|Ln2w!{8aan;Xn z6GuQOQ|MXV36D&+W^mQqKPeQ+nor-He5%u0Cs?j9V;<9*Jzf=lp*BN4l@x1PDt_sC zoO=)O4Gf{YgxNJxWTGsOM01oU8reTdy1vlCAIu%;6$3H_%s;cWs=013Z+$k}6OKZa z+f`-pflgtBqW<&vGx_oUMk&y}JL5?65)o$S`os48E}>91W-$>}LG>>wk_N?+qZ66V zNN3*QfWW4oBx(2M$6yMn;2rYczcY0|E5M4$Lit>C2#*3}+xbjsqlqZ5pi~BT3hAoGO)>>E5oY6altq$>$@`vHA^lXI|ygoAU z=%uO%Cl(bh4{wHmed&dX_Zl++{T{NPKpB~OCuQjFnnggc*56%QyMAvoHZNb4SFYvW zj=cp@T~qi+OY2IU0SRRwSh!K#4nL%ipSS+9{GGiB-csYB;3Av6HhP@BhB!o;h!?S$sV0*tc=#U@|=1b6l-nbgo!xf5&4ux)y} z4=3V+Zj^148~YY0P_}?FDJc4g!KbZE6o;q3~Gh0 z5(+g@O?Y4v13_Op2-F&pGmv^6Ujn2!KAcF4EmM1KV4+)~2p1Ss%wLg~kW7i!}^v3gX@_SIL@hY6P zSHftGzv)a$SzmD7h~znDdB`-hz02b^u9_wzfVEI^^(gp4{cA4$$wjdtlcK^Qy!Fxi z!?ht{?<6gAXTN_I*ME--K=2Qb7pJX*MJ30fMlq5zGAiK;%#sD6JnpxS$eA_jt4P+$ zZ6B{zjR|GXtjXc_7=s4S{a(UWvH^6#tbNd9Pnp-`D~maj^7No;jC|1N`30BME14m_ zfI1HYa^awU9m77E>-C#WUX`KXqY}auPv|o~-9myE1ofTWfX^(x=i_4itE{Xahz)_= zDGwQiPA&Jw#ibLJ1qgxSRs3f`JjP--b7Q z)b^unq_F8N(7g8P(-Od4qBTNx!@7C>Tj|DY4By%b%~S>CL)>0gjTxWCbb#?k^(Q?q z!cwx6r)i&4y_5bs8$EzFH`TrDyR{6>W(lhGo7ba+W2mCBrPJczw$yvU*xMWF1D1~T zrX+#glAA}YIZ~@C zTz>g#lYv8M4Z+CL&{A=9iV7T2d*jbs#Q$LCQ|}_5RXWVq-dR^U`M{60ZT*c*%Ph8U z;e;tsK7uQ7(wYw|ng!)mCI0vdeMsEAAEv_L>k)qYAwCyV6;zN**W}_|z)2ij=zZ;W z&8-+?eBo~hY$*iH3fQ#M+1ktO0w8x+>Rxqn<##=|a&WHrM9|Fo36@xH#LkpcGSFhR zTPQXc+k%|a0x5e;_AK{@#VlS?HY~Wd^0H~mzw=y)Qkvm)ai(|fXAFLCq70^Ou5b8S zsEP*}LpjYo{VEjk#o;IORUH?QIt2Wdt{r8$LW=9=?lhwxkCIBR#p@RUUvo7=D(tyV z`!aLpBTYQDZh06*zErt9iQ4k~9J}zKPT1fI5IcTXbq2`OtMw#5qu9nf^-M9ms z=22|ulS$Ia9_haY>M&gNU()hSV@j4DUQSi#GMib8)Jxp|9qHGBo5C0xby;&Q<`k|8*glDo=+qC=#=1HB-I7wju~ znUy#vVBvtUmh|BNonI+PWW%ACzH<-S959mGKmg8N3yTg9pm&YCEbgC1q^ujQRdN>m zgjwC=U9!^z_D1sIobsos<7?>WRX1u35H&E=++o4d4Gj2-&?4Qdb^%hQ^);>$uW8u` zojPQD#8+&d2bOeP^*!s>!R0I8w4J0;t$Z)Z+ohPk0E&p9*3%Bq98I;1*FaPyZHvqH zEi8ixYdA6rpeI>kBbC^Pt~2+sEpAo57mNU@(CTT23gt)V2}D{$pnj(VxdTX#jNKN{ zkeRP2v*R2MqK&B_j{MpyMHCvPCywye&zDJ|c6iNuzuy#v*ZD~LwTk|y#WGSq6($~} zl_fh=_%)Gjbo9)pxJDZ_ep8o=7X0SC5hiU38w)vL!5qrm;1wRZTUguE57b4al1ljq zlVWj3?xF}gRd-Bn^=A~zcNXiN(~@`0B(3hP?R9C070XJ=dQK^?_RiFgzWs{y=5)60 zD;!{QM&GW_+o^+}7*Bmb;%SRVl6|+5bav;Ctfy900FexUHD_9_|O zRzr0wpdiU5Fdav1Q+bU0Z_C9L3Ax2`YWu7oKz2(g=5emRI4OkTLLuDs zWRNiwtwnDXh*}>Rsm7?+C|*KCCb8ANoy9wZ5>R$M$d%lYfkvG=g;wC8Ka zxO5Zia6rBEa+j1>scC9#fG$ZBXFqt)_Ii8qt{<|sHx+wq6=N$=z@nDh)3gjGI>p;I z3@E+_kn2W44Z+Z8K?V0fm}|RdI%U=!BroL-ehR+WL+svmvrk3Yh)W$ViUR2iT`@OL z&MWi)443UyCL*pDm1Kn=>CIruM=RjeQd4r(jj_GOMav(>b0&!}_Qk}1nzn;O0^pj3 zJk1%oT$#9-&OrmD$ltsLaF4ohso(lt^fw-`9lW^}Vu_wZL+ZYCWq7IfEvTAYaqe!L zq9Ibk*Vt>f-{Nm4>ZpiRGiAz6)a;dK9!QA-G_*Xa zz*v3W3P`;ySm^mQc<{G!y97!oCOZ<5GevX4rL2q$#(!6&yH;FLC^?iY^wxvj>$k8U zCS}U}AedM%{kkyPDGcfk7vj_BGlVhe!rnUw#gGw{ z6#eQ^j)!HXaLh4fvP*p9L(zkvtDrGS*TA$iI$7QAjSCAOn!orXljoU1vbxoJKE0Sg zkBG)p?n%llf$56~Hwr%GS9^CaW#G-ieO}6R&J5TF^){_bJ8azL3)hL@FfS1bHQb1X zEDfD8dBnG9;KESrdRIZkPy0iooXK#l%Hv2H^P#8&LIO3^GEK46S?-|xYHjI!yWN&7 zH<9ex{hmjl`G2?YUJpo51#Y1%J0>?nI(u8b5g`LF)NlS0u#t!rciQibL99*+jFv9q zzVC_qzl_y#2w*N~Z5n}~zA%3OHoVyH)_pY|XJzitQS;?0{lnu9$L5d1809SE+JhNHR+MsLd{e|bWSYJt{Q zguJ>YnN;G##G=ynGQYt_*YT!?48AX?0$~7#Wpck|>Jq!mxiPI#o@Xvde+*7#@+VQ% zWxo{am)8aF=6Mnl^8XuvOTCrk@`_?%B5JYd(v7Ec_VPULK6Ew?#%22A=mzSkKD<> zX8RV->u#$jU2S<}4Tg$+gLd*$I}Z^)F*?PyqonT_+oRYNQ{xd(jgzn|nhBEF#;V#z z?#+{S;_NAc-{)l{!wbJuGXNWSqVbK4RIHTaU9Z7kcPd-((`-7C_w)#798?uQEDsqZ zUC1#t{5X@zpR4P55gM7_-vFk0*het%h-Pq;Ru_Z%hZAM5Z=r+!m|*_!uO2dkjj>v~ zyV)#gj+nWi0=}UGb(1wZP9dXfz7fyp~%eG!lA!>)Iv#T;R^X8jQ$iNMqI_7Ew{SQHsl#RM~9+ zK{CVSv2{i1VlXxQRcS{sp7mn$G)cYN>*!?%P1sfxsnkl zISa(lX*>R*R(ISqUJZWfFUwU`vh@Pr1@TN3%i0Q#*ad|;uUw0zl@rsXIxE*tfUsj< zSbHy9*$h%$imRzGXBKz8i&iZPsL{UNW}N@84$yXd>@KhGgBjO1b9iCCsba00QaIE_ z1QE!{%Rxc!F((QD9Un_fKQ?=8#35tP$7)P+g8y8>x#?ZVvGHl=mwRqc**~RzSGHJMiVrx$EhcN1MF4wvO+v zIs7eN$JTch+thV>6Fi;RxrwXpEKOuheU<`i1FmdNEPaf`)l1bwcbjIJeHY?-qmcaV z51u9NJB58Xc%daxhU|hvn3}^ACb*L>*TFBm?arBgeltge>z?%|#NkUd&DXQ3ev);) zNlTw=mMcXpFy*ERmUpzSO|uJr4hr$0O~6tArVm5GI#-HgiB{MAf%eCGlFYwDTcR%V zw-#$flg?HU0TWbE40JMWFW|%-4~`r?Ku6!2yo5C1fqEAT+$l6JmYyF(?rw7c^)2l5B~eUImKV|4hkSK7XX zb@8aW35_`zlqJdP%BNzsC1i=uIjVA^xZ|04+LYP+#R5NP-Cv4W{?5L?COtu4rJ{$6 z>Xra^Obkv|(%tt5vX$Izy!TE^85riOSZP9oz;rsN!R3uN)iz}t;-0+nF>N5>V0G@n zd(YBGGl3Gz$C?|;4R$8sS#7zvjX~=mR1sg}QRp8y(KOy`GU)#oSTT$8a(!ED^V|*{ zW)l-r$8Yro3oEWwRQjD|F)I!bL{~E(C3y8zI3RQProxg@*QB>`JYL$0TSIS4E#>7l zLa5tk5Ycn9Cr)Gjj!{>zxZON;PnTd9!$SkBZ^BZQ8wZ>tp=G`i4jL*UD-GFljM~~u zI?I6)M~N`m&g_vKdgL?3372yjqe(I2wgsztAH9}t|1}Bo7F2{T_{v@DE&{$MP<91j zW_cjaMu9IL8&E|pr35bOPsMk{Z&zwOby+V(**|O@^fisxB&Q@YyD*QP3S|Ym6tOqk zgK#yp$BN_OnedgObB!eAH_yA7zCIo)%}sqirD17Jl0hAQpN(uPc0z0nkJ~mvdU$Px zfZ+R93*MKQ6ZK`<2#?0Lqu{Xt^4l=2Et-C({6>cCfPUm4PE=i#apvaKakq?|Z+oFm z9FO&<_m+W<@7yFR*zdSogQ+0~!&UKHDHr4C-&6%4n3?s~Z|D-;T8ai|2g)DT$APTI zvkh`zA?YRgN3n#;-!UABm@NL~`g>@~n&#@m!G8G)QcI$n+I21_*NdOX{;PtiXBqF-<5Vx0bLQq14Xgvd#5o~uzU5~5S~s#<3rWO z5zLdhZW%6PuZOGO^ef5b<7A7lXNz1uLMP=}(F^N=Su$fop9W8cHKmB}4jc~DqTIjN z`$ba%tPO|57hbArCR10=dFhYLmTNs>mN4wF4yY12-yd z)Z7J$}g_Y(;tuQdW z1H2Gmi3GIcarx^P3hyGE+fXrCav*OD3+bXI-u1>3NkD&oBrC^0hWOrC9o$W#pU1N9 zaa$K3w3F^H7aAN|zp!AEIW?Qz30rIDHgiS#E<7X)N&gBzQ^a~;FYNxpfev^A4M_XF z_fdErj3%~lJqeQuOP1Gk12Dfo(#tij&OBmut%GawdvE?$cWdo0zGMX9l6luxQ~v3gJRlM{xv?;K@XtsBWX2ry_sa0@K68#k zoqJ=o9EWt_=XI6Xz?w&0U{YuR^fJ%q8v^cvib)vK`g(b$^XR6sO@$Feu{>DAYVjr2 zV!PUD^#e9p>2|Yj@I6gU2E}!Cc8u&_!d!9XZJ?4_7pY9rHR480Jh-^+n6~kg!lLMx zX6OD)+^KBW9Ruiu{y3Ch8W!{tY|VF+M@8yWUOq-E!23`4FCQOwKFw8A*UmM4cPXr7 zgGsVYKa93(>X8jCx$B;4un~E3P%h=QXR5Sav%R9G!43J*F@HSY)B?96nIN3U2UO(K z;tp7~)R-rq4H8(n?f0eK;zdPy=bw!NSe!`o%~#tgl?b> zuf8ta%oc&WC^u( zDwD@V^NY6-A0b-t2T`H&Z@U}v_0f4Ne1^JGuWc26%}PG&B~ucLvfcO$zKtb$RZr5m z`9Ex^ITVZy9g9t`8C7M^`B$jm-%8x~yoPV8b6kSa`uk!&3>RMUf@Nhf_Z7Uv0`Lhx zT+TpVcu=~K0@+Qf%Z)_42Do~98#xy_>S(bwhXV$1Y^ev{&JAd&YQ zHPSOl`nInG?>I(XkY2My-}Wa~rpk5aNUJ*V;BZSjp^#OJSN1J2bt2{L-wL8LGoi}K z4JtWIP0v}Dg~<_@3P__DYv0bRB;QqX7?;yqevGYG?{Z1J&<3)3%+2I@>K*1_pj1%& z^;)Nr6?Nyxnb)K_q{H9tAR=#NfkPosqLY35;7BF#>qDXu61YzX0B`bo&e%Idj9rqc z7mpWs0zFyQMn_J4VaaH%OKy8@Vz8#&1-QkWu8EMh5xG%=nQQ6FDmBWbJZ)@7JPocH zZ1@F<@Z1ZOK+R>9fO2LJdMFzK&$DfIfwfwd%1{&(TucWQ@~x&2ze2~P2d~h&k`{D4 zrDf6tRh0G6o&PrOzOK3Sk)AJ`#y7{)G<32)oVrpjJ#2Tp?f)2@oM++K@`NGs-nog* z>p<Y3NxqlAUt8 zZ)C1$VRte_OdZ+p)i7s9s&pelb7#>=(=w7Ac`Kc>f8HYO2E zjhGMvu|El$NFoTYr$1s*F4I@=g3=GpZ0F>x*1`dd*Tuz#KksIh8lov}wmdjJ*h8_8 z4s@e-&-NLRlKY3qZ;=U!Miov$9<`HG9!-Qmt7YgnG=ryDvfZ$TfRfwF=7W&DEtQtu zwjF3ux~`2ni->nvQaMYc+p?ap$~hbbi_7J(khzYlh+k2(le@CrC_0@4Cv3qHWsFST z2Vql?W?!H0LJ?$P5!e;obu`&&@A#cpcat7@<2<^$T>&BuX?Z6JkYQI#1PC_?{@(X5 z2>da{f@VtDX0@|5jWF6%7<7P6Xm==M#f;rg^B4PQxxe-G_$XD8;+`e%eHGqf&TA?& zfa78>-pvA64nQTL@>?NLHwvfYfb{>Y1%`cP`xYq23p7d0M^?~kQnc7%Y(#*@-Qrj7 zZ_#|M!(SiZau*@(T-Q`pW0rmoOU<3SWMFDT_dIxSsi;$!+Qa`o?zEyzqkuB3A66CE zOn6kWrYZ28qfQ~1o(^Mz)DZW7E<YW}>3q z`%!~9j)usgx-O^z45j&;g$JgF#NJ|7moJuJrcxUsL_}Z#*NzfKr8OBaSPnIbeV>0y zqY|FBWe5)?$?btpvz&}%zh?r4M(>@UN|LO3yfi*uCeWio+eR67Ux#++Z)s^5Y%BNB z+RSYvViGO1x@+=&82~D8^(+R{ypw`EO)0AbZ#?~~Kh2HwFIMq!V1!<>l)HMxA zoeqaLLY#KHiy_|Bo{D4;>=AYXx#nW>DI%ugbfC+y(}bV$8vPz| zOS|-VzD)Bw=znDOK8K40=k|&~e5&lK2$ z<7w%j+jv95oJB_2QqXOdS z0k51>(I=V}USofvb6-LtjzL3|?dc@pQbeZ@l-^-Nnd0zr&*LsnVd7^&k8^Ez-mez8 z5GqGc%XPI3M09cq%S%rjFyVBk!ix^y3!t!WNE`JIMjgP%uHi-xuSb|gjD(suuElQ^=1 zKztGpi(8w^CW0mxHY)wo_>z9<@TV+fMdD2khAf!Dkw6;n61~TUvBj*ZZWXOkWjnQm z0jYKa2Z;~z*GyBVZk=wF)N2iyClLX{h>1)gFnm5>iB?_)_B51b7_G<--+R0$I#&Dl z+L6m6oy~VVnH&5=0v_aqVu!BH+&6ZlrqO=B&Mt?mlZV^o^54#K_}ayJ{aQ+ULh|+M z(@;9P^qhsa@vP|96J|VF(@ox{r{GxBvF|T#U1}ZbxACj52EWgCN z#c?(ge&=Z8zbEQ>&Cnm8AN@Y-w2~V1yt1bf z|NKLWS(P>3t~yLQNuICXn=tuF>cyQ_P$)|?Tj0icxkJFlKlX~EHcfA~9#~OJc`^r? zS$UuDxKo+X;>lZDU~M5wA7HHA)wVc+i3mGTSA@0mBYWzziP5gkHOgsp&@&{Gu0VIRfMna6p;{&fl-mj`(6pbI5cBtGCXa%BFupT7iEOQ-FIf4Y=x`w| zU6wWnet7OX&~;q9M5LkNzUE2zZN{|QZ3d39Rd$|^W58b2;*6jS-X+3_|F=vL*6faE zt6-ZuGz*U1$0)6=ZSN**r<^=^R5@D%Vu{0@t;l!h*7G(Fqb;Np46wS5nAW@h);cIu zPiWSG2Qn|U{D`qz-KRtkdY7XN>4(NAT{bqa{)I{0N*1l1KH0Bj6!5J;yEjOJ{WKcg zpFAGHjKKTnkjEA{ei9vK=1al>By2KNl6~;!4b&0Dl2-Jyi8esB(8jv$XhnkG_yzp* zXXOjlwe2c=1p>$Yle?r~BR#;n#EX8X+Z=va$j1Ub5l$4a$?wdHB0WqZM4>ECmO0UH zG%9IQdFLi^;@QV%gqm!6S!YBZosA+eq30f}JIZ*4>TA6}eNiaML*t`wGzb^m5dRF` zqdYzu%q4eBJBLoa4=$ZwClX2q4jNmY81re z%MIQ+KGvcoaZyC}@=e`q)6$2V^^K5>A3^B%2_zxjr81IETxNeg4es4teM*Ny6Ks)z z-cw)v$1{=A0M!mHB5x34&>UOzMBIB~y}^pk)<2C+Cq+>Q9LwJdYsk`{(62p&OuYtl zgKT&dqa8G}VfnxZQTa0D=ak22pRfsiptMOOeWXi=^bGG8mNy=bjhZ^QDv%`Lo?w~Z z5M!?;e)iuZ(Ovh>OoHIxKvuGU^m{Mauvd&?UY`axudk0TQx0-oelbWkd8Bx<;ny25 zCaLM;^iV*TBKOu&s23Mw;wV?Sx81N?B4T!u8<@SF8~rSI6$D+JoArU7uURevslv13GjDg$8wOQ+)>>h~^r80aP1?cw4iq-_!1L zDBM_q|GvwC^5<;U;0I3O`bo4T$%naNY$J=4tWzRv(z}kQ8h%mikKLe2P~H931C8_B z11OFJZ#CyT=boIOJj+-+7KU%#M-4S%lqUo3g+7zHYm|8!%o zwp2dmLElf>l=E`(o+{b|>CL9^DXZzVZvY>0xt_%~C!6RUBx<;nchI7T=DwD`?|bl* zaN43Kc)~uwaMk@h`~La$GlO9X@(rNQ4l8nS5GWC-k6xYh^N;o8C^-apj3Qj(B$%zj zKoy^dttZ3&ilO6`dWk3hH0Uu(CVw1lD?YWmXo?p z-#xp-q1ZCiLIpGYkzGt^3R+DFtm`Q~6MV<8nN0soE9*a%6y4@b{?+we7(XIuX7#x+ zbH`T*u^2gi{a+3aMKcFB7Ugyahv0g{g&O^CF;P`RBRT>wMS@nn zEoeXD?>ci}hT9e&d7)74MJMX;U_xP5ZF&7df;m^V0wfT@@r3-HVN3Jf8%{BYPt$w{ zSRu#Sk4|WbMOV71MKYZD<7EQ-!RG^SbrCq=SS!y4$zY&?C|mWsDLk=R^k>N1e+{|v zrZ2)2hnFUUvc0y$BSb3WHs~J#H_YkD_sm>ea&eM}D+*t42D0CE(+$XIypqJMzv#zH=rOf+(4nK8@g46@qk&ql`;8s? zb#(}CvoR%e`M!NJeUDGrFY>)?8JNhY^PGW?L9fTVU3(?Lf&5E`}4k&m2 z7D=-BF%2kJf*}gboDFnkIBRbp8%Z?g0imgu#&?&JER**xC??Kb$GiSM(LDJ^ULR&y zeI;!{a1qwvjj0=FYoRDxD(17b0Wmc6bQ~Y-;q<0;+8&WI z$OXZF%0Vr5x(e0KX1VyjT=NdldbG)_*d{xC>OEaMm$DnGNqeTvaw62o5dDezeLf1; zIxXQ8mPU#U%QH>Ii)WWr;o3HQb6=6}L1QKY=^Rsd@&}Pqclm?aWoo{Ja!k^~a-+*^ zWcc=a+5&`pvs%2b`M<+ynV3)Vk1)}(vXRL%%rk;vLSkqx$tZU)!00NGe+8N>Gh}R% zfOcK&vdks6>*cNtQQHCrk^za(BG)?4$BaixZq(#=C*XtnzE^^_u2mS&w-T);mV^ii%q<9#6-AqB+!yb!Y_QA4s8MtJ9ef0H9v?9i0?B8j*Fu0W=7M+bg#kE=b zjrN1xR_5jQCIotJD@x}vEc%t6@=a2|-y@da99A!D@^gd(A_G_H;TBnm4-q!i1mBj| z0^%2yHJvC=+VP{xvh5Rj6=4Z`D@_B@`}a zPuG6qMkjMhcc72ELNp80iQCmZRf4QXA0X36Zzo4RELn)zied$SVJpQ1j{~3HvuJ=ogur2kTGba?K>QleB+74l^5eH?DNjGUsLumG0+aP`T zSw0k72yB&jvrXWdNj$c#rFZYeE8tRa2m+0Je;ht0yC*>bHGFwFK###)o(L(8;~5TY z(GJzVt62b~t@ybsVy8CeCzS+$3w(Ny>*?r zi^IwuWiP97OtPTa`Ntmw#f_$F4|Hf4$d3T;$y4#6erXRRyb9KSId8TpjPoP`6ZBnl z5B1P9levn22wyPXV511dd$=*}r(QgrYrXU4WCJ6iBHGyc9rSJrt|MR?h?%%oJ?f2_i z-?jExU345Z-&Ns?k75{76j=$gBCj{c4x{Pd`w{A)vFWAN54`)NWIH>WTHuVyN4t-LV5(aL;qr%=`_E;G2FocL1RJ#b#W?Cxn*Xb2bE?Ur^LBKHxswh5icOVk zpTaj{-75zIS&|8=(8G6wYEf8ws0OEiqQ@C>OXQOi8ngY`+h4=(#9&<#(hpUIkV1Rbpf8u)xP=zKvzi+w4IwHikJTO;l|Znrh(t_=vUz}pM&)<^dfnPf1t zjR)BH;md^(KK&yph+aalk==*prWf$~N@|0;uP9b@HD=B`H=#}7kx8D!?=X0vK~Cqt z7&{W5CvWYdq1S_4UI_gPK~o3w;I7PnaqHMC;$11E7olO2SJQa(#tAd zrJ#zTLRk<9#49v$(3f?`_PFRnXUU3ngY9b*<}Lgrmlf$xI%iKBVEc!$=VSbup9lr< ze~V4V+Pi;+*ogGwTD83a;L8*u4uz-cqFerze6r@K7w0+M+Y0qaB%lAGL&Be@xk5Fv zc;%(k4pTe%db%Yk2xCWGjh`Tc9cEb&y*T~L33ZQVP3H2Eid)!$ThR!cPRriu%QDyb zcVM^B%RaYxLmUl^{rZM+C}W)D0bA)4^v{si`@b`&fu_k9FGYre^Xy00>HbwVF;!+I zTOd0kpm=lag3j34f}Lfd)PR_(FiHGPh_0H4^NjJf#FuO2te2SG}CES5M*IP*7HT) z&x1f7di(AsKG!CemRc?6Z{n$WrfC#WzOqmO z*T2{O_-rF}c5LuOKZ(eLl3lDZXAQH0=8kUiSivr8N}jVi*1QL#K$*t$89rT?fcGm! z7UWVIt*V#6u|vLn33?~TQtEMg!T#`E{O7>cmwd_3VK)B4f&&6f=0#od?6^pL-W1oN z6AJr6@WXjafW_h4k89-z{xDc22cubb7Bdeu_Z&-Zf9F|))6p5iom|Ge3Y+P7m-4rS zBPmE)Yb}~jKvf@Uc2p=X)IW~tMHyVlt>Ct49llosrTaaqQ5(2O5}VDV8A^j$d2e3r zW;;G8Up%~#E$Xn()AoC;Yu6J?F1ZfGKk?b9ghOcH%+^4abeS@j>ax`ep=&1E-)Ow= ziS&az!1=z8khABi`ICU}$<$rL9w|ErE>G?D3rEdGj~8+8%taPu99o`SbfyXTbI7#$ z{-WYfqd-9c3djWbw}A`#Sp+?BI(!)rnd>S@TB0IXMIZBt+Se-R3VPCeE&XC;+~ZN~ zTPCBQrsZhpj6{|HsWUMPRsdqK81iSt4(LQ$&klpcY8^(7I3nBy2$&nQ{vIDPML)I|FDA zPFWYbd0<)u3r({}UEAMig$9_P_?CP8+{OsHw*MuWeQ@GU*n>Uyy117s1xZ~U?IaDp zoyLc)E3Q6kO1|_2->hvz<}yKo9a-^z|Cj8q85>KFKJ5F_*k1g1kpzLC|He2OZZbEM zh&UrEh|6szJk%U6~?4SWI$7|IP{Mf-5_lb8P`Mg4ELbErCc#@g8BU*#VZhKXj*Bzss z32+Xm8EO&RMuU9B0}^TJtl+~2&OYxS#tRwqe+MjijT}f->`V_bY*23Vr2^79vloOG za0NdbBdX@_!)S-jomD4Qh?!?M5X}2@@rlPzPZM_HT_z7Sq#P^11oiucmM~Um@M)?_ zL<$9a4gZ$V%UMg|PZtVTg1_MFc7uc@HN;eXcx@7N3^qR9cae0;3m1pnv?`9zP}q61 z2wmymh73Gpx!7kP+A6b7I{0w#TE3%BXWA-Bgkq046{NsB(z{Nq^PR_{d`{nwkvMsS zXeYPO=7jLz5@H-$PJ8$L%e$t!k9#!Vi4}39?s3L(o9SEs05mtD9Tr6c6+aG+`iFg( zWaF-rda}3TvAvB%-v0B82xdde77uLRS0x^|W;FyY^7< zsg?FGLK-6YV19^8xv3cgvXi+i)OTe5Ds;tGdaLNx{#Hr!6jWv$%EjF6XKjg4mkKXD z8mX@f9XhuT4vOclC{dPj{_lg^DV5!f;PRP^95yrK%0R4u9OKOvQasHV%%x9DD=pO03Odr-dQH{35Z7V;QbGPHfCA+ z6dvT$NaH^|=Ok}ailx_6FUzyJJTwCRLBb=`j zKP)y18D{99TPrHy<0l0Xj@hB&O&!b_X~8Gm3X-iUf#! z{uboVKHn3n$_z!?kwn&Z7qx7`MjjY&~* zqTY>Ia&~f(Xa37ZR=7_rHw(~Xm4`A0#6bl5>Cf=1_9VX6=MZEyaqFp$DfJ!wrJs-+ z_-k)R6>)Tb;n~C2*;Iiz2OVe_Ri&B0^)dxwe*s1(M@z6WfK#34XKylQX2<%+k+iwj zrcN%ph2?j^T5};7LtY4Hn_%`Uvan^u%Lkbi;X5y-g=^BKESMCyUdL0_pHLdB?4+_) zc9&am0aC9kNjUGaIga@+<50neB`@uTbxap2?4l>NwW(EVHb)i3Iq;&e+q`zUmY-L; zWR7BWzn2nEMi(b)?aCc~HPX@Xy3fEz>iLV|ZpW{q(bEF-k$i!753&Q(`KejVDR0wKJP{IfSMp7>KF z^sO7??oukc;8U)7(UQQuSB_5=bPG}AY0g}TDmn@3DeITo&H6;U zzxf08`f)yxCJ*u1%%<%((R!i)Z?aKHYDkiy4XrwIN(?-j^+>pSnrp2-GEOnlPC;w@ zyW?i(^jf{Mq7a91`dNxQ-iKT=I#`Gsm&gGKFqqZDT$%y%G!e;@@-3`pPCswmHq5^Y z9J$KxQ`ryX4R9iN4SPpyOV4^eu8XxRl@10{T3BoU>^e}xUA1rvw;vN}I6h;DbTx#m z0Vcii@JoiY=LkH^qhMLj_=!KniE~L+W^&fp@;jO3cf$Rzk8&z|XS5_8k37XEyiS5m zK#)7M@Y;deP{;3K4{rRUmRgJu>RY(3G5AVL%jo$0DvdO?JX5lDhpGpPD;GZ#-|G=* zyl9!dtmPzI{QnVAJ7dyg%<`muGd*Vn@X%yGPBd#WC$NSB+G1ACvwnOUlbGq1@0G{f_$>oFn0q(+1k-z=6@ zGoKYZ;T%xfNmpvh>}cD~0p_&iEp-xcan5ZJ>ew!MExNnt{RfHfh0CPd{*R_8dx-VA zKlQrb!S}w**5{t<3xR%M!s4bU|C+$MfMC3UrqGuZH<=MVQN(O;q4mSSPLAN0n;<%) z#0~=+Oi9DEz5?CRQNE)FJ5puMp7u4Mi_4~4MR{%h3ogV8Sl4K&w}=S;sshuIIS8&! zxKwRfvnaAi-<$EPF@E%-7bxRB>7mBrNzpfzOswXUU9n@X<>D|V9<^2!#LUIA~+tdK;fBt&{jIPRC3x9gScFuq#*jLrg%23#f zg;Qsuu0F0!mDAUnR#*=DCWNH+L`0@&Ua@PtR~=SLtaDx1(s0=6exxeyx7BwV%-ZX- z$&)MNUM=M};`+6QFJSeVNWbY%dR#kO;x|SvtM^Du+YX=ovYLCsBE++q68C>?tFu^F z7VJR zC~P-pTu2d}?1jIcMti$IDaG5J!p0tZuI4@>InoRj4mq3K$IlgnWtGKD@_P#P>gQ?L zZ)-=!Cn|caBrQwy$acM3`5YLBe%;VI+9S7Wx>2cd5DTSVmwhhF)l9Xf#%>d?=ht7g zWZOOuird=i*z%@PAMb%6rA#j-yu_MrIzqEBZX5)4=0c@vVUZtUC(Ykynf;IkwTk%)W3t$PY&{tjz z8rfJjuro8>8I(Pl?HG#c({k=JZB1!Kfs9OeRcf0)KV|p+nF1~UTQTuYV7+yxUjTyM z7~d$)-&3vLf$g-fGg0G*eRlfedwmz&nXfhWS;GD$$}^?$WO05pWW((Wa-A_BVsPlY zb8EWsU#GO-?2i;PT)03a`1rL$bBBI)H~jcY$u8vO9(D)_B*4LVel7DsWsZT88p;F= zb*EpGwHl$eKP4!!Rs2X!4a*r3N=hW3wxlg7Ak7eu2D8u7h}0_Ty^K97{{XkYCXeyq zojT7B-NSsFdUc>^cZ0)QXGLT4@!r!SCU;X<=8dD-$^Lf_D6nHQh+|Z0et|VoG)PWd z1Lg0@Rl2m2As;`1BeJTE@RMHHJMPNwvSddl(iv&&g%SV73_0|M0@L?&qo1QfgL*2_ z^3Lr1aj~;pwzph*VbH&Iof@5ZpLbKM3q(?)KD|QGR@VynpHgn`?bu2n;v6hXqtm(>-dlu-S+z~VVaoAq5kC$JP)(KCO6Q`Z0) zwH^D9#wL@@)W&fh13~hkBpmT_pEIUSu^uL0+s#rby1#l-c||Xd|6+Xc)lO2wK%oq$ zNMw=7o-yyVfea6`takgcZPHtMz9k;gJazGp4W+zeg$~!&_aq1Ld2%^1=?V7kV2i~r zkA`g_Tp)yI7Hsnn$yb(F45*IInIkG9%MEVG?*I!?atw+@{3QLQ_U76vA|M6K`2VDUIGX9pkUj~$%m!En}J5Te%h9sh~ zYWJQ*bE6+=QO?fHVk_A+*jZQP^k09{HxSfV)fwO^vzgVkoND4 zPKfu1pI)QTfy76=9L*RL1u=mzT$_eP*4c08fyGfc}SD9vI7)#$kLrk!p)fQ-j!L}Q-cb|`aJxE!9o$8ps5hf2^VYCV|quW@D z(f=N2I`<~@Gr&B z@tjW7plPlMP2QZO~nNDT`3Pa7!!v(q>E1@E0R%gk?tRqyM+!|9T zRfJGs_J&1AmP2wow4*7o{bs$+_Px83LWs-)Zp9!^GT3Y92};TZEaKu0EJjFwr+{eO zxnD5qSceJ7xH&U?3;?q(&0}C_pj}Xx8h*BCIVmWkRfx8}*1mD?plJ8!SU@BLJIURv_%2|ksCpM9=%5qHpbaNIU_sOHjhonNmVWO{qO8dG#49_uKNn9E z5VdM8DphW0zh^)|>d*e=_&pK4`NZJx`w5xV-;WP)_%GweU|DGd`Y#8Hc~mXZ_xZoh z6z;c8A$mzphB69tFu?QmrM^7WXcCv<@HB@5+f8Si;g_eT%^WcCTI znx9wOi2Y5utTDg0TO^mkQtJ_(LxEKp69|48nRq}E2Rn1PjQiXm8G%d;Y9`%0 zZyJs~@0}}uXm=}$#F@k6t8vl){!{-8Yd9^tDxC&8sR9hD%cF)cHbR>xq z^MzcM z99C&sB*Qo}%_qMzA^w+I9Vf-B5_5g;uPkv7_(S){avdd#26}z@wKcU1EyCzLwL;}O zD;I|WzxSi1QZsQ!-_cFE;ZR<$_R4kN;Or0{^jS({+c?ZVoROMXzsnANM1>ZeqVffQ z=kzTu8dWt4Yw{JME-r9TxJkaB<)ja^QftothZd36&>%E>=flZ~{Y8HJcm|lyLfbQ* zo3g7cuohn3BgxE1-LOD-)em2-}kRcU3>Kc{0;ldJRNVk>HYY z?q95w=h|wtD@}7JN;XcdKi(l>)vG^xHa0fCKPVeTS$5xIiTMz~iLbetXF?Wbr8(~z zFd)w5uXDQarWp8BM+iY;DDnNC`lAR}c6<9GM{s_gmqsW}x_hxC_V?i554m0Gfm5s2 za=SFj)DZu#MW9cLCL!3XMVM5_W+W<$^W+=<<&-9bW>MUhzg~SWR_A9N+W#=NO?39H z-bYDs&08KbcXEg~kaenj&)Y@%p@CfkT{k^)?&<$c^NW%O!(&jFV4P{3K(~M8N`uX+ z?H|vOzqki+zUF&?o0@!Or7nxLnkn%h5S{n=|}((X1e;I6bch7*QZ zXfE1G=*o||0@Mt=04@ZZAhP1eP34b3T=$7OcBevnHsZW(8~c-tjWH-W22NT;`d{yL z&d_e4FmN`Xofqmi(TUlk?a*&!zV@)g)6!@(W%l(T@nqN240#m44sOl=zx=pDn&jU9 z3#8O8Gx#Zj2l_SZ6w+Ch+0xs3P)w(&IH!6&4vP~4L{$f}xqrD=-Rh_F;=#8I?^qt` z$aVvxkVA=^#A1S}qaBJQ?4SerX#B=*EcgXJRR6OoO*F&D1}#2vi){Wr3pt_$-UW9% z8qn(;+7ZC-QA;b}*6EJ;AFZ>|eg&zu>^L;eZ+9OBQc-EdQ<|$;FWJw}1w#4Um{ZPe zd4`H)%1w#PCT^Kd$r33A_4i3v%XwjM#D_qK6z%-fH&^7! zAGxn_RcQnp^YIHN8Bkh$e>{1oiq8D8X*C&OyZsApGW^9=wxmmq{7k}0oJrhfZsi(X zzjp-7u43IIRHkmN`%1?};sO(RcRwxpSQ--Sx7(}o30@7#85aI{DLUE2+kI#w!)6nH zAX+%5Fjlv9BP#cp1Q(b#QHncIU1n_abddd9#Sn{e^ODzu+z*t|d8xG+U(nJ2xe_)H zN;`KdD0U5cY-6fi$0_$K1rarS8=!Zj1OWK$*V5*-;a?|04+4_8GDrT_C1Ff%Cu^L^ z%6*LArlco$o+CPR$z>(8XcfoHYjyROZwtDN9^baJZ_Fj5e00{wol(nRW;Kl1q87W( z#QdNk&wZ;|lREs>9_aUu?-8QKsk4f@l$vVf|5H>;^LV>7W|$|Fy8xA@>cVu*i~^;2 zvFhjNQr`>raEq+ekmHjh--IgXAmZQ6Ml==EHN�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

pBr#&_U*nn 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 apqqj;r literal 0 HcmV?d00001 From 58ba361769e06de7e42904508b5a1a5f90c6fc4e Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:49:38 +0200 Subject: [PATCH 14/35] Implement pen_stamp block --- src/blocks/penblocks.cpp | 31 ++++++++++++++++ src/blocks/penblocks.h | 2 ++ test/blocks/pen_blocks_test.cpp | 63 +++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/src/blocks/penblocks.cpp b/src/blocks/penblocks.cpp index 88c38c4..6e4586f 100644 --- a/src/blocks/penblocks.cpp +++ b/src/blocks/penblocks.cpp @@ -2,12 +2,14 @@ #include #include +#include #include #include "penblocks.h" #include "penlayer.h" #include "penstate.h" #include "spritemodel.h" +#include "stagemodel.h" using namespace scratchcpprender; using namespace libscratchcpp; @@ -31,6 +33,7 @@ void PenBlocks::registerBlocks(IEngine *engine) { // Blocks engine->addCompileFunction(this, "pen_clear", &compileClear); + engine->addCompileFunction(this, "pen_stamp", &compileStamp); engine->addCompileFunction(this, "pen_penDown", &compilePenDown); engine->addCompileFunction(this, "pen_penUp", &compilePenUp); engine->addCompileFunction(this, "pen_setPenColorToColor", &compileSetPenColorToColor); @@ -57,6 +60,11 @@ void PenBlocks::compileClear(Compiler *compiler) compiler->addFunctionCall(&clear); } +void PenBlocks::compileStamp(Compiler *compiler) +{ + compiler->addFunctionCall(&stamp); +} + void PenBlocks::compilePenDown(Compiler *compiler) { compiler->addFunctionCall(&penDown); @@ -179,6 +187,29 @@ unsigned int PenBlocks::clear(VirtualMachine *vm) return 0; } +unsigned int PenBlocks::stamp(libscratchcpp::VirtualMachine *vm) +{ + IPenLayer *penLayer = PenLayer::getProjectPenLayer(vm->engine()); + + if (penLayer) { + Target *target = vm->target(); + IRenderedTarget *renderedTarget = nullptr; + + if (target->isStage()) { + IStageHandler *iface = static_cast(target)->getInterface(); + renderedTarget = static_cast(iface)->renderedTarget(); + } else { + ISpriteHandler *iface = static_cast(target)->getInterface(); + renderedTarget = static_cast(iface)->renderedTarget(); + } + + penLayer->stamp(renderedTarget); + vm->engine()->requestRedraw(); + } + + return 0; +} + unsigned int PenBlocks::penDown(VirtualMachine *vm) { SpriteModel *model = getSpriteModel(vm); diff --git a/src/blocks/penblocks.h b/src/blocks/penblocks.h index 5eb057f..53f6596 100644 --- a/src/blocks/penblocks.h +++ b/src/blocks/penblocks.h @@ -29,6 +29,7 @@ class PenBlocks : public libscratchcpp::IBlockSection void registerBlocks(libscratchcpp::IEngine *engine) override; static void compileClear(libscratchcpp::Compiler *compiler); + static void compileStamp(libscratchcpp::Compiler *compiler); static void compilePenDown(libscratchcpp::Compiler *compiler); static void compilePenUp(libscratchcpp::Compiler *compiler); static void compileSetPenColorToColor(libscratchcpp::Compiler *compiler); @@ -42,6 +43,7 @@ class PenBlocks : public libscratchcpp::IBlockSection static void compileSetPenHueToNumber(libscratchcpp::Compiler *compiler); static unsigned int clear(libscratchcpp::VirtualMachine *vm); + static unsigned int stamp(libscratchcpp::VirtualMachine *vm); static unsigned int penDown(libscratchcpp::VirtualMachine *vm); static unsigned int penUp(libscratchcpp::VirtualMachine *vm); static unsigned int setPenColorToColor(libscratchcpp::VirtualMachine *vm); diff --git a/test/blocks/pen_blocks_test.cpp b/test/blocks/pen_blocks_test.cpp index e6b7ece..df7dfe6 100644 --- a/test/blocks/pen_blocks_test.cpp +++ b/test/blocks/pen_blocks_test.cpp @@ -4,9 +4,11 @@ #include #include #include +#include #include #include #include +#include #include "../common.h" @@ -92,6 +94,7 @@ TEST_F(PenBlocksTest, RegisterBlocks) { // Blocks EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_clear", &PenBlocks::compileClear)); + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_stamp", &PenBlocks::compileStamp)); EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_penDown", &PenBlocks::compilePenDown)); EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_penUp", &PenBlocks::compilePenUp)); EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "pen_setPenColorToColor", &PenBlocks::compileSetPenColorToColor)); @@ -133,6 +136,66 @@ TEST_F(PenBlocksTest, Clear) ASSERT_TRUE(compiler.lists().empty()); } +TEST_F(PenBlocksTest, Stamp) +{ + Compiler compiler(&m_engineMock); + + auto block = std::make_shared("a", "pen_stamp"); + + EXPECT_CALL(m_engineMock, functionIndex(&PenBlocks::stamp)).WillOnce(Return(2)); + compiler.init(); + compiler.setBlock(block); + PenBlocks::compileStamp(&compiler); + compiler.end(); + + ASSERT_EQ(compiler.bytecode(), std::vector({ vm::OP_START, vm::OP_EXEC, 2, vm::OP_HALT })); + ASSERT_TRUE(compiler.constValues().empty()); + ASSERT_TRUE(compiler.variables().empty()); + ASSERT_TRUE(compiler.lists().empty()); +} + +TEST_F(PenBlocksTest, StampImpl) +{ + static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }; + static BlockFunc functions[] = { &PenBlocks::stamp }; + + PenLayerMock penLayer; + PenLayer::addPenLayer(&m_engineMock, &penLayer); + RenderedTargetMock renderedTarget; + + // Test sprite + libscratchcpp::Sprite sprite; + SpriteModel spriteModel; + sprite.setInterface(&spriteModel); + spriteModel.setRenderedTarget(&renderedTarget); + + VirtualMachine vm1(&sprite, &m_engineMock, nullptr); + vm1.setBytecode(bytecode); + vm1.setFunctions(functions); + + EXPECT_CALL(penLayer, stamp(&renderedTarget)); + EXPECT_CALL(m_engineMock, requestRedraw()); + vm1.run(); + + ASSERT_EQ(vm1.registerCount(), 0); + + // Test stage + libscratchcpp::Stage stage; + StageModel stageModel; + stage.setInterface(&stageModel); + stageModel.setRenderedTarget(&renderedTarget); + + VirtualMachine vm2(&stage, &m_engineMock, nullptr); + vm2.setBytecode(bytecode); + vm2.setFunctions(functions); + + EXPECT_CALL(penLayer, stamp(&renderedTarget)); + EXPECT_CALL(m_engineMock, requestRedraw()); + vm2.run(); + + ASSERT_EQ(vm2.registerCount(), 0); +} + TEST_F(PenBlocksTest, ClearImpl) { static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }; From 069b5d5734f531d373ca245dcfe07e25d5ccba5e Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:25:22 +0200 Subject: [PATCH 15/35] Update QNanoPainter 2c2d9d2f08dc0fc04e6781493b6e5f1bd16c4d65 --- thirdparty/libqnanopainter/CMakeLists.txt | 7 ++-- thirdparty/libqnanopainter/include.pri | 5 +++ thirdparty/libqnanopainter/qnanoimage.cpp | 39 ++----------------- thirdparty/libqnanopainter/qnanoimage.h | 5 --- thirdparty/libqnanopainter/qnanopainter.h | 7 ++-- .../libqnanopainter/qnanoquickitempainter.cpp | 10 +++++ 6 files changed, 27 insertions(+), 46 deletions(-) diff --git a/thirdparty/libqnanopainter/CMakeLists.txt b/thirdparty/libqnanopainter/CMakeLists.txt index c92ff7f..0930441 100644 --- a/thirdparty/libqnanopainter/CMakeLists.txt +++ b/thirdparty/libqnanopainter/CMakeLists.txt @@ -1,8 +1,6 @@ cmake_minimum_required(VERSION 3.0.0) project(qnanopainter VERSION 0.1.0) -set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON" FORCE) - option(QNANO_DEBUG_COLLECT "Enable this to get the drawing debug information" OFF) option(QNANO_DEBUG_RENDER "Enable this to render the drawing debug information" OFF) option(QNANO_QT_GL_INCLUDE "Enable this to let Qt include OpenGL headers" ON) @@ -12,6 +10,7 @@ option(QNANO_ENABLE_TOUCH_SIGNALS "This will enable signalling touch events option(QNANO_ENABLE_PAINT_SIGNALS "This will enable signalling paint events Can be useful when using view/widget classes directly" OFF) option(QNANO_USE_RENDERNODE "Enable this to use QRenderNode (available since Qt 5.8.0) instead of QQuickFramebufferObject" OFF) +option(QNANO_ENABLE_PAINTER_SHARING "Enable this to share QNanoPainter instance between QNanoQuickItemPainters" ON) option(QNANO_USE_RHI "Enable this to use QRhi (available since Qt 6.7) instead of QQuickFramebufferObject" OFF) option(QNANO_BUILD_GLES_BACKENDS "When building for embedded devices you can define manually which backends are supported" OFF) @@ -168,7 +167,9 @@ endif() target_link_libraries(qnanopainter ${QNANOPAINTER_QT_LIBS} ) # add to INCLUDE PATH -target_include_directories(qnanopainter PUBLIC .) +target_include_directories(qnanopainter + PUBLIC . + PUBLIC nanovg) # cmake variable ==> c++ #define if(QNANO_QT_GL_INCLUDE) diff --git a/thirdparty/libqnanopainter/include.pri b/thirdparty/libqnanopainter/include.pri index 99bc9ed..c2a49ed 100644 --- a/thirdparty/libqnanopainter/include.pri +++ b/thirdparty/libqnanopainter/include.pri @@ -33,6 +33,11 @@ DEFINES += QNANO_ENABLE_GLES3 # Enable this to use QRenderNode (available since Qt 5.8.0) instead of QQuickFramebufferObject #DEFINES += QNANO_USE_RENDERNODE +# This will enable sharing the QNanoPainter instance between QNanoQuickItemPainters +# Sharing the painter saves memory, but can have issues e.g. when using QNanoPainter +# from multiple windows (see https://github.com/QUItCoding/qnanopainter/issues/80) +DEFINES += QNANO_ENABLE_PAINTER_SHARING + # Suppress fontstash warnings about fopen & strncpy usage DEFINES += _CRT_SECURE_NO_WARNINGS diff --git a/thirdparty/libqnanopainter/qnanoimage.cpp b/thirdparty/libqnanopainter/qnanoimage.cpp index e15ca56..91faf30 100644 --- a/thirdparty/libqnanopainter/qnanoimage.cpp +++ b/thirdparty/libqnanopainter/qnanoimage.cpp @@ -99,15 +99,6 @@ QNanoImage::QNanoImage(const QImage &image, const QString &filename, ImageFlags updateUniqueKey(); } -QNanoImage::QNanoImage(QIODevice *device, const QString &uniqueKey, ImageFlags flags) - : m_device(device) - , m_uniqueKey(uniqueKey) - , m_flags(flags) -{ - Q_ASSERT(device); - updateUniqueKey(); -} - /*! \fn void QNanoImage::setFilename(const QString &filename) @@ -220,21 +211,6 @@ QNanoImage QNanoImage::fromCache(QNanoPainter *painter, const QString &filename, return image; } -QNanoImage QNanoImage::fromCache(QNanoPainter *painter, QIODevice *device, const QString &uniqueKey, ImageFlags flags) -{ - Q_ASSERT(painter); - Q_ASSERT(device); - QNanoImage image; - image.m_imageData.reset(new QNanoDataElement()); - image.m_device = device; - image.m_uniqueKey = uniqueKey; - image.m_flags = flags; - image.updateUniqueKey(); - image.m_parentPainter = painter; - image.getID(painter->nvgCtx()); - return image; -} - // ***** Private ***** /*! @@ -280,17 +256,10 @@ int QNanoImage::getID(NVGcontext* nvg) } } else { // Image is not yet in cache, so load and add it - QIODevice *device; - QFile file; - if (m_device) - device = m_device; - else { - file.setFileName(m_filename); - device = &file; - } - if (device->open(QIODevice::ReadOnly)) { + QFile file(m_filename); + if (file.open(QFile::ReadOnly)) { m_imageData.reset(new QNanoDataElement()); - QByteArray array = device->readAll(); + QByteArray array = file.readAll(); int length = array.size(); unsigned char* data = reinterpret_cast(&array.data()[0]); m_imageData->id = nvgCreateImageMem(nvg, m_flags, data, length); @@ -310,7 +279,7 @@ void QNanoImage::updateUniqueKey() { if (m_textureId > 0) m_uniqueKey = QString("%1_").arg(QString::number(m_textureId)); - else if(!m_device) + else m_uniqueKey = m_filename; m_uniqueKey.append(QString::number(m_flags)); diff --git a/thirdparty/libqnanopainter/qnanoimage.h b/thirdparty/libqnanopainter/qnanoimage.h index a2ad384..850cfd0 100644 --- a/thirdparty/libqnanopainter/qnanoimage.h +++ b/thirdparty/libqnanopainter/qnanoimage.h @@ -55,9 +55,6 @@ class QNanoImage // Constructs an image from QImage with the filename and flags QNanoImage(const QImage &image, const QString &filename, ImageFlags flags = {}); - // Constructs an image from the data in the QIODevice, unique key and flags - QNanoImage(QIODevice *device, const QString &uniqueKey, ImageFlags flags = {}); - // Set the filename of the image void setFilename(const QString &filename); @@ -72,7 +69,6 @@ class QNanoImage static QNanoImage fromFrameBuffer(const QOpenGLFramebufferObject *fbo, ImageFlags flags = QNanoImage::FLIPY); static QNanoImage fromCache(QNanoPainter *painter, const QString &filename, ImageFlags flags = {}); - static QNanoImage fromCache(QNanoPainter *painter, QIODevice *device, const QString &uniqueKey, ImageFlags flags = {}); private: friend class QNanoPainter; @@ -89,7 +85,6 @@ class QNanoImage QNanoPainter *m_parentPainter = nullptr; QSharedPointer m_imageData; std::unique_ptr m_image; - QIODevice *m_device = nullptr; QString m_filename; GLuint m_textureId = 0; QNanoImage::ImageFlags m_flags = {}; diff --git a/thirdparty/libqnanopainter/qnanopainter.h b/thirdparty/libqnanopainter/qnanopainter.h index 8415d13..e4fbd8c 100644 --- a/thirdparty/libqnanopainter/qnanopainter.h +++ b/thirdparty/libqnanopainter/qnanopainter.h @@ -246,6 +246,10 @@ class QNanoPainter int textBreakLines(const char* string, const char* end, float breakRowWidth, NVGtextRow* rows, int maxRows); */ + inline NVGcontext* nvgCtx() const { + return m_nvgContext; + } + private: friend class QNanoDebug; @@ -261,9 +265,6 @@ class QNanoPainter static QNanoPainter *getInstance(); - inline NVGcontext* nvgCtx() const { - return m_nvgContext; - } #ifdef QNANO_USE_RHI inline void setNvgCtx(NVGcontext* ctx) { m_nvgContext = ctx; diff --git a/thirdparty/libqnanopainter/qnanoquickitempainter.cpp b/thirdparty/libqnanopainter/qnanoquickitempainter.cpp index 170e344..8d214a8 100644 --- a/thirdparty/libqnanopainter/qnanoquickitempainter.cpp +++ b/thirdparty/libqnanopainter/qnanoquickitempainter.cpp @@ -46,7 +46,11 @@ */ QNanoQuickItemPainter::QNanoQuickItemPainter() +#ifdef QNANO_ENABLE_PAINTER_SHARING : m_painter(QNanoPainter::getInstance()) +#else + : m_painter(new QNanoPainter()) +#endif { #ifndef QNANO_USE_RHI // Initialize QOpenGLFunctions for the context @@ -60,6 +64,10 @@ QNanoQuickItemPainter::QNanoQuickItemPainter() QNanoQuickItemPainter::~QNanoQuickItemPainter() { +#ifndef QNANO_ENABLE_PAINTER_SHARING + delete m_painter; + m_painter = nullptr; +#endif } /*! @@ -385,7 +393,9 @@ void QNanoQuickItemPainter::render(const RenderState *) void QNanoQuickItemPainter::render() #endif { +#ifdef QNANO_ENABLE_PAINTER_SHARING m_painter->reset(); // reset context data as painter is shared. +#endif m_painter->setPixelAlign(static_cast(m_pixelAlign)); m_painter->setPixelAlignText(static_cast(m_pixelAlignText)); From 95db5003d62f1ef0a5038641d0c96e6f80e21d08 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:17:17 +0200 Subject: [PATCH 16/35] Use install-qt-action v4 --- .github/workflows/build.yml | 2 +- .github/workflows/utests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 067a232..06023de 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: sudo apt-get install -y nlohmann-json3-dev libutfcpp-dev libgd-dev xvfb libxcb-cursor0 shell: bash - name: Install Qt - uses: jurplel/install-qt-action@v3 + uses: jurplel/install-qt-action@v4 with: version: '6.6.*' - name: Configure CMake diff --git a/.github/workflows/utests.yml b/.github/workflows/utests.yml index b4db17f..407e708 100644 --- a/.github/workflows/utests.yml +++ b/.github/workflows/utests.yml @@ -24,7 +24,7 @@ jobs: sudo apt-get install -y nlohmann-json3-dev libutfcpp-dev libgd-dev xvfb libxcb-cursor0 shell: bash - name: Install Qt - uses: jurplel/install-qt-action@v3 + uses: jurplel/install-qt-action@v4 with: version: '6.6.*' - name: Configure CMake From dea97aa16f823f2339c82a2b68e00fc682d0deda Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:18:58 +0200 Subject: [PATCH 17/35] Add Qt 6.7 workflow --- .github/workflows/build.yml | 11 ++++++++++- .github/workflows/utests.yml | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 06023de..c228c0c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,14 @@ env: jobs: build: + strategy: + matrix: + include: + - qt_version: '6.6' + qt_arch: 'gcc_64' + - qt_version: '6.7' + qt_arch: 'linux_gcc_64' + runs-on: ubuntu-latest steps: @@ -26,7 +34,8 @@ jobs: - name: Install Qt uses: jurplel/install-qt-action@v4 with: - version: '6.6.*' + version: '${{ matrix.qt_version }}' + arch: '${{ matrix.qt_arch }}' - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} diff --git a/.github/workflows/utests.yml b/.github/workflows/utests.yml index 407e708..bc84c7b 100644 --- a/.github/workflows/utests.yml +++ b/.github/workflows/utests.yml @@ -11,6 +11,14 @@ env: jobs: build: + strategy: + matrix: + include: + - qt_version: '6.6' + qt_arch: 'gcc_64' + - qt_version: '6.7' + qt_arch: 'linux_gcc_64' + runs-on: ubuntu-latest steps: @@ -26,7 +34,8 @@ jobs: - name: Install Qt uses: jurplel/install-qt-action@v4 with: - version: '6.6.*' + version: '${{ matrix.qt_version }}' + arch: '${{ matrix.qt_arch }}' - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DSCRATCHCPPRENDER_BUILD_UNIT_TESTS=ON From aa732634fe7a5ee4a5ca4cc318b825829bea8b13 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:32:18 +0200 Subject: [PATCH 18/35] README: Mark pen blocks as finished --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7855bf7..670e6b9 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ int main(int argc, char **argv) { - [x] Sprite dragging - [x] Touching sprite block - [ ] Touching color blocks (color is touching color is not implemented yet) -- [ ] Pen blocks (all blocks except the stamp block are implemented) +- [x] Pen blocks - [x] Monitors - [ ] Graphics effects (color, brightness and ghost are implemented) - [x] Speech and thought bubbles From e6012425231a9cde940facd1d0c582cf6e976609 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:23:50 +0200 Subject: [PATCH 19/35] Rewrite skin rendering Fixes rendering in Qt 6.7 --- src/bitmapskin.cpp | 2 +- src/skin.cpp | 99 ++++++++++++-------------------- src/skin.h | 6 +- src/svgskin.cpp | 7 +-- src/svgskin.h | 3 +- test/skins/bitmapskin_test.cpp | 2 + test/skins/svgskin_test.cpp | 7 +-- test/stamp.png | Bin 57816 -> 57950 bytes test/svg_texture_results/10.png | Bin 245 -> 563 bytes test/svg_texture_results/11.png | Bin 454 -> 1089 bytes test/svg_texture_results/12.png | Bin 0 -> 2181 bytes test/svg_texture_results/13.png | Bin 0 -> 4658 bytes test/svg_texture_results/14.png | Bin 5212 -> 10575 bytes test/svg_texture_results/15.png | Bin 0 -> 26349 bytes test/svg_texture_results/5.png | Bin 91 -> 91 bytes test/svg_texture_results/6.png | Bin 108 -> 122 bytes test/svg_texture_results/7.png | Bin 121 -> 160 bytes test/svg_texture_results/8.png | Bin 137 -> 238 bytes test/svg_texture_results/9.png | Bin 167 -> 348 bytes 19 files changed, 50 insertions(+), 76 deletions(-) create mode 100644 test/svg_texture_results/12.png create mode 100644 test/svg_texture_results/13.png create mode 100644 test/svg_texture_results/15.png diff --git a/src/bitmapskin.cpp b/src/bitmapskin.cpp index d8b1c98..e499f8a 100644 --- a/src/bitmapskin.cpp +++ b/src/bitmapskin.cpp @@ -28,7 +28,7 @@ BitmapSkin::BitmapSkin(libscratchcpp::Costume *costume) : m_image.load(&buffer, format); // Paint the image into a texture - m_texture = createAndPaintTexture(m_image.width(), m_image.height(), false); + m_texture = createAndPaintTexture(m_image.width(), m_image.height()); m_textureSize.setWidth(m_image.width()); m_textureSize.setHeight(m_image.height()); diff --git a/src/skin.cpp b/src/skin.cpp index dd6c150..5429b74 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -9,83 +9,56 @@ using namespace scratchcpprender; Skin::Skin() { + QOpenGLContext *context = QOpenGLContext::currentContext(); + Q_ASSERT(context); + + if (context) { + QObject::connect(context, &QOpenGLContext::aboutToBeDestroyed, &m_signalHandler, [this]() { + // Destroy textures + m_textures.clear(); + }); + } } -Texture Skin::createAndPaintTexture(int width, int height, bool multisampled) +Texture Skin::createAndPaintTexture(int width, int height) { QOpenGLContext *context = QOpenGLContext::currentContext(); if (!context || !context->isValid() || (width <= 0 || height <= 0)) return Texture(); - QOpenGLFunctions glF(context); + QOpenGLExtraFunctions glF(context); glF.initializeOpenGLFunctions(); - // Create offscreen surface - QOffscreenSurface surface; - surface.setFormat(context->format()); - surface.create(); - Q_ASSERT(surface.isValid()); - - // Save old surface - QSurface *oldSurface = context->surface(); - - // Make context active on the surface - context->makeCurrent(&surface); - - const QRectF drawRect(0, 0, width, height); - const QSize drawRectSize = drawRect.size().toSize(); - - // Create multisampled FBO (if the multisampled parameter is set) - QOpenGLFramebufferObjectFormat format; - format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); - - if (multisampled) - format.setSamples(16); + // Render to QImage + QImage image(width, height, QImage::Format_RGBA8888); - QOpenGLFramebufferObject fbo(drawRectSize, format); - fbo.bind(); + // Clear the image to be fully transparent + image.fill(Qt::transparent); - // Create paint device - QOpenGLPaintDevice device(drawRectSize); - QPainter painter(&device); - painter.beginNativePainting(); - painter.setRenderHint(QPainter::Antialiasing, false); - glF.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glF.glClear(GL_COLOR_BUFFER_BIT); - - // Call the skin-specific paint method - paint(&painter); - - // Done with the painting - painter.endNativePainting(); + QPainter painter(&image); + paint(&painter); // Custom paint function painter.end(); - fbo.release(); - - GLuint textureHandle; - - if (multisampled) { - // Create non-multisampled FBO (we can't take the texture from the multisampled FBO) - format.setSamples(0); - - QOpenGLFramebufferObject targetFbo(drawRectSize, format); - targetFbo.bind(); - - // Blit the multisampled FBO to target FBO - QOpenGLFramebufferObject::blitFramebuffer(&targetFbo, &fbo); - - // Take the texture (will call targetFbo.release()) - textureHandle = targetFbo.takeTexture(); - } else { - // Take the texture - textureHandle = fbo.takeTexture(); + image.mirror(); + + // Premultiply alpha + for (int y = 0; y < image.height(); ++y) { + QRgb *line = reinterpret_cast(image.scanLine(y)); + for (int x = 0; x < image.width(); ++x) { + QColor color = QColor::fromRgba(line[x]); + color.setRedF(color.redF() * color.alphaF()); + color.setGreenF(color.greenF() * color.alphaF()); + color.setBlueF(color.blueF() * color.alphaF()); + line[x] = color.rgba(); + } } - // Restore old surface - context->doneCurrent(); - - if (oldSurface) - context->makeCurrent(oldSurface); + // Create final texture from the image + auto texture = std::make_shared(image); + m_textures.push_back(texture); + texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); + texture->setMagnificationFilter(QOpenGLTexture::Linear); - return Texture(textureHandle, drawRectSize); + // Texture(texture, width, height).toImage().save("/home/adazem009/test.png"); + return Texture(texture->textureId(), width, height); } diff --git a/src/skin.h b/src/skin.h index 1bfc147..855ef65 100644 --- a/src/skin.h +++ b/src/skin.h @@ -22,8 +22,12 @@ class Skin virtual double getTextureScale(const Texture &texture) const = 0; protected: - Texture createAndPaintTexture(int width, int height, bool multisampled); + Texture createAndPaintTexture(int width, int height); virtual void paint(QPainter *painter) = 0; + + private: + std::vector> m_textures; + QObject m_signalHandler; // for disconnecting signals after destroyed }; } // namespace scratchcpprender diff --git a/src/svgskin.cpp b/src/svgskin.cpp index 1119bf1..d2c35a6 100644 --- a/src/svgskin.cpp +++ b/src/svgskin.cpp @@ -9,9 +9,8 @@ using namespace scratchcpprender; static const int MAX_TEXTURE_DIMENSION = 2048; static const int INDEX_OFFSET = 8; -SVGSkin::SVGSkin(libscratchcpp::Costume *costume, bool antialiasing) : - Skin(), - m_antialiasing(antialiasing) +SVGSkin::SVGSkin(libscratchcpp::Costume *costume) : + Skin() { if (!costume) return; @@ -86,7 +85,7 @@ Texture SVGSkin::createScaledTexture(int index) return Texture(); } - const Texture texture = createAndPaintTexture(viewBox.width() * scale, viewBox.height() * scale, m_antialiasing); + const Texture texture = createAndPaintTexture(viewBox.width() * scale, viewBox.height() * scale); if (texture.isValid()) { m_textures[index] = texture.handle(); diff --git a/src/svgskin.h b/src/svgskin.h index 5352827..f722e63 100644 --- a/src/svgskin.h +++ b/src/svgskin.h @@ -20,7 +20,7 @@ namespace scratchcpprender class SVGSkin : public Skin { public: - SVGSkin(libscratchcpp::Costume *costume, bool antialiasing = true); + SVGSkin(libscratchcpp::Costume *costume); ~SVGSkin(); Texture getTexture(double scale) const override; @@ -37,7 +37,6 @@ class SVGSkin : public Skin std::unordered_map m_textureObjects; QSvgRenderer m_svgRen; int m_maxIndex = 0; - bool m_antialiasing = false; }; } // namespace scratchcpprender diff --git a/test/skins/bitmapskin_test.cpp b/test/skins/bitmapskin_test.cpp index ab6eb17..48c28d1 100644 --- a/test/skins/bitmapskin_test.cpp +++ b/test/skins/bitmapskin_test.cpp @@ -33,6 +33,8 @@ class BitmapSkinTest : public testing::Test void TearDown() override { ASSERT_EQ(m_context.surface(), &m_surface); + m_jpegSkin.reset(); + m_pngSkin.reset(); m_context.doneCurrent(); } diff --git a/test/skins/svgskin_test.cpp b/test/skins/svgskin_test.cpp index d028d38..7d68832 100644 --- a/test/skins/svgskin_test.cpp +++ b/test/skins/svgskin_test.cpp @@ -22,12 +22,13 @@ class SVGSkinTest : public testing::Test Costume costume("", "", ""); std::string costumeData = readFileStr("image.svg"); costume.setData(costumeData.size(), costumeData.data()); - m_skin = std::make_unique(&costume, false); + m_skin = std::make_unique(&costume); } void TearDown() override { ASSERT_EQ(m_context.surface(), &m_surface); + m_skin.reset(); m_context.doneCurrent(); } @@ -59,10 +60,6 @@ TEST_F(SVGSkinTest, Textures) ASSERT_EQ(m_skin->getTextureScale(texture), scale); } - // Skip images 12, 13 and 15 because they're different on xvfb - if (i == 12 || i == 13 || i >= 15) - continue; - QBuffer buffer; texture.toImage().save(&buffer, "png"); QFile ref("svg_texture_results/" + QString::number(std::min(i, 15)) + ".png"); diff --git a/test/stamp.png b/test/stamp.png index fd5e4266867f04908330ed14b8b17af43a69fa19..7206580407fd420e311f87fdb663c5a0963d8b38 100644 GIT binary patch delta 55687 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 delta 55613 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

-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

||GgDDJ5872*9YT;ep$BabGc?;IWT%Hp18{+qu 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 A(f|Me diff --git a/test/svg_texture_results/10.png b/test/svg_texture_results/10.png index 01436ab045928a8fa8ba61cfc70710f3ac20fbcc..209737ca2dbd1aa3fe7e36a83ca3f1a718c55a6b 100644 GIT binary patch delta 517 zcmV+g0{Z>+0kZ^6o#KOvugw^Qv_Y`V-ZA1>OeY+h>b%0 z4_ev8+S=Y$MEnbar4d9^Sy)N1TR#v<5J6;7cEpp`LUd+)M=o-ocFxE9au3`)cLpMn z$ZN3Nk^XlCI{D*EbA5_^>6Fc`$T-JmPbPnZHf1NF?&^sqU4!<=xbo2F8J59K&byo>|;gl`5xii178`itJg}= ztdKKV+6;hE!jrr#H~Iu7PgkJ_Jz%-3r|XQ3KsRbRI|z z*~t9~q6WH=`yE6LRE9FPac)ZIJ2zx(E2L-)HSG>#y?%7Qv95aI(;ZH0tl$(sF*_I3 zSW(H)8S1k(Df2*)FW4PY=IOJxN{03-xM2q*%woJO&}fq|OT!M767+Z54cjGU3fOxl zYLApD8n&x$U+s?+Egz%KIK~hF&IuViH0`L;zL7{I@^1MLwCrliBxFz)00000NkvXX Hu0mjf+A8xJ delta 197 zcmV;$06PD(1oZ)sIDY`ANklmSC63Yt-MvqQQSQFwbQ5~|6cbI!-9Cie1!ZK`IcJ3xb zkag~Ycn?|UE{Km)>(~z!akXRJee|CK0N__PNTMmf&sBJq00000NkvXXu0mjfa4=a# diff --git a/test/svg_texture_results/11.png b/test/svg_texture_results/11.png index 73db02b8e9d4fe177691f3aaa6050e8bbf8ec435..5d1973794d1d82818c28efdd888e2958542c91af 100644 GIT binary patch delta 1048 zcmX@ce2`;;MLqLpPZ!6KiaBrZZp^=uDs%kf_wQAu86DFcgKQo8Tp~@T?pSf~h@MYY z(k_#ONpq}rZQS|bnA44fgN|&678&v#TdL;aSSJYnjVoXlm%N>2fw^| zMHYUqe)sdwq3>VWZO*svss2(G&c~tHBH#ofS|XmR|N7*(p?>12^JkykOU*eye`j94 zn#JeP1e1e1XZGkZ-DEN?ij|S`XAu%_JmRWQDCiMGGE?=((W9-o8y0^`{#^NwFKzD~ zZLsAK;%(^vs5|urXR9ag^||zobvm~9p-+Y%;b4L?mNEhd-xsR`^RGIp8T(8SbIzA zd_jZkxAPO;*Q)Gw514+K$DZ$iMSc0qvjy*!Gg)VSS3CExhubdgUT{s@y=j@ORWr*Q zI(xX)eo3cfur_@!=66VT_Ef*{clplXo#_n0Uj92vnPeY`CRD$ZJn-$G7^hX^yN&kW zTP9r)o9n{ zbklc^_RjPNF$+`8i_b?a7v?zdL+?9FC$Dq{>#I+t?>L2|%`R|V*`_*&`{uiHy$jox z=6ttr2~%hg^sBd>TAuHue}Q`ryI$IkpGp7oG^-lV%xPL|arDBw5-zU3B(={oll*Qk7-+X($5qZj?;U@~}}bcRuzGe7d+ zjNo48Q;iS)t>!+axM1>wFMP)omxlAoxmgQ1oSyd5h&SY?ZBnCN{pBq=I}aI8zQE6N zVOwaPac|+QgZKK%dM@8do3(9in5n+%U3Jdcksq%&DBlqNr_J)*rl2SGoA;#H&MW#C zcJ;kq{J>diPxt12_WwG4g;Sg4Gd_sw?w*zWY{4t(jKzKZjJq>F$S|@rx===_%Z;2r>mdKI;Vst0GDX)NB{r; delta 408 zcmX@eag2F_MLlDMr;B4q#hkad9lL@ZCEPCBuX8S(x$a# zBTuI3`bV3u@GvkiwA|6FKR$i_eZBhgbMxZ&z5nyW-`al8ah5J&4Zj5zjgN?CC@|Cm zjcceprurzhZttHTufIOOecku|lc48pyZAqySa|Rp_m_JH-}$&p!xsGS-7F*Wa*jjz z(MZ0|61N4bAM3EYykf5ko1-eXQuf8o!f6Fd@)q=WZFW)q8SWob>?pr?p6U)I?ylFm z8P}_(-RRQMShsb--Pe&$+M6Jbd_Bi;YW?T*&N5v;av|wf{HrIn zUy%^f{h&)GLqaGxnvN8E9)yWEx^TEfDc0F%gdCKgM+%#|IyO8$zy zUb(Psqu^33w&bMF)TSEYml*iAt$ZOla_gRn(UG}=&+%o~#mDm{-DlFpU-HGjdM~1H zD&`h0DM$=OeL6C*!XfBCM@Ntpn5c}2Hf|9%FhD`lW0_jHY@1L36HUt$MdMPOOlsN( zNbMVB4Y0s|5wp?2$idQeRVx!3WC#z$#*#y!K!u6biSWMv0~0#{S^c6S=GOhoN=ubP z9Xoo}f9d$!8klwcKq4#dbqS$s=*FkF#T#B~Q)32Y>u)7R$D!A9LP-aj#dv;T`&-N4 zbeB}KRKwY5@utE1ZnFlLR^;&LQxk788hZVnu%Kqodx*CVc>C2!PJUW4-iyvE6>((G z?$pd5``8%PUEMlkHNc;ethiEA!$cJw{hWcjTU1v&!Dyql&rNz{AOO{kgwmG0`>etB=vQF$; zMryhsGB)?@a9miI_W+!=Q00x&Uiv07=yGUa+o}$ZU+xxd<+i=#?o@{u*nW)JEzDxw zaA)`Bh{FX-cdGWi46e&(?)_r*;6|(3-EpvA>Q~Bzp8BcU$G1GjKtZ8K@Na;c)lZul z4P|f~5DEI_y0cyl^zO8TKS;x$p<~f3J3M>dXTW#rp@l=1>%1BgN-+Je8b>haD6OFdT-Mm(;lAr6k**VmQS{kQY^KchwOnuYz9z0ixQM6iQ_Q?$UY@dj1sp_`X-*}0P$X8>B1eP*Ct$z0u0j#JaDUN($4a<(Uw?4!INZz4%qclD>K77@cpU5(8z=T&Z27hNpx*Yum z7*84V((LD1(QuMRf~1)RdwkB0#Q&XG<7gyPWoVfue;PYP8Q;=$*t7>wL1#(xVW|7V z-)u-{uMlgN8_AqC?cWm_`^WWf zyz@4VJJe&EY)OJ-efwS#3Kg`KG`axE7>%*gHZZK?oM5+NFT zxmwSq8-#RmPYuQCx_G|7R>awPJI_6g1nR`&uU7qsPR?kf*y6~9| zDLz*COw~=zhJ(A$Keih?tF#7YY4XS?hkqc&f>RQlwPKsOB7i!1RD=@ECOvJ5mxh%d z{z%qb_D0(upY`h!?T~X<0=#yonRvIDy7?UWb2p@sTMQ%GK6``f=2xx9Pj-!B5EByS z@;EFSlV+N`#QVakblz>3;3l~~)Jdp|Or>>B4bZafIt6Jikq`j8?$it>O@Ay6w~Rar z|EEu$(3QXs<&12Zs8?ERs&wnl56(_sv^t28nXbnin++Lzs&v}(dD(g0S*lGXfgkNv z+v_{AHI(vhn2>3neZ_HssK1q5`OzDA?M>pWv0|lDNOX&Eh#P!UP{yuEE^M()w8j7 XN9?^V&%yQo3P=!TtN%sc*y4W!xZm^- literal 0 HcmV?d00001 diff --git a/test/svg_texture_results/13.png b/test/svg_texture_results/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a947a3d021c72978056636f2bc1ff2956819534 GIT binary patch literal 4658 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 DJ>L>X literal 5212 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 literal 0 HcmV?d00001 diff --git a/test/svg_texture_results/5.png b/test/svg_texture_results/5.png index b0c553b2c7d03f7d31780bfdb84b0455fb41ac8c..26536bedc5fd086b0c1cf7b868710a0df4fdeabc 100644 GIT binary patch delta 29 jcma!!p5QF;-H(rf8=L?UnFaUw4tDnm{r-UW|pPveO delta 29 jcma!!p5QF;>AxZa>jb8wUZKjR3_#%N>gTe~DWM4flKTlc diff --git a/test/svg_texture_results/6.png b/test/svg_texture_results/6.png index dddac550d7a329bb1db350268c49823e452480ac..c5856f62726c3c06dba42b4cdf2688e45932f358 100644 GIT binary patch delta 70 zcmd0)nqcXu5JcewK&l|9@j6n}72UfB0{&EX>UECnX^v afq_Amokwf0-^N-7Anh-!X@gZ{DB!69<6cNCOK)Lj|kC{awkq3_#%N>gTe~ HDWM4fqiYue diff --git a/test/svg_texture_results/7.png b/test/svg_texture_results/7.png index 5c80b87c7dd090b4186c57c9c4af8de064b651b1..164330aefd4028badbfa3520cc2f857a863ff6d5 100644 GIT binary patch delta 109 zcmV-z0FwWCpaGCMXHrQ-K~xBtZHplefG`xr`r!-Yf&#%6Fq|7MgJ&chVnIE`&!(tq zMGXKwD=-k8*it-P8!(2K3n(;h&16kAyBK8j>^KLK0eCx%mtV3HS*hj+)_N8|#ziyP P00000NkvXXu0mjfw81E5 delta 70 zcmZ3$SUJJcLEF>CF@$4ga>4;d2}ubc_-C)@-f^PrQBV)tyg&6PK0NvFEHS;)BbS4L YVbgYwo)k9wdDbcS#QO5lXDWg%@?iFYd4c{Tx{^!!nYv--jb=|MBd rNvUTKbe=lT8F6Z9bc0iyCuHOam%An=Uje_o00000NkvXXu0mjfW)4)E delta 87 zcmaFI*vUA-GQir?#W6%s%FjE$p8eNu6{1-oD!MFOIe2ol<HJ5?WuD-v;$aRh~&0%1iWDl(2B zII$*_V|S3yw`M$h#t!=9y~Z%sj2-0h0vI1OU`@`eJ1CG0B{BL+LLiwt2q5DQn3p(n zGNyGZ>i-#1^(Kk9LKzn~7rb%LL^icMIS~LnM z2iQvnT;R$7hbVj*MtSO6gl-9mmJw$WE=x$TZ20A)QH#h1bW7fYxKMra{~^JAH43N+ Y01e0#rmwVo>i_@%07*qoM6N<$g0d?y>Hq)$ From c02bb5938d2d1166e6156b451e7c927ed8bf4f73 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Fri, 23 Aug 2024 20:08:31 +0200 Subject: [PATCH 20/35] Update libscratchcpp to latest master --- libscratchcpp | 2 +- test/mocks/enginemock.h | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libscratchcpp b/libscratchcpp index 3a013e1..edb788e 160000 --- a/libscratchcpp +++ b/libscratchcpp @@ -1 +1 @@ -Subproject commit 3a013e1d18abb5b91b954af2874e8e012f2991b8 +Subproject commit edb788ee2ba92328c68973312c468fc003ea2dcb diff --git a/test/mocks/enginemock.h b/test/mocks/enginemock.h index 7054e03..2d9aaa7 100644 --- a/test/mocks/enginemock.h +++ b/test/mocks/enginemock.h @@ -19,7 +19,7 @@ class EngineMock : public IEngine MOCK_METHOD(void, start, (), (override)); MOCK_METHOD(void, stop, (), (override)); MOCK_METHOD(VirtualMachine *, startScript, (std::shared_ptr, Target *), (override)); - MOCK_METHOD(void, broadcast, (unsigned int), (override)); + MOCK_METHOD(void, broadcast, (int), (override)); MOCK_METHOD(void, broadcastByPtr, (Broadcast *), (override)); MOCK_METHOD(void, startBackdropScripts, (Broadcast *), (override)); MOCK_METHOD(void, stopScript, (VirtualMachine *), (override)); @@ -105,7 +105,7 @@ class EngineMock : public IEngine MOCK_METHOD(const std::vector> &, broadcasts, (), (const, override)); MOCK_METHOD(void, setBroadcasts, (const std::vector> &), (override)); MOCK_METHOD(std::shared_ptr, broadcastAt, (int), (const, override)); - MOCK_METHOD(int, findBroadcast, (const std::string &), (const, override)); + MOCK_METHOD(std::vector, findBroadcasts, (const std::string &), (const, override)); MOCK_METHOD(int, findBroadcastById, (const std::string &), (const, override)); MOCK_METHOD(void, addWhenTouchingObjectScript, (std::shared_ptr), (override)); @@ -146,6 +146,8 @@ class EngineMock : public IEngine MOCK_METHOD(const std::string &, userAgent, (), (const, override)); MOCK_METHOD(void, setUserAgent, (const std::string &), (override)); + + MOCK_METHOD(const std::unordered_set &, unsupportedBlocks, (), (const, override)); }; } // namespace scratchcpprender From 2188a1eff58d51a3e6b98a5c34a41e95c6f11686 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Fri, 23 Aug 2024 20:08:41 +0200 Subject: [PATCH 21/35] Do not set Scratch version when loading projects --- src/projectloader.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/projectloader.cpp b/src/projectloader.cpp index 4960809..523abac 100644 --- a/src/projectloader.cpp +++ b/src/projectloader.cpp @@ -104,7 +104,6 @@ void ProjectLoader::setFileName(const QString &newFileName) m_engine = nullptr; emit engineChanged(); - m_project.setScratchVersion(ScratchVersion::Scratch3); m_project.setFileName(m_fileName.toStdString()); m_loadStatus = false; From c9d7d1c8153956463340f298295d39d65e95294d Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Fri, 23 Aug 2024 20:15:33 +0200 Subject: [PATCH 22/35] Fix dropdown menus in pen blocks https://github.com/scratchcpp/libscratchcpp/pull/558 --- src/blocks/penblocks.cpp | 6 ++---- test/blocks/pen_blocks_test.cpp | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/blocks/penblocks.cpp b/src/blocks/penblocks.cpp index 6e4586f..5c3e1cd 100644 --- a/src/blocks/penblocks.cpp +++ b/src/blocks/penblocks.cpp @@ -85,8 +85,7 @@ void PenBlocks::compileChangePenColorParamBy(libscratchcpp::Compiler *compiler) { Input *input = compiler->input(COLOR_PARAM); - if (input->type() != Input::Type::ObscuredShadow) { - assert(input->pointsToDropdownMenu()); + if (input->pointsToDropdownMenu()) { std::string value = input->selectedMenuItem(); BlockFunc f = nullptr; @@ -114,8 +113,7 @@ void PenBlocks::compileSetPenColorParamTo(Compiler *compiler) { Input *input = compiler->input(COLOR_PARAM); - if (input->type() != Input::Type::ObscuredShadow) { - assert(input->pointsToDropdownMenu()); + if (input->pointsToDropdownMenu()) { std::string value = input->selectedMenuItem(); BlockFunc f = nullptr; diff --git a/test/blocks/pen_blocks_test.cpp b/test/blocks/pen_blocks_test.cpp index df7dfe6..52d9712 100644 --- a/test/blocks/pen_blocks_test.cpp +++ b/test/blocks/pen_blocks_test.cpp @@ -54,6 +54,7 @@ class PenBlocksTest : public testing::Test else { auto input = addNullInput(block, name, id); auto menu = std::make_shared(block->id() + "_menu", block->opcode() + "_menu"); + menu->setShadow(true); input->setValueBlock(menu); addDropdownField(menu, name, -1, selectedValue, -1); } From dcaed2bc4f237b8c2864ba275db46b42701ee32f Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 24 Aug 2024 19:28:06 +0200 Subject: [PATCH 23/35] Add mute property to ProjectLoader --- src/projectloader.cpp | 21 +++++++++++++++++++++ src/projectloader.h | 6 ++++++ test/projectloader/projectloader_test.cpp | 20 ++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/projectloader.cpp b/src/projectloader.cpp index 523abac..3090487 100644 --- a/src/projectloader.cpp +++ b/src/projectloader.cpp @@ -249,6 +249,7 @@ void ProjectLoader::load() m_engine->setStageHeight(m_stageHeight); m_engine->setCloneLimit(m_cloneLimit); m_engine->setSpriteFencingEnabled(m_spriteFencing); + m_engine->setGlobalVolume(m_mute ? 0 : 100); m_engine->aboutToRender().connect(&ProjectLoader::redraw, this); m_engine->monitorAdded().connect(&ProjectLoader::addMonitor, this); @@ -522,6 +523,26 @@ void ProjectLoader::setSpriteFencing(bool newSpriteFencing) emit spriteFencingChanged(); } +bool ProjectLoader::mute() const +{ + return m_mute; +} + +void ProjectLoader::setMute(bool newMute) +{ + if (m_mute == newMute) + return; + + m_mute = newMute; + m_engineMutex.lock(); + + if (m_engine) + m_engine->setGlobalVolume(newMute ? 0 : 100); + + m_engineMutex.unlock(); + emit muteChanged(); +} + unsigned int ProjectLoader::downloadedAssets() const { return m_downloadedAssets; diff --git a/src/projectloader.h b/src/projectloader.h index 0304994..8c949c9 100644 --- a/src/projectloader.h +++ b/src/projectloader.h @@ -35,6 +35,7 @@ class ProjectLoader : public QObject Q_PROPERTY(unsigned int stageHeight READ stageHeight WRITE setStageHeight NOTIFY stageHeightChanged) Q_PROPERTY(int cloneLimit READ cloneLimit WRITE setCloneLimit NOTIFY cloneLimitChanged) Q_PROPERTY(bool spriteFencing READ spriteFencing WRITE setSpriteFencing NOTIFY spriteFencingChanged) + Q_PROPERTY(bool mute READ mute WRITE setMute NOTIFY muteChanged) Q_PROPERTY(unsigned int downloadedAssets READ downloadedAssets NOTIFY downloadedAssetsChanged) Q_PROPERTY(unsigned int assetCount READ assetCount NOTIFY assetCountChanged) @@ -84,6 +85,9 @@ class ProjectLoader : public QObject bool spriteFencing() const; void setSpriteFencing(bool newSpriteFencing); + bool mute() const; + void setMute(bool newMute); + unsigned int downloadedAssets() const; unsigned int assetCount() const; @@ -103,6 +107,7 @@ class ProjectLoader : public QObject void stageHeightChanged(); void cloneLimitChanged(); void spriteFencingChanged(); + void muteChanged(); void downloadedAssetsChanged(); void assetCountChanged(); void cloneCreated(SpriteModel *model); @@ -143,6 +148,7 @@ class ProjectLoader : public QObject unsigned int m_stageHeight = 360; int m_cloneLimit = 300; bool m_spriteFencing = true; + bool m_mute = false; std::atomic m_downloadedAssets = 0; std::atomic m_assetCount = 0; std::atomic m_stopLoading = false; diff --git a/test/projectloader/projectloader_test.cpp b/test/projectloader/projectloader_test.cpp index fcbf0cb..ea0350e 100644 --- a/test/projectloader/projectloader_test.cpp +++ b/test/projectloader/projectloader_test.cpp @@ -324,3 +324,23 @@ TEST_F(ProjectLoaderTest, SpriteFencing) ASSERT_EQ(spy.count(), 1); ASSERT_TRUE(loader.spriteFencing()); } + +TEST_F(ProjectLoaderTest, Mute) +{ + ProjectLoader loader; + EngineMock engine; + loader.setEngine(&engine); + ASSERT_FALSE(loader.mute()); + + EXPECT_CALL(engine, setGlobalVolume(0)); + QSignalSpy spy(&loader, SIGNAL(muteChanged())); + loader.setMute(true); + ASSERT_EQ(spy.count(), 1); + ASSERT_TRUE(loader.mute()); + + EXPECT_CALL(engine, setGlobalVolume(100)); + spy.clear(); + loader.setMute(false); + ASSERT_EQ(spy.count(), 1); + ASSERT_FALSE(loader.mute()); +} From c094926802d3ca39ba3c9822dc8f9a18bcc057c4 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 24 Aug 2024 19:28:53 +0200 Subject: [PATCH 24/35] Add mute property to ProjectPlayer --- src/ProjectPlayer.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 88762db..766cefa 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -14,7 +14,8 @@ ProjectScene { property alias fps: loader.fps property alias turboMode: loader.turboMode property alias cloneLimit: loader.cloneLimit - property alias spriteFencing: loader.spriteFencing + property alias spriteFencing: loader.spriteFencing + property alias mute: loader.mute property bool showLoadingProgress: true readonly property bool loading: priv.loading readonly property int downloadedAssets: loader.downloadedAssets From c32b09efb4585be6d307bd1d76c02aa1fbf60b30 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 24 Aug 2024 23:59:39 +0200 Subject: [PATCH 25/35] Add textureContainsPoint() method to CpuTextureManager --- src/cputexturemanager.cpp | 15 +++++++++ src/cputexturemanager.h | 3 ++ test/texture/cputexturemanager_test.cpp | 41 +++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/src/cputexturemanager.cpp b/src/cputexturemanager.cpp index 00b2671..c97b37d 100644 --- a/src/cputexturemanager.cpp +++ b/src/cputexturemanager.cpp @@ -51,6 +51,12 @@ const std::vector &CpuTextureManager::getTextureConvexHullPoints(const T return it->second; } +bool CpuTextureManager::textureContainsPoint(const Texture &texture, const QPointF &localPoint) +{ + // https://github.com/scratchfoundation/scratch-render/blob/7b823985bc6fe92f572cc3276a8915e550f7c5e6/src/Silhouette.js#L219-L226 + return getPointAlpha(texture, localPoint.x(), localPoint.y()) > 0; +} + void CpuTextureManager::removeTexture(const Texture &texture) { if (!texture.isValid()) @@ -131,3 +137,12 @@ bool CpuTextureManager::addTexture(const Texture &texture) return true; } + +int CpuTextureManager::getPointAlpha(const Texture &texture, int x, int y) +{ + if ((x < 0 || x >= texture.width()) || (y < 0 || y >= texture.height())) + return 0; + + GLubyte *pixels = getTextureData(texture); + return pixels[(y * texture.width() + x) * 4 + 3]; +} diff --git a/src/cputexturemanager.h b/src/cputexturemanager.h index 561e9d5..df19588 100644 --- a/src/cputexturemanager.h +++ b/src/cputexturemanager.h @@ -20,10 +20,13 @@ class CpuTextureManager GLubyte *getTextureData(const Texture &texture); const std::vector &getTextureConvexHullPoints(const Texture &texture); + bool textureContainsPoint(const Texture &texture, const QPointF &localPoint); + void removeTexture(const Texture &texture); private: bool addTexture(const Texture &texture); + int getPointAlpha(const Texture &texture, int x, int y); std::unordered_map m_textureData; std::unordered_map> m_convexHullPoints; diff --git a/test/texture/cputexturemanager_test.cpp b/test/texture/cputexturemanager_test.cpp index ca6ca7b..89ae51d 100644 --- a/test/texture/cputexturemanager_test.cpp +++ b/test/texture/cputexturemanager_test.cpp @@ -129,3 +129,44 @@ TEST_F(CpuTextureManagerTest, TextureDataAndHullPoints) // Cleanup context.doneCurrent(); } + +TEST_F(CpuTextureManagerTest, TextureContainsPoint) +{ + // Create OpenGL context + QOpenGLContext context; + QOffscreenSurface surface; + createContextAndSurface(&context, &surface); + + // Paint + QNanoPainter painter; + ImagePainter imgPainter(&painter, "image.png"); + + // Read texture data + Texture texture(imgPainter.fbo()->texture(), imgPainter.fbo()->size()); + + // Test + CpuTextureManager manager; + ASSERT_FALSE(manager.textureContainsPoint(texture, { 0, 0 })); + ASSERT_FALSE(manager.textureContainsPoint(texture, { 1, 0 })); + ASSERT_FALSE(manager.textureContainsPoint(texture, { 2, 0 })); + ASSERT_FALSE(manager.textureContainsPoint(texture, { 3, 0 })); + + ASSERT_FALSE(manager.textureContainsPoint(texture, { 0, 1 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 1, 1 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 1.4, 1.25 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 2, 1 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 3, 1 })); + + ASSERT_TRUE(manager.textureContainsPoint(texture, { 1, 2 })); + ASSERT_FALSE(manager.textureContainsPoint(texture, { 2, 2 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 3, 2 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 3.5, 2.1 })); + + ASSERT_TRUE(manager.textureContainsPoint(texture, { 1, 3 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 2, 3 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 3, 3 })); + ASSERT_TRUE(manager.textureContainsPoint(texture, { 3.3, 3.5 })); + + // Cleanup + context.doneCurrent(); +} From 934d23a8f97a0b5d26f48c86467f8868cf85920d Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 24 Aug 2024 23:59:55 +0200 Subject: [PATCH 26/35] Use CPU texture in contains methods --- src/renderedtarget.cpp | 15 +------------ test/renderedtarget/renderedtarget_test.cpp | 24 ++++++++++----------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/renderedtarget.cpp b/src/renderedtarget.cpp index f9454fd..1f20b54 100644 --- a/src/renderedtarget.cpp +++ b/src/renderedtarget.cpp @@ -814,20 +814,7 @@ void RenderedTarget::updateHullPoints() bool RenderedTarget::containsLocalPoint(const QPointF &point) const { - if (!boundingRect().contains(point)) - return false; - - const std::vector &points = hullPoints(); - QPoint intPoint = point.toPoint(); - auto it = std::lower_bound(points.begin(), points.end(), intPoint, [](const QPointF &lhs, const QPointF &rhs) { return (lhs.y() < rhs.y()) || (lhs.y() == rhs.y() && lhs.x() < rhs.x()); }); - - if (it == points.end()) { - // The point is beyond the last point in the convex hull - return false; - } - - // Check if the point is equal to the one found - return *it == intPoint; + return textureManager()->textureContainsPoint(m_cpuTexture, point); } QPointF RenderedTarget::transformPoint(double scratchX, double scratchY, double originX, double originY, double rot) const diff --git a/test/renderedtarget/renderedtarget_test.cpp b/test/renderedtarget/renderedtarget_test.cpp index 044a81d..4e3c2e6 100644 --- a/test/renderedtarget/renderedtarget_test.cpp +++ b/test/renderedtarget/renderedtarget_test.cpp @@ -394,12 +394,12 @@ TEST_F(RenderedTargetTest, CpuRendering) ASSERT_TRUE(target.contains({ 1, 2 })); ASSERT_FALSE(target.contains({ 2, 2 })); ASSERT_TRUE(target.contains({ 3, 2 })); - ASSERT_FALSE(target.contains({ 3.5, 2.1 })); + ASSERT_TRUE(target.contains({ 3.5, 2.1 })); ASSERT_TRUE(target.contains({ 1, 3 })); ASSERT_TRUE(target.contains({ 2, 3 })); ASSERT_TRUE(target.contains({ 3, 3 })); - ASSERT_FALSE(target.contains({ 3.3, 3.5 })); + ASSERT_TRUE(target.contains({ 3.3, 3.5 })); // Test contains() with horizontal mirroring target.updateRotationStyle(Sprite::RotationStyle::LeftRight); @@ -408,9 +408,9 @@ TEST_F(RenderedTargetTest, CpuRendering) ASSERT_TRUE(target.contains({ -1, 1 })); ASSERT_FALSE(target.contains({ -2, 2 })); ASSERT_TRUE(target.contains({ -3, 2 })); - ASSERT_FALSE(target.contains({ -3.5, 2.1 })); + ASSERT_TRUE(target.contains({ -3.5, 2.1 })); ASSERT_TRUE(target.contains({ -2, 3 })); - ASSERT_FALSE(target.contains({ -3.3, 3.5 })); + ASSERT_TRUE(target.contains({ -3.3, 3.5 })); // Test containsScratchPoint() target.updateDirection(0); @@ -425,15 +425,15 @@ TEST_F(RenderedTargetTest, CpuRendering) ASSERT_TRUE(target.containsScratchPoint(-226, 164)); // [2, 1] ASSERT_TRUE(target.containsScratchPoint(-225, 164)); // [3, 1] - ASSERT_TRUE(target.containsScratchPoint(-227, 163)); // [1, 2] - ASSERT_FALSE(target.containsScratchPoint(-226, 163)); // [2, 2] - ASSERT_TRUE(target.containsScratchPoint(-225, 163)); // [3, 2] - ASSERT_FALSE(target.containsScratchPoint(-224.5, 162.9)); // [3.5, 2.1] + ASSERT_TRUE(target.containsScratchPoint(-227, 163)); // [1, 2] + ASSERT_FALSE(target.containsScratchPoint(-226, 163)); // [2, 2] + ASSERT_TRUE(target.containsScratchPoint(-225, 163)); // [3, 2] + ASSERT_TRUE(target.containsScratchPoint(-224.5, 162.9)); // [3.5, 2.1] - ASSERT_TRUE(target.containsScratchPoint(-227, 162)); // [1, 3] - ASSERT_TRUE(target.containsScratchPoint(-226, 162)); // [2, 3] - ASSERT_TRUE(target.containsScratchPoint(-225, 162)); // [3, 3] - ASSERT_FALSE(target.containsScratchPoint(-224.7, 161.5)); // [3.3, 3.5] + ASSERT_TRUE(target.containsScratchPoint(-227, 162)); // [1, 3] + ASSERT_TRUE(target.containsScratchPoint(-226, 162)); // [2, 3] + ASSERT_TRUE(target.containsScratchPoint(-225, 162)); // [3, 3] + ASSERT_TRUE(target.containsScratchPoint(-224.7, 161.5)); // [3.3, 3.5] // Test colorAtScratchPoint() ASSERT_EQ(target.colorAtScratchPoint(-228, 165), 0); // [0, 0] From 5707137130c9b6537f14083571a2b4bd815755c9 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sun, 25 Aug 2024 11:21:28 +0200 Subject: [PATCH 27/35] Remove debug image saving --- src/skin.cpp | 1 - test/texture/cputexturemanager_test.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/src/skin.cpp b/src/skin.cpp index 5429b74..5d25b48 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -59,6 +59,5 @@ Texture Skin::createAndPaintTexture(int width, int height) texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); texture->setMagnificationFilter(QOpenGLTexture::Linear); - // Texture(texture, width, height).toImage().save("/home/adazem009/test.png"); return Texture(texture->textureId(), width, height); } diff --git a/test/texture/cputexturemanager_test.cpp b/test/texture/cputexturemanager_test.cpp index 89ae51d..2d0ec05 100644 --- a/test/texture/cputexturemanager_test.cpp +++ b/test/texture/cputexturemanager_test.cpp @@ -119,7 +119,6 @@ TEST_F(CpuTextureManagerTest, TextureDataAndHullPoints) const auto &hullPoints1 = manager.getTextureConvexHullPoints(texture); ASSERT_EQ(hullPoints1, refHullPoints1); - imgPainter1.fbo()->toImage().save("/home/adazem009/test.png"); manager.removeTexture(texture); data = manager.getTextureData(texture); ASSERT_EQ(memcmp(data, refData2, 96), 0); From 25c25331141e2147e496b218aff00ae4725a90c4 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sun, 25 Aug 2024 11:26:00 +0200 Subject: [PATCH 28/35] Update libscratchcpp to latest master --- libscratchcpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libscratchcpp b/libscratchcpp index edb788e..23044db 160000 --- a/libscratchcpp +++ b/libscratchcpp @@ -1 +1 @@ -Subproject commit edb788ee2ba92328c68973312c468fc003ea2dcb +Subproject commit 23044db243547628fe4c7bca69663680c104e439 From 1d938d447f228d175e2c5ae0787b2c43a103b43a Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:41:14 +0200 Subject: [PATCH 29/35] Implement HQ pen --- src/penlayer.cpp | 87 +++++++-- src/penlayer.h | 9 + test/lines_hq.png | Bin 0 -> 7403 bytes test/penlayer/penlayer_test.cpp | 320 ++++++++++++++++++++++++-------- test/points_hq.png | Bin 0 -> 2584 bytes test/points_resized.png | Bin 0 -> 2424 bytes test/stamp_hq.png | Bin 0 -> 203265 bytes 7 files changed, 323 insertions(+), 93 deletions(-) create mode 100644 test/lines_hq.png create mode 100644 test/points_hq.png create mode 100644 test/points_resized.png create mode 100644 test/stamp_hq.png diff --git a/src/penlayer.cpp b/src/penlayer.cpp index 628bec1..031d504 100644 --- a/src/penlayer.cpp +++ b/src/penlayer.cpp @@ -58,11 +58,7 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine) if (m_engine && QOpenGLContext::currentContext()) { m_projectPenLayers[m_engine] = this; - QOpenGLFramebufferObjectFormat fboFormat; - fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); - m_fbo = std::make_unique(m_engine->stageWidth(), m_engine->stageHeight(), fboFormat); - Q_ASSERT(m_fbo->isValid()); - m_texture = Texture(m_fbo->texture(), m_fbo->size()); + createFbo(); if (!m_painter) m_painter = std::make_unique(); @@ -106,6 +102,21 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine) emit engineChanged(); } +bool PenLayer::hqPen() const +{ + return m_hqPen; +} + +void PenLayer::setHqPen(bool newHqPen) +{ + if (m_hqPen == newHqPen) + return; + + m_hqPen = newHqPen; + createFbo(); + emit hqPenChanged(); +} + void scratchcpprender::PenLayer::clear() { if (!m_fbo) @@ -138,16 +149,23 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do m_painter->beginFrame(m_fbo->width(), m_fbo->height()); + // Apply scale (HQ pen) + x0 *= m_scale; + y0 *= m_scale; + x1 *= m_scale; + y1 *= m_scale; + // Translate to Scratch coordinate system - double stageWidthHalf = m_engine->stageWidth() / 2; - double stageHeightHalf = m_engine->stageHeight() / 2; + double stageWidthHalf = width() / 2; + double stageHeightHalf = height() / 2; x0 += stageWidthHalf; y0 = stageHeightHalf - y0; x1 += stageWidthHalf; y1 = stageHeightHalf - y1; // Set pen attributes - m_painter->setLineWidth(penAttributes.diameter); + const double diameter = penAttributes.diameter * m_scale; + m_painter->setLineWidth(diameter); m_painter->setStrokeStyle(penAttributes.color); m_painter->setFillStyle(penAttributes.color); m_painter->setLineJoin(QNanoPainter::JOIN_ROUND); @@ -156,11 +174,11 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do m_painter->beginPath(); // Width 1 and 3 lines need to be offset by 0.5 - const double offset = (std::fmod(std::max(4 - penAttributes.diameter, 0.0), 2)) / 2; + const double offset = (std::fmod(std::max(4 - diameter, 0.0), 2)) / 2; // If the start and end coordinates are the same, draw a point, otherwise draw a line if (x0 == x1 && y0 == y1) { - m_painter->circle(x0 + offset, y0 + offset, penAttributes.diameter / 2); + m_painter->circle(x0 + offset, y0 + offset, diameter / 2); m_painter->fill(); } else { m_painter->moveTo(x0 + offset, y0 + offset); @@ -223,6 +241,9 @@ void PenLayer::stamp(IRenderedTarget *target) } else costume = target->stageModel()->stage()->currentCostume(); + // Apply scale (HQ pen) + scale *= m_scale; + const double bitmapRes = costume->bitmapResolution(); const double centerX = costume->rotationCenterX() / bitmapRes; const double centerY = costume->rotationCenterY() / bitmapRes; @@ -234,8 +255,11 @@ void PenLayer::stamp(IRenderedTarget *target) const double textureScale = texture.width() / static_cast(target->costumeWidth()); + // Apply scale (HQ pen) + x *= m_scale; + y *= m_scale; + // Translate the coordinates - // TODO: Apply scale (HQ pen) x = std::floor(x + m_texture.width() / 2.0); y = std::floor(-y + m_texture.height() / 2.0); @@ -352,8 +376,11 @@ QRgb PenLayer::colorAtScratchPoint(double x, double y) const const double width = m_texture.width(); const double height = m_texture.height(); + // Apply scale (HQ pen) + x *= m_scale; + y *= m_scale; + // Translate the coordinates - // TODO: Apply scale x = std::floor(x + width / 2.0); y = std::floor(-y + height / 2.0); @@ -393,7 +420,6 @@ const libscratchcpp::Rect &PenLayer::getBounds() const } for (const QPointF &point : points) { - // TODO: Apply scale double x = point.x() - width / 2; double y = -point.y() + height / 2; @@ -410,10 +436,10 @@ const libscratchcpp::Rect &PenLayer::getBounds() const bottom = y; } - m_bounds.setLeft(left); - m_bounds.setTop(top); - m_bounds.setRight(right + 1); - m_bounds.setBottom(bottom - 1); + m_bounds.setLeft(left / m_scale); + m_bounds.setTop(top / m_scale); + m_bounds.setRight(right / m_scale + 1); + m_bounds.setBottom(bottom / m_scale - 1); } return m_bounds; @@ -439,6 +465,33 @@ QNanoQuickItemPainter *PenLayer::createItemPainter() const return new PenLayerPainter; } +void PenLayer::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + if (m_hqPen && newGeometry != oldGeometry) + createFbo(); + + QNanoQuickItem::geometryChange(newGeometry, oldGeometry); +} + +void PenLayer::createFbo() +{ + if (!QOpenGLContext::currentContext() || !m_engine) + return; + + QOpenGLFramebufferObjectFormat fboFormat; + fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); + + QOpenGLFramebufferObject *newFbo = new QOpenGLFramebufferObject(width(), height(), fboFormat); + Q_ASSERT(newFbo->isValid()); + + if (m_fbo) + QOpenGLFramebufferObject::blitFramebuffer(newFbo, m_fbo.get()); + + m_fbo.reset(newFbo); + m_texture = Texture(m_fbo->texture(), m_fbo->size()); + m_scale = width() / m_engine->stageWidth(); +} + void PenLayer::updateTexture() { if (!m_fbo) diff --git a/src/penlayer.h b/src/penlayer.h index a7d2969..2f93a9c 100644 --- a/src/penlayer.h +++ b/src/penlayer.h @@ -19,6 +19,7 @@ class PenLayer : public IPenLayer Q_OBJECT QML_ELEMENT Q_PROPERTY(libscratchcpp::IEngine *engine READ engine WRITE setEngine NOTIFY engineChanged) + Q_PROPERTY(bool hqPen READ hqPen WRITE setHqPen NOTIFY hqPenChanged) public: PenLayer(QNanoQuickItem *parent = nullptr); @@ -30,6 +31,9 @@ class PenLayer : public IPenLayer libscratchcpp::IEngine *engine() const override; void setEngine(libscratchcpp::IEngine *newEngine) override; + bool hqPen() const; + void setHqPen(bool newHqPen); + void clear() override; void drawPoint(const PenAttributes &penAttributes, double x, double y) override; void drawLine(const PenAttributes &penAttributes, double x0, double y0, double x1, double y1) override; @@ -45,17 +49,22 @@ class PenLayer : public IPenLayer signals: void engineChanged(); + void hqPenChanged(); protected: QNanoQuickItemPainter *createItemPainter() const override; + void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; private: + void createFbo(); void updateTexture(); static std::unordered_map m_projectPenLayers; bool m_antialiasingEnabled = true; libscratchcpp::IEngine *m_engine = nullptr; + bool m_hqPen = false; std::unique_ptr m_fbo; + double m_scale = 1; std::unique_ptr m_painter; std::unique_ptr m_glF; Texture m_texture; diff --git a/test/lines_hq.png b/test/lines_hq.png new file mode 100644 index 0000000000000000000000000000000000000000..c78d1d30602cc84f961223ddc15a34e1a2c9a953 GIT binary patch literal 7403 zcmb_hi96J5^#9J%SZZVpVnPh2D?8uHZsJR1q|&CyD9dQMh`K^GQ##U{NFM8kSdU{tt zu6Ss>^X-$%=j-EjtnO;nRGNj)*BTGWlWg)~FVy;H>&Z>=nK*`>J8=(p-fOMgKQ=5o z_axD8y32n0NHC@lms5N}c&Vavt=?$8DUviX_4wnzRx>MJe*R$TI{Q(23&-8ipV@#z z)?-;CR0`Rue`R?Tm=#JF;z|lX;A>L2Brl_8fs%Nfh$6_iz7TiXI)$X=!z2`4Q6P(* z@ict{e-1b1|EM-Vb!QR+Yk<0aZuZl!Q)Gm{tUV(+-JTiDfF-Cou7rvgv&wL{L-Aw; zaV%gGUWO=>#r9MVf;?NrB(Ui16*~HkIC6Aak0R2kB%i)}RuQ-2;Z=Ib&Lc1VP5jQ! z{@WRA6x}@SIe;Kq@12TpA120VYz2SWUv(Ot42jtMpb)q9^ab1KGh3b_j)iU`H;s#Y zOL@1R@knf?Che+w$_nC&tE`8Kw-kBjG;OvN{8%j9#{tM?#=@oZdtwn^O4 z%1*Htcw1pm#8Y%?LpHLN`|_em^cVvT#Esg;L^s`jr_TsQ7BhnnSh! z>on`DGuv6Md9wreUUl95kl_W7ss~!16%TLsBCz(gxBT^VAC6Nto2z&+4mqLq(>i8* zkKjyH(9^1kYltT;)+7qf3^}n=y!$>e&V)|e+BELZ8Cp=y89!I|-Xo{)&HPmng&y%a z`ZZUNls3hj`lO#@K0Pl&V0$fzo)%4dcBe^dqgWl6eXsZ07|T}s9StdcKfu$JR*$!( zBp2;DJvmB4EOisb?0ORoa{Owdv!p%ktpR&?>q%CHcT+7% zyzi9jKR2>)R7VjfrnmUxo8(fr*-5`fvvX%YADxYz^hvg@scm&tcwt1#ifu?AE$dpxVna<%}zMtgudv>^|n}F~K zDeic*3q^tiXMRueqjXe{ufF!UnbK!f)CG)PV>`UU7A^`3*<9|{o3gd{iAf3WpWQz+ zDp{h!!W$|pUO1=dsdrXN5DI<<^Rl%y=+He&Nchwez$Bau9J(EP?s(y0vn8pQ4q7R| zP8qZmGD{0ETgS(oUvJx|sAz(ucx-qcoCCpf#Yl@fWf^-Yi7w>z+*=@{8gwWpqY({Q zoFv|bA{9T}sUYV&pcuKv#Lso6<8hy*a?OaDke7RJp=<+&?ujwTGj`7Xyu9e>)Y*5z z>iTjA*qdTpQeK(6lpW8#t=hhSN6V!7-C=EZm_0)>!YU6)zmavJUc2+WN!+LC6)B|6 zXDo$26lwKpFTb$IE#J-$q^OKgapdY>BAEGfQ9w@i+K)S&8WWEM_8*S?xQd9@i0W`b z8T{~|eojGW-i66KCt5=(WL5tUTo+1rbsOrCVmS2U&47jkG3cO3&ha_D#ud#kYA;Q^ zomQ11LyxF)bBv1S_|UN*V~I)}ZuDDaxi5;NA-hv2Pkb~L;oJ%>g?`ECpOc==mv&e0 zdHJIsF3>ZF2({`Ia;3E6hQOh5#-2{oKl#_()H%gbQbNjPekq)krUF;FJJIxtKRJJ0 zikXa1=5Vcg6=7w`rO!{fR7^kl*3-2}iWpRD$PKYuTCq}Fw=?+HG%iUoq@HWxfi>Ij z(T$>Axiq0Ezvu;WXH$LLW>S9fAMwG{*mVa8uYo*8Ks@SP{_B8RYo6y9G%8q5Jj)McXs~J&EzOFY1x|x zXNkC~yVQHmfPRzsST_ES76my+X8AtH^EWqIzou11#J0I;n983?FL$Jnr{^h-YBYT- z;*(_UDpPu2MMDj|@6v$=OTU4JTO$jY+e@%48KoA&Tl9E-bJXnC2ItxD3rlw#?RYe_ zSD7s7y6(pa+B(YJN9*5W(fqAD%`Y}>GM!73Ma(SCeT$)cw@m!I-?GTZ z!#{jK4b;`lr~0ChQiYGUcV2zFH*59rr#D8JG7#>$vWWcsecgbQdgtYa=!Wk(!0XO@ z8crjB@B3?DBY9-eYcS0AX`sZ3s%&&|Rx z+jN7WByX>y214AJnncRyoKBQIUcODW`y2$px*S~@XWS#_38eU;;lIvwO<(xku^VBv z5*=(Fb51L2cRn?9%3Q%CRV}@rL%WsEQM;`n32FM)Eiy0{;l}viUf=hj3kEOEi+dLD za%-#Cd=A%P*!Av2AwTt?rg9{O{K*bioS6+Dw?$=KQhX7&(+hKVoX;wU#JGzXx0z0R zA+W2MH}??^A7{}Dpv2%4NN(_9Ca1()!t4lJER(+mN>#ZL42i9Eda4Vf(DSStLB~)S zVJIpqeQjVa#AQ(=*VMWte#6ne(BO=tuhmDKmGUJBAE&8Ie zMocdAl_D{vbW4Iy%VqvnlJ)R8T88m*H{RE!M=$RWRNNI`ZXiZk!YyHH4Bd+ zpLF%RGrK-sICFlo@#y*OicPCtJ5b2h3zSD2kIeL4KKkSGk{^d#fC=mJWm0pycyAp_ z7Xkgp4_V{k*(I(&{+^zlXr{O>*0;fR?4#3$wRE}-k617_9?@u8vDraCPsNfsJ2U!Q zqs#2~DpTEFySHH}$E#Sv=l4CoNlOU6 z!-XML?Gpdwa5WAYx5iXTRsG+5fBQ|{VT@R-?k{^@z@!!`p{<3U?kq+(;;Y2bGZYzI zS~J~MS~uGhwI`{x_iErVoi;z_q#cDEQ|L+97?IDf9rtkGtMIY>ytAy$QF89t@sf01 z4n0=&f*Z z@3)T)2?t%5o=bIGgHPk#WA3`8e~E^cH1>_W`5a$WW!nW@QUs8wp3< zF#?kF>7DA#)kS3gHk+Xi8|#tfraD+S-Z$9UVvJ2ABdC#3Th8XK#JNwAW^c~x;hX)* zU|Qe>R}!%6*(7Ay)oec<7fV|Aga71Bqv%F9RL*csHx4n<7p8k)?#lugcLEr1k`BJN z=~qqXGV~Iq2$TIao!_wot;h~*IvcjLp>_|I<0!#);(hmSc0jmnB07=ILG)D{RSXuH z>Z;}~SJ{1~X;mCU@_Hv&wSXafuo`ps`VW{Hh!+%LC}PDwO#ggs5xFe1@KbnU!R0m; zR9eW)DUC$MPg-oHik!FlB7>7=Ielh1`}Os39Zn!4;RUB#ElreKZOj|}H81kpZj0Z9 z7o$}(mC#t5%+#{0$&q;yg`E`1BOh1(|>My#$z~8 zIlUn?a$nfo^0w#;15WTsh@O!!;1oag607X_s~2H)1~f;HYH&O5cjL9!TK;`>Y2I~R zj>wu9zOPa$E`)74X)IiYxyLf@h*?DR3|)ldc8sgvHBOXDSa}*s)XA7}W)4pY4YbK5 zA^rNoAsU738(KIXUU-JEOObQi1FYQg%;cCkoT*I#jJg2ETiYuHUlK!7lLE`2I$X#n zqI-=+A@;B#Ot@&js!G?T^eF1vHfr+9$32?eud;r-cO*F9QL@>N-$tZm!78NvcVeat zg+mlN4atLXJ)Ndvn?ka=x`nv>`H9rNt1Xdv&$>EQQ0)SyyKkkmW_zAhhuRD?5l`C< zMWoeo9NC=DDL8EsxBaQbD>CJ|>9JnMzzG+cdccu=ey#z-PoD1^*~a{v$DpUFB@~#6 zwx?uS1)Sx2GILVgmFih)QbYRcnre6KvhUoCvvHP;6Jp4ItNy;IZ}`Uz1L1?FvSiBX zl|iJ-L+YaJGed1cC_nLj9eqD zO}Go3$=$@i>J-sk+Vg4-A=@LZUUq)q==6zR*W;}hwRY1J$iUsOa)yK~F0O1LyU#=o z%(gC^yEN;2rq5^Xu{L>$%uGB~vDvLIJ^FL%PH_H)41P(gSx9jhKIoy-Z0RXB9{gs6 z_UMcJi8Oi!!A51 z*Pg0d|KVFUa=={ZD@=b#q=idDXy&4)v8J2v8Pqsj9%nNadQM$bno8%t%_~{IPuY1X zm17fQ72>%td8(do;o)`7_fM|6BvwrlI?QgWR`Hz5lNXJ#tcz9Z(n(m+oeH$@FiQb< zd=tU;(?gZ;-}FVd)|UBLr&ku=5;?TPU2Lgx(}u^ODo{6HF|3#-PNip8rcG*fs7dh& zi*ddT6-G5=|NK(t*^$z;{tQRr)C#c)NMX#Ey|yYg`2 zX1j(8l|#4XrRMG{@LW=iug)a<$B=Cwj)X>@Q(c0-(A zubUvFQc<=i9F+OObdB$E{*j?w-v&>&ZnW8l1q+P-n1?>MD-s{nrO$j`lD=DID?{ja zHSIc=u{e$TEP{yztM%-y3B*c6Pe#rmM6gld zW9DQwD>*S%$pzcDItYCpP^EamUa&MqNzPQ#{TUauCX25r34Ilf|H4x3&QCs&K(B2% z#hJrj_cWPu*n8u7y0FwEi<3XWSgfF46~*H>82#Z+m3qL$dOxF{% zIrMcxbAz85ReEmNA{_aKosgMGpRriqSHwM{X+3A7khz4OuyTD+G2a5Nt7s+Wnh1mLpFOFwPM>6;+u5?-TsRMPYQfDLR+SFfUDYHu%O?xiOr5X!eP z74(G<+5nI$Z6DR@Y4?x=0$GJF=r*dJH^s&a+Y;#lD*}fJQytp?W@nL$f_pburZdVske2Z0%Z%v zli!ag{D#fvRJ9w-gS>i3l3G9d%ldkIp`rZ2!YGe|ZWwpjHichL9iWK5Pv$l@Jyh+= z&fRiI960VV$;~LW?MvA9GrTS$BLboywA%-a4s!2rVODGRtRy)2JLS`b4;}!vvB+Nd zDy+rlkl7!NSlmqx^eP^-!8}9s{6Z{qVE@YMfuC{(b^+J-3&vrIs2lcbt7DM{G#%jL| zIdij$NzDpM$6_olafD)C@}Nmsp=O1tE;9Z)SC47JkiHC6CI`YZWF#3~L`0*#q0^`) z4OEqi?HwgZ{6N$>UA+&4gcvXfS??$6np zuY@wqE2W5!ssvdM@2pY4=iGH@RjZB>3*dp}pV_XHJ3K2?j_g`WNJLNo}4OVSzDF)ubi`Zp}r|cMOfNbhs|N zBcU((YRe2MP#rt9lzj$HuBRGCcLUb`-WtY#o z`4RAxCq$pE=Ww?G|1`W1lHhUr3>M@JL_U(p=O8$;80SXYTEHa@YEj5$Yk(ix4VtjQ z@h4#f#tqgEv=5{)*;3StMbf%D5 z7?U7L@!>vTZck60xep8UW9Z&-Ki>NssY&!$XqT- zA6hv?Xb$ncy$Gv7dRR@$WCHmahN^-ReHS1@E58kF!-4dE=)AFkoP?oP*+7OSzydkh z*NadL(w{;1Y9QP5IYQ`^iJ?@N@W2KaHyXza+R(s`0((I|pF{&sANgX0ToCKkui&i# zPv3!U^FaItpEI}$#xF49U_77{IVfMi7Z_Rty%2;#mj8|*gxCIFh7dPcluh~oXwlF- ziIR_*eA2J-(P!==ba%tkkPp_Gq)xE^8Ps%Lpb2Ve9vH%2k|?cl!jX~H1)j}UVO|Gn zY;WM#Gk{uKK89J+@_YVo(V71O3*FTFd+NGZ6Z0%PaOq(jxW}{ z5pbrUuR{a*1hww$5)kXh&>r)2un7JPOF8`vzkvK2LVa}G%+f{)JM?1um$#TV^NtBEQKvqx=t>pp%_^O z(I;Mpp&P+AwlSTiCwE~vjPj-1>Jb4?rKZ zqjVetwoe7Ul%R}k2Bd7{NeHcj4s+{H@x$SiAXPq?t-X965=lD92z4KG7_e;In;4n{ zmO=p`kVk-UVWO1f#v~wz3q5m+KqW+s5qKt#7|rq79)`ogfSA6&cVYGfaETK_b-xtJe#2i|-SwQ}l&T#-~u?~h7gK=yNH^F^ivsyy&bqA*ka`=@LV26k7V{xPW zhc=|+$CadIN6ktfe*fI?d^!Sp*NB+5&9~gQEPt{?20#BvQY7cpKnC7j{ybg4G`}$| zdcVrDl}JOj=0u_jawmi60zwk}S|pbG$y5h@t`f*dbe!djecjeYEY0E#9EXaE2J literal 0 HcmV?d00001 diff --git a/test/penlayer/penlayer_test.cpp b/test/penlayer/penlayer_test.cpp index c7f62a6..653e8ed 100644 --- a/test/penlayer/penlayer_test.cpp +++ b/test/penlayer/penlayer_test.cpp @@ -56,13 +56,15 @@ TEST_F(PenLayerTest, Engine) ASSERT_EQ(penLayer.engine(), nullptr); EngineMock engine1, engine2; + penLayer.setWidth(480); + penLayer.setHeight(360); EXPECT_CALL(engine1, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine1, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine1); ASSERT_EQ(penLayer.engine(), &engine1); + penLayer.setWidth(500); + penLayer.setHeight(400); EXPECT_CALL(engine2, stageWidth()).WillOnce(Return(500)); - EXPECT_CALL(engine2, stageHeight()).WillOnce(Return(400)); penLayer.setEngine(&engine2); ASSERT_EQ(penLayer.engine(), &engine2); @@ -75,9 +77,10 @@ TEST_F(PenLayerTest, FramebufferObject) PenLayer penLayer; ASSERT_TRUE(penLayer.antialiasingEnabled()); - EngineMock engine1, engine2; + EngineMock engine1, engine2, engine3; + penLayer.setWidth(480); + penLayer.setHeight(360); EXPECT_CALL(engine1, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine1, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine1); QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); @@ -89,8 +92,9 @@ TEST_F(PenLayerTest, FramebufferObject) penLayer.setAntialiasingEnabled(false); ASSERT_FALSE(penLayer.antialiasingEnabled()); + penLayer.setWidth(500); + penLayer.setHeight(400); EXPECT_CALL(engine2, stageWidth()).WillOnce(Return(500)); - EXPECT_CALL(engine2, stageHeight()).WillOnce(Return(400)); penLayer.setEngine(&engine2); fbo = penLayer.framebufferObject(); @@ -98,11 +102,36 @@ TEST_F(PenLayerTest, FramebufferObject) ASSERT_EQ(fbo->height(), 400); ASSERT_EQ(fbo->format().attachment(), QOpenGLFramebufferObject::CombinedDepthStencil); ASSERT_EQ(fbo->format().samples(), 0); + + penLayer.setWidth(960); + penLayer.setHeight(720); + EXPECT_CALL(engine3, stageWidth()).WillOnce(Return(480)); + penLayer.setEngine(&engine3); + + fbo = penLayer.framebufferObject(); + ASSERT_EQ(fbo->width(), 960); + ASSERT_EQ(fbo->height(), 720); + ASSERT_EQ(fbo->format().attachment(), QOpenGLFramebufferObject::CombinedDepthStencil); + ASSERT_EQ(fbo->format().samples(), 0); + + EXPECT_CALL(engine3, stageWidth()).Times(3).WillRepeatedly(Return(100)); + penLayer.setHqPen(true); + penLayer.setWidth(500); + penLayer.setHeight(400); + penLayer.setEngine(&engine3); + + fbo = penLayer.framebufferObject(); + ASSERT_EQ(fbo->width(), 500); + ASSERT_EQ(fbo->height(), 400); + ASSERT_EQ(fbo->format().attachment(), QOpenGLFramebufferObject::CombinedDepthStencil); + ASSERT_EQ(fbo->format().samples(), 0); } TEST_F(PenLayerTest, GetProjectPenLayer) { PenLayer penLayer; + penLayer.setWidth(480); + penLayer.setHeight(360); ASSERT_EQ(PenLayer::getProjectPenLayer(nullptr), nullptr); EngineMock engine1, engine2; @@ -110,13 +139,11 @@ TEST_F(PenLayerTest, GetProjectPenLayer) ASSERT_EQ(PenLayer::getProjectPenLayer(&engine2), nullptr); EXPECT_CALL(engine1, stageWidth()).WillOnce(Return(1)); - EXPECT_CALL(engine1, stageHeight()).WillOnce(Return(1)); penLayer.setEngine(&engine1); ASSERT_EQ(PenLayer::getProjectPenLayer(&engine1), &penLayer); ASSERT_EQ(PenLayer::getProjectPenLayer(&engine2), nullptr); EXPECT_CALL(engine2, stageWidth()).WillOnce(Return(1)); - EXPECT_CALL(engine2, stageHeight()).WillOnce(Return(1)); penLayer.setEngine(&engine2); ASSERT_EQ(PenLayer::getProjectPenLayer(&engine1), nullptr); ASSERT_EQ(PenLayer::getProjectPenLayer(&engine2), &penLayer); @@ -134,8 +161,9 @@ TEST_F(PenLayerTest, Clear) { PenLayer penLayer; EngineMock engine; + penLayer.setWidth(480); + penLayer.setHeight(360); EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine); QOpenGLExtraFunctions glF(&m_context); @@ -175,99 +203,149 @@ TEST_F(PenLayerTest, DrawPoint) { PenLayer penLayer; penLayer.setAntialiasingEnabled(false); + penLayer.setWidth(480); + penLayer.setHeight(360); EngineMock engine; EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine); - PenAttributes attr; - attr.color = QNanoColor(255, 0, 0); - attr.diameter = 3; - - EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(3).WillRepeatedly(Return(360)); - penLayer.drawPoint(attr, 63, 164); - penLayer.drawPoint(attr, -56, 93); - penLayer.drawPoint(attr, 130, 77); - - attr.color = QNanoColor(0, 128, 0, 128); - attr.diameter = 10; - - EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(3).WillRepeatedly(Return(360)); - penLayer.drawPoint(attr, 152, -158); - penLayer.drawPoint(attr, -228, 145); - penLayer.drawPoint(attr, -100, 139); - - attr.color = QNanoColor(255, 50, 200, 185); - attr.diameter = 25.6; + auto draw = [&penLayer]() { + PenAttributes attr; + attr.color = QNanoColor(255, 0, 0); + attr.diameter = 3; + + penLayer.drawPoint(attr, 63, 164); + penLayer.drawPoint(attr, -56, 93); + penLayer.drawPoint(attr, 130, 77); + + attr.color = QNanoColor(0, 128, 0, 128); + attr.diameter = 10; + + penLayer.drawPoint(attr, 152, -158); + penLayer.drawPoint(attr, -228, 145); + penLayer.drawPoint(attr, -100, 139); + + attr.color = QNanoColor(255, 50, 200, 185); + attr.diameter = 25.6; + + penLayer.drawPoint(attr, -11, 179); + penLayer.drawPoint(attr, 90, -48); + penLayer.drawPoint(attr, -54, 21); + }; + + draw(); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage(); + QBuffer buffer; + image.save(&buffer, "png"); + QFile ref("points.png"); + ref.open(QFile::ReadOnly); + buffer.open(QFile::ReadOnly); + ASSERT_EQ(ref.readAll(), buffer.readAll()); + } + // Test HQ pen - resize existing texture EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(3).WillRepeatedly(Return(360)); - penLayer.drawPoint(attr, -11, 179); - penLayer.drawPoint(attr, 90, -48); - penLayer.drawPoint(attr, -54, 21); + penLayer.setHqPen(true); + penLayer.setWidth(720); + penLayer.setHeight(540); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage(); + QImage ref("points_resized.png"); + ASSERT_LE(fuzzyCompareImages(image, ref), 0.01); + } - QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); - QImage image = fbo->toImage(); - QBuffer buffer; - image.save(&buffer, "png"); - QFile ref("points.png"); - ref.open(QFile::ReadOnly); - buffer.open(QFile::ReadOnly); - ASSERT_EQ(ref.readAll(), buffer.readAll()); + // Test HQ pen - draw + penLayer.clear(); + draw(); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage(); + QBuffer buffer; + image.save(&buffer, "png"); + QFile ref("points_hq.png"); + ref.open(QFile::ReadOnly); + buffer.open(QFile::ReadOnly); + ASSERT_EQ(ref.readAll(), buffer.readAll()); + } } TEST_F(PenLayerTest, DrawLine) { PenLayer penLayer; penLayer.setAntialiasingEnabled(false); + penLayer.setWidth(480); + penLayer.setHeight(360); EngineMock engine; EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine); - PenAttributes attr; - attr.color = QNanoColor(255, 0, 0); - attr.diameter = 3; + auto draw = [&penLayer]() { + PenAttributes attr; + attr.color = QNanoColor(255, 0, 0); + attr.diameter = 3; - EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(2).WillRepeatedly(Return(360)); - penLayer.drawLine(attr, 63, 164, -56, 93); - penLayer.drawLine(attr, 130, 77, 125, -22); + penLayer.drawLine(attr, 63, 164, -56, 93); + penLayer.drawLine(attr, 130, 77, 125, -22); - attr.color = QNanoColor(0, 128, 0, 128); - attr.diameter = 10; + attr.color = QNanoColor(0, 128, 0, 128); + attr.diameter = 10; - EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(2).WillRepeatedly(Return(360)); - penLayer.drawLine(attr, 152, -158, -228, 145); - penLayer.drawLine(attr, -100, 139, 20, 72); + penLayer.drawLine(attr, 152, -158, -228, 145); + penLayer.drawLine(attr, -100, 139, 20, 72); - attr.color = QNanoColor(255, 50, 200, 185); - attr.diameter = 25.6; + attr.color = QNanoColor(255, 50, 200, 185); + attr.diameter = 25.6; - EXPECT_CALL(engine, stageWidth()).Times(2).WillRepeatedly(Return(480)); - EXPECT_CALL(engine, stageHeight()).Times(2).WillRepeatedly(Return(360)); - penLayer.drawLine(attr, -11, 179, 90, -48); - penLayer.drawLine(attr, -54, 21, 88, -6); + penLayer.drawLine(attr, -11, 179, 90, -48); + penLayer.drawLine(attr, -54, 21, 88, -6); + }; - QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); - QImage image = fbo->toImage().scaled(240, 180); - QBuffer buffer; - image.save(&buffer, "png"); - QFile ref("lines.png"); - ref.open(QFile::ReadOnly); - buffer.open(QFile::ReadOnly); - ASSERT_EQ(ref.readAll(), buffer.readAll()); + draw(); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage().scaled(240, 180); + QBuffer buffer; + image.save(&buffer, "png"); + QFile ref("lines.png"); + ref.open(QFile::ReadOnly); + buffer.open(QFile::ReadOnly); + ASSERT_EQ(ref.readAll(), buffer.readAll()); + } + + // Test HQ pen + penLayer.clear(); + EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); + penLayer.setHqPen(true); + penLayer.setWidth(720); + penLayer.setHeight(540); + draw(); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage(); + QBuffer buffer; + image.save(&buffer, "png"); + QFile ref("lines_hq.png"); + ref.open(QFile::ReadOnly); + buffer.open(QFile::ReadOnly); + ASSERT_EQ(ref.readAll(), buffer.readAll()); + } } TEST_F(PenLayerTest, Stamp) { PenLayer penLayer; + penLayer.setWidth(480); + penLayer.setHeight(360); EngineMock engine; EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480)); - EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360)); penLayer.setEngine(&engine); ProjectLoader loader; @@ -302,19 +380,39 @@ TEST_F(PenLayerTest, Stamp) for (const auto &target : targets) penLayer.stamp(target.get()); - QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); - QImage image = fbo->toImage().scaled(240, 180); - QImage ref("stamp.png"); - ASSERT_LE(fuzzyCompareImages(image, ref), 0.1668); + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage().scaled(240, 180); + QImage ref("stamp.png"); + ASSERT_LE(fuzzyCompareImages(image, ref), 0.1668); + } + + // Test HQ pen + penLayer.clear(); + EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); + penLayer.setHqPen(true); + penLayer.setWidth(720); + penLayer.setHeight(540); + + for (const auto &target : targets) + penLayer.stamp(target.get()); + + { + QOpenGLFramebufferObject *fbo = penLayer.framebufferObject(); + QImage image = fbo->toImage(); + QImage ref("stamp_hq.png"); + ASSERT_LE(fuzzyCompareImages(image, ref), 0.32); + } } TEST_F(PenLayerTest, TextureData) { PenLayer penLayer; + penLayer.setWidth(6); + penLayer.setHeight(4); penLayer.setAntialiasingEnabled(false); EngineMock engine; EXPECT_CALL(engine, stageWidth()).WillRepeatedly(Return(6)); - EXPECT_CALL(engine, stageHeight()).WillRepeatedly(Return(4)); penLayer.setEngine(&engine); PenAttributes attr; @@ -379,4 +477,74 @@ TEST_F(PenLayerTest, TextureData) ASSERT_EQ(bounds.top(), 1); ASSERT_EQ(bounds.right(), 2); ASSERT_EQ(bounds.bottom(), -2); + + // Test HQ pen + penLayer.clear(); + EXPECT_CALL(engine, stageWidth()).Times(3).WillRepeatedly(Return(480)); + penLayer.setHqPen(true); + penLayer.setWidth(720); + penLayer.setHeight(540); + + attr = PenAttributes(); + attr.color = QNanoColor(255, 0, 0); + attr.diameter = 1; + penLayer.drawLine(attr, -3, 2, 3, -2); + ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 2), qRgb(255, 0, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 2), qRgba(0, 0, 0, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(-1, 1), qRgb(255, 0, 0)); + + bounds = penLayer.getBounds(); + ASSERT_EQ(std::round(bounds.left() * 100) / 100, -3.33); + ASSERT_EQ(bounds.top(), 2); + ASSERT_EQ(std::round(bounds.right() * 100) / 100, 3.67); + ASSERT_EQ(bounds.bottom(), -3); + + attr.color = QNanoColor(0, 128, 0, 128); + attr.diameter = 2; + penLayer.drawLine(attr, -3, -2, 3, 2); + ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 2), qRgb(255, 0, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 2), 0); + ASSERT_EQ(penLayer.colorAtScratchPoint(-1, 1), qRgb(255, 0, 0)); + + bounds = penLayer.getBounds(); + ASSERT_EQ(std::round(bounds.left() * 100) / 100, -3.33); + ASSERT_EQ(std::round(bounds.top() * 100) / 100, 2.67); + ASSERT_EQ(std::round(bounds.right() * 100) / 100, 4.33); + ASSERT_EQ(std::round(bounds.bottom() * 100) / 100, -3.67); + + penLayer.clear(); + ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 2), 0); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 2), 0); + ASSERT_EQ(penLayer.colorAtScratchPoint(-1, 1), 0); + + bounds = penLayer.getBounds(); + ASSERT_EQ(bounds.left(), 0); + ASSERT_EQ(bounds.top(), 0); + ASSERT_EQ(bounds.right(), 0); + ASSERT_EQ(bounds.bottom(), 0); + + attr.color = QNanoColor(0, 255, 0, 255); + attr.diameter = 1; + penLayer.drawLine(attr, 0, -1, 1, 1); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgba(0, 0, 0, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 0), qRgb(0, 255, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 1), qRgba(0, 0, 0, 0)); + + bounds = penLayer.getBounds(); + ASSERT_EQ(bounds.left(), 0); + ASSERT_EQ(std::round(bounds.top() * 100) / 100, 1.33); + ASSERT_EQ(std::round(bounds.right() * 100) / 100, 1.67); + ASSERT_EQ(std::round(bounds.bottom() * 100) / 100, -1.67); + + attr.diameter = 2; + penLayer.drawPoint(attr, -2, 0); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 1), qRgba(0, 0, 0, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(0, 0), qRgb(0, 255, 0)); + ASSERT_EQ(penLayer.colorAtScratchPoint(-3, 1), 0); + + bounds = penLayer.getBounds(); + ASSERT_EQ(std::round(bounds.left() * 100) / 100, -2.67); + ASSERT_EQ(std::round(bounds.top() * 100) / 100, 1.33); + ASSERT_EQ(std::round(bounds.right() * 100) / 100, 1.67); + ASSERT_EQ(std::round(bounds.bottom() * 100) / 100, -1.67); } diff --git a/test/points_hq.png b/test/points_hq.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6076ca56ecb1fdc3e8bebb46ae95913a7b36a2 GIT binary patch literal 2584 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 z zM?Vm++JlOWxZv;RpmX2P`;J&%FB<20%hy%}dCrqEf#W%`zF*@IG)oat+Rq%k&eJo& z`&JPt;Tz=i?~lmEB*s9S<-pk1j@xE%EonsjA(2{8=Wao{vIpR-mYscZiG0fl4oUc8 zklBkrk8=pNEx@LH_B~zfjg0%4+UeJ4%%b@#_&Fjt*y(#)r?sR9$-ovH z-6ccEtB)w*&a#bG0%@y)n`q3{Bu;wyvk2aqKdK4ZMDe1%oG}Jo85u;Vp7G+kztL z8}P+XI1|dbfNb2j?mvtVDb@ajR46+b>8Tguy>C!3zX{;%#>?|N>$SM^KB>7L-1+R= zsjvLyxa`gQ{NA!sb5;u$)sI-qb}YGFJGeJ!lXWoui1wRkJes@QyDF|I?tfBLxO_KV~Ge+|C?gD$`5>x1yZpGt|pjUlF7J4lF~OBdv}jc z6D>;hVlxuM7nbjzkM}Ew_Z!a~+jlp=_T%zCS-@h*U)g0LpWYv$o(uB691q^BblV)v zE_oE_W3RXlqFe~EH)|W?!jIaX!$z7`$<#fzs}^zGm(PS((ghl`@&(oLLGz(*gM(OXcfcE!^*U^d^QSuK z&Sj5*I`KdYVbmGLZ|cam?{F zC;S-e7I1JB?ZnO;-H~-L-zCL2-U~iyxx5}KfcPq=ot)5Kd4el$hCI3X z-S+){^oua}Q~cpH$iC+d#rr(%bFA`nBW-p!tmo}O!%TsYTVUaGoZ6Qu_QNIJ#->HX z;d88Qghn(CWOg4ncbGkXrnrIa_x(57l~Jv4URh|?gz=6FBTAks zA+y?s*3G;_g4`oXW)N2^=na+B@YaL8mGb~!FbrC}$c+sI-;BO`o}V00Co{!Dw5Uor z_UIlBmLOn=hCoh>L{j`4%odf!3_V}1H*s8)V7rQgEKx>#Lwa)wz!K_Iz@kN*g3qevG$myaH`sG7b{Xd$lKLRgS)M3@>#5gTfy zYpdbD+Yyfu$;J4iA$kJX$O*+n$B1 z5F0E2tQ1Z+5x@3H9+aRM|mSF_{#bmh1C;F0l;egoIQ9%Ay(WZXwhM0i_;gW`Q#_P(M8ui*E+WHj3 zYbac05E4bm&qF4Cmu|gk#VzbMY>CzMj@XKk?SCqSL%IV{*@&C`%~pYLk(14W_#Jv3 zq6nXH!cpkwk^`xDGB&m#Y=HwKNODit~N)DIK*hEHjg z3)2&C8(e*sI5=ZZV$%eVDJLC`93GG1SJq>afMfq-&}MMs(FL#)raE{2XrFnRRN zYEkpTbBcp$i&g@5$zkD`J5!@g(&%sIVCIg_K=b^wkQ^7>sK7u&kXy7Ol$|^40cQUm zh{^1ZK_@rAJjF+ z@pYB}1V2wf>_|S=JDObT_Tx(M^}B`E~3hsq!x+o=Cpl`Zgj$~ z>FHKO9)IhupH?DE8ay-YO>BzDBen_4mlRpp zr#48i^V*V=gxktt0O#b}lUKI7Yz9T`D6e_*>Q4P5Zd!~JIXJP1cKJst^%k=z={?RE zFbcvdXvp(s{(sU1lTQECr%JvkD`e&hKIE|J;6W zygysV4FRnU=QAtRO24nF321~l$hY7|o2v#@1AtF&V3rrwDEGh|49L2mRPXkXgM)(i z(_~a?Rh}_VBgPFD51uq^rjNc0G>8ygW=r%@9-ymi=na!TL}8~H?=j)j`#hT6XLPvc ze?&IISuDXr>8*9~M5Rs!wxI15>wqCn0@=*n4_1(+fi!BKQ54%>K0TI+H#j{pBy_A38xapE|2r2#tZweE ztLX!kV`>nPtb8U9RlYv@W2qA*v{oL7wmLx`JLc&6X6I!t#)Il*ztZvz&tpUt90ZpS zzS>X5&dDEtkSeLp3K7x8Q&JBdi=rVrD_^~lr)3S5u+-yG%}A(P7U$0i9pr9QG(%() z7t;aw1+PP6u91GKlkDG)@x8dsuwh!~hTtqs%nbWWh$Fn>eCw`y!q;*r|GsWloirfO z&Gz7JcwyD^y%AnOY0leihQ?nG6cv^DWItgwpxYgElt5;pc7A?iH|ljMXg%p@~sc|B5>0 zc`d%WqSCUi#A0zIYo zca;zbFZhGEW-z(@@h;&HFeyO?V6XJO@Z3BZe)RskfQtL4r{0i3sr1R)F4#zsT-f8O8JCE|S*s?7`0fR~VJld<6-oofH`;zWJ@$Z{^ww_% zoR$)hx*jge9YN6@NVE~T!YL0ixAl=U3FKZb1ap%HrtS(8-Qcfpv*&4DJOTSpl&P9a zX0*BlPld9aJW}FvE7M`Fa+@=^)sirQbqh&`#QD3sseeLXIxi*b>mP|~CgyH1nUuCx zp#H>~F`H~!$5x6}^ zB1zu1z2_P3?8npwjNjZdMlg$U-bNu>E@Wd$4(g4oM{Oy+aHiCv`^`p`b7|e?dhOLN zORkHalQa?9PNimYW#$jose!dtMHhE8Dh$@lyHxmL*!U1$mtphUuZ`;MM_0}upNY5Y z2z81i83$e#j-eXDvG+7NBbb)`+W7<{0U1}yn```$lAiVh)7u=a@9ZFb3U`=~T?7{| zyf9K&B(QzbFcKocCvmO{TrgBrWjDVCpDzPK1$4T4O%`D`(y!x0V ziut$N$>VlIN3N;5gn}udto%WD%H%G(@m0NcvGlW$7hC%_93@L_1>iCoATR{eO@5Et zRxsabqh8zoM*6sp1UMoC=~>en!Sj0bUeL^xtU-!)bSTHwB?zRRGN!@KhWMQoJw9dF zHdsiidx@Dk(+^xmKY-zfXtdig^+n5$MTHO=835;`s>f?+(D@Tp2gXs;VY2*37@NcQ z&Ee2%Qio_fitJkm=ne&=LJk@?((k6_%gfURZF=uzCSz58$0cV%??om|Iq7w9 zSpOoOl3~=f`{T;7*9O~ZPA&2PFz4v!Eu`?eeId9L-na>i8;;(k0Z4v*&GF{ z%fo$0G$|~9SIh8h`aBiT`Wr?U-nikJ9Pte@7`ciH9}%%AcxE5_gZ`Kqr%Ad*NV892 zoHmj)6~I$HFRr8pT2pzce4jNP8^F*jzkPdqs0*+?=b$cA?TLa!a^pf?&GH?pwYCy zqgGUOu0bDtUw!MmU1wk}oxIo`JgwJ)DqYGfJNb*uC*9`=j$W+1t5lE7Q8A}>W4)BF zR&i<{G=1Zl4Lb+Y?5MxV&75!&kYLu2)p7iAqzuxh!4)E37ec)(8peUPLHfg)qgz8D zb+!TZtMrc@!YNAU8v;F`4YH);mHis4DN1GGUjDW0*}Z;x2O-3qQeIYBuW*b+b#k^Z zA^k1b)1|S(lpT1Jr}V^n z{Np2Mu~>ETFEUFGKyG&)&XPoR_KPPNisd_3CQ!-nx|G__Ar7}Q=c*;8)&Hs^RQ0P% zNDGWCdUG-xcZ#W*c$V8U#3vsRYjU=|p(a2N+|P1~%a^TEnL@9OU_(D@BKzR>mSb*P~3 zA5k7aX%G<)M&<@6OH-=s(G?VmMv5Ke>aV4$l$Y(u4nMr+lMOaH@P4 z$48exudL!%%}D%Es`XZ90Uf?-`6En2F-KriQ1*i>8mzz%z5B?Lts`xOUWVRbrW_jW zHn#bh>pUMT-E(>c^6hn6Aee?HK=Xin;Qw<0GWb&WwF<2$%V|>3(EwfxM+CZ%c7N)% zi8IFRz2Z~3%pAT|kY(SI*bdBup~)5NMI_T_AQoezI%*fta{si>4v87z0j(>8&e2dUvVqR{9Ys`@@s&98gFZ9S5u!ZnB4oo^?|Ow(}}*#ptA;rAM6AV8Vmc{%_Z} zDxjIV|9VWSkieY(A&vVFf(POdU*RiZ8Z*uLR&+%9=m;P1+Aae{dyu0F9?Ig2qCJrf=$Tlu0`*!XxohNv(L zL&#orYyECtRqg55?D6e#-i3MqRI~~;(m6B&-3Vc>DhaaEiFczOY#6E7GU6lVx$mv$ zvB+!CqeHd`pQYK7Zuo6mJH|9&J!og*H!ut*HkKf z^-GmCCY%N)AJNE*i7JFjOyyopca`vg`wT=<{yxKLGq@{2QtLmUu9~uF%Gnw z_02s7m7D8Ov>9%)>-eONvN+7mNDFQ5@1=`}oKonb&1ztyx4J^SYn`Bc&aY6+{lDBO zN0$oW*lA0>b_!klt3h&7M$@v|Y*q0)#j(X9`n_33s(v`z4jF$dXo@;&J)zXEF&$?1 zl&3!|u2rw=t$7F=U!^tEu6(UE^Dn9KV^jIzF60G`2}bNH@7Q>puPdZU*(+cBcqi}r zg$yhSKj{}Z_yT571|J)uUP9U%E0G?lsEE|P_Tx~+F?wjw5f@n+ZKT_)964&hU6nkm zN1Y@7T9Wqqpd-fk7Pd1|v|!CMis4EmmXZ|9KBY+#Fh>lLoXfsVM=+sNF<0ZxZyk0v3Zmbw@fV0@hIx|pZlJR3!ecP%9Dtl z5Djlm*lVR_oq40_PCK(p9Wv1*mq4h+&`={wAIEj0V}V*8}^P_Mipul zk-8#|s<8WTjq`#O+EC{ua4EK2f-c3((!4F33N$)O(8}zMS<#Z1hlp05I9Hr`EI-8l z@h}k399mn_x#cqKq^#uK>~pKq%eoS8%ydO0Z$(Gxeld7xGjFG8$VvCqxr+4!vzcpt zuemHkmJ_rAppRLio!=3Ga>?3&v-5WfOGoHsrw~`i6-mQ1wCX(31qHHEMkkn7)rZ=+ z54v(;Zj6W^QSVcakqz$r0bkwKepT}(y4=M>fHuNQt{|$H_Ett?<8#&Pc(n`!BT17! zzP3DE2}n?pP5coqta{JS-i69!smn(>5s=C$jc%F9r&1#0ZoKIjWInCsBr@)`Oc#_^ zrxGX~iB^YV>Ois^ki7jBSLTt>)sOd6Oi}2IAA<#ux|TGgEU+`g$;_YIl&n=r;<(Y% z%R>a~;Q9fZnsF1xM|gYKurw;>qj)vh^-EY?qNfy(lIP{)&s#YS@4NhO&rj)P#%RCV zJS11kQ=SJF9o_t@XWuK$$g%HZlFmowXegbR&`f?0Y1QlG)$oyoLRlJsiNe^w8Y2;K zT<)p-(EnY$|1q-Hhx19xwW#wbDU{2(o5O;GWX+()>Gsz|E5qv$7ba>eJmJr+uT}-+ z!MupiIqngyphF!T+wR*WOY-3j=z4-GmXiKb8*Rbp&2scjJ2`D$qm9_FF$?V>;e_~L z?pagsqldUNpINu>S$w$T-^tF~HP-T+y2W=S+X?$NJr=?Tl%)~_sjNJ5A)+3>k10XW zyab*~GWpyI>MQ|kKkC$rFCZEx?clfiadf!PeZ8SA6jG@1502K)4o|-dq*(o3wHO%W z`e;fxOr8cI8Vj?_pq0nEWuwMN~&za{)z~g#Zf46r09B}H`W~Zv9xJGtSbg~hP?~g;o|LwHy ze|GxU5lS=1g|Sc@&(6S1Hm?+*zW)y`|LlTh247)NxG8z`7aa*$8{MRf zRHmTDR?O)j2sHR|7__LOOGN+6z|B;agvMPsr=t;!T46$*mskrqA9*Vd8O2p3fD;W- zel*vprFLK*i!L=;NGTJjC7|4rs-2LsnbN1*aG!KE6sSYcr`%RjX_@7#o|q`p?XVK_f7Vdp zK*7_fZ)pRZu>4VT26X~j-+PGV=5ivbN0a&lb0Kj2!IZhsGfFiDZMW>I?%3RU3BWtP zl`TRv?|w_Lk}MO|e11o)G@Jb|j3I%Q+~YE}u;Y)|o+`TONSlVAr*OmSEfXj}gqhI7 zrNAk4)i(Q}caCe7ygtkBe1$#TY2_tsouuvt6yd@_hvg0wl){(4Nt(kpb?-O~gf`Vc z{xP-Yu#U!X(wXr0W)QZ+x1OZ@`Qf{^Jgcq71nMy*;ivld#snOmH05@Tm(JgmOr-~v z#}hsPTVgZV%J4v|Ttxpx8W<}ik_i_DWxQ)ITP}6}v~JKCuca-c%_2YOaVDLjRaJ|1 zTw=9yF(({)FY&X~40k<8DTR8jq(4no*MHW#^G4Sq>}n(ec9+#nZP^}Jrkdt~3nRDr zwd%r2H#;c)7Uul$qo@Sg)Z4!*R>v?<+2_VqU`_+yILNJ0;HLcnM+rAE8IRoz2G`DI z<#scRWv7KMgjzpXvm69)J1;pFz)-}NHBls6g;umHv@$R8BX24rmX&%T-@xI_8_!BJ zze*#JQqM8RCf&tLz|myOO?C``2tyf{II(W!1(fy3-oRo$hL=zq{X5JA_h?jS_m!{>nGwk_ zS09RCZScq*Gf{{e_eAu#&d$E_V(T7FvSg>QLTkGMkgo@n$w8IyQ7Uqj(IXA9M27b; zx{zP!vngC2K1H0QR@2ayk#Cq?^7egb$M^9;-CqrO^{XdwfY>jf(ZA; z2^oYQIjA1D_0DlB#r&QTSK70(=EU;X14Ws}=ywFZ=k&3NX76!TFV^c*l=cI)iLu|= z*;KA*WU6Y>cYxwjt^jJ2F%wQ6 z)o3L}FDiU8xX)Qiq2+}}_o)T45p{X60I~w14IBC+0Bg5?tFKqAUPD|}&HK@ldJKN4 z#n!vt8_UMdP%SdJPICXJApx(}P94KrI^Aq#kY1x6h^a%xZ{~YESPT2_p`F{LTy3f+ zfG1{aBcbs6&E#u(bK!!-em4~3LjNPjWZT}G);kPx2s+85@8&!o-gmh{G7>;NsoOYn z%Tas+!0%7OPMTx)#e(J2_w!Z~Uq+i58$pi@VSZqK(;IGUO_I6g*YIz?GWiPzAN%(< zYIC`;bX^4?2t%ls5cUy~J%zeHl7zuASqpx~DIglDey^h_|=lr%RJnsbqmMkSiBH zVn1`$GV8%9W?v?@U_A!u>Uy0<3aB3>((+^_ovTb0F2?$InFvU7CS89vgA29qBrny; zK=N2yt36Cb&C$w1x#Gx3XSm7VYLfTT%lPz3;q^~--?Zg%GR&_33Y-<>yH`jt^tlNp zFE;}Rodga*!5oKcMaMdywYS=rT1n0xyEwz5{5^CSerwWh5LW_5`IU1QyQX3R7K7LI z8=k_?kW}m3>BkqSs-ymNWwLm!4g{0*8P;;7%GV^n%84^gK8kuka|Bv;#QTqvysjcQP=8d{bdnmrWtpgYopq1l zf85Tx2fOpUv6ot7&48&Fx~*|N?MU3F=hmys@|}~*e}Pii$G^)~45sWF;_g@|NdADO zfBtEiYJM-&sozR({HDyUirUtjSz@0`jT@@d&CzB_$S8R$rm@1{X=7IROXg_>{?D3C zjU-RF02IYRznidir(tPgmO(D$4CXTYMP}Mmhu3^b*`cOZ4w{6OY!n5!>Pm&>B--OQ zwdG-BUrEnHWzeBt1>tC>`WvmhG-7Q@hEj3!+H1qF;)gwqneXd4P~dBoZlqHecqtd) zFY0C@lLXk6&HG4i+$j{1@psk!U<$$Nb2Jlkq!Wd3aFVI-^LJEtDAn-OEsWYgwq)1V z7wzJt^Pm^t)mWmXhVn`W&oat}czn8S7Se!5yjV zz8@H1;nq*3%m8+XwB}Gab9|5dH>Yt4iB({^5-AWE2J$+Fccs*-K(MrSIRhHD@*9iQ z9%N{uXvm2R>QSvq;!C)4Jm7x@@l4tbZiw~*^dX_wGgY*9HEb|E@pR;5eARPAeCBUv zRhsXpuzA`+yxt^m;Nl}h>^uFZlIS1gRsZCW_u8W8Ckv^2tEoSv|KX;Ft5opC7`4jY zcT$TIe{;zy?LG%ywiky#_S5LZU?TF0@=mxPNlAdW47QNQ| zGGwF3tURoF>!~?Nmc{(F^jMiL0sEcSkR{IM6sD2RBeIt2;4VI-@Sq?Zv~TE@t%7P% zuyh1%NN$!^lRR=x`?k9BJ9ApPu0vJn^5K%M%QwtR)(ryG95gEp zZlQG)^*KIMtB6^8#oYWKyHeC-Bb3m=WxG=t4LTc2)Qz>|(AK`W)iatO-DR7NNob*h z751FzVCB-u9bSJ=g@SfTRtN9`ax|y$isb77*YbAMvP`FWV(Hiv?aar0ln7Pt)0t_( zt#=LR^5fi>#9%RrBk<$I=tB*ldj8t=ju;KUQWJCGr-)k zIO}XewvUl^rmw@f91wpk1`e>oPyLhJ5XsA2p~hLZYrDXLRKcTRmR12M5-kdOrJiLa zhpxtLS%YI3^pZ)&?vwj`mHf9MhX>ihedNc*+jhlMmT^xNvu2XS-|D%1FRl-Aq_``B z)|&pnPDjUm$3*i#QLejAM5sFb_1yj!0flw!0eLCNAyKX;rgvRMY%HV2Ux8*+vxo;_ z<94y>nCqEClHaz#WRLF?3<~tztfMmN$xE;LPKC%*FX#?!vzB96Y}ZohMLZf^|4dqY zB`Y&ZcreKmn1mv@b*VlaX)%F@Jg6#Du-diN65^d4{wbbJ4ypt+#4aSY4dy2>!<&st zFI^{STF7uZw9D+e5daV7RzM@?Y^9kfCp*Ibp2 zwOskfNv2lS!@l*vz@RL$!>IFZG{2&0;B#D6#nz*`=ts80k}#^jMnF>@(RT~?(tSlh zw>3I53vmJZ>13gq=?fa$d?0*fp-BOQM`Zq(m*JozBkFL81$R!hubAgTO^-?l3&f<= z@9=%AD%0~@wG#X^`XUjWpk(>4`XlC>N6Yvb@`KlxhNl3IIMXAeRE3|*m^teh#JV0A zx4L;^RNbL_F!Un-&h6G6c25Agnpk%k9&eGQ}MC}aIF9C*0Yk|k0vn29zApRu^= zUXvRd=GMU(ToTdly?kqVG$s;j2&^g2sslQzKRGx0U}ql#%$6!Hh^p2DgxHFIYSj)s z%GF}{FuEZA6{oj%(m`prq09fE;>>I)IiY2E=&kH#`7jufpfCi&s}XRj>l6ycYuFaheyL=kmyR2h+VO&=k7f? zAcvCuik@(ys;zj-J6zUGH73zti9u=4t@fN8Q-u;Ytx)}}Jj48Y^gs+#Cp7!PQ$f3w z&Ielgn-&VLHX@Nejr9fje8L*QskDza%1LaJ}W$TZp9y$kl0_ny9Bt#^x>Vybes$ouufSVOtf#9K@s#c~duMIb*r*0X) z9d)ntVZ6*CbMUzEcSrphlQKnR#P;Y4@pd>$5ppwflOHh2QV){LE}wINByOWqrxyhD zwV4_jqxzQW*hFJ1GTnn$qIGq`D}NUTu*GARCUIWWjx7-GttwiXpg*HIMq3sx z!1fQ~3o$C-18v$~G~%LhL%@KfwyQpijCQ8uuNpVqTbPbYD_6y@sQ$+wozUfkb^t+( z^$X}v!&KcvH#&gYADE!HE`s2o5tir1j*ijkfK+OR_D!9Q7x~4!j;Bo6WY`qC)BF4V zN*P2K6t$N83E4W`T$anzt0FnIcpk2~hMbXldsNJm!sRMC@z|<6boIbVnoVuS7@F=| zj5df3dS4V7J!zQ>grmXTlVAA_cbOglS$puDagAI_P_NiiQ*9mFVdfSXh3vb`|4{aW zB>xNu<$(A#a(p>q(*=_Kp5G01!h|Xo$#EbGFAo>#vH_X3)qg&hL#GdC)_Nf-8^C95 zKChPjo(XHE+lLx)sRtfqlCjcR4ms8e>>gY!DAVw&=305!>T6KEmuh}ly&;qoQaD=` zz1gac@kG9qSm=#Jnj5XEkMyve(#H5qS%L~rR>hO<5DE@k`;v);(hs%?e!CA^X&n9Y*! zutm7QS6}BW_Gfp|*E7QT3U@T+`Mg?Dz;(u!y-Q75L}5{8?t`XouI zYK7<$94!_V&)JK?ubt@g9Z+>1w8J!y$HDtOdjn>|#*yqY9H9;tk^{%EagXF%TI+ey zUraG}eD2Ik@&!t?gj{If;Cx;%;OzoRMcH=@KHifA!@fhJVhz5a=lDa6d$NC^mYff` zWKOyAAgBc=Kzc5;4!csxywuk;(cGUaEdIQh!1E95YY}X$^19=`Ib~f2ie4u?h(6d4 zDe)nHe4F*UnFwe_DG9?mn5Z!;27^g4r`PdczbRuux7E6_wx3|Q8D+cyQwOT5Ee)22 z+ZhMyI9f6#<4=drLVUZuuRNd72q?gZz*7lXXLq>3-1dVW#t;5`QtZ~p?M>?62rbYt zc#fRMn~AH0KW+{u$hhj zl_HtV>Y{T|_zsQH3KdR6hR(H0wpUbg?kp?dlCjl$SkYlgYdC>RIc_{TJe{=T=6&R7 zENO&-wKyD&ULeI5o}F#DxVP?xwN<8EhYB` zvuV~B6HSa+GGdsM6g4uBnOQu8Z;TBFDB3DvG3hMu0B=}LEqE6nErZ=66Q7?dK>kiu z1eJ{B7$A1oquQJjNmJS(xknf%+<`4DN=XEQY#FQmP*bB)ZH%6-Wb=BtN|-H{!g8X3 zy0jGpD?V*nO-?r_-ZsWc4gDi;w%IqUwW_ksg5P*kDe3Lfa^TNVi?!=cHh31J*>YOB z$u+QBLlMknF%`@8R-?8q^Lc4>xq{nwsRi!a?FyKVc*Fl;9KgRk8c<9b1NSr0kmp&% zB8LC3sM}|1GztN6iXI8GwnzDGw8c+4UQD?O({ap?ne$FyE0WU}ZS^`s$64$dnn`DE znYh{?$yXb82~isKXzr z+Dl7kQMxtC@EW?yH3+bG#msy?ec&g;p(A%>2nZ7OI~NHy(m??T(^7$+bh7@h+j{DH z>KQ3%&NJJ*fmnh!tz*Pwfp6JK8A}A`B&>*>L8eUDhx=^;wZple^6Yh=!(XsxHTK)T zYfG9plJnRhonpXzW{jIi!m?}{$0@RGoV*&9xqS75pXLlcu#jhaLQ~`ZKNp|}Ve^f~ z;X(9#TY=!>x;n_iLI1E{e%sqa6)BkB7Rs(e@D*pnV5=iL$kWcrYoUh4X!L#&t`9&_ zh>YZl(M>Ezw=fB^C_l1b8#n8G)hYc(zpLe2RzkYCUF}|&FO37RfqlqnV#tZe#?~gi|jeQDEjx7da_| zqM1ngHip8@cy?W?CEBlt{Wk}2;t3MECGJNLCyNW*ppix<*2=__3R+H`JN$#y7S}dz zujGte%N6GDhHC%0Ox>BY=8~b+nyMT3}noY(d<>+#CcmFN`ymNd41r z<}^=b9e3NlQMxwsX!5k?Ajy}}JSK*9baC^V{_><8(rMTysPaog#{LSe`#ol^xraq? zWuoqs(t5r9=*>36KAPFEtHv)AyrTKYvi&;yR%f!qTCDPi?Q;95 zmw{Prh@Ji;_tWN4`i;ulYN9n~fwcuw8NTi|JN)T(T0P6H*?QTCv0IW}v- z#tP6QqrDO9F-vMY>(C13gJ|rIMRo9hJbh(UTVbgMU5XY6 z?h>R}@#4h`6t@=l5Ga=5mXG(|_kMrQubj2c$~p7Q%%0hMo2u~cI?!TSs0BW@^mj?G zDz6yQjdTXL|6U8(B>%F^(c1lKf7fl3K=kW%F>jOtisH%B?dbSP^VdaK$Fln-qPOD6 zOyFC8{P!jNMHpvgo794JPJeAwa9Xy+;Xw^J!q%NJ!9D>2xq{cRn%(CDVw@ka->_U4 z4h@LwTN=rV=Cam$pBJ|Em&|T?hkPc%sqIa<+j8pHpI19I)fMo6d#5v=Q9)GcWv!a7 zK6%9S>_5`Y!ZPcHt~Tyss6FtZ*Tk;A!OjxdyyLGrZB2PV$mhbHiQA=zsy1oDj?Pbx zhu;~{t&|`$bfWE<=8sJ2+zJoXnXqpdt|SmtYm4+$XE5a-E{ePOg3IuNw|D_Yn3${u zHWi*xZy!FzKNLKQZ`x$23H-ImSfL?{vCdEnO_68&tZ9VTtS1*INZI@uE6H3%)-(S{BIybSvPI{%-k~_7u8_aIV+O?#dK857AIr_E#hU8Pvgu>3B*Ee5B zFpZBk*DmXHy|y8^`pfv)2_`Bb_vd)bs5LLi4aJ=k9dy*HtqeWPy2e zQoYq|zI&V_<4lJ8+`s^ri7Y zX?5!^V8iY)5yI<=3lo8DIp2cNMQXQnR;lZ+(Ff7*S%F!*$<_U}w5WNT?)lIz;kHJd zW%ponuvMp?tCy_jinN&WX_E;Udd7DaZg}VW#$Ni;_G6=4xwscJfEee$DH96g_@B5G zsF^T5SK6v$KhLLWgaWosfNMf>Jq&(b5q*!Lz3eK3od>g*8Gc~evS0?puJ>x{Gpid@ z15;Ty1v<-lkJBL>Zg};y-}s$ymP=de(Kr@dp1<~QwcSpQt37yO+e&u0Ty3V%zlYT1 zifV8cYO`(aoqu+w7XQ@i8fiK$3(q3#H)-o~s&Aw_X;I6s@JV)+)-9(yT9$R=M^{$M zS}#$93eq(@3jz5y0+vd8c#0^QDi|O6PBkQRzZ-;(877zsKKPt;wSy_hgtPHGbP@$y z+Y|*4&x5p=(EDnfDt_dQ-qblFsdaC4Sfc-Zv$|eHk73%fbs6&j<@>Z(r{5(kj9fgG z0_yDZkFKT@PJO`~w0=WV zA!xXK;gUEPSsx>uWfbs`*exl&@~->qbT!f^N%_Jhl6cmeyZN(^HMe>bI(p6e;X_Hr~H+3 zXUhA^W_UO06rt-hFI4D|F{<~vM7Nxu+oPhFJ-n+c@@BlbXPjKS;{sUW3{nLmqV6-f zHODW@IOzuivH{*IAg1gg))Zgo8JUfT*+3PSe9o5jmwCX%BRCFzHZ}rPfnIMt8bSS7 z%hpLD^*-Yc@<8KWZO#5Y$eSfALYi}WUObTNoY-Q)a{kk*gSOkX%&4+!j$MV17@x}C z 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 h)gy`s0;H-2{GW Date: Thu, 29 Aug 2024 18:41:23 +0200 Subject: [PATCH 30/35] ProjectPlayer: Add HQ pen support --- src/ProjectPlayer.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 766cefa..68149c1 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -16,6 +16,7 @@ ProjectScene { property alias cloneLimit: loader.cloneLimit property alias spriteFencing: loader.spriteFencing property alias mute: loader.mute + property alias hqPen: projectPenLayer.hqPen property bool showLoadingProgress: true readonly property bool loading: priv.loading readonly property int downloadedAssets: loader.downloadedAssets @@ -141,9 +142,9 @@ ProjectScene { engine: loader.engine anchors.top: parent.top anchors.left: parent.left - width: stageWidth - height: stageHeight - scale: stageScale + width: hqPen ? parent.width : stageWidth + height: hqPen ? parent.height : stageHeight + scale: hqPen ? 1 : stageScale transformOrigin: Item.TopLeft visible: !priv.loading } From 52f808c8456c7b1506492e0e51ca3976763be424 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:53:47 +0200 Subject: [PATCH 31/35] ProjectPlayer: Hide background when there isn't any loaded project Resolves: #113 --- src/ProjectPlayer.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ProjectPlayer.qml b/src/ProjectPlayer.qml index 68149c1..2355484 100644 --- a/src/ProjectPlayer.qml +++ b/src/ProjectPlayer.qml @@ -29,6 +29,8 @@ ProjectScene { engine: loader.engine stageScale: (stageWidth == 0 || stageHeight == 0) ? 1 : Math.min(width / stageWidth, height / stageHeight) onFileNameChanged: priv.loading = true; + onLoaded: priv.loaded = true + onFailedToLoad: priv.loaded = false function load(fileName) { loader.fileName = fileName; @@ -37,6 +39,7 @@ ProjectScene { QtObject { id: priv property bool loading: false + property bool loaded: false } ProjectLoader { @@ -111,7 +114,7 @@ ProjectScene { anchors.top: parent.top width: stageWidth * stageScale height: stageHeight * stageScale - color: priv.loading ? "transparent" : "white" + color: priv.loading || !priv.loaded ? "transparent" : "white" clip: true RenderedTarget { From eda651ba7dbecaa1ddf182c4e90399bb8bc00a9c Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:22:41 +0200 Subject: [PATCH 32/35] Move color property to MonitorModel Resolves: #69 --- src/listmonitormodel.cpp | 29 +------- src/listmonitormodel.h | 12 --- src/monitormodel.cpp | 28 +++++++ src/monitormodel.h | 14 ++++ src/valuemonitormodel.cpp | 27 +------ src/valuemonitormodel.h | 12 --- test/monitor_models/CMakeLists.txt | 6 +- test/monitor_models/listmonitormodel_test.cpp | 60 --------------- test/monitor_models/monitormodel_test.cpp | 74 ++++++++++++++++++- .../monitor_models/valuemonitormodel_test.cpp | 60 --------------- 10 files changed, 120 insertions(+), 202 deletions(-) diff --git a/src/listmonitormodel.cpp b/src/listmonitormodel.cpp index 67f920a..2a42315 100644 --- a/src/listmonitormodel.cpp +++ b/src/listmonitormodel.cpp @@ -1,6 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later -#include #include #include "listmonitormodel.h" @@ -9,31 +8,14 @@ using namespace scratchcpprender; ListMonitorModel::ListMonitorModel(QObject *parent) : - MonitorModel(parent) + ListMonitorModel(nullptr, parent) { - m_listModel = new ListMonitorListModel(this); } ListMonitorModel::ListMonitorModel(libscratchcpp::IBlockSection *section, QObject *parent) : - ListMonitorModel(parent) + MonitorModel(section, parent) { - if (!section) - return; - - // TODO: Get the color from the block section - std::string name = section->name(); - if (name == "Motion") - m_color = QColor::fromString("#4C97FF"); - else if (name == "Looks") - m_color = QColor::fromString("#9966FF"); - else if (name == "Sound") - m_color = QColor::fromString("#CF63CF"); - else if (name == "Sensing") - m_color = QColor::fromString("#5CB1D6"); - else if (name == "Variables") - m_color = QColor::fromString("#FF8C1A"); - else if (name == "Lists") - m_color = QColor::fromString("#FF661A"); + m_listModel = new ListMonitorListModel(this); } void ListMonitorModel::onValueChanged(const libscratchcpp::VirtualMachine *vm) @@ -50,11 +32,6 @@ MonitorModel::Type ListMonitorModel::type() const return Type::List; } -const QColor &ListMonitorModel::color() const -{ - return m_color; -} - ListMonitorListModel *ListMonitorModel::listModel() const { return m_listModel; diff --git a/src/listmonitormodel.h b/src/listmonitormodel.h index 2afe1d1..45a6e8b 100644 --- a/src/listmonitormodel.h +++ b/src/listmonitormodel.h @@ -3,19 +3,11 @@ #pragma once #include -#include #include "monitormodel.h" Q_MOC_INCLUDE("listmonitorlistmodel.h") -namespace libscratchcpp -{ - -class IBlockSection; - -} - namespace scratchcpprender { @@ -25,7 +17,6 @@ class ListMonitorModel : public MonitorModel { Q_OBJECT QML_ELEMENT - Q_PROPERTY(QColor color READ color NOTIFY colorChanged) Q_PROPERTY(ListMonitorListModel *listModel READ listModel NOTIFY listModelChanged) public: @@ -36,8 +27,6 @@ class ListMonitorModel : public MonitorModel Type type() const override; - const QColor &color() const; - ListMonitorListModel *listModel() const; signals: @@ -45,7 +34,6 @@ class ListMonitorModel : public MonitorModel void listModelChanged(); private: - QColor m_color = Qt::green; ListMonitorListModel *m_listModel = nullptr; }; diff --git a/src/monitormodel.cpp b/src/monitormodel.cpp index 5ff9d8c..9554276 100644 --- a/src/monitormodel.cpp +++ b/src/monitormodel.cpp @@ -2,14 +2,37 @@ #include #include +#include #include "monitormodel.h" using namespace scratchcpprender; MonitorModel::MonitorModel(QObject *parent) : + MonitorModel(nullptr, parent) +{ +} + +MonitorModel::MonitorModel(libscratchcpp::IBlockSection *section, QObject *parent) : QObject(parent) { + if (!section) + return; + + // TODO: Get the color from the block section + std::string name = section->name(); + if (name == "Motion") + m_color = QColor::fromString("#4C97FF"); + else if (name == "Looks") + m_color = QColor::fromString("#9966FF"); + else if (name == "Sound") + m_color = QColor::fromString("#CF63CF"); + else if (name == "Sensing") + m_color = QColor::fromString("#5CB1D6"); + else if (name == "Variables") + m_color = QColor::fromString("#FF8C1A"); + else if (name == "Lists") + m_color = QColor::fromString("#FF661A"); } QString MonitorModel::name() const @@ -31,6 +54,11 @@ bool MonitorModel::visible() const return false; } +const QColor &MonitorModel::color() const +{ + return m_color; +} + void MonitorModel::init(libscratchcpp::Monitor *monitor) { m_monitor = monitor; diff --git a/src/monitormodel.h b/src/monitormodel.h index 29c7ba1..329a284 100644 --- a/src/monitormodel.h +++ b/src/monitormodel.h @@ -4,8 +4,16 @@ #include #include +#include #include +namespace libscratchcpp +{ + +class IBlockSection; + +} + namespace scratchcpprender { @@ -18,6 +26,7 @@ class MonitorModel Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged) Q_PROPERTY(Type type READ type NOTIFY typeChanged) + Q_PROPERTY(QColor color READ color NOTIFY colorChanged) Q_PROPERTY(int x READ x NOTIFY xChanged) Q_PROPERTY(int y READ y NOTIFY yChanged) Q_PROPERTY(unsigned int width READ width WRITE setWidth NOTIFY widthChanged) @@ -34,6 +43,7 @@ class MonitorModel Q_ENUM(Type) MonitorModel(QObject *parent = nullptr); + MonitorModel(libscratchcpp::IBlockSection *section, QObject *parent = nullptr); void init(libscratchcpp::Monitor *monitor) override final; @@ -48,6 +58,8 @@ class MonitorModel virtual Type type() const { return Type::Invalid; } + const QColor &color() const; + int x() const; int y() const; @@ -61,6 +73,7 @@ class MonitorModel signals: void visibleChanged(); void typeChanged(); + void colorChanged(); void xChanged(); void yChanged(); void widthChanged(); @@ -69,6 +82,7 @@ class MonitorModel private: libscratchcpp::Monitor *m_monitor = nullptr; + QColor m_color = Qt::green; }; } // namespace scratchcpprender diff --git a/src/valuemonitormodel.cpp b/src/valuemonitormodel.cpp index d716730..1e55a5d 100644 --- a/src/valuemonitormodel.cpp +++ b/src/valuemonitormodel.cpp @@ -1,7 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include -#include #include #include "valuemonitormodel.h" @@ -13,30 +12,13 @@ static const std::unordered_map MODE_MAP = { { Monitor::Mode::Default, ValueMonitorModel::Mode::Default }, { Monitor::Mode::Large, ValueMonitorModel::Mode::Large }, { Monitor::Mode::Slider, ValueMonitorModel::Mode::Slider } }; ValueMonitorModel::ValueMonitorModel(QObject *parent) : - MonitorModel(parent) + ValueMonitorModel(nullptr, parent) { } ValueMonitorModel::ValueMonitorModel(IBlockSection *section, QObject *parent) : - MonitorModel(parent) + MonitorModel(section, parent) { - if (!section) - return; - - // TODO: Get the color from the block section - std::string name = section->name(); - if (name == "Motion") - m_color = QColor::fromString("#4C97FF"); - else if (name == "Looks") - m_color = QColor::fromString("#9966FF"); - else if (name == "Sound") - m_color = QColor::fromString("#CF63CF"); - else if (name == "Sensing") - m_color = QColor::fromString("#5CB1D6"); - else if (name == "Variables") - m_color = QColor::fromString("#FF8C1A"); - else if (name == "Lists") - m_color = QColor::fromString("#FF661A"); } void ValueMonitorModel::onValueChanged(const VirtualMachine *vm) @@ -70,11 +52,6 @@ void ValueMonitorModel::setValue(const QString &newValue) } } -const QColor &ValueMonitorModel::color() const -{ - return m_color; -} - ValueMonitorModel::Mode ValueMonitorModel::mode() const { if (monitor()) diff --git a/src/valuemonitormodel.h b/src/valuemonitormodel.h index aa7f2cc..8f8b3ff 100644 --- a/src/valuemonitormodel.h +++ b/src/valuemonitormodel.h @@ -2,17 +2,8 @@ #pragma once -#include - #include "monitormodel.h" -namespace libscratchcpp -{ - -class IBlockSection; - -} - namespace scratchcpprender { @@ -21,7 +12,6 @@ class ValueMonitorModel : public MonitorModel Q_OBJECT QML_ELEMENT Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged) - Q_PROPERTY(QColor color READ color NOTIFY colorChanged) Q_PROPERTY(Mode mode READ mode NOTIFY modeChanged) Q_PROPERTY(double sliderMin READ sliderMin NOTIFY sliderMinChanged) Q_PROPERTY(double sliderMax READ sliderMax NOTIFY sliderMaxChanged) @@ -47,7 +37,6 @@ class ValueMonitorModel : public MonitorModel const QString &value() const; void setValue(const QString &newValue); - const QColor &color() const; Mode mode() const; double sliderMin() const; double sliderMax() const; @@ -63,7 +52,6 @@ class ValueMonitorModel : public MonitorModel private: QString m_value; - QColor m_color = Qt::green; }; } // namespace scratchcpprender diff --git a/test/monitor_models/CMakeLists.txt b/test/monitor_models/CMakeLists.txt index ebd6d03..b79245e 100644 --- a/test/monitor_models/CMakeLists.txt +++ b/test/monitor_models/CMakeLists.txt @@ -7,7 +7,9 @@ add_executable( target_link_libraries( monitormodel_test GTest::gtest_main + GTest::gmock_main scratchcpp-render + scratchcpprender_mocks ${QT_LIBS} Qt6::Test ) @@ -24,9 +26,7 @@ add_executable( target_link_libraries( valuemonitormodel_test GTest::gtest_main - GTest::gmock_main scratchcpp-render - scratchcpprender_mocks ${QT_LIBS} Qt6::Test ) @@ -60,9 +60,7 @@ add_executable( target_link_libraries( listmonitormodel_test GTest::gtest_main - GTest::gmock_main scratchcpp-render - scratchcpprender_mocks ${QT_LIBS} Qt6::Test ) diff --git a/test/monitor_models/listmonitormodel_test.cpp b/test/monitor_models/listmonitormodel_test.cpp index 84bc740..86029f6 100644 --- a/test/monitor_models/listmonitormodel_test.cpp +++ b/test/monitor_models/listmonitormodel_test.cpp @@ -3,15 +3,12 @@ #include #include #include -#include #include "../common.h" using namespace scratchcpprender; using namespace libscratchcpp; -using ::testing::Return; - TEST(ListMonitorModelTest, Constructors) { { @@ -71,60 +68,3 @@ TEST(ListMonitorModelTest, Type) ListMonitorModel model; ASSERT_EQ(model.type(), MonitorModel::Type::List); } - -TEST(ListMonitorModelTest, Color) -{ - { - ListMonitorModel model; - ASSERT_EQ(model.color(), Qt::green); - } - - { - ListMonitorModel model(nullptr, nullptr); - ASSERT_EQ(model.color(), Qt::green); - } - - BlockSectionMock section; - - { - // Invalid - EXPECT_CALL(section, name()).WillOnce(Return("")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), Qt::green); - } - - { - // Motion - EXPECT_CALL(section, name()).WillOnce(Return("Motion")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#4C97FF")); - } - - { - // Looks - EXPECT_CALL(section, name()).WillOnce(Return("Looks")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#9966FF")); - } - - { - // Sound - EXPECT_CALL(section, name()).WillOnce(Return("Sound")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#CF63CF")); - } - - { - // Variables - EXPECT_CALL(section, name()).WillOnce(Return("Variables")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#FF8C1A")); - } - - { - // Lists - EXPECT_CALL(section, name()).WillOnce(Return("Lists")); - ListMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#FF661A")); - } -} diff --git a/test/monitor_models/monitormodel_test.cpp b/test/monitor_models/monitormodel_test.cpp index f02373a..4b47e90 100644 --- a/test/monitor_models/monitormodel_test.cpp +++ b/test/monitor_models/monitormodel_test.cpp @@ -2,17 +2,28 @@ #include #include #include +#include #include "../common.h" using namespace scratchcpprender; using namespace libscratchcpp; +using ::testing::Return; + TEST(MonitorModelTest, Constructors) { - MonitorModel model1; - MonitorModel model2(&model1); - ASSERT_EQ(model2.parent(), &model1); + { + MonitorModel model1; + MonitorModel model2(&model1); + ASSERT_EQ(model2.parent(), &model1); + } + + { + MonitorModel model1; + MonitorModel model2(nullptr, &model1); + ASSERT_EQ(model2.parent(), &model1); + } } TEST(MonitorModelTest, Init) @@ -75,6 +86,63 @@ TEST(MonitorModelTest, Type) ASSERT_EQ(model.type(), MonitorModel::Type::Invalid); } +TEST(MonitorModelTest, Color) +{ + { + MonitorModel model; + ASSERT_EQ(model.color(), Qt::green); + } + + { + MonitorModel model(nullptr, nullptr); + ASSERT_EQ(model.color(), Qt::green); + } + + BlockSectionMock section; + + { + // Invalid + EXPECT_CALL(section, name()).WillOnce(Return("")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), Qt::green); + } + + { + // Motion + EXPECT_CALL(section, name()).WillOnce(Return("Motion")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), QColor::fromString("#4C97FF")); + } + + { + // Looks + EXPECT_CALL(section, name()).WillOnce(Return("Looks")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), QColor::fromString("#9966FF")); + } + + { + // Sound + EXPECT_CALL(section, name()).WillOnce(Return("Sound")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), QColor::fromString("#CF63CF")); + } + + { + // Variables + EXPECT_CALL(section, name()).WillOnce(Return("Variables")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), QColor::fromString("#FF8C1A")); + } + + { + // Lists + EXPECT_CALL(section, name()).WillOnce(Return("Lists")); + MonitorModel model(§ion); + ASSERT_EQ(model.color(), QColor::fromString("#FF661A")); + } +} + TEST(MonitorModelTest, X) { MonitorModel model; diff --git a/test/monitor_models/valuemonitormodel_test.cpp b/test/monitor_models/valuemonitormodel_test.cpp index a1000e7..d432b3c 100644 --- a/test/monitor_models/valuemonitormodel_test.cpp +++ b/test/monitor_models/valuemonitormodel_test.cpp @@ -4,15 +4,12 @@ #include #include #include -#include #include "../common.h" using namespace scratchcpprender; using namespace libscratchcpp; -using ::testing::Return; - TEST(ValueMonitorModelTest, Constructors) { { @@ -81,63 +78,6 @@ TEST(ValueMonitorModelTest, Type) ASSERT_EQ(model.type(), MonitorModel::Type::Value); } -TEST(ValueMonitorModelTest, Color) -{ - { - ValueMonitorModel model; - ASSERT_EQ(model.color(), Qt::green); - } - - { - ValueMonitorModel model(nullptr, nullptr); - ASSERT_EQ(model.color(), Qt::green); - } - - BlockSectionMock section; - - { - // Invalid - EXPECT_CALL(section, name()).WillOnce(Return("")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), Qt::green); - } - - { - // Motion - EXPECT_CALL(section, name()).WillOnce(Return("Motion")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#4C97FF")); - } - - { - // Looks - EXPECT_CALL(section, name()).WillOnce(Return("Looks")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#9966FF")); - } - - { - // Sound - EXPECT_CALL(section, name()).WillOnce(Return("Sound")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#CF63CF")); - } - - { - // Variables - EXPECT_CALL(section, name()).WillOnce(Return("Variables")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#FF8C1A")); - } - - { - // Lists - EXPECT_CALL(section, name()).WillOnce(Return("Lists")); - ValueMonitorModel model(§ion); - ASSERT_EQ(model.color(), QColor::fromString("#FF661A")); - } -} - TEST(ValueMonitorModelTest, Mode) { ValueMonitorModel model; From fabb130f16b61b9f118cbba69cf766e714fc43f1 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 31 Aug 2024 11:16:21 +0200 Subject: [PATCH 33/35] Update libscratchcpp to v0.10.0 --- libscratchcpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libscratchcpp b/libscratchcpp index 23044db..363bec1 160000 --- a/libscratchcpp +++ b/libscratchcpp @@ -1 +1 @@ -Subproject commit 23044db243547628fe4c7bca69663680c104e439 +Subproject commit 363bec1b8658a25cb558021f09907bdf3b69f80f From 9cdb494787cf9526b21aa6fb5c2caeb6bd38657a Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:02:31 +0200 Subject: [PATCH 34/35] Add missing signal tests Resolves: #57 --- test/penlayer/CMakeLists.txt | 1 + test/penlayer/penlayer_test.cpp | 20 +++++++++++++++++++ test/projectscene/CMakeLists.txt | 1 + test/projectscene/projectscene_test.cpp | 5 +++++ test/renderedtarget/renderedtarget_test.cpp | 10 ++++++++++ test/textbubbleshape/CMakeLists.txt | 1 + test/textbubbleshape/textbubbleshape_test.cpp | 15 ++++++++++++++ 7 files changed, 53 insertions(+) diff --git a/test/penlayer/CMakeLists.txt b/test/penlayer/CMakeLists.txt index 5ad79f2..525f090 100644 --- a/test/penlayer/CMakeLists.txt +++ b/test/penlayer/CMakeLists.txt @@ -10,6 +10,7 @@ target_link_libraries( scratchcpp-render scratchcpprender_mocks ${QT_LIBS} + Qt6::Test ) add_test(penlayer_test) diff --git a/test/penlayer/penlayer_test.cpp b/test/penlayer/penlayer_test.cpp index 653e8ed..9470f5b 100644 --- a/test/penlayer/penlayer_test.cpp +++ b/test/penlayer/penlayer_test.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -53,6 +54,7 @@ TEST_F(PenLayerTest, Constructors) TEST_F(PenLayerTest, Engine) { PenLayer penLayer; + QSignalSpy spy(&penLayer, &PenLayer::engineChanged); ASSERT_EQ(penLayer.engine(), nullptr); EngineMock engine1, engine2; @@ -61,15 +63,33 @@ TEST_F(PenLayerTest, Engine) EXPECT_CALL(engine1, stageWidth()).WillOnce(Return(480)); penLayer.setEngine(&engine1); ASSERT_EQ(penLayer.engine(), &engine1); + ASSERT_EQ(spy.count(), 1); penLayer.setWidth(500); penLayer.setHeight(400); EXPECT_CALL(engine2, stageWidth()).WillOnce(Return(500)); penLayer.setEngine(&engine2); ASSERT_EQ(penLayer.engine(), &engine2); + ASSERT_EQ(spy.count(), 2); penLayer.setEngine(nullptr); ASSERT_EQ(penLayer.engine(), nullptr); + ASSERT_EQ(spy.count(), 3); +} + +TEST_F(PenLayerTest, HqPen) +{ + PenLayer penLayer; + QSignalSpy spy(&penLayer, &PenLayer::hqPenChanged); + ASSERT_FALSE(penLayer.hqPen()); + + penLayer.setHqPen(true); + ASSERT_TRUE(penLayer.hqPen()); + ASSERT_EQ(spy.count(), 1); + + penLayer.setHqPen(false); + ASSERT_FALSE(penLayer.hqPen()); + ASSERT_EQ(spy.count(), 2); } TEST_F(PenLayerTest, FramebufferObject) diff --git a/test/projectscene/CMakeLists.txt b/test/projectscene/CMakeLists.txt index d9bdf67..2f040f7 100644 --- a/test/projectscene/CMakeLists.txt +++ b/test/projectscene/CMakeLists.txt @@ -10,6 +10,7 @@ target_link_libraries( scratchcpp-render scratchcpprender_mocks ${QT_LIBS} + Qt6::Test ) add_test(projectscene_test) diff --git a/test/projectscene/projectscene_test.cpp b/test/projectscene/projectscene_test.cpp index 5920b39..74443f3 100644 --- a/test/projectscene/projectscene_test.cpp +++ b/test/projectscene/projectscene_test.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -11,20 +12,24 @@ using ::testing::Return; TEST(ProjectSceneTest, Engine) { ProjectScene scene; + QSignalSpy spy(&scene, &ProjectScene::engineChanged); ASSERT_EQ(scene.engine(), nullptr); EngineMock engine; scene.setEngine(&engine); ASSERT_EQ(scene.engine(), &engine); + ASSERT_EQ(spy.count(), 1); } TEST(ProjectSceneTest, StageScale) { ProjectScene scene; + QSignalSpy spy(&scene, &ProjectScene::stageScaleChanged); ASSERT_EQ(scene.stageScale(), 1); scene.setStageScale(5.79); ASSERT_EQ(scene.stageScale(), 5.79); + ASSERT_EQ(spy.count(), 1); } TEST(ProjectSceneTest, HandleMouseMove) diff --git a/test/renderedtarget/renderedtarget_test.cpp b/test/renderedtarget/renderedtarget_test.cpp index 4e3c2e6..850600e 100644 --- a/test/renderedtarget/renderedtarget_test.cpp +++ b/test/renderedtarget/renderedtarget_test.cpp @@ -623,31 +623,37 @@ TEST_F(RenderedTargetTest, SpriteDragging) TEST_F(RenderedTargetTest, Engine) { RenderedTarget target; + QSignalSpy spy(&target, &RenderedTarget::engineChanged); ASSERT_EQ(target.engine(), nullptr); EngineMock engine; target.setEngine(&engine); ASSERT_EQ(target.engine(), &engine); + ASSERT_EQ(spy.count(), 1); } TEST_F(RenderedTargetTest, StageModel) { RenderedTarget target; + QSignalSpy spy(&target, &RenderedTarget::stageModelChanged); ASSERT_EQ(target.stageModel(), nullptr); StageModel model; target.setStageModel(&model); ASSERT_EQ(target.stageModel(), &model); + ASSERT_EQ(spy.count(), 1); } TEST_F(RenderedTargetTest, SpriteModel) { RenderedTarget target; + QSignalSpy spy(&target, &RenderedTarget::spriteModelChanged); ASSERT_EQ(target.spriteModel(), nullptr); SpriteModel model; target.setSpriteModel(&model); ASSERT_EQ(target.spriteModel(), &model); + ASSERT_EQ(spy.count(), 1); } TEST_F(RenderedTargetTest, ScratchTarget) @@ -672,20 +678,24 @@ TEST_F(RenderedTargetTest, ScratchTarget) TEST_F(RenderedTargetTest, MouseArea) { RenderedTarget target; + QSignalSpy spy(&target, &RenderedTarget::mouseAreaChanged); ASSERT_EQ(target.mouseArea(), nullptr); SceneMouseArea mouseArea; target.setMouseArea(&mouseArea); ASSERT_EQ(target.mouseArea(), &mouseArea); + ASSERT_EQ(spy.count(), 1); } TEST_F(RenderedTargetTest, StageScale) { RenderedTarget target; + QSignalSpy spy(&target, &RenderedTarget::stageScaleChanged); ASSERT_EQ(target.stageScale(), 1); target.setStageScale(6.4); ASSERT_EQ(target.stageScale(), 6.4); + ASSERT_EQ(spy.count(), 1); } TEST_F(RenderedTargetTest, GraphicEffects) diff --git a/test/textbubbleshape/CMakeLists.txt b/test/textbubbleshape/CMakeLists.txt index 7edf397..8aed41c 100644 --- a/test/textbubbleshape/CMakeLists.txt +++ b/test/textbubbleshape/CMakeLists.txt @@ -8,6 +8,7 @@ target_link_libraries( GTest::gtest_main scratchcpp-render ${QT_LIBS} + Qt6::Test ) add_test(textbubbleshape_test) diff --git a/test/textbubbleshape/textbubbleshape_test.cpp b/test/textbubbleshape/textbubbleshape_test.cpp index bc6d9c2..3bb5c92 100644 --- a/test/textbubbleshape/textbubbleshape_test.cpp +++ b/test/textbubbleshape/textbubbleshape_test.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "../common.h" @@ -41,56 +42,70 @@ TEST_F(TextBubbleShapeTest, Constructors) TEST_F(TextBubbleShapeTest, Type) { TextBubbleShape bubble; + QSignalSpy spy(&bubble, &TextBubbleShape::typeChanged); ASSERT_EQ(bubble.type(), TextBubbleShape::Type::Say); bubble.setType(TextBubbleShape::Type::Think); ASSERT_EQ(bubble.type(), TextBubbleShape::Type::Think); + ASSERT_EQ(spy.count(), 1); bubble.setType(TextBubbleShape::Type::Think); ASSERT_EQ(bubble.type(), TextBubbleShape::Type::Think); + ASSERT_EQ(spy.count(), 1); bubble.setType(TextBubbleShape::Type::Say); ASSERT_EQ(bubble.type(), TextBubbleShape::Type::Say); + ASSERT_EQ(spy.count(), 2); } TEST_F(TextBubbleShapeTest, OnSpriteRight) { TextBubbleShape bubble; + QSignalSpy spy(&bubble, &TextBubbleShape::onSpriteRightChanged); ASSERT_TRUE(bubble.onSpriteRight()); bubble.setOnSpriteRight(false); ASSERT_FALSE(bubble.onSpriteRight()); + ASSERT_EQ(spy.count(), 1); bubble.setOnSpriteRight(false); ASSERT_FALSE(bubble.onSpriteRight()); + ASSERT_EQ(spy.count(), 1); bubble.setOnSpriteRight(true); ASSERT_TRUE(bubble.onSpriteRight()); + ASSERT_EQ(spy.count(), 2); } TEST_F(TextBubbleShapeTest, StageScale) { TextBubbleShape bubble; + QSignalSpy spy(&bubble, &TextBubbleShape::stageScaleChanged); ASSERT_EQ(bubble.stageScale(), 1); bubble.setStageScale(6.48); ASSERT_EQ(bubble.stageScale(), 6.48); + ASSERT_EQ(spy.count(), 1); } TEST_F(TextBubbleShapeTest, NativeWidth) { TextBubbleShape bubble; + QSignalSpy spy(&bubble, &TextBubbleShape::nativeWidthChanged); ASSERT_EQ(bubble.nativeWidth(), 0); bubble.setNativeWidth(48.1); ASSERT_EQ(bubble.nativeWidth(), 48.1); + ASSERT_EQ(spy.count(), 1); } TEST_F(TextBubbleShapeTest, NativeHeight) { TextBubbleShape bubble; + QSignalSpy spy(&bubble, &TextBubbleShape::nativeHeightChanged); ASSERT_EQ(bubble.nativeHeight(), 0); bubble.setNativeHeight(87.5); ASSERT_EQ(bubble.nativeHeight(), 87.5); + ASSERT_EQ(spy.count(), 1); } From 3b639b29f495132a7fed206c6de0c821091c64fc Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:50:56 +0200 Subject: [PATCH 35/35] Add test for SceneMouseArea events Resolves: #93 --- test/scenemousearea/scenemousearea_test.cpp | 52 +++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/test/scenemousearea/scenemousearea_test.cpp b/test/scenemousearea/scenemousearea_test.cpp index 554b3ba..630bd65 100644 --- a/test/scenemousearea/scenemousearea_test.cpp +++ b/test/scenemousearea/scenemousearea_test.cpp @@ -7,6 +7,8 @@ using namespace scratchcpprender; +using ::testing::NiceMock; + TEST(SceneMouseAreaTest, Constructors) { SceneMouseArea area1; @@ -15,6 +17,56 @@ TEST(SceneMouseAreaTest, Constructors) ASSERT_EQ(area2.parentItem(), &area1); } +TEST(SceneMouseAreaTest, Events) +{ + QPointingDevice dev; + SceneMouseArea mouseArea; + ProjectLoader loader; + mouseArea.setProjectLoader(&loader); + NiceMock stage; + mouseArea.setStage(&stage); + + // mouseMoved + { + QHoverEvent event(QEvent::HoverMove, {}, {}, {}, Qt::NoModifier, &dev); + QSignalSpy spy(&mouseArea, &SceneMouseArea::mouseMoved); + QCoreApplication::sendEvent(&mouseArea, &event); + ASSERT_EQ(spy.count(), 1); + } + + // mousePressed + { + QMouseEvent event(QEvent::MouseButtonPress, {}, {}, {}, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, &dev); + QSignalSpy spy(&mouseArea, &SceneMouseArea::mousePressed); + QCoreApplication::sendEvent(&mouseArea, &event); + ASSERT_EQ(spy.count(), 1); + } + + // mouseReleased + { + QMouseEvent event(QEvent::MouseButtonRelease, {}, {}, {}, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, &dev); + QSignalSpy spy(&mouseArea, &SceneMouseArea::mouseReleased); + QCoreApplication::sendEvent(&mouseArea, &event); + ASSERT_EQ(spy.count(), 1); + } + + // mouseWheelUp + { + QWheelEvent event(QPointF(), QPointF(), QPoint(2, 3), QPoint(10, 15), Qt::LeftButton, Qt::NoModifier, Qt::NoScrollPhase, false); + QSignalSpy spy(&mouseArea, &SceneMouseArea::mouseWheelUp); + QCoreApplication::sendEvent(&mouseArea, &event); + ASSERT_EQ(spy.count(), 1); + } + + // mouseWheelDown + { + QWheelEvent event(QPointF(), QPointF(), QPoint(2, 3), QPoint(10, -15), Qt::LeftButton, Qt::NoModifier, Qt::NoScrollPhase, false); + QSignalSpy spy(&mouseArea, &SceneMouseArea::mouseWheelDown); + QCoreApplication::sendEvent(&mouseArea, &event); + ASSERT_EQ(spy.count(), 1); + } +} + TEST(SceneMouseAreaTest, Stage) { SceneMouseArea mouseArea;