sm-26/Source/LcdDisplay.h

42 lines
No EOL
909 B
C++

#pragma once
#include <JuceHeader.h>
class LcdDisplay : public juce::Component,
private juce::Timer
{
public:
static constexpr int kCols = 80;
static constexpr int kRows = 4;
LcdDisplay();
void setLine (int row, const juce::String& s);
void showCursor (bool show);
void clear();
void paint (juce::Graphics&) override;
private:
void timerCallback() override;
static constexpr int kRasterW = 12;
static constexpr int kRasterH = 18;
juce::String lines[kRows];
int cursorCol = 0;
int cursorRow = 0;
bool cursorVisible = false;
struct GlyphCache {
uint8_t rows[8] = {};
bool cached = false;
};
GlyphCache glyphCache[256];
void rasterize (juce::uint32 c);
uint8_t* getGlyph (juce::uint32 c);
juce::Font getMonoFont() const;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LcdDisplay)
};