captureScreen compatible, saveFile at offthread

This commit is contained in:
halx99 2020-09-15 14:12:00 +08:00
parent b956637c74
commit e91b7240e6
2 changed files with 11 additions and 6 deletions

View File

@ -163,17 +163,22 @@ void captureNode(Node* startNode, std::function<void(RefPtr<Image>)> imageCallba
}
// [DEPRECATED]
void captureScreen(const std::function<void(bool, const std::string&)>& afterCaptured, const std::string& filename)
void captureScreen(std::function<void(bool, const std::string&)> afterCap, const std::string& filename)
{
std::string outfile;
if (FileUtils::getInstance()->isAbsolutePath(filename))
outfile = filename;
else
outfile = FileUtils::getInstance()->getWritablePath() + filename;
captureScreen([=,fullPath=std::move(outfile)](RefPtr<Image> image) {
bool ok = image && image->saveToFile(fullPath, false);
afterCaptured(ok, fullPath);
captureScreen([_afterCap = std::move(afterCap), _outfile = std::move(outfile)](RefPtr<Image> image) mutable {
AsyncTaskPool::getInstance()->enqueue(AsyncTaskPool::TaskType::TASK_IO, [_afterCap = std::move(_afterCap), image = std::move(image), _outfile = std::move(_outfile)]() mutable
{
bool ok = image->saveToFile(_outfile);
Director::getInstance()->getScheduler()->performFunctionInCocosThread([ok, _afterCap = std::move(_afterCap), _outfile = std::move(_outfile)]{
_afterCap(ok, _outfile);
});
});
});
}

View File

@ -91,7 +91,7 @@ namespace utils
* base filename ("hello.png" etc.), don't use a relative path containing directory names.("mydir/hello.png" etc.).
* @since v4.0
*/
CC_DLL void captureScreen(const std::function<void(bool, const std::string&)>& afterCaptured, const std::string& filename);
CC_DLL void captureScreen(std::function<void(bool, const std::string&)> afterCap, const std::string& filename);
/** Find children by name, it will return all child that has the same name.
* It supports c++ 11 regular expression. It is a helper function of `Node::enumerateChildren()`.