Skip to content

Commit 2357cd4

Browse files
committed
RenderedTarget: Use IEngine::getVisibleTargets()
1 parent 50f84b6 commit 2357cd4

File tree

3 files changed

+31
-35
lines changed

3 files changed

+31
-35
lines changed

src/renderedtarget.cpp

+4-33
Original file line numberDiff line numberDiff line change
@@ -678,10 +678,13 @@ bool RenderedTarget::touchingClones(const std::vector<libscratchcpp::Sprite *> &
678678
bool RenderedTarget::touchingColor(const Value &color) const
679679
{
680680
// https://github.com/scratchfoundation/scratch-render/blob/0a04c2fb165f5c20406ec34ab2ea5682ae45d6e0/src/RenderWebGL.js#L775-L841
681+
if (!m_engine)
682+
return false;
683+
681684
QRgb rgb = convertColor(color);
682685

683686
std::vector<Target *> targets;
684-
getVisibleTargets(targets);
687+
m_engine->getVisibleTargets(targets);
685688

686689
QRectF myRect = touchingBounds();
687690
std::vector<IRenderedTarget *> candidates;
@@ -870,38 +873,6 @@ CpuTextureManager *RenderedTarget::textureManager() const
870873
return m_textureManager.get();
871874
}
872875

873-
void RenderedTarget::getVisibleTargets(std::vector<Target *> &dst) const
874-
{
875-
dst.clear();
876-
877-
if (!m_engine)
878-
return;
879-
880-
const auto &targets = m_engine->targets();
881-
882-
for (auto target : targets) {
883-
Q_ASSERT(target);
884-
885-
if (target->isStage())
886-
dst.push_back(target.get());
887-
else {
888-
Sprite *sprite = static_cast<Sprite *>(target.get());
889-
890-
if (sprite->visible())
891-
dst.push_back(target.get());
892-
893-
const auto &clones = sprite->clones();
894-
895-
for (auto clone : clones) {
896-
if (clone->visible())
897-
dst.push_back(clone.get());
898-
}
899-
}
900-
}
901-
902-
std::sort(dst.begin(), dst.end(), [](Target *t1, Target *t2) { return t1->layerOrder() > t2->layerOrder(); });
903-
}
904-
905876
QRectF RenderedTarget::touchingBounds() const
906877
{
907878
// https://github.com/scratchfoundation/scratch-render/blob/0a04c2fb165f5c20406ec34ab2ea5682ae45d6e0/src/RenderWebGL.js#L1330-L1350

src/renderedtarget.h

-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ class RenderedTarget : public IRenderedTarget
130130
QPointF mapFromStageWithOriginPoint(const QPointF &scenePoint) const;
131131
QPointF mapFromScratchToLocal(const QPointF &point) const;
132132
CpuTextureManager *textureManager() const;
133-
void getVisibleTargets(std::vector<libscratchcpp::Target *> &dst) const;
134133
QRectF touchingBounds() const;
135134
QRectF candidatesBounds(const QRectF &targetRect, const std::vector<libscratchcpp::Target *> &candidates, std::vector<IRenderedTarget *> &dst) const;
136135
QRectF candidatesBounds(const QRectF &targetRect, const std::vector<libscratchcpp::Sprite *> &candidates, std::vector<IRenderedTarget *> &dst) const;

test/renderedtarget/renderedtarget_test.cpp

+27-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ using namespace libscratchcpp;
2323

2424
using ::testing::Return;
2525
using ::testing::ReturnRef;
26+
using ::testing::Invoke;
27+
using ::testing::_;
2628

2729
class RenderedTargetTest : public testing::Test
2830
{
@@ -1093,6 +1095,31 @@ TEST_F(RenderedTargetTest, TouchingColor)
10931095
sprite2->setLayerOrder(3);
10941096

10951097
const std::vector<std::shared_ptr<Target>> targets = { stage, sprite, sprite1 };
1098+
EXPECT_CALL(engine, getVisibleTargets(_)).WillRepeatedly(Invoke([&targets](std::vector<Target *> &dst) {
1099+
dst.clear();
1100+
1101+
for (auto target : targets) {
1102+
ASSERT_TRUE(target);
1103+
1104+
if (target->isStage())
1105+
dst.push_back(target.get());
1106+
else {
1107+
Sprite *sprite = static_cast<Sprite *>(target.get());
1108+
1109+
if (sprite->visible())
1110+
dst.push_back(target.get());
1111+
1112+
const auto &clones = sprite->clones();
1113+
1114+
for (auto clone : clones) {
1115+
if (clone->visible())
1116+
dst.push_back(clone.get());
1117+
}
1118+
}
1119+
}
1120+
1121+
std::sort(dst.begin(), dst.end(), [](Target *t1, Target *t2) { return t1->layerOrder() > t2->layerOrder(); });
1122+
}));
10961123

10971124
QQuickItem parent;
10981125
parent.setWidth(480);
@@ -1128,7 +1155,6 @@ TEST_F(RenderedTargetTest, TouchingColor)
11281155
target.beforeRedraw();
11291156

11301157
Rect penBounds(5, 1, 6, -5);
1131-
EXPECT_CALL(engine, targets()).WillRepeatedly(ReturnRef(targets));
11321158
EXPECT_CALL(stageTarget, stageModel()).WillRepeatedly(Return(&stageModel));
11331159
EXPECT_CALL(target1, stageModel()).WillRepeatedly(Return(nullptr));
11341160
EXPECT_CALL(target2, stageModel()).WillRepeatedly(Return(nullptr));

0 commit comments

Comments
 (0)