Go to the documentation of this file.
42 #define GDRAW_FIELD(value, shift) uint8_t(uint8_t(Graphics::Drawing::value) << shift)
43 #define GDRAW_OPCODE(opcode) GDRAW_FIELD(opcode, 6)
44 #define GDRAW_TYPE(type) GDRAW_FIELD(Header::type, 4)
45 #define GDRAW_CMD(cmd) GDRAW_OPCODE(OpCode::execute) | GDRAW_TYPE(Type::uint8) | uint8_t(Graphics::Drawing::cmd),
46 #define GDRAW_UINT16(value) uint8_t(value), uint8_t((value) >> 8),
47 #define GDRAW_INT16(value) uint8_t(abs(value)), uint8_t(abs(value) >> 8),
48 #define GDRAW_UINT32(value) uint8_t(value), uint8_t((value) >> 8), uint8_t((value) >> 16), uint8_t((value) >> 24),
49 #define GDRAW_MAKE_UINT32(w1, w2) (uint32_t(w2) << 16) | uint32_t(w1)
50 #define GDRAW_REGDEF(reg, size) uint8_t(offsetof(Graphics::Drawing::Registers, reg) / size)
51 #define GDRAW_REG_UINT8(opcode, reg, value) \
52 GDRAW_OPCODE(opcode) | GDRAW_TYPE(Type::uint8) | GDRAW_REGDEF(reg, 1), uint8_t(value),
53 #define GDRAW_REG_UINT16(opcode, reg, value) \
54 GDRAW_OPCODE(opcode) | GDRAW_TYPE(Type::uint16) | GDRAW_REGDEF(reg, 2), GDRAW_UINT16(value)
55 #define GDRAW_REG_INT16(reg, value) \
56 ((value) < 0 ? GDRAW_OPCODE(OpCode::sub) : GDRAW_OPCODE(OpCode::add)) | GDRAW_TYPE(Type::uint16) | \
57 GDRAW_REGDEF(reg, 2), \
59 #define GDRAW_REG_UINT32(opcode, reg, value) \
60 GDRAW_OPCODE(opcode) | GDRAW_TYPE(Type::uint32) | GDRAW_REGDEF(reg, 4), GDRAW_UINT32(value)
61 #define GDRAW_RESET() GDRAW_CMD(Command::reset)
62 #define GDRAW_SAVE() GDRAW_CMD(Command::push)
63 #define GDRAW_RESTORE() GDRAW_CMD(Command::pop)
64 #define GDRAW_XREL(cx) GDRAW_REG_INT16(x2, cx)
65 #define GDRAW_YREL(cy) GDRAW_REG_INT16(y2, cy)
66 #define GDRAW_XABS(x_) GDRAW_REG_UINT16(OpCode::store, x2, x_)
67 #define GDRAW_YABS(y_) GDRAW_REG_UINT16(OpCode::store, y2, y_)
68 #define GDRAW_ID(id_) GDRAW_REG_UINT16(OpCode::store, id, id_)
69 #define GDRAW_SELECT_PEN(id) GDRAW_REG_UINT16(OpCode::store, penId, id)
70 #define GDRAW_SELECT_BRUSH(id) GDRAW_REG_UINT16(OpCode::store, brushId, id)
71 #define GDRAW_SELECT_TEXT(id) GDRAW_REG_UINT16(OpCode::store, textId, id)
72 #define GDRAW_OFFSET_LENGTH(off, len) GDRAW_REG_UINT32(OpCode::store, length, GDRAW_MAKE_UINT32(len, off))
73 #define GDRAW_PEN_COLOR(col) GDRAW_REG_UINT32(OpCode::store, penColor, uint32_t(col))
74 #define GDRAW_PEN_WIDTH(width) GDRAW_REG_UINT16(OpCode::store, penWidth, width)
75 #define GDRAW_STORE_PEN(id) GDRAW_ID(id) GDRAW_CMD(Command::storePen)
76 #define GDRAW_BRUSH_COLOR(col) GDRAW_REG_UINT32(OpCode::store, brushColor, uint32_t(col))
77 #define GDRAW_STORE_BRUSH(id) GDRAW_ID(id) GDRAW_CMD(Command::storeBrush)
78 #define GDRAW_END_ANGLE(value) GDRAW_REG_UINT16(OpCode::store, endAngle, value) GDRAW_CMD(Command::angle)
79 #define GDRAW_MOVE() GDRAW_CMD(Command::move)
80 #define GDRAW_LINE() GDRAW_CMD(Command::line)
81 #define GDRAW_LINE_TO() GDRAW_CMD(Command::lineto)
82 #define GDRAW_RADIUS(value) GDRAW_REG_UINT16(OpCode::store, radius, value)
83 #define GDRAW_RECT(radius) GDRAW_RADIUS(radius) GDRAW_CMD(Command::drawRect)
84 #define GDRAW_FILL_RECT(radius) GDRAW_RADIUS(radius) GDRAW_CMD(Command::fillRect)
85 #define GDRAW_ELLIPSE() GDRAW_CMD(Command::drawEllipse)
86 #define GDRAW_FILL_ELLIPSE() GDRAW_CMD(Command::fillEllipse)
87 #define GDRAW_START_ANGLE(angle) GDRAW_REG_UINT16(OpCode::store, startAngle, value)
88 #define GDRAW_ANGLE(angle) GDRAW_REG_UINT16(OpCode::store, angle, value)
89 #define GDRAW_ARC(startAngle) GDRAW_START_ANGLE(startAngle) GDRAW_CMD(Command::drawArc)
90 #define GDRAW_FILL_ARC(startAngle) GDRAW_START_ANGLE(startAngle) GDRAW_CMD(Command::fillArc)
91 #define GDRAW_CIRCLE(radius) GDRAW_RADIUS(radius) GDRAW_CMD(Command::drawCircle)
92 #define GDRAW_FILL_CIRCLE(radius) GDRAW_RADIUS(radius) GDRAW_CMD(Command::fillCircle)
93 #define GDRAW_BEGIN_SUB(id) GDRAW_ID(id) GDRAW_CMD(Command::beginSub)
94 #define GDRAW_END_SUB() GDRAW_CMD(Command::endSub)
95 #define GDRAW_CALL(id) GDRAW_ID(id) GDRAW_CMD(Command::call)
96 #define GDRAW_RESOURCE(id, dataType, kind) \
98 GDRAW_OPCODE(OpCode::store) | GDRAW_TYPE(Type::resource) | GDRAW_FIELD(Header::dataType, 2) | \
99 GDRAW_FIELD(Header::LengthSize::uint8, 1) | GDRAW_FIELD(Header::kind, 0)
100 #define GDRAW_DEFINE_CHARS(id, len, ...) GDRAW_RESOURCE(id, DataType::charArray, ResourceKind::text), len, __VA_ARGS__,
101 #define GDRAW_DRAW_CHARS(len, ...) \
102 GDRAW_DEFINE_CHARS(0, len, __VA_ARGS__) GDRAW_SELECT_TEXT(0) GDRAW_CMD(Command::drawText)
103 #define GDRAW_DRAW_TEXT(id) GDRAW_SELECT_TEXT(id) GDRAW_CMD(Command::drawText)
104 #define GDRAW_FONT_STYLE(font_id, style_) \
105 GDRAW_REG_UINT32(OpCode::store, style, GDRAW_MAKE_UINT32(uint32_t(style_), font_id))