1#ifndef ISF15ACP4_CANVAS_HEADER_INCLUDED
2#error "isf15acp4_canvas.ipp must be included from isf15acp4_canvas.hpp"
14 for (std::size_t i = 0; i < geometry_.framebuffer_bytes / 2; ++i) {
20 if (x >= geometry_.width || y >= geometry_.height) {
23 buffer_[
static_cast<std::size_t
>(y) * geometry_.width + x] = color;
27 if (x >= geometry_.width || y >= geometry_.height) {
30 return buffer_[
static_cast<std::size_t
>(y) * geometry_.width + x];
35 const uint8_t tmp = x0;
39 for (uint8_t x = x0; x <= x1; ++x) {
40 SetPixel(x, y, color);
46 const uint8_t tmp = y0;
50 for (uint8_t y = y0; y <= y1; ++y) {
51 SetPixel(x, y, color);
56 DrawHLine(rect.x0, rect.x1, rect.y0, color);
57 DrawHLine(rect.x0, rect.x1, rect.y1, color);
58 DrawVLine(rect.x0, rect.y0, rect.y1, color);
59 DrawVLine(rect.x1, rect.y0, rect.y1, color);
63 for (uint8_t y = rect.y0; y <= rect.y1; ++y) {
64 DrawHLine(rect.x0, rect.x1, y, color);
76 const bool on = (cols[col] >> row) & 0x01;
77 SetPixel(
static_cast<uint8_t
>(x + col),
static_cast<uint8_t
>(y + row), on ? color : bg);
84 if (text ==
nullptr) {
89 while (*text !=
'\0') {
90 DrawChar(cursor, y, *text, color, bg);
102 for (uint8_t row = 0; row < src_height; ++row) {
103 for (uint8_t col = 0; col < src_width; ++col) {
104 SetPixel(
static_cast<uint8_t
>(x + col),
static_cast<uint8_t
>(y + row),
105 src[
static_cast<std::size_t
>(row) * src_width + col]);
void SetPixel(uint8_t x, uint8_t y, Color565 color) noexcept
Set one pixel if in bounds.
Definition isf15acp4_canvas.ipp:19
Color565 GetPixel(uint8_t x, uint8_t y) const noexcept
Get one pixel; returns black when out of bounds.
Definition isf15acp4_canvas.ipp:26
void FillRect(const Rect &rect, Color565 color) noexcept
Fill a solid rectangle.
Definition isf15acp4_canvas.ipp:62
void Clear(Color565 color) noexcept
Clear the framebuffer to a solid color.
Definition isf15acp4_canvas.ipp:13
void BlitRgb565(uint8_t x, uint8_t y, uint8_t src_width, uint8_t src_height, const Color565 *src) noexcept
Blit a contiguous RGB565 buffer into the canvas.
Definition isf15acp4_canvas.ipp:96
void DrawVLine(uint8_t x, uint8_t y0, uint8_t y1, Color565 color) noexcept
Draw a vertical line inclusive of both endpoints.
Definition isf15acp4_canvas.ipp:44
void DrawString(uint8_t x, uint8_t y, const char *text, Color565 color, Color565 bg=colors::Black) noexcept
Draw a null-terminated string.
Definition isf15acp4_canvas.ipp:82
void DrawRect(const Rect &rect, Color565 color) noexcept
Draw rectangle outline.
Definition isf15acp4_canvas.ipp:55
Canvas(ProductVariant variant=ProductVariant::Isf15acp4) noexcept
Construct a canvas for the given product geometry.
Definition isf15acp4_canvas.ipp:9
void DrawChar(uint8_t x, uint8_t y, char ch, Color565 color, Color565 bg=colors::Black) noexcept
Draw a single character using the built-in 5x7 font.
Definition isf15acp4_canvas.ipp:68
void DrawHLine(uint8_t x0, uint8_t x1, uint8_t y, Color565 color) noexcept
Draw a horizontal line inclusive of both endpoints.
Definition isf15acp4_canvas.ipp:33
Compact 5x7 bitmap font for SmartDisplay text rendering.
constexpr Color565 Black
Definition isf15acp4_types.hpp:116
constexpr uint8_t kWidth
Definition isf15acp4_font.hpp:13
constexpr uint8_t kHeight
Definition isf15acp4_font.hpp:14
bool GetGlyph(char ch, uint8_t out_cols[5]) noexcept
Get glyph columns for an ASCII character.
Definition isf15acp4_font_data.cpp:110
constexpr uint8_t kSpacing
Definition isf15acp4_font.hpp:15
Definition isf15acp4.hpp:19
ProductVariant
Supported NKK SmartDisplay OLED product variants.
Definition isf15acp4_types.hpp:19
uint16_t Color565
16-bit RGB565 color value (R5G6B5).
Definition isf15acp4_types.hpp:50
constexpr const DisplayGeometry & GetGeometry(ProductVariant variant) noexcept
Get geometry metadata for a product variant.
Definition isf15acp4_types.hpp:77
Axis-aligned rectangle in display coordinates (inclusive bounds).
Definition isf15acp4_types.hpp:96