20#include "RZA1/cpu_specific.h"
21#include "definitions.h"
22#include "deluge/util/d_string.h"
28namespace deluge::hid::display {
32namespace oled_canvas {
34enum BorderRadius : uint8_t {
42 bool operator==(
const Point& other)
const noexcept {
return x == other.x && y == other.y; }
47 std::optional<uint8_t> min_x{std::nullopt};
48 std::optional<uint8_t> max_x{std::nullopt};
49 std::optional<std::function<void(
Point)>> point_callback{std::nullopt};
57 Canvas(Canvas
const& other) =
delete;
58 Canvas(Canvas&& other) =
delete;
60 Canvas& operator=(Canvas
const& other) =
delete;
61 Canvas& operator=(Canvas&& other) =
delete;
70 memset(image_, 0,
sizeof(image_));
79 void clearAreaExact(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY);
118 void drawRectangle(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY);
126 void drawRectangleRounded(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY, BorderRadius radius = SMALL);
133 void drawCircle(int32_t centerX, int32_t centerY, int32_t radius,
bool fill =
false);
145 void drawString(std::string_view str, int32_t pixelX, int32_t pixelY, int32_t textWidth, int32_t textHeight,
146 int32_t scrollPos = 0, int32_t endX = OLED_MAIN_WIDTH_PIXELS,
bool useTextWidth =
false);
157 void drawStringCentred(
char const*
string, int32_t pixelY, int32_t textWidth, int32_t textHeight,
158 int32_t centrePos = OLED_MAIN_WIDTH_PIXELS / 2);
168 void drawStringCentered(
char const*
string, int32_t startX, int32_t startY, int32_t textSpacingX,
169 int32_t textSpacingY, int32_t totalWidth);
180 int32_t textSpacingY, int32_t totalWidth);
197 void drawStringAlignRight(
char const*
string, int32_t pixelY, int32_t textWidth, int32_t textHeight,
198 int32_t rightPos = OLED_MAIN_WIDTH_PIXELS);
201 void drawChar(uint8_t theChar, int32_t pixelX, int32_t pixelY, int32_t textWidth, int32_t textHeight,
202 int32_t scrollPos = 0, int32_t endX = OLED_MAIN_WIDTH_PIXELS);
238 void drawGraphicMultiLine(uint8_t
const* graphic, int32_t startX, int32_t startY, int32_t width, int32_t height = 8,
239 int32_t numBytesTall = 1,
bool reversed =
false);
246 void drawIcon(
const Icon& icon, int32_t x, int32_t y,
bool reversed =
false);
255 void drawIconCentered(
const Icon& icon, int32_t startX, int32_t totalWidth, int32_t y,
bool reversed =
false);
260 void drawScreenTitle(std::string_view text,
bool drawSeparator =
true);
268 void invertArea(int32_t xMin, int32_t width, int32_t startY, int32_t endY);
276 void invertAreaRounded(int32_t xMin, int32_t width, int32_t startY, int32_t endY, BorderRadius radius = SMALL);
Definition d_stringbuf.h:16
void drawString(std::string_view str, int32_t pixelX, int32_t pixelY, int32_t textWidth, int32_t textHeight, int32_t scrollPos=0, int32_t endX=OLED_MAIN_WIDTH_PIXELS, bool useTextWidth=false)
Definition canvas.cpp:299
void clearPixel(int32_t x, int32_t y)
Clear a single pixel.
Definition canvas.cpp:102
void drawIconCentered(const Icon &icon, int32_t startX, int32_t totalWidth, int32_t y, bool reversed=false)
Definition canvas.cpp:709
void drawScreenTitle(std::string_view text, bool drawSeparator=true)
Definition canvas.cpp:717
int32_t getStringWidthInPixels(char const *string, int32_t textHeight)
Definition canvas.cpp:616
void drawChar(uint8_t theChar, int32_t pixelX, int32_t pixelY, int32_t textWidth, int32_t textHeight, int32_t scrollPos=0, int32_t endX=OLED_MAIN_WIDTH_PIXELS)
Draw a single character.
Definition canvas.cpp:451
static constexpr uint32_t kImageHeight
Height of the image in bytes.
Definition canvas.h:289
void drawIcon(const Icon &icon, int32_t x, int32_t y, bool reversed=false)
Definition canvas.cpp:706
static constexpr uint32_t kImageWidth
Width of the image in pixels.
Definition canvas.h:291
void drawStringCentered(char const *string, int32_t startX, int32_t startY, int32_t textSpacingX, int32_t textSpacingY, int32_t totalWidth)
Definition canvas.cpp:373
void drawCircle(int32_t centerX, int32_t centerY, int32_t radius, bool fill=false)
Definition canvas.cpp:252
void drawPixel(int32_t x, int32_t y)
Set a single pixel.
Definition canvas.cpp:93
void invertPixel(int32_t x, int32_t y)
Invert a single pixel.
Definition canvas.cpp:111
void clear()
Clear the entire image.
Definition canvas.h:67
void drawHorizontalLine(int32_t pixelY, int32_t startX, int32_t endX)
Definition canvas.cpp:120
void drawStringAlignRight(char const *string, int32_t pixelY, int32_t textWidth, int32_t textHeight, int32_t rightPos=OLED_MAIN_WIDTH_PIXELS)
Definition canvas.cpp:441
int32_t getCharSpacingInPixels(uint8_t theChar, int32_t textHeight, bool isLastChar)
Definition canvas.cpp:578
int32_t getCharWidthInPixels(uint8_t theChar, int32_t textHeight)
Definition canvas.cpp:546
void drawStringCentred(char const *string, int32_t pixelY, int32_t textWidth, int32_t textHeight, int32_t centrePos=OLED_MAIN_WIDTH_PIXELS/2)
Definition canvas.cpp:365
void clearAreaExact(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY)
Definition canvas.cpp:48
void invertArea(int32_t xMin, int32_t width, int32_t startY, int32_t endY)
Definition canvas.cpp:728
void drawGraphicMultiLine(uint8_t const *graphic, int32_t startX, int32_t startY, int32_t width, int32_t height=8, int32_t numBytesTall=1, bool reversed=false)
Definition canvas.cpp:630
void invertLeftEdgeForMenuHighlighting(int32_t xMin, int32_t width, int32_t startY, int32_t endY)
inverts just the left edge
Definition canvas.cpp:800
void drawStringCentredShrinkIfNecessary(char const *string, int32_t pixelY, int32_t textWidth, int32_t textHeight)
Definition canvas.cpp:406
void drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, const DrawLineOptions &options={})
Definition canvas.cpp:184
int32_t getCharIndex(uint8_t theChar)
Definition canvas.cpp:524
void drawVerticalLine(int32_t pixelX, int32_t startY, int32_t endY)
Definition canvas.cpp:141
void drawRectangleRounded(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY, BorderRadius radius=SMALL)
Definition canvas.cpp:236
void invertAreaRounded(int32_t xMin, int32_t width, int32_t startY, int32_t endY, BorderRadius radius=SMALL)
Definition canvas.cpp:760
void drawRectangle(int32_t minX, int32_t minY, int32_t maxX, int32_t maxY)
Definition canvas.cpp:228
ImageStore & hackGetImageStore()
XXX: DO NOT USE THIS OUTSIDE OF THE CORE OLED CODE.
Definition canvas.h:296