libscratchcpp
A library for C++ based Scratch project players
Loading...
Searching...
No Matches
scratchconfiguration.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2
3#pragma once
4
5#include <memory>
6#include <vector>
7
8#include "global.h"
9
10namespace libscratchcpp
11{
12
13class IExtension;
14class IGraphicsEffect;
15class ScratchConfigurationPrivate;
16
19{
20 public:
22
23 static void registerExtension(std::shared_ptr<IExtension> extension);
24 static void removeExtension(std::shared_ptr<IExtension> extension);
25 static IExtension *getExtension(const std::string &name);
26
28 template<class T>
30 {
31 auto &extensions = getExtensions();
32 for (auto ext : extensions) {
33 if (dynamic_cast<T *>(ext.get()))
34 return ext.get();
35 }
36
37 return nullptr;
38 };
39
40 static void registerGraphicsEffect(std::shared_ptr<IGraphicsEffect> effect);
41 static void removeGraphicsEffect(const std::string &name);
42 static IGraphicsEffect *getGraphicsEffect(const std::string &name);
43
44 static const std::string &version();
45 static int majorVersion();
46 static int minorVersion();
47 static int patchVersion();
48
49 private:
50 static const std::vector<std::shared_ptr<IExtension>> getExtensions();
51 static std::shared_ptr<ScratchConfigurationPrivate> &getImpl();
52
53 static inline std::shared_ptr<ScratchConfigurationPrivate> impl;
54};
55
56} // namespace libscratchcpp
The IExtension class is an interface for extensions.
Definition iextension.h:18
The IGraphicsEffects class is an interface for custom graphics effects.
Definition igraphicseffect.h:14
static IExtension * getExtension()
Definition scratchconfiguration.h:29
static IExtension * getExtension(const std::string &name)
Definition scratchconfiguration.cpp:24
static void removeExtension(std::shared_ptr< IExtension > extension)
Definition scratchconfiguration.cpp:18
static void registerExtension(std::shared_ptr< IExtension > extension)
Definition scratchconfiguration.cpp:12
#define LIBSCRATCHCPP_EXPORT
Definition global.h:17
The main namespace of the library.
Definition asset.h:10