5#ifndef FACES_DOGFACE_H_
6#define FACES_DOGFACE_H_
10#include "../BoundingRect.h"
11#include "../DrawContext.h"
12#include "../Drawable.h"
18 uint32_t cx = rect.getCenterX();
19 uint32_t cy = rect.getCenterY();
20 Gaze g = ctx->getLeftGaze();
22 uint16_t primaryColor =
23 ctx->getColorDepth() == 1 ? 1 : cp->get(COLOR_PRIMARY);
24 uint16_t backgroundColor = ctx->getColorDepth() == 1
26 : cp->get(COLOR_BACKGROUND);
27 uint32_t offsetX = g.getHorizontal() * 8;
28 uint32_t offsetY = g.getVertical() * 5;
29 float eor = ctx->getLeftEyeOpenRatio();
33 spi->fillRect(cx - 15, cy - 2, 30, 4, primaryColor);
36 spi->fillEllipse(cx, cy, 30, 25, primaryColor);
37 spi->fillEllipse(cx, cy, 28, 23, backgroundColor);
39 spi->fillEllipse(cx + offsetX, cy + offsetY, 18, 18, primaryColor);
40 spi->fillEllipse(cx + offsetX - 3, cy + offsetY - 3, 3, 3,
54 DogMouth(uint16_t minWidth, uint16_t maxWidth, uint16_t minHeight,
59 maxHeight{maxHeight} {}
61 uint16_t primaryColor =
62 ctx->getColorDepth() == 1
64 : ctx->getColorPalette()->get(COLOR_PRIMARY);
65 uint16_t backgroundColor =
66 ctx->getColorDepth() == 1
68 : ctx->getColorPalette()->get(COLOR_BACKGROUND);
69 uint32_t cx = rect.getCenterX();
70 uint32_t cy = rect.getCenterY();
71 float openRatio = ctx->getMouthOpenRatio();
72 uint32_t h = minHeight + (maxHeight - minHeight) * openRatio;
73 uint32_t w = minWidth + (maxWidth - minWidth) * (1 - openRatio);
75 spi->fillEllipse(cx, cy, w / 2, h / 2, primaryColor);
76 spi->fillEllipse(cx, cy, w / 2 - 4, h / 2 - 4, TFT_RED);
77 spi->fillRect(cx - w / 2, cy - h / 2, w, h / 2, backgroundColor);
79 spi->fillEllipse(cx, cy - 15, 10, 6, primaryColor);
80 spi->fillEllipse(cx - 28, cy, 30, 15, primaryColor);
81 spi->fillEllipse(cx + 28, cy, 30, 15, primaryColor);
82 spi->fillEllipse(cx - 29, cy - 4, 27, 15, backgroundColor);
83 spi->fillEllipse(cx + 29, cy - 4, 27, 15, backgroundColor);
Definition: BoundingRect.h:10
Definition: ColorPalette.h:50
Definition: DrawContext.h:22
Definition: Drawable.h:13