-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpenblocks.h
More file actions
91 lines (75 loc) · 3.95 KB
/
penblocks.h
File metadata and controls
91 lines (75 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// SPDX-License-Identifier: LGPL-3.0-or-later
#pragma once
#include <QColor>
#include <scratchcpp/iextension.h>
namespace scratchcpprender
{
class TargetModel;
class PenState;
class PenBlocks : public libscratchcpp::IExtension
{
public:
enum Inputs
{
COLOR,
COLOR_PARAM,
VALUE,
SIZE,
SHADE,
HUE
};
std::string name() const override;
std::string description() const override;
libscratchcpp::Rgb color() const override;
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);
static void compileChangePenColorParamBy(libscratchcpp::Compiler *compiler);
static void compileSetPenColorParamTo(libscratchcpp::Compiler *compiler);
static void compileChangePenSizeBy(libscratchcpp::Compiler *compiler);
static void compileSetPenSizeTo(libscratchcpp::Compiler *compiler);
static void compileChangePenShadeBy(libscratchcpp::Compiler *compiler);
static void compileSetPenShadeToNumber(libscratchcpp::Compiler *compiler);
static void compileChangePenHueBy(libscratchcpp::Compiler *compiler);
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);
static unsigned int changePenColorParamBy(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenColorBy(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenSaturationBy(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenBrightnessBy(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenTransparencyBy(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenColorParamTo(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenColorTo(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenSaturationTo(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenBrightnessTo(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenTransparencyTo(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenSizeBy(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenSizeTo(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenShadeBy(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenShadeToNumber(libscratchcpp::VirtualMachine *vm);
static unsigned int changePenHueBy(libscratchcpp::VirtualMachine *vm);
static unsigned int setPenHueToNumber(libscratchcpp::VirtualMachine *vm);
private:
enum class ColorParam
{
COLOR,
SATURATION,
BRIGHTNESS,
TRANSPARENCY
};
static TargetModel *getTargetModel(libscratchcpp::VirtualMachine *vm);
static void setOrChangeColorParam(ColorParam param, double value, PenState &penState, bool change);
static void setPenShade(int shade, PenState &penState);
static void legacyUpdatePenColor(PenState &penState);
static double wrapClamp(double n, double min, double max);
static QRgb mixRgb(QRgb rgb0, QRgb rgb1, double fraction1);
static const std::unordered_map<std::string, ColorParam> COLOR_PARAM_MAP;
};
} // namespace scratchcpprender